diff --git a/.circleci/config.yml b/.circleci/config.yml index eb438680e8f6b..7d1e6c43baba9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,7 +15,7 @@ experimental: templates: job_template: &job_template docker: - - image: datadog/datadog-agent-runner-circle:go1188 + - image: datadog/datadog-agent-runner-circle:go1189 environment: USE_SYSTEM_LIBS: "1" working_directory: /go/src/github.com/DataDog/datadog-agent diff --git a/.circleci/images/runner/Dockerfile b/.circleci/images/runner/Dockerfile index 42786b4019f94..6431e17efd7b0 100644 --- a/.circleci/images/runner/Dockerfile +++ b/.circleci/images/runner/Dockerfile @@ -37,7 +37,7 @@ RUN set -ex \ xz-utils # Golang -ENV GIMME_GO_VERSION 1.18.8 +ENV GIMME_GO_VERSION 1.18.9 ENV GOROOT /root/.gimme/versions/go$GIMME_GO_VERSION.linux.amd64 ENV GOPATH /go ENV PATH $GOROOT/bin:$GOPATH/bin:$PATH diff --git a/.copyright-overrides.yml b/.copyright-overrides.yml index 120b480b4d2c2..59409f6d93f7c 100644 --- a/.copyright-overrides.yml +++ b/.copyright-overrides.yml @@ -126,3 +126,4 @@ gomodules.xyz/jsonpatch: Copyright (c) 2015 The Authors github.com/bytecodealliance/wasmtime-go: Copyright (c) 2020 The Bytecode Alliance github.com/OneOfOne/xxhash: Copyright (c) 2014 Ahmed W. (OneOfOne) github.com/yashtewari/glob-intersection: Copyright (c) 2018 Yash Tewari (yashtewari) +go.mongodb.org/mongo-driver/*: Copyright © 2018 MongoDB, Inc. diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 22ab5145c10d0..74c703e1a93a9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -96,6 +96,8 @@ /.gitlab/choco_build.yml @DataDog/agent-platform @DataDog/windows-agent /.gitlab/choco_deploy.yml @DataDog/agent-platform @DataDog/windows-agent +/.gitlab/benchmarks/benchmarks.yml @DataDog/agent-apm + /chocolatey/ @DataDog/windows-agent /cmd/ @DataDog/agent-shared-components @@ -218,10 +220,10 @@ /pkg/collector/corechecks/embed/process_agent*.go @Datadog/agent-platform @DataDog/processes /pkg/collector/corechecks/net/ @DataDog/agent-platform /pkg/collector/corechecks/snmp/ @DataDog/network-device-monitoring -/pkg/collector/corechecks/system/ @DataDog/agent-platform -/pkg/collector/corechecks/system/*windows*.go @DataDog/agent-platform @DataDog/windows-agent -/pkg/collector/corechecks/system/winkmem/ @DataDog/windows-agent -/pkg/collector/corechecks/system/winproc/ @DataDog/windows-agent +/pkg/collector/corechecks/system/ @DataDog/agent-platform +/pkg/collector/corechecks/system/**/*_windows*.go @DataDog/agent-platform @DataDog/windows-agent +/pkg/collector/corechecks/system/winkmem/ @DataDog/windows-agent +/pkg/collector/corechecks/system/winproc/ @DataDog/windows-agent /pkg/collector/corechecks/systemd/ @DataDog/agent-integrations /pkg/collector/corechecks/nvidia/ @DataDog/agent-platform /pkg/config/ @DataDog/agent-shared-components @@ -274,14 +276,18 @@ /pkg/proto/pbgo/ # do not notify anyone /pkg/orchestrator/ @DataDog/container-app /pkg/network/ @DataDog/Networks +/pkg/network/*usm* @DataDog/universal-service-monitoring /pkg/network/*_windows*.go @DataDog/windows-kernel-integrations /pkg/network/driver_*.go @DataDog/windows-kernel-integrations /pkg/network/dns/*_windows*.go @DataDog/windows-kernel-integrations /pkg/network/driver/ @DataDog/windows-kernel-integrations +/pkg/network/ebpf/c/prebuilt/usm* @DataDog/universal-service-monitoring +/pkg/network/ebpf/c/runtime/usm* @DataDog/universal-service-monitoring /pkg/network/ebpf/c/prebuilt/http* @DataDog/universal-service-monitoring /pkg/network/ebpf/c/runtime/http* @DataDog/universal-service-monitoring /pkg/network/ebpf/c/protocols/ @DataDog/universal-service-monitoring /pkg/network/encoding/http* @DataDog/universal-service-monitoring +/pkg/network/encoding/*usm* @DataDog/universal-service-monitoring /pkg/network/etw/ @DataDog/windows-kernel-integrations /pkg/network/go/ @DataDog/universal-service-monitoring /pkg/network/protocols/ @DataDog/universal-service-monitoring @@ -351,8 +357,10 @@ /test/kitchen/test/integration/win-reinstall-option/ @DataDog/windows-agent /test/kitchen/test/integration/win-repair/ @DataDog/windows-agent /test/kitchen/test/integration/win-user/ @DataDog/windows-agent +/test/new-e2e/ @DataDog/agent-e2e-testing /test/system/ @DataDog/agent-shared-components /test/system/dogstatsd/ @DataDog/agent-metrics-logs +/test/benchmarks/apm_scripts/ @DataDog/agent-apm /tools/ @DataDog/agent-platform /tools/ebpf/ @DataDog/ebpf-platform diff --git a/.github/workflows/do-not-merge.yml b/.github/workflows/do-not-merge.yml new file mode 100644 index 0000000000000..70846ecd4c91c --- /dev/null +++ b/.github/workflows/do-not-merge.yml @@ -0,0 +1,20 @@ +# Fails a pull request if a label contains `do-not-merge` +# credit: https://github.com/jessesquires/gh-workflows/blob/main/.github/workflows/do-not-merge.yml + +name: Do Not Merge + +on: + pull_request: + types: [synchronize, opened, reopened, labeled, unlabeled] + +jobs: + do-not-merge: + if: ${{ contains(github.event.*.labels.*.name, 'do-not-merge/hold') || contains(github.event.*.labels.*.name, 'do-not-merge/WIP') }} + name: Check Do Not Merge + runs-on: ubuntu-latest + steps: + - name: check for label + run: | + echo "Pull request is labeled as 'do-not-merge'" + echo "This workflow fails so that the pull request cannot be merged" + exit 1 diff --git a/.github/workflows/serverless-integration.yml b/.github/workflows/serverless-integration.yml index b3319bc5f64d9..e2bec6b45ed8f 100644 --- a/.github/workflows/serverless-integration.yml +++ b/.github/workflows/serverless-integration.yml @@ -24,7 +24,7 @@ jobs: uses: actions/setup-node@v3 with: node-version: 14 - + - name: Install Serverless Framework run: sudo yarn global add serverless@^3.7.9 --prefix /usr/local @@ -45,8 +45,13 @@ jobs: uses: docker/setup-buildx-action@v2 - name: Run tests if AWS credentials are available + uses: nick-fields/retry@v2 env: AWS_ACCESS_KEY_ID: ${{ secrets.SERVERLESS_AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.SERVERLESS_AWS_SECRET_ACCESS_KEY }} - run: ARCHITECTURE=${{ matrix.architecture }} ./test/integration/serverless/run.sh - working-directory: go/src/github.com/DataDog/datadog-agent \ No newline at end of file + AWS_SECRET_ACCESS_KEY: ${{ secrets.SERVERLESS_AWS_SECRET_ACCESS_KEY }} + with: + timeout_minutes: 30 + max_attempts: 2 + command: | + cd go/src/github.com/DataDog/datadog-agent + ARCHITECTURE=${{ matrix.architecture }} ./test/integration/serverless/run.sh diff --git a/.gitignore b/.gitignore index a8e8cf7bed693..4c57d28b3a891 100644 --- a/.gitignore +++ b/.gitignore @@ -109,6 +109,12 @@ system-probe-msg.h **/.ninja_deps *.ninja pkg/ebpf/bytecode/build/**/*.d +pkg/ebpf/bytecode/runtime/conntrack.go +pkg/ebpf/bytecode/runtime/http.go +pkg/ebpf/bytecode/runtime/oom-kill.go +pkg/ebpf/bytecode/runtime/runtime-security.go +pkg/ebpf/bytecode/runtime/tcp-queue-length.go +pkg/ebpf/bytecode/runtime/tracer.go pkg/security/tests/syscall_tester/**/*.d # dsd artifacts @@ -176,3 +182,6 @@ TAGS # cscope cscope.out + +# Go workspace until we have proper support in the tooling +go.work* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 766921e35dbcc..cc45c8ed8f2c6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -38,6 +38,7 @@ include: - /.gitlab/kitchen_common/cleanup.yml - /.gitlab/kitchen_common/testing.yml - /.gitlab/docker_common/publish_job_templates.yml + - /.gitlab/benchmarks/benchmarks.yml default: retry: @@ -61,6 +62,7 @@ stages: - binary_build - package_deps_build - integration_test + - benchmarks - package_build - internal_deploy - kitchen_deploy @@ -135,17 +137,18 @@ variables: ## comment out the line below to disable integration wheels cache INTEGRATION_WHEELS_CACHE_BUCKET: dd-agent-omnibus S3_DD_AGENT_OMNIBUS_LLVM_URI: s3://dd-agent-omnibus/llvm + S3_DD_AGENT_OMNIBUS_BTFS_URI: s3://dd-agent-omnibus/btfs GENERAL_ARTIFACTS_CACHE_BUCKET_URL: https://dd-agent-omnibus.s3.amazonaws.com S3_DSD6_URI: s3://dsd6-staging RELEASE_VERSION_6: nightly RELEASE_VERSION_7: nightly-a7 - DATADOG_AGENT_BUILDIMAGES: v10863649-c23f296 + DATADOG_AGENT_BUILDIMAGES: v12145148-530d89c DATADOG_AGENT_BUILDERS: v9930706-ef9d493 - DATADOG_AGENT_WINBUILDIMAGES: v10863649-c23f296 - DATADOG_AGENT_ARMBUILDIMAGES: v10863649-c23f296 - DATADOG_AGENT_SYSPROBE_BUILDIMAGES: v10863649-c23f296 - DATADOG_AGENT_NIKOS_BUILDIMAGES: v10863649-c23f296 - DATADOG_AGENT_BTF_GEN_BUILDIMAGES: v10582792-c2b9fb7 + DATADOG_AGENT_WINBUILDIMAGES: v11651098-faf0544 + DATADOG_AGENT_ARMBUILDIMAGES: v11651098-faf0544 + DATADOG_AGENT_SYSPROBE_BUILDIMAGES: v11651098-faf0544 + DATADOG_AGENT_NIKOS_BUILDIMAGES: v11651098-faf0544 + DATADOG_AGENT_BTF_GEN_BUILDIMAGES: v11463399-6ff70af DATADOG_AGENT_EMBEDDED_PATH: /opt/datadog-agent/embedded NIKOS_INSTALL_DIR: /opt/datadog-agent/embedded/nikos NIKOS_EMBEDDED_PATH: /opt/datadog-agent/embedded/nikos/embedded @@ -166,7 +169,9 @@ variables: ARTIFACTORY_TOKEN_SSM_NAME: ci.datadog-agent.artifactory_token ARTIFACTORY_URL: datadog.jfrog.io ARTIFACTORY_GEMS_PATH: artifactory/api/gems/agent-gems + ARTIFACTORY_PYPI_PATH: artifactory/api/pypi/agent-pypi/simple USE_CACHING_PROXY_RUBY: "true" + USE_CACHING_PROXY_PYTHON: "true" CLANG_LLVM_VER: 12.0.1 # @@ -766,3 +771,11 @@ variables: - <<: *if_kitchen when: manual allow_failure: true + +.on_trace_agent_changes_or_manual: + - changes: + - pkg/trace/**/* + - .gitlab/benchmarks/* + when: on_success + - when: manual + allow_failure: true diff --git a/.gitlab/JOBOWNERS b/.gitlab/JOBOWNERS index facbc0215db97..8a242e475142c 100644 --- a/.gitlab/JOBOWNERS +++ b/.gitlab/JOBOWNERS @@ -51,6 +51,7 @@ deploy_containers* @DataDog/container-integrations kitchen_*_system_probe* @DataDog/ebpf-platform kitchen_*_security_agent* @DataDog/agent-security kitchen_*_process_agent* @DataDog/processes +pull_test_dockers @DataDog/universal-service-monitoring cleanup_kitchen_functional_test @DataDog/ebpf-platform @DataDog/agent-security serverless_cold_start_performance-deb_x64 @DataDog/serverless diff --git a/.gitlab/benchmarks/benchmarks.yml b/.gitlab/benchmarks/benchmarks.yml new file mode 100644 index 0000000000000..62f6ae9abc662 --- /dev/null +++ b/.gitlab/benchmarks/benchmarks.yml @@ -0,0 +1,24 @@ +benchmark: + stage: benchmarks + # This base image is created here: https://gitlab.ddbuild.io/DataDog/apm-reliability/relenv-microbenchmarking-platform + image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/relenv-microbenchmarking-platform:trace-agent + timeout: 1h + rules: + !reference [.on_trace_agent_changes_or_manual] + interruptible: true + # tags: ["runner:apm-k8s-tweaked-metal"] # TODO: Commented out until we have the metal runners available in this repo + tags: ["runner:main"] + script: + - ./test/benchmarks/apm_scripts/capture-hardware-software-info.sh + - ./test/benchmarks/apm_scripts/run-benchmarks.sh + # - ./test/benchmarks/apm_scripts/upload-results-to-s3.sh #commented out until we have merged our permissions changes + - ./test/benchmarks/apm_scripts/analyze-results.sh + - ./test/benchmarks/apm_scripts/post-pr-comment.sh + artifacts: + name: "reports" + paths: + - reports/ + expire_in: 3 months + variables: + KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: datadog-agent + FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY: "true" diff --git a/.gitlab/binary_build/windows.yml b/.gitlab/binary_build/windows.yml index 05491f9991abc..e56b0ab2af722 100644 --- a/.gitlab/binary_build/windows.yml +++ b/.gitlab/binary_build/windows.yml @@ -11,7 +11,16 @@ build_windows_container_entrypoint: - $ErrorActionPreference = "Stop" - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' - if (Test-Path build-out) { remove-item -recurse -force build-out } - - docker run --rm -m 4096M -v "$(Get-Location):c:\mnt" -e CI_JOB_ID=${CI_JOB_ID} -e WINDOWS_BUILDER=true -e AWS_NETWORKING=true -e TARGET_ARCH="$ARCH" 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} c:\mnt\Dockerfiles\agent\windows\entrypoint\build.bat + - > + docker run --rm + -m 4096M + -v "$(Get-Location):c:\mnt" + -e CI_JOB_ID=${CI_JOB_ID} + -e WINDOWS_BUILDER=true + -e AWS_NETWORKING=true + -e TARGET_ARCH="$ARCH" + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + c:\mnt\Dockerfiles\agent\windows\entrypoint\build.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - get-childitem build-out\${CI_JOB_ID} - copy build-out\${CI_JOB_ID}\*.exe ./entrypoint.exe diff --git a/.gitlab/choco_deploy.yml b/.gitlab/choco_deploy.yml index dcb8ee4a0a7a8..94e4c8600a9b7 100644 --- a/.gitlab/choco_deploy.yml +++ b/.gitlab/choco_deploy.yml @@ -20,5 +20,10 @@ publish_choco_7_x64: - mkdir nupkg - copy omnibus\pkg\*.nupkg nupkg\ - Get-ChildItem nupkg - - docker run --rm -v "$(Get-Location):c:\mnt" -e CHOCOLATEY_API_KEY=${chocolateyApiKey} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES c:\mnt\tasks\winbuildscripts\chocopush.bat + - > + docker run --rm + -v "$(Get-Location):c:\mnt" + -e CHOCOLATEY_API_KEY=${chocolateyApiKey} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES + c:\mnt\tasks\winbuildscripts\chocopush.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } diff --git a/.gitlab/container_build/docker_windows.yml b/.gitlab/container_build/docker_windows.yml index da2d0e654d755..23ebd16acb36d 100644 --- a/.gitlab/container_build/docker_windows.yml +++ b/.gitlab/container_build/docker_windows.yml @@ -37,7 +37,15 @@ - get-childitem ${BUILD_CONTEXT} # Docker setup - cat ci-scripts/docker-login.ps1 - - docker run --rm -w C:\mnt -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -v "$(Get-Location):C:\mnt" -v \\.\pipe\docker_engine:\\.\pipe\docker_engine 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_${Env:VARIANT}_x64:${Env:DATADOG_AGENT_WINBUILDIMAGES} powershell -C C:\mnt\ci-scripts\docker-login.ps1 + - > + docker run --rm + -w C:\mnt + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -v "$(Get-Location):C:\mnt" + -v \\.\pipe\docker_engine:\\.\pipe\docker_engine 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_${Env:VARIANT}_x64:${Env:DATADOG_AGENT_WINBUILDIMAGES} + powershell + -C C:\mnt\ci-scripts\docker-login.ps1 - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - powershell -Command "docker build --no-cache --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} ${BUILD_ARG} --pull --file ${BUILD_CONTEXT}/windows/amd64/Dockerfile --tag ${TARGET_TAG} ${BUILD_CONTEXT}" - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } diff --git a/.gitlab/deploy_7/nix.yml b/.gitlab/deploy_7/nix.yml index 14b8b13ede8ab..118cfb0fc2850 100644 --- a/.gitlab/deploy_7/nix.yml +++ b/.gitlab/deploy_7/nix.yml @@ -60,7 +60,6 @@ deploy_packages_suse_rpm-7: - $S3_CP_CMD --recursive --exclude "*" --include "*-7.*x86_64.rpm" $OMNIBUS_PACKAGE_DIR_SUSE $S3_RELEASE_ARTIFACTS_URI/suse_rpm/x86_64/ || true deploy_packages_dmg-a7: - allow_failure: true rules: !reference [.on_deploy_a7] stage: deploy7 diff --git a/.gitlab/deploy_7/winget.yml b/.gitlab/deploy_7/winget.yml index 29c5ee52da163..ee08383a98183 100644 --- a/.gitlab/deploy_7/winget.yml +++ b/.gitlab/deploy_7/winget.yml @@ -15,5 +15,12 @@ publish_winget_7_x64: script: - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' - $ErrorActionPreference = "Stop" - - docker run --rm -v "$(Get-Location):c:\mnt" -e WINGET_GITHUB_ACCESS_TOKEN=${wingetPat} -e GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES Powershell -C "C:\mnt\tasks\winbuildscripts\Update-Winget.ps1" + - > + docker run --rm + -v "$(Get-Location):c:\mnt" + -e WINGET_GITHUB_ACCESS_TOKEN=${wingetPat} + -e GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES + Powershell + -C "C:\mnt\tasks\winbuildscripts\Update-Winget.ps1" - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } diff --git a/.gitlab/deps_build.yml b/.gitlab/deps_build.yml index 8bac5618b42b9..d8a3e65ee7c9e 100644 --- a/.gitlab/deps_build.yml +++ b/.gitlab/deps_build.yml @@ -125,7 +125,13 @@ build_vcpkg_deps: - $ErrorActionPreference = "Stop" - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' - if (Test-Path build-out) { remove-item -recurse -force build-out } - - docker run --rm -m 4096M -v "$(Get-Location):c:\mnt" -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl},readwrite" 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} C:\mnt\tasks\winbuildscripts\build_vcpkg_deps.bat + - > + docker run --rm + -m 4096M + -v "$(Get-Location):c:\mnt" + -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl},readwrite" + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + C:\mnt\tasks\winbuildscripts\build_vcpkg_deps.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } build_processed_btfhub_archive: @@ -138,7 +144,7 @@ build_processed_btfhub_archive: - git clone https://github.com/aquasecurity/btfhub-archive.git - cd btfhub-archive # Flatten btfhub-archive directories & separate arm/x64 btfs into separate directories - - dirs=("amzn/2" "centos/7" "centos/8" "debian/9" "debian/10" "fedora/29" "fedora/30" "fedora/31" "oracle-linux/ol7") + - dirs=("amzn/2" "centos/7" "centos/8" "debian/9" "debian/10" "fedora/29" "fedora/30" "fedora/31" "ol/7") - | for dir in ${dirs[@]}; do \ platform=${dir%%/*} &&\ @@ -146,8 +152,8 @@ build_processed_btfhub_archive: eval "mv ${dir}/x86_64/*.btf.tar.xz btfs-amd64/${platform}/" &&\ eval "mv ${dir}/arm64/*.btf.tar.xz btfs-arm64/${platform}/"; \ done - # Handle the amzn/1 directory separately because it doesn't have an arm64 version - - mv amzn/1/x86_64/* btfs-amd64/amzn/ + # Handle the amazon 2018 (amazon 1) directory separately because it doesn't have an arm64 version + - mv amzn/2018/x86_64/* btfs-amd64/amzn/ # Handle ubuntu separately because we want to keep the btfs separated by ubuntu version - mkdir -p btfs-amd64/ubuntu/18.04 btfs-amd64/ubuntu/20.04 btfs-arm64/ubuntu/18.04 btfs-arm64/ubuntu/20.04 - mv ubuntu/18.04/x86_64/*.btf.tar.xz btfs-amd64/ubuntu/18.04/ @@ -157,13 +163,15 @@ build_processed_btfhub_archive: # Clean up platform names to match the names we get at runtime from gopsutil - mv btfs-amd64/amzn btfs-amd64/amazon - mv btfs-arm64/amzn btfs-arm64/amazon - - mv btfs-amd64/oracle-linux btfs-amd64/oracle - - mv btfs-arm64/oracle-linux btfs-arm64/oracle + - mv btfs-amd64/ol btfs-amd64/oracle + - mv btfs-arm64/ol btfs-arm64/oracle # Store results in S3 - tar -czf btfs-arm64.tar.gz btfs-arm64 - tar -czf btfs-amd64.tar.gz btfs-amd64 - $S3_CP_CMD btfs-arm64.tar.gz $S3_PERMANENT_ARTIFACTS_URI/btfs-arm64.tar.gz - $S3_CP_CMD btfs-amd64.tar.gz $S3_PERMANENT_ARTIFACTS_URI/btfs-amd64.tar.gz + - $S3_CP_CMD btfs-arm64.tar.gz $S3_DD_AGENT_OMNIBUS_BTFS_URI/btfs-arm64.tar.gz --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers + - $S3_CP_CMD btfs-amd64.tar.gz $S3_DD_AGENT_OMNIBUS_BTFS_URI/btfs-amd64.tar.gz --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers artifacts: expire_in: 2 weeks paths: diff --git a/.gitlab/functional_test.yml b/.gitlab/functional_test.yml index 81d4f3715953f..e747285fe2367 100644 --- a/.gitlab/functional_test.yml +++ b/.gitlab/functional_test.yml @@ -6,3 +6,4 @@ include: - /.gitlab/functional_test/security_agent.yml - /.gitlab/functional_test/system_probe.yml - /.gitlab/functional_test/serverless.yml + - /.gitlab/functional_test/regression_detector.yml diff --git a/.gitlab/functional_test/regression_detector.yml b/.gitlab/functional_test/regression_detector.yml new file mode 100644 index 0000000000000..c541b04f7ebc7 --- /dev/null +++ b/.gitlab/functional_test/regression_detector.yml @@ -0,0 +1,91 @@ +single-machine-performance-regression_detector: + stage: functional_test + image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/docker_x64:$DATADOG_AGENT_BUILDIMAGES + tags: ["runner:docker"] + needs: + - job: docker_build_agent7_single_machine_performance + artifacts: false + artifacts: + expire_in: 1 weeks + paths: + - submission_metadata + variables: + GIT_STRATEGY: clone # pull the whole repo so we can compute baseline SHA + SMP_VERSION: 0.6.6-rc1 + LADING_VERSION: 0.11.2 + TOTAL_SAMPLES: 600 + WARMUP_SECONDS: 45 + REPLICAS: 10 + CPUS: 7 + MEMORY: "30g" + # At present we require two artifacts to exist for the 'baseline' and the + # 'comparison'. We are guaranteed by the structure of the pipeline that + # 'comparison' exists, not so much with 'baseline' as it has to come from main + # merge pipeline run. This is solved in Vector by building Vector twice each + # Regression Detector run but remains an unsolved problem for + # datadog-agent. So, we allow failure for now. + # + # _Unfortunately_ this also means that if the Regression Detector finds a + # performance issue with a PR it will not be flagged. + allow_failure: true + script: + # Setup AWS credentials for single-machine-performance AWS account + - AWS_NAMED_PROFILE="single-machine-performance" + - SMP_ACCOUNT_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-account-id --with-decryption --query "Parameter.Value" --out text) + - SMP_ECR_URL=${SMP_ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com + - SMP_AGENT_TEAM_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-agent-team-id --with-decryption --query "Parameter.Value" --out text) + - aws configure set aws_access_key_id $(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-bot-access-key-id --with-decryption --query "Parameter.Value" --out text) --profile ${AWS_NAMED_PROFILE} + - aws configure set aws_secret_access_key $(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-bot-access-key --with-decryption --query "Parameter.Value" --out text) --profile ${AWS_NAMED_PROFILE} + - aws configure set region us-west-2 --profile ${AWS_NAMED_PROFILE} + # Download smp binary and prepare it for use + - aws --profile single-machine-performance s3 cp s3://smp-cli-releases/v${SMP_VERSION}/x86_64-unknown-linux-musl/smp smp + - chmod +x smp + # Submit job, using the current main SHA as baseline. This will have been + # previously submitted in a separate pipeline run. The comparison will have + # been submitted in this pipeline run. + - git fetch origin main:main + - BASELINE_SHA=$(git rev-parse main) + - BASELINE_IMAGE=${SMP_ECR_URL}/${SMP_AGENT_TEAM_ID}-agent:${BASELINE_SHA}-7-amd64 + - echo "${BASELINE_SHA} | ${BASELINE_IMAGE}" + - COMPARISON_IMAGE=${SMP_ECR_URL}/${SMP_AGENT_TEAM_ID}-agent:${CI_COMMIT_SHA}-7-amd64 + - echo "${CI_COMMIT_SHA} | ${COMPARISON_IMAGE}" + - RUST_LOG="info,aws_config::profile::credentials=error" + - RUST_LOG_DEBUG="debug,aws_config::profile::credentials=error" + - RUST_LOG="${RUST_LOG}" ./smp --team-id ${SMP_AGENT_TEAM_ID} --aws-named-profile ${AWS_NAMED_PROFILE} + job submit + --lading-version ${LADING_VERSION} + --total-samples ${TOTAL_SAMPLES} + --warmup-seconds ${WARMUP_SECONDS} + --replicas ${REPLICAS} + --baseline-image ${BASELINE_IMAGE} + --comparison-image ${COMPARISON_IMAGE} + --baseline-sha ${BASELINE_SHA} + --comparison-sha ${CI_COMMIT_SHA} + --target-name datadog-agent + --target-command "/bin/entrypoint.sh" + --target-inherit-environment + --target-environment-variables "DD_HOSTNAME=smp-regression,DD_DD_URL=http://127.0.0.1:9092,DD_API_KEY=00000001" + --target-config-dir test/regression/ + --target-cpu-allotment ${CPUS} + --target-memory-allotment ${MEMORY} + --submission-metadata submission_metadata + # Wait for job to complete. + - RUST_LOG="${RUST_LOG}" ./smp --team-id ${SMP_AGENT_TEAM_ID} --aws-named-profile ${AWS_NAMED_PROFILE} + job status + --wait + --wait-delay-seconds 60 + --submission-metadata submission_metadata + # Now that the job is completed pull the analysis report, output it to stdout. + - mkdir outputs + - RUST_LOG="${RUST_LOG}" ./smp --team-id ${SMP_AGENT_TEAM_ID} --aws-named-profile ${AWS_NAMED_PROFILE} + job sync + --submission-metadata submission_metadata + --output-path outputs + # Replace empty lines in the output with lines containing various unicode + # space characters. This avoids + # https://gitlab.com/gitlab-org/gitlab/-/issues/217231. + - cat outputs/report.md | sed "s/^\$/$(echo -ne '\uFEFF\u00A0\u200B')/g" + # Finally, exit 1 if the job signals a regression else 0. + - RUST_LOG="${RUST_LOG}" ./smp --team-id ${SMP_AGENT_TEAM_ID} --aws-named-profile ${AWS_NAMED_PROFILE} + job result + --submission-metadata submission_metadata diff --git a/.gitlab/functional_test/security_agent.yml b/.gitlab/functional_test/security_agent.yml index 6ee18939eb518..0247eb730ad84 100644 --- a/.gitlab/functional_test/security_agent.yml +++ b/.gitlab/functional_test/security_agent.yml @@ -45,6 +45,9 @@ kitchen_test_security_agent_x64: - KITCHEN_PLATFORM: "ubuntu" KITCHEN_OSVERS: "ubuntu-20-04,ubuntu-20-04-2,ubuntu-22-04" KITCHEN_CWS_PLATFORM: [host, docker] + - KITCHEN_PLATFORM: "ubuntu" + KITCHEN_OSVERS: "ubuntu-22-04" + KITCHEN_CWS_PLATFORM: [ad] - KITCHEN_PLATFORM: "suse" KITCHEN_OSVERS: "sles-12,sles-15" KITCHEN_CWS_PLATFORM: [host] diff --git a/.gitlab/functional_test/system_probe.yml b/.gitlab/functional_test/system_probe.yml index 1db70e4294bfc..75ddbd16bf2bd 100644 --- a/.gitlab/functional_test/system_probe.yml +++ b/.gitlab/functional_test/system_probe.yml @@ -5,6 +5,33 @@ # include: # - /.gitlab/kitchen_common/testing.yml +.pull_test_dockers: + image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/docker_x64:$DATADOG_AGENT_BUILDIMAGES + needs: [] + tags: ["runner:docker"] + stage: functional_test + script: + # DockerHub login for build to limit rate limit when pulling base images + - DOCKER_REGISTRY_LOGIN=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.$DOCKER_REGISTRY_LOGIN_SSM_KEY --with-decryption --query "Parameter.Value" --out text) + - aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.$DOCKER_REGISTRY_PWD_SSM_KEY --with-decryption --query "Parameter.Value" --out text | docker login --username "$DOCKER_REGISTRY_LOGIN" --password-stdin "$DOCKER_REGISTRY_URL" + # Pull base images + - mkdir kitchen-dockers + - inv -e system-probe.save-test-dockers --output-dir kitchen-dockers --arch $ARCH + artifacts: + expire_in: 1 day + paths: + - kitchen-dockers + +pull_test_dockers_x64: + extends: .pull_test_dockers + variables: + ARCH: amd64 + +pull_test_dockers_arm64: + extends: .pull_test_dockers + variables: + ARCH: arm64 + .kitchen_test_system_probe: extends: - .kitchen_common @@ -28,23 +55,28 @@ paths: - $DD_AGENT_TESTING_DIR/kitchen-junit-*.tar.gz +.retrieve_test_dockers: + - mkdir -p $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files/dockers + - mv kitchen-dockers/* $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files/dockers .retrieve_minimized_btfs: - $S3_CP_CMD $S3_ARTIFACTS_URI/minimized-btfs-${ARCH}.tar.xz /tmp/minimized-btfs.tar.xz - cp /tmp/minimized-btfs.tar.xz $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files/minimized-btfs.tar.xz - kitchen_test_system_probe_linux_x64: extends: - .kitchen_test_system_probe - .kitchen_azure_x64 - .kitchen_azure_location_north_central_us - needs: [ "tests_ebpf_x64", "generate_minimized_btfs_x64" ] + needs: [ "tests_ebpf_x64", "generate_minimized_btfs_x64", "pull_test_dockers_x64" ] variables: ARCH: amd64 KITCHEN_ARCH: x86_64 KITCHEN_IMAGE_SIZE: Standard_D2_v2 + AZURE_KITCHEN_MOUNT_DIR: /mnt/kitchen_mount + AZURE_KITCHEN_TARGET_MOUNT_DIR: /tmp/kitchen_mount before_script: + - !reference [.retrieve_test_dockers] - !reference [.retrieve_minimized_btfs] - pushd $DD_AGENT_TESTING_DIR - bash -l tasks/kitchen_setup.sh @@ -57,18 +89,18 @@ kitchen_test_system_probe_linux_x64: - KITCHEN_PLATFORM: "centos" KITCHEN_OSVERS: "centos-76,rhel-81" - kitchen_test_system_probe_linux_x64_ec2: extends: - .kitchen_test_system_probe - .kitchen_ec2_location_us_east_1 - .kitchen_ec2 - needs: [ "tests_ebpf_x64", "generate_minimized_btfs_x64" ] + needs: [ "tests_ebpf_x64", "generate_minimized_btfs_x64", "pull_test_dockers_x64" ] variables: ARCH: amd64 KITCHEN_ARCH: x86_64 KITCHEN_EC2_INSTANCE_TYPE: "t2.xlarge" before_script: + - !reference [.retrieve_test_dockers] - !reference [.retrieve_minimized_btfs] - pushd $DD_AGENT_TESTING_DIR - bash -l tasks/kitchen_setup.sh @@ -83,12 +115,13 @@ kitchen_test_system_probe_linux_arm64: - .kitchen_test_system_probe - .kitchen_ec2_location_us_east_1 - .kitchen_ec2_spot_instances - needs: [ "tests_ebpf_arm64", "generate_minimized_btfs_arm64" ] + needs: [ "tests_ebpf_arm64", "generate_minimized_btfs_arm64", "pull_test_dockers_arm64" ] variables: ARCH: arm64 KITCHEN_ARCH: arm64 KITCHEN_EC2_INSTANCE_TYPE: "t4g.xlarge" before_script: + - !reference [.retrieve_test_dockers] - !reference [.retrieve_minimized_btfs] - pushd $DD_AGENT_TESTING_DIR - bash -l tasks/kitchen_setup.sh @@ -98,10 +131,12 @@ kitchen_test_system_probe_linux_arm64: KITCHEN_OSVERS: "ubuntu-18-04,ubuntu-20-04,ubuntu-22-04" - KITCHEN_PLATFORM: "debian" KITCHEN_OSVERS: "debian-10,debian-11" + KITCHEN_EC2_DEVICE_NAME: "/dev/xvda" - KITCHEN_PLATFORM: "centos" KITCHEN_OSVERS: "centos-78,rhel-83" - KITCHEN_PLATFORM: "amazonlinux" KITCHEN_OSVERS: "amazonlinux2-4-14,amazonlinux2-5-10,amazonlinux2022-5-15" + KITCHEN_EC2_DEVICE_NAME: "/dev/xvda" kitchen_test_system_probe_windows_x64: extends: diff --git a/.gitlab/maintenance_jobs/docker.yml b/.gitlab/maintenance_jobs/docker.yml index a58eb5ce24970..6504eda0bc683 100644 --- a/.gitlab/maintenance_jobs/docker.yml +++ b/.gitlab/maintenance_jobs/docker.yml @@ -68,6 +68,7 @@ delete_docker_tag: before_script: - DOCKER_REGISTRY_LOGIN=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.$DOCKER_REGISTRY_LOGIN_SSM_KEY --with-decryption --query "Parameter.Value" --out text) - PASS=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.$DOCKER_REGISTRY_PWD_SSM_KEY --with-decryption --query "Parameter.Value" --out text) + - !reference [.setup_python_mirror_linux] - python3 -m pip install -r requirements.txt - | export DOCKER_TOKEN=`curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'$DOCKER_REGISTRY_LOGIN'", "password": "'$PASS'"}' https://hub.docker.com/v2/users/login/ | python -c 'import sys, json; print(json.load(sys.stdin)["token"].strip())'` diff --git a/.gitlab/notify.yml b/.gitlab/notify.yml index 440c105d2a099..9cfe736d7d4b6 100644 --- a/.gitlab/notify.yml +++ b/.gitlab/notify.yml @@ -25,6 +25,7 @@ notify: script: - set +x - export GITLAB_TOKEN=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.gitlab_read_api_token --with-decryption --query "Parameter.Value" --out text) + - !reference [.setup_python_mirror_linux] - python3 -m pip install -r tasks/libs/requirements-notifications.txt - | # Do not send notifications if this is a child pipeline of another repo @@ -51,5 +52,6 @@ send_pipeline_stats: - set +x - export GITLAB_TOKEN=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.gitlab_read_api_token --with-decryption --query "Parameter.Value" --out text) - export DD_API_KEY=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.datadog_api_key_org2 --with-decryption --query "Parameter.Value" --out text) + - !reference [.setup_python_mirror_linux] - python3 -m pip install -r tasks/libs/requirements-stats.txt - invoke -e pipeline.send-stats diff --git a/.gitlab/package_build/deb.yml b/.gitlab/package_build/deb.yml index cb852ef23e3b6..aff1504ba0b7e 100644 --- a/.gitlab/package_build/deb.yml +++ b/.gitlab/package_build/deb.yml @@ -10,6 +10,7 @@ script: - echo "About to build for $RELEASE_VERSION" - !reference [.setup_ruby_mirror_linux] + - !reference [.setup_python_mirror_linux] - !reference [.retrieve_linux_go_deps] # remove artifacts from previous pipelines that may come from the cache - rm -rf $OMNIBUS_PACKAGE_DIR/* @@ -131,6 +132,7 @@ agent_deb-arm64-a7: .iot_agent_build_common_deb: script: - !reference [.setup_ruby_mirror_linux] + - !reference [.setup_python_mirror_linux] - !reference [.retrieve_linux_go_deps] - echo "About to build for $RELEASE_VERSION_7" - echo "Detected host architecture $(uname -m)" diff --git a/.gitlab/package_build/dmg.yml b/.gitlab/package_build/dmg.yml index 6e2dc30ab21e7..ce8f8842545ec 100644 --- a/.gitlab/package_build/dmg.yml +++ b/.gitlab/package_build/dmg.yml @@ -8,6 +8,7 @@ - export GITHUB_KEY_B64=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.macos_github_key_b64 --with-decryption --query "Parameter.Value" --out text) - export GITHUB_APP_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.macos_github_app_id --with-decryption --query "Parameter.Value" --out text) - export GITHUB_INSTALLATION_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.macos_github_installation_id --with-decryption --query "Parameter.Value" --out text) + - !reference [.setup_python_mirror_linux] - python3 -m pip install -r tasks/libs/requirements-github.txt - inv -e github.trigger-macos-build --datadog-agent-ref "$CI_COMMIT_SHA" --release-version "$RELEASE_VERSION" --major-version "$AGENT_MAJOR_VERSION" --python-runtimes "$PYTHON_RUNTIMES" --destination "$OMNIBUS_PACKAGE_DIR" - !reference [.upload_sbom_artifacts] @@ -21,7 +22,6 @@ agent_dmg-x64-a7: extends: .agent_build_common_dmg rules: !reference [.on_a7] - allow_failure: true stage: package_build image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/deb_x64:$DATADOG_AGENT_BUILDIMAGES tags: ["runner:main"] diff --git a/.gitlab/package_build/rpm.yml b/.gitlab/package_build/rpm.yml index 56e3ea4d858f2..ebd9259c05087 100644 --- a/.gitlab/package_build/rpm.yml +++ b/.gitlab/package_build/rpm.yml @@ -3,6 +3,7 @@ script: - echo "About to build for $RELEASE_VERSION" - !reference [.setup_ruby_mirror_linux] + - !reference [.setup_python_mirror_linux] - !reference [.retrieve_linux_go_deps] # remove artifacts from previous pipelines that may come from the cache - rm -rf $OMNIBUS_PACKAGE_DIR/* @@ -124,6 +125,7 @@ agent_rpm-arm64-a7: script: - echo "About to build iot agent for $RELEASE_VERSION_7" - !reference [.setup_ruby_mirror_linux] + - !reference [.setup_python_mirror_linux] - !reference [.retrieve_linux_go_deps] - echo "Detected host architecture $(uname -m)" # $DD_TARGET_ARCH is only set by Arm build images, so assume amd64 if not present diff --git a/.gitlab/package_build/suse_rpm.yml b/.gitlab/package_build/suse_rpm.yml index 4174c7879ec10..012e09addba7d 100644 --- a/.gitlab/package_build/suse_rpm.yml +++ b/.gitlab/package_build/suse_rpm.yml @@ -3,6 +3,7 @@ script: - echo "About to build for $RELEASE_VERSION" - !reference [.setup_ruby_mirror_linux] + - !reference [.setup_python_mirror_linux] - !reference [.retrieve_linux_go_deps] # remove artifacts from previous pipelines that may come from the cache - rm -rf $OMNIBUS_PACKAGE_DIR_SUSE/* @@ -100,6 +101,7 @@ iot_agent_suse-x64: script: - echo "About to build iot agent for $RELEASE_VERSION_7" - !reference [.setup_ruby_mirror_linux] + - !reference [.setup_python_mirror_linux] - !reference [.retrieve_linux_go_deps] - echo "Detected host architecture $(uname -m)" # $DD_TARGET_ARCH is only set by Arm build images, so assume amd64 if not present diff --git a/.gitlab/package_build/windows.yml b/.gitlab/package_build/windows.yml index 54119dc5a7e19..939c21cc4a6c7 100644 --- a/.gitlab/package_build/windows.yml +++ b/.gitlab/package_build/windows.yml @@ -10,7 +10,35 @@ - mkdir omnibus\pkg - $vcpkgBlobSaSUrl = (aws ssm get-parameter --region us-east-1 --name ci.datadog-agent-buildimages.vcpkg_blob_sas_url --with-decryption --query "Parameter.Value" --out text) - !reference [.setup_ruby_mirror_win] - - docker run --rm -m 4096M -v "$(Get-Location):c:\mnt" -e CI_JOB_ID=${CI_JOB_ID} -e CI_PIPELINE_ID=${CI_PIPELINE_ID} -e CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH} -e OMNIBUS_TARGET=${OMNIBUS_TARGET} -e WINDOWS_BUILDER=true -e RELEASE_VERSION="$RELEASE_VERSION" -e MAJOR_VERSION="$AGENT_MAJOR_VERSION" -e PY_RUNTIMES="$PYTHON_RUNTIMES" -e INTEGRATIONS_CORE_VERSION="$INTEGRATIONS_CORE_VERSION" -e GOMODCACHE="c:\modcache" -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -e TARGET_ARCH="$ARCH" -e DEBUG_CUSTOMACTION="$DEBUG_CUSTOMACTION" -e BUCKET_BRANCH="$BUCKET_BRANCH" -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" -e USE_S3_CACHING="$USE_S3_CACHING" -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} c:\mnt\tasks\winbuildscripts\buildwin.bat + - !reference [.setup_python_mirror_win] + - > + docker run --rm + -m 4096M + -v "$(Get-Location):c:\mnt" + -e CI_JOB_ID=${CI_JOB_ID} + -e CI_PIPELINE_ID=${CI_PIPELINE_ID} + -e CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH} + -e OMNIBUS_TARGET=${OMNIBUS_TARGET} + -e WINDOWS_BUILDER=true + -e RELEASE_VERSION="$RELEASE_VERSION" + -e MAJOR_VERSION="$AGENT_MAJOR_VERSION" + -e PY_RUNTIMES="$PYTHON_RUNTIMES" + -e INTEGRATIONS_CORE_VERSION="$INTEGRATIONS_CORE_VERSION" + -e GOMODCACHE="c:\modcache" + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -e TARGET_ARCH="$ARCH" + -e DEBUG_CUSTOMACTION="$DEBUG_CUSTOMACTION" + -e BUCKET_BRANCH="$BUCKET_BRANCH" + -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" + -e USE_S3_CACHING="$USE_S3_CACHING" + -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" + -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" + -e GO_VERSION_CHECK="true" + -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} + -e PIP_INDEX_URL=${PIP_INDEX_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + c:\mnt\tasks\winbuildscripts\buildwin.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - get-childitem omnibus\pkg - !reference [.upload_sbom_artifacts_windows] @@ -68,7 +96,30 @@ windows_zip_agent_binaries_x64-a7: - if (Test-Path omnibus\pkg) { remove-item -recurse -force omnibus\pkg } - mkdir omnibus\pkg - !reference [.setup_ruby_mirror_win] - - docker run --rm -m 4096M -v "$(Get-Location):c:\mnt" -e CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH} -e OMNIBUS_TARGET=${OMNIBUS_TARGET} -e WINDOWS_BUILDER=true -e RELEASE_VERSION="$RELEASE_VERSION" -e MAJOR_VERSION="$AGENT_MAJOR_VERSION" -e INTEGRATIONS_CORE_VERSION="$INTEGRATIONS_CORE_VERSION" -e PY_RUNTIMES="$PYTHON_RUNTIMES" -e GOMODCACHE="c:\modcache" -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -e BUCKET_BRANCH="$BUCKET_BRANCH" -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" -e USE_S3_CACHING="$USE_S3_CACHING" -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} c:\mnt\tasks\winbuildscripts\buildwin.bat + - !reference [.setup_python_mirror_win] + - > + docker run --rm + -m 4096M + -v "$(Get-Location):c:\mnt" + -e CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH} + -e OMNIBUS_TARGET=${OMNIBUS_TARGET} + -e WINDOWS_BUILDER=true + -e RELEASE_VERSION="$RELEASE_VERSION" + -e MAJOR_VERSION="$AGENT_MAJOR_VERSION" + -e INTEGRATIONS_CORE_VERSION="$INTEGRATIONS_CORE_VERSION" + -e PY_RUNTIMES="$PYTHON_RUNTIMES" + -e GOMODCACHE="c:\modcache" + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -e BUCKET_BRANCH="$BUCKET_BRANCH" + -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" + -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" + -e USE_S3_CACHING="$USE_S3_CACHING" + -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" + -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} + -e PIP_INDEX_URL=${PIP_INDEX_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + c:\mnt\tasks\winbuildscripts\buildwin.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - get-childitem omnibus\pkg - !reference [.upload_sbom_artifacts_windows] diff --git a/.gitlab/package_deps_build.yml b/.gitlab/package_deps_build.yml index df6354a1bfcfa..6bb794d51738b 100644 --- a/.gitlab/package_deps_build.yml +++ b/.gitlab/package_deps_build.yml @@ -16,14 +16,12 @@ - tar -cJf minimized-btfs.tar.xz * - $S3_CP_CMD minimized-btfs.tar.xz $S3_ARTIFACTS_URI/minimized-btfs-$ARCH.tar.xz - generate_minimized_btfs_x64: needs: ["build_system-probe-x64"] extends: .generate_minimized_btfs_common variables: ARCH: amd64 - generate_minimized_btfs_arm64: needs: ["build_system-probe-arm64"] extends: .generate_minimized_btfs_common diff --git a/.gitlab/shared.yml b/.gitlab/shared.yml index 1d7f1b42a4d3b..0102486e2044e 100644 --- a/.gitlab/shared.yml +++ b/.gitlab/shared.yml @@ -15,3 +15,13 @@ .setup_ruby_mirror_win: - *get_artifactory_token_win - if ($Env:USE_CACHING_PROXY_RUBY -eq "true") { $BUNDLE_MIRROR__RUBYGEMS__ORG="https://${Env:ARTIFACTORY_USERNAME}:${ARTIFACTORY_TOKEN}@${Env:ARTIFACTORY_URL}/${Env:ARTIFACTORY_GEMS_PATH}" } + +.setup_python_mirror_linux: + - set +x + - *get_artifactory_token_linux + - if [ "${USE_CACHING_PROXY_PYTHON}" = "true" ]; then export PIP_INDEX_URL=https://${ARTIFACTORY_USERNAME}:${ARTIFACTORY_TOKEN}@${ARTIFACTORY_URL}/${ARTIFACTORY_PYPI_PATH}; fi + - set -x + +.setup_python_mirror_win: + - *get_artifactory_token_win + - if ($Env:USE_CACHING_PROXY_PYTHON -eq "true") { $PIP_INDEX_URL="https://${Env:ARTIFACTORY_USERNAME}:${ARTIFACTORY_TOKEN}@${Env:ARTIFACTORY_URL}/${Env:ARTIFACTORY_PYPI_PATH}" } diff --git a/.gitlab/source_test/ebpf.yml b/.gitlab/source_test/ebpf.yml index 22dd7c6768d08..afc1eb886454e 100644 --- a/.gitlab/source_test/ebpf.yml +++ b/.gitlab/source_test/ebpf.yml @@ -11,7 +11,7 @@ .build_sysprobe_artifacts: # kitchen prepare also builds object files - - inv -e system-probe.kitchen-prepare + - inv -e system-probe.kitchen-prepare --ci - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/tracer.o $CI_PROJECT_DIR/.tmp/binary-ebpf/tracer.o - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/tracer-debug.o $CI_PROJECT_DIR/.tmp/binary-ebpf/tracer-debug.o - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/offset-guess.o $CI_PROJECT_DIR/.tmp/binary-ebpf/offset-guess.o @@ -45,6 +45,7 @@ - !reference [.retrieve_sysprobe_deps] script: - inv -e install-tools + - inv -e system-probe.object-files - invoke -e golangci-lint --build system-probe ./pkg - !reference [.build_sysprobe_artifacts] - invoke -e security-agent.kitchen-prepare @@ -58,7 +59,18 @@ script: - $ErrorActionPreference = "Stop" - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' - - docker run --rm -m 8192M -v "$(Get-Location):c:\mnt" -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -e PY_RUNTIMES="$PYTHON_RUNTIMES" -e GOMODCACHE="c:\modcache" 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES c:\mnt\tasks\winbuildscripts\sysprobe.bat + - !reference [.setup_python_mirror_win] + - > + docker run --rm + -m 8192M + -v "$(Get-Location):c:\mnt" + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -e PY_RUNTIMES="$PYTHON_RUNTIMES" + -e GOMODCACHE="c:\modcache" + -e PIP_INDEX_URL=${PIP_INDEX_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES + c:\mnt\tasks\winbuildscripts\sysprobe.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } artifacts: when: always diff --git a/.gitlab/source_test/macos.yml b/.gitlab/source_test/macos.yml index 8a053cfbdfa1d..863711bd9888a 100644 --- a/.gitlab/source_test/macos.yml +++ b/.gitlab/source_test/macos.yml @@ -12,11 +12,13 @@ tests_macos: - export GITHUB_KEY_B64=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.macos_github_key_b64 --with-decryption --query "Parameter.Value" --out text) - export GITHUB_APP_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.macos_github_app_id --with-decryption --query "Parameter.Value" --out text) - export GITHUB_INSTALLATION_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.macos_github_installation_id --with-decryption --query "Parameter.Value" --out text) + - !reference [.setup_python_mirror_linux] - python3 -m pip install -r tasks/libs/requirements-github.txt - inv -e github.trigger-macos-test --datadog-agent-ref "$CI_COMMIT_SHA" --python-runtimes "$PYTHON_RUNTIMES" + - inv -e junit-macos-repack --infile junit-tests_macos.tgz --outfile junit-tests_macos-repacked.tgz artifacts: expire_in: 2 weeks when: always paths: - test_output.json - - junit-*.tgz + - junit-*-repacked.tgz diff --git a/.gitlab/source_test/windows.yml b/.gitlab/source_test/windows.yml index 1439debbb4538..fc1bbc46498ba 100644 --- a/.gitlab/source_test/windows.yml +++ b/.gitlab/source_test/windows.yml @@ -10,7 +10,22 @@ - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' # we pass in CI_JOB_URL and CI_JOB_NAME so that they can be added to additional tags # inside JUNIT_TAR and then later used by datadog-ci - - docker run --rm -m 8192M -v "$(Get-Location):c:\mnt" -e CI_JOB_URL="${CI_JOB_URL}" -e CI_JOB_NAME="${CI_JOB_NAME}" -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -e PY_RUNTIMES="$PYTHON_RUNTIMES" -e GOMODCACHE="c:\modcache" -e JUNIT_TAR="c:\mnt\junit-${CI_JOB_NAME}.tgz" -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES c:\mnt\tasks\winbuildscripts\unittests.bat + - !reference [.setup_python_mirror_win] + - > + docker run --rm + -m 8192M + -v "$(Get-Location):c:\mnt" + -e CI_JOB_URL="${CI_JOB_URL}" + -e CI_JOB_NAME="${CI_JOB_NAME}" + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -e PY_RUNTIMES="$PYTHON_RUNTIMES" + -e GOMODCACHE="c:\modcache" + -e JUNIT_TAR="c:\mnt\junit-${CI_JOB_NAME}.tgz" + -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" + -e PIP_INDEX_URL=${PIP_INDEX_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES + c:\mnt\tasks\winbuildscripts\unittests.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } artifacts: expire_in: 2 weeks diff --git a/.go-version b/.go-version index 1a31d398cf545..cafc0b7add498 100644 --- a/.go-version +++ b/.go-version @@ -1 +1 @@ -1.18.8 +1.18.9 diff --git a/.golangci.yml b/.golangci.yml index c4ebfcccc37bf..a9019040a482d 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -74,7 +74,7 @@ linters-settings: errcheck: # Disable warnings for `fmt` and `log` packages. Also ignore `Write` functions from `net/http` package. # Disable warnings for select Windows functions - ignore: fmt:.*,github.com/DataDog/datadog-agent/pkg/util/log:.*,github.com/DataDog/datadog-agent/comp/core/log:.*,net/http:Write,github.com/DataDog/datadog-agent/pkg/trace/metrics:.*,github.com/DataDog/datadog-agent/pkg/collector/corechecks:Warnf?,golang.org/x/sys/windows:(CloseHandle|FreeLibrary|FreeSid|RegCloseKey|SetEvent),syscall:CloseHandle,golang.org/x/sys/windows/svc/mgr:Disconnect,golang.org/x/sys/windows/svc/debug:(Close|Error|Info|Warning),github.com/lxn/walk:Dispose + ignore: fmt:.*,github.com/DataDog/datadog-agent/pkg/util/log:.*,github.com/DataDog/datadog-agent/comp/core/log:.*,net/http:Write,github.com/DataDog/datadog-agent/pkg/trace/metrics:.*,github.com/DataDog/datadog-agent/pkg/collector/corechecks:Warnf?,golang.org/x/sys/windows:(CloseHandle|FreeLibrary|FreeSid|RegCloseKey|SetEvent),syscall:CloseHandle,golang.org/x/sys/windows/svc/mgr:Disconnect,golang.org/x/sys/windows/svc/debug:(Close|Error|Info|Warning),github.com/lxn/walk:Dispose,github.com/DataDog/datadog-agent/comp/core/flare/helpers:(AddFile.*|CopyDir.*|CopyFile.*) staticcheck: go: "1.17" checks: ["all", diff --git a/CHANGELOG-DCA.rst b/CHANGELOG-DCA.rst index 69484ef2bcc64..cd131c908a196 100644 --- a/CHANGELOG-DCA.rst +++ b/CHANGELOG-DCA.rst @@ -2,6 +2,27 @@ Release Notes ============= +.. _Release Notes_7.41.0: + +7.41.0 / 6.41.0 +====== + +.. _Release Notes_7.41.0_New Features: + +New Features +------------ + +- Add ``Namespace`` collection in the orchestrator check and enable it by default. + + +.. _Release Notes_7.41.0_Enhancement Notes: + +Enhancement Notes +----------------- + +- Improves performance of the Cluster Agent admission controller on large pods. + + .. _Release Notes_7.40.0: 7.40.0 / 6.40.0 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 570dfb6704cd2..ee42709278662 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,234 @@ Release Notes ============= +.. _Release Notes_7.41.1: + +7.41.1 / 6.41.1 +====== + +.. _Release Notes_7.41.1_Prelude: + +Prelude +------- + +Release on: 2022-12-21 + + +.. _Release Notes_7.41.1_Enhancement Notes: + +Enhancement Notes +----------------- + +- Agents are now built with Go ``1.18.9``. + + +.. _Release Notes_7.41.0: + +7.41.0 / 6.41.0 +====== + +.. _Release Notes_7.41.0_Prelude: + +Prelude +------- + +Release on: 2022-12-09 + +- Please refer to the `7.41.0 tag on integrations-core `_ for the list of changes on the Core Checks + + +.. _Release Notes_7.41.0_Upgrade Notes: + +Upgrade Notes +------------- + +- Troubleshooting commands in the Agent CLI have been moved to the `diagnose` command. `troubleshooting metadata_v5` + command is now `diagnose show-metadata v5` and `troubleshooting metadata_inventory` is `diagnose show-metadata inventory`. + +- Journald launcher can now create multiple tailers on the same journal when + ``config_id`` is specified. This change enables multiple configs to operate + on the same journal which is useful for tagging different units. + Note: This may have an impact on CPU usage. + +- Upgrade tracer_agent debugger proxy to use logs intake API v2 + for uploading snapshots + +- The Agent now defaults to TLS 1.2 instead of TLS 1.0. The ``force_tls_12`` configuration parameter has been removed since it's now the default behavior. To continue using TLS 1.0 or 1.1, you must set the ``min_tls_version`` configuration parameter to either `tlsv1.0` or `tlsv1.1`. + + +.. _Release Notes_7.41.0_New Features: + +New Features +------------ + +- Added a required infrastructure to enable protocol classification for Network Performance Monitoring in the future. + The protocol classification will allow us to label each connection with a L7 protocol. + The features requires Linux kernel version 4.5 or greater. + +- parse the snmp configuration from the agent and pass it to the integrated snmpwalk command in case the customer only provides an ip address + +- The Agent can send its own configuration to Datadog to be displayed in the `Agent Configuration` section of the host + detail panel. See https://docs.datadoghq.com/infrastructure/list/#agent-configuration for more information. The + Agent configuration is scrubbed of any sensitive information and only contains configuration you’ve set using the + configuration file or environment variables. + +- Windows: Adds support for Windows Docker "Process Isolation" containers running on a Windows host. + + +.. _Release Notes_7.41.0_Enhancement Notes: + +Enhancement Notes +----------------- + +- APM: All spans can be sent through the error and rare samplers via custom feature flag `error_rare_sample_tracer_drop`. This can be useful if you want to run those samplers against traces that were not sampled by custom tracer sample rules. Note that even user manual drop spans may be kept if this feature flag is set. + +- APM: The trace-agent will log failures to lookup CPU usage at error level instead of debug. + +- Optionally poll Agent and Cluster Agent integration configuration files for changes after startup. This allows the Agent/Cluster Agent to pick up new + integration configuration without a restart. + This is enabled/disabled with the `autoconf_config_files_poll` boolean configuration variable. + The polling interval is configured with the `autoconf_config_files_poll_interval` (default 60s). + Note: Dynamic removal of logs configuration is currently not supported. + +- Added telemetry for the "container-lifecycle" check. + +- On Kubernetes, the "cluster name" can now be discovered by using + the Node label `ad.datadoghq.com/cluster-name` or any other label + key configured using to the configuration option: + `kubernetes_node_label_as_cluster_name` + +- Agents are now built with Go 1.18.8. + +- Go PDH checks now all use the PdhAddEnglishCounter API to + ensure proper localization support. + +- Use the `windows_counter_refresh_interval` configuration option to limit + how frequently the PDH object cache can be refreshed during counter + initialization in golang. This replaces the previously hardcoded limit + of 60 seconds. + +- [netflow] Add disable port rollup config. + +- The OTLP ingest endpoint now supports the same settings and protocol as the OpenTelemetry Collector OTLP receiver v0.61.0. + +- The `disable_file_logging` setting is now respected in the process-agent. + +- The `process-agent check [check-name]` command no longer outputs to the configured log file to reduce noise in the log file. + +- Logs a warning when the process agent cannot read other processes due to misconfiguration. + +- DogStatsD caches metric metadata for shorter periods of time, + reducing memory usage when tags or metrics received are different + across subsequent aggregation intervals. + +- The ``agent`` CLI subcommands related to Windows services are now + consistent in use of dashes in the command names (``install-service``, + ``start-service``, and so on). The names without dashes are supported as + aliases. + +- The Agent now uses the V2 API to submit series data to the Datadog intake + by default. This can be reverted by setting ``use_v2_api.series`` to + false. + + +.. _Release Notes_7.41.0_Deprecation Notes: + +Deprecation Notes +----------------- + +- APM: The Rare Sampler is now disabled by default. If you wish to enable it explicitly you can set apm_config.enable_rare_sampler or DD_APM_ENABLE_RARE_SAMPLER to true. + + +.. _Release Notes_7.41.0_Bug Fixes: + +Bug Fixes +--------- + +- APM: Don't include extra empty 'env' entries in sampling priority output shown by `agent status` command. + +- APM: Fix panic when DD_PROMETHEUS_SCRAPE_CHECKS is set. + +- APM: DogStatsD data can now be proxied through the "/dogstatsd/v1/proxy" endpoint + and the new "/dogstatsd/v2/proxy" endpoint over UDS, with multiple payloads + separated by newlines in a single request body. + See https://docs.datadoghq.com/developers/dogstatsd#setup for configuration details. + +- APM - remove extra error message from logs. + +- Fixes an issue where cluster check metrics would be sometimes sent with the host tags. + +- The containerd check no longer emits events related with pause containers when `exclude_pause_container` is set to `true`. + +- Discard aberrant values (close to 18 EiB) in the ``container.memory.rss`` metric. + +- Fix Cloud Foundry CAPI Metadata tags injection into application containers. + +- Fix Trace Agent's CPU stats by reading correct PID in procfs + +- Fix a potential panic when df outputs warnings or errors among its standard output. + +- The OTLP ingest is now consistent with the Datadog exporter (v0.56+) when getting a hostname from OTLP resource attributes for metrics and traces. + +- Make Agent write logs when SNMP trap listener starts and Agent + receives invalid packets. + +- Fixed a bug in the workloadmeta store. Subscribers that asked to receive + only `unset` events mistakenly got `set` events on the first subscription for + all the entities present in the store. This only affects the + `container_lifecycle` check. + +- Fix missing tags on the ``kubernetes_state.cronjob.complete`` service check. + +- In ``kubernetes_state_core`` check, fix the `labels_as_tags` feature when the same Kubernetes label must be turned into different Datadog tags, depending on the resource: + + labels_as_tags: + daemonset: + first_owner: kube_daemonset_label_first_owner + deployment: + first_owner: kube_deployment_label_first_owner + +- Normalize the EventID field in the output from the windowsevent log tailer. + The type will now always be a string containing the event ID, the sometimes + present qualifier value is retained in a new EventIDQualifier field. + +- Fix an issue where the security agent would panic, sending on a close + channel, if it received a signal when shutting down while all + components were disabled. + +- Fix tokenization of negative numeric values in the SQL obfuscator to remove extra characters prepended to the byte array. + + +.. _Release Notes_7.40.1: + +7.40.1 +====== + +.. _Release Notes_7.40.1_Prelude: + +Prelude +------- + +Release on: 2022-11-09 + +- Please refer to the `7.40.1 tag on integrations-core `_ for the list of changes on the Core Checks + + +.. _Release Notes_7.40.1_Enhancement Notes: + +Enhancement Notes +----------------- + +- Agents are now built with Go 1.18.8. + + +.. _Release Notes_7.40.1_Bug Fixes: + +Bug Fixes +--------- + +- Fix log collection on Kubernetes distributions using ``cri-o`` like OpenShift, which + began failing in 7.40.0. + .. _Release Notes_7.40.0: 7.40.0 / 6.40.0 diff --git a/Dockerfiles/agent/amd64/Dockerfile b/Dockerfiles/agent/amd64/Dockerfile index 92370a33ec323..ce2c0dde24ed4 100644 --- a/Dockerfiles/agent/amd64/Dockerfile +++ b/Dockerfiles/agent/amd64/Dockerfile @@ -1,4 +1,7 @@ FROM ubuntu:22.04 AS baseimage +LABEL baseimage.os "ubuntu jammy LTS" +LABEL baseimage.name "ubuntu:22.04" + ARG CIBUILD # NOTE about APT mirrorlists: # It seems that this feature could use some improvement. If you just get mirrorlist diff --git a/Dockerfiles/agent/arm64/Dockerfile b/Dockerfiles/agent/arm64/Dockerfile index dd96b34992d79..4cda9246cb4ae 100644 --- a/Dockerfiles/agent/arm64/Dockerfile +++ b/Dockerfiles/agent/arm64/Dockerfile @@ -1,4 +1,7 @@ FROM ubuntu:22.04 AS baseimage +LABEL baseimage.os "ubuntu jammy LTS" +LABEL baseimage.name "ubuntu:22.04" + ARG CIBUILD # NOTE about APT mirrorlists: # It seems that this feature could use some improvement. If you just get mirrorlist diff --git a/Dockerfiles/agent/datadog-kubernetes.yaml b/Dockerfiles/agent/datadog-kubernetes.yaml index 3746e5d46ee41..5532007364d02 100644 --- a/Dockerfiles/agent/datadog-kubernetes.yaml +++ b/Dockerfiles/agent/datadog-kubernetes.yaml @@ -3,8 +3,6 @@ apm_config: apm_non_local_traffic: true - max_memory: 0 - max_cpu_percent: 0 # Use java container support jmx_use_container_support: true diff --git a/Dockerfiles/agent/windows/amd64/Dockerfile b/Dockerfiles/agent/windows/amd64/Dockerfile index 666de3bdf600e..836b1c36073aa 100755 --- a/Dockerfiles/agent/windows/amd64/Dockerfile +++ b/Dockerfiles/agent/windows/amd64/Dockerfile @@ -1,5 +1,7 @@ ARG BASE_IMAGE=mcr.microsoft.com/powershell:lts-windowsservercore-1809 FROM ${BASE_IMAGE} +LABEL baseimage.os "windows server core" +LABEL baseimage.name "${BASE_IMAGE}" ARG WITH_JMX="false" ARG VARIANT="unknown" diff --git a/Dockerfiles/cluster-agent/amd64/Dockerfile b/Dockerfiles/cluster-agent/amd64/Dockerfile index 9b297da936476..345014aed225b 100644 --- a/Dockerfiles/cluster-agent/amd64/Dockerfile +++ b/Dockerfiles/cluster-agent/amd64/Dockerfile @@ -3,6 +3,8 @@ ######################################## FROM ubuntu:22.04 as builder +LABEL baseimage.os "ubuntu jammy LTS" +LABEL baseimage.name "ubuntu:22.04" WORKDIR /output diff --git a/Dockerfiles/cluster-agent/arm64/Dockerfile b/Dockerfiles/cluster-agent/arm64/Dockerfile index 3b9fe26d490ea..e1e248b445454 100644 --- a/Dockerfiles/cluster-agent/arm64/Dockerfile +++ b/Dockerfiles/cluster-agent/arm64/Dockerfile @@ -3,6 +3,8 @@ ######################################## FROM ubuntu:22.04 as builder +LABEL baseimage.os "ubuntu jammy LTS" +LABEL baseimage.name "ubuntu:22.04" WORKDIR /output diff --git a/Dockerfiles/dogstatsd/alpine/amd64/Dockerfile b/Dockerfiles/dogstatsd/alpine/amd64/Dockerfile index 9168035f228af..39859d0ef72d2 100644 --- a/Dockerfiles/dogstatsd/alpine/amd64/Dockerfile +++ b/Dockerfiles/dogstatsd/alpine/amd64/Dockerfile @@ -1,5 +1,7 @@ FROM alpine:3.12 +LABEL baseimage.os "alpine" +LABEL baseimage.name "alpine:3.12" LABEL maintainer "Datadog " ENV DOCKER_DD_AGENT=true diff --git a/Dockerfiles/dogstatsd/alpine/arm64/Dockerfile b/Dockerfiles/dogstatsd/alpine/arm64/Dockerfile index 9168035f228af..39859d0ef72d2 100644 --- a/Dockerfiles/dogstatsd/alpine/arm64/Dockerfile +++ b/Dockerfiles/dogstatsd/alpine/arm64/Dockerfile @@ -1,5 +1,7 @@ FROM alpine:3.12 +LABEL baseimage.os "alpine" +LABEL baseimage.name "alpine:3.12" LABEL maintainer "Datadog " ENV DOCKER_DD_AGENT=true diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index 0f4a8c8c9e082..35dc1c380b6cc 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -53,6 +53,14 @@ core,github.com/DataDog/go-libddwaf/lib/darwin-amd64,Apache-2.0,"Copyright 2016- core,github.com/DataDog/go-libddwaf/lib/darwin-arm64,Apache-2.0,"Copyright 2016-present Datadog, Inc" core,github.com/DataDog/go-libddwaf/lib/linux-amd64,Apache-2.0,"Copyright 2016-present Datadog, Inc" core,github.com/DataDog/go-libddwaf/lib/linux-arm64,Apache-2.0,"Copyright 2016-present Datadog, Inc" +core,github.com/DataDog/go-tuf/client,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" +core,github.com/DataDog/go-tuf/data,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" +core,github.com/DataDog/go-tuf/internal/roles,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" +core,github.com/DataDog/go-tuf/internal/sets,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" +core,github.com/DataDog/go-tuf/pkg/keys,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" +core,github.com/DataDog/go-tuf/pkg/targets,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" +core,github.com/DataDog/go-tuf/util,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" +core,github.com/DataDog/go-tuf/verify,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" core,github.com/DataDog/gohai/cpu,MIT,"Copyright (c) 2014-2015, Datadog | Copyright © 2015 Kentaro Kuribayashi " core,github.com/DataDog/gohai/filesystem,MIT,"Copyright (c) 2014-2015, Datadog | Copyright © 2015 Kentaro Kuribayashi " core,github.com/DataDog/gohai/memory,MIT,"Copyright (c) 2014-2015, Datadog | Copyright © 2015 Kentaro Kuribayashi " @@ -309,6 +317,7 @@ core,github.com/dgraph-io/ristretto,Apache-2.0,"Copyright (c) 2014 Andreas Bries core,github.com/dgraph-io/ristretto/z,MIT,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved." core,github.com/dgraph-io/ristretto/z/simd,MIT,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved." core,github.com/dgryski/go-jump,MIT,Copyright (c) 2014 Damian Gryski +core,github.com/dgryski/go-rendezvous,MIT,Copyright (c) 2017-2020 Damian Gryski core,github.com/docker/distribution/digestset,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/distribution/reference,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/docker/api,Apache-2.0,"Copyright 2012-2017 Docker, Inc." @@ -373,6 +382,14 @@ core,github.com/go-openapi/jsonpointer,Apache-2.0,Copyright 2013 sigu-399 ( http core,github.com/go-openapi/jsonreference,Apache-2.0,Copyright 2013 sigu-399 ( https://github.com/sigu-399 ) core,github.com/go-openapi/jsonreference/internal,Apache-2.0,Copyright 2013 sigu-399 ( https://github.com/sigu-399 ) core,github.com/go-openapi/swag,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-redis/redis/v9,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal/hashtag,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal/hscan,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal/pool,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal/proto,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal/rand,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v9/internal/util,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors core,github.com/gobwas/glob,MIT,Copyright (c) 2016 Sergey Kamardin core,github.com/gobwas/glob/compiler,MIT,Copyright (c) 2016 Sergey Kamardin core,github.com/gobwas/glob/match,MIT,Copyright (c) 2016 Sergey Kamardin @@ -557,6 +574,7 @@ core,github.com/moby/sys/signal,Apache-2.0,Copyright (c) 2014-2018 The Docker & core,github.com/modern-go/concurrent,Apache-2.0,Copyright (c) 2018 Tao Wen core,github.com/modern-go/reflect2,Apache-2.0,Copyright (c) 2018 Tao Wen core,github.com/mohae/deepcopy,MIT,Copyright (c) 2014 Joel +core,github.com/montanaflynn/stats,MIT,Copyright (c) 2014-2015 Montana Flynn (https://anonfunction.com) | Copyright (c) 2014-2015 Montana Flynn core,github.com/mostynb/go-grpc-compression/snappy,Apache-2.0,Copyright 2017 gRPC authors. core,github.com/mostynb/go-grpc-compression/zstd,Apache-2.0,Copyright 2020 Mostyn Bramley-Moore. | Copyright 2020 Mostyn Bramley-Moore. core,github.com/munnerz/goautoneg,BSD-3-Clause,"Copyright (c) 2011, Open Knowledge Foundation Ltd" @@ -718,6 +736,7 @@ core,github.com/spf13/cast,MIT,Copyright (c) 2014 Steve Francia core,github.com/spf13/cobra,Apache-2.0,Copyright © 2013 Steve Francia . core,github.com/spf13/jwalterweatherman,MIT,Copyright (c) 2014 Steve Francia core,github.com/spf13/pflag,BSD-3-Clause,Copyright (c) 2012 Alex Ogier. All rights reserved | Copyright (c) 2012 The Go Authors. All rights reserved +core,github.com/streadway/amqp,BSD-2-Clause,"Copyright (c) 2012-2019, Sean Treadway, SoundCloud Ltd" core,github.com/stretchr/objx,MIT,"Copyright (c) 2014 Stretchr, Inc | Copyright (c) 2017-2018 objx contributors" core,github.com/stretchr/testify/assert,MIT,"Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors" core,github.com/stretchr/testify/mock,MIT,"Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors" @@ -737,14 +756,6 @@ core,github.com/syndtr/goleveldb/leveldb/table,BSD-2-Clause,Copyright 2012 Surya core,github.com/syndtr/goleveldb/leveldb/util,BSD-2-Clause,Copyright 2012 Suryandaru Triandana core,github.com/tchap/go-patricia/v2/patricia,MIT,Copyright (c) 2014 The AUTHORS | Ondřej Kupka | This is the complete list of go-patricia copyright holders: core,github.com/tedsuo/rata,MIT,Copyright (c) 2014 Ted Young -core,github.com/theupdateframework/go-tuf/client,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" -core,github.com/theupdateframework/go-tuf/data,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" -core,github.com/theupdateframework/go-tuf/internal/roles,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" -core,github.com/theupdateframework/go-tuf/internal/sets,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" -core,github.com/theupdateframework/go-tuf/pkg/keys,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" -core,github.com/theupdateframework/go-tuf/pkg/targets,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" -core,github.com/theupdateframework/go-tuf/util,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" -core,github.com/theupdateframework/go-tuf/verify,BSD-3-Clause,"Copyright (c) 2014-2020 Prime Directive, Inc. All rights reserved" core,github.com/tidwall/gjson,MIT,Copyright (c) 2016 Josh Baker core,github.com/tidwall/match,MIT,Copyright (c) 2016 Josh Baker core,github.com/tidwall/pretty,MIT,Copyright (c) 2017 Josh Baker @@ -767,12 +778,16 @@ core,github.com/vishvananda/netlink/nl,Apache-2.0,"Copyright 2014 Docker, Inc | core,github.com/vishvananda/netns,Apache-2.0,"Copyright 2014 Docker, Inc | Copyright 2014 Vishvananda Ishaya" core,github.com/vito/go-sse/sse,Apache-2.0,Copyright (c) 2014 Alex Suraci core,github.com/wI2L/jsondiff,MIT,Copyright (c) 2020-2022 William Poussier +core,github.com/xdg-go/pbkdf2,Apache-2.0,Copyright 2021 by David A. Golden. All rights reserved +core,github.com/xdg-go/scram,Apache-2.0,Copyright 2018 by David A. Golden. All rights reserved +core,github.com/xdg-go/stringprep,Apache-2.0,Copyright 2018 by David A. Golden. All rights reserved core,github.com/xeipuuv/gojsonpointer,Apache-2.0,Copyright 2015 xeipuuv ( https://github.com/xeipuuv ) core,github.com/xeipuuv/gojsonreference,Apache-2.0,Copyright 2015 xeipuuv ( https://github.com/xeipuuv ) core,github.com/xeipuuv/gojsonschema,Apache-2.0,Copyright 2015 xeipuuv core,github.com/xi2/xz,Public Domain,Igor Pavlov | Lasse Collin | Michael Cross core,github.com/xor-gate/ar,MIT,Copyright (c) 2013 Blake Smith core,github.com/yashtewari/glob-intersection,Apache-2.0,Copyright (c) 2018 Yash Tewari (yashtewari) +core,github.com/youmark/pkcs8,MIT,Copyright (c) 2014 youmark core,github.com/yusufpapurcu/wmi,MIT,Copyright (c) 2013 Stack Exchange core,go.etcd.io/bbolt,MIT,Copyright 2016 The etcd Authors core,go.etcd.io/etcd/api/v3/authpb,Apache-2.0,Copyright 2016 The etcd Authors @@ -795,6 +810,41 @@ core,go.etcd.io/etcd/client/v3,Apache-2.0,Copyright 2016 The etcd Authors core,go.etcd.io/etcd/client/v3/credentials,Apache-2.0,Copyright 2016 The etcd Authors core,go.etcd.io/etcd/client/v3/internal/endpoint,Apache-2.0,Copyright 2016 The etcd Authors core,go.etcd.io/etcd/client/v3/internal/resolver,Apache-2.0,Copyright 2016 The etcd Authors +core,go.mongodb.org/mongo-driver/bson,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/bsoncodec,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/bsonoptions,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/bsonrw,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/bsontype,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/primitive,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/event,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/internal,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/internal/randutil,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/internal/randutil/rand,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/internal/uuid,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/address,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/description,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/options,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/readconcern,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/readpref,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/writeconcern,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/tag,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/version,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/bsonx,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/bsonx/bsoncore,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/auth,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/awsv4,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/connstring,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/dns,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/mongocrypt,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/mongocrypt/options,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/ocsp,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/operation,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/session,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/topology,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage,Apache-2.0,"Copyright © 2018 MongoDB, Inc." core,go.opencensus.io,Apache-2.0,"Copyright 2018, OpenCensus Authors" core,go.opencensus.io/internal,Apache-2.0,"Copyright 2018, OpenCensus Authors" core,go.opencensus.io/internal/tagencoding,Apache-2.0,"Copyright 2018, OpenCensus Authors" @@ -816,12 +866,14 @@ core,go.opencensus.io/trace/propagation,Apache-2.0,"Copyright 2018, OpenCensus A core,go.opencensus.io/trace/tracestate,Apache-2.0,"Copyright 2018, OpenCensus Authors" core,go.opentelemetry.io/collector/client,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/component,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/component/componenttest,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configauth,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configcompression,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configgrpc,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/confighttp,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/confignet,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/config/configopaque,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configtelemetry,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configtls,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/internal,Apache-2.0,Copyright The OpenTelemetry Authors @@ -833,14 +885,18 @@ core,go.opentelemetry.io/collector/confmap/provider/fileprovider,Apache-2.0,Copy core,go.opentelemetry.io/collector/confmap/provider/httpprovider,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/confmap/provider/internal,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/confmap/provider/yamlprovider,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/connector,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/consumer,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/consumer/consumererror,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/consumer/consumertest,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/exporter,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/exporterhelper,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/exporterhelper/internal,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/loggingexporter,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/loggingexporter/internal/otlptext,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/otlpexporter,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/extension,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/extension/auth,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/extension/experimental/storage,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/featuregate,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/internal/obsreportconfig,Apache-2.0,Copyright The OpenTelemetry Authors @@ -848,6 +904,9 @@ core,go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics,Apache-2. core,go.opentelemetry.io/collector/internal/sharedcomponent,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/internal/testdata,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/obsreport,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/otelcol,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/otelcol/internal/configunmarshaler,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/otelcol/internal/grpclog,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data/protogen/collector/logs/v1,Apache-2.0,Copyright The OpenTelemetry Authors @@ -870,7 +929,9 @@ core,go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp,Apache-2.0,Copyrigh core,go.opentelemetry.io/collector/pdata/ptrace,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/ptrace/internal/ptracejson,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/ptrace/ptraceotlp,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/processor,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/processor/batchprocessor,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/receiver,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/receiver/otlpreceiver,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/receiver/otlpreceiver/internal/logs,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/receiver/otlpreceiver/internal/metrics,Apache-2.0,Copyright The OpenTelemetry Authors @@ -880,11 +941,9 @@ core,go.opentelemetry.io/collector/semconv/v1.5.0,Apache-2.0,Copyright The OpenT core,go.opentelemetry.io/collector/semconv/v1.6.1,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/extensions,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/service/internal/capabilityconsumer,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/components,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/service/internal/configunmarshaler,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/fanoutconsumer,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/service/internal/grpclog,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/service/internal/pipelines,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/proctelemetry,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/runtimeinfo,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/zpages,Apache-2.0,Copyright The OpenTelemetry Authors @@ -962,6 +1021,7 @@ core,golang.org/x/crypto/cryptobyte/asn1,BSD-3-Clause,Copyright (c) 2009 The Go core,golang.org/x/crypto/internal/alias,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/internal/poly1305,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/nacl/secretbox,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/ocsp,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/openpgp,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/openpgp/armor,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/openpgp/clearsign,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved @@ -972,6 +1032,7 @@ core,golang.org/x/crypto/openpgp/s2k,BSD-3-Clause,Copyright (c) 2009 The Go Auth core,golang.org/x/crypto/pbkdf2,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/salsa20/salsa,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/scrypt,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/ssh,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/exp/constraints,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/exp/maps,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/exp/slices,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved @@ -1234,6 +1295,18 @@ core,k8s.io/api/storage/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Author core,k8s.io/api/storage/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/scheme,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/internalinterfaces,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/apimachinery/pkg/api/equality,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/apimachinery/pkg/api/errors,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/apimachinery/pkg/api/meta,Apache-2.0,Copyright 2014 The Kubernetes Authors. @@ -1423,6 +1496,18 @@ core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned/ty core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned/typed/autoscaling.k8s.io/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned/typed/autoscaling.k8s.io/v1beta2,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned/typed/poc.autoscaling.k8s.io/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io/v1beta2,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/internalinterfaces,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/poc.autoscaling.k8s.io,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/poc.autoscaling.k8s.io/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1beta2,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/poc.autoscaling.k8s.io/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/client-go/applyconfigurations/admissionregistration/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/client-go/applyconfigurations/apiserverinternal/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Authors. diff --git a/chocolatey/datadog-agent-offline.nuspec b/chocolatey/datadog-agent-offline.nuspec index ead9db7024254..d049625a0ef3b 100644 --- a/chocolatey/datadog-agent-offline.nuspec +++ b/chocolatey/datadog-agent-offline.nuspec @@ -4,12 +4,13 @@ datadog-agent-offline $package_version$ https://github.com/DataDog/datadog-agent/tree/main/chocolatey + Datadog Datadog Agent Offline Install Datadog https://github.com/DataDog/datadog-agent https://datadog-prod.imgix.net/img/dd_logo_70x75.png $copyright$ - Apache-2.0 + https://raw.githubusercontent.com/DataDog/datadog-agent/main/LICENSE true https://docs.datadoghq.com datadog agent monitoring admin diff --git a/chocolatey/datadog-agent-online.nuspec b/chocolatey/datadog-agent-online.nuspec index 00b89421fb0e5..a06c8c26a69c8 100644 --- a/chocolatey/datadog-agent-online.nuspec +++ b/chocolatey/datadog-agent-online.nuspec @@ -4,12 +4,13 @@ datadog-agent $package_version$ https://github.com/DataDog/datadog-agent/tree/main/chocolatey + Datadog Datadog Agent Datadog https://github.com/DataDog/datadog-agent https://datadog-prod.imgix.net/img/dd_logo_70x75.png $copyright$ - Apache-2.0 + https://raw.githubusercontent.com/DataDog/datadog-agent/main/LICENSE true https://docs.datadoghq.com datadog agent monitoring admin diff --git a/cmd/agent/api/grpc.go b/cmd/agent/api/grpc.go index d774ea7e4820f..48ded0c29fbb3 100644 --- a/cmd/agent/api/grpc.go +++ b/cmd/agent/api/grpc.go @@ -128,7 +128,7 @@ func (s *serverSecure) ClientGetConfigs(ctx context.Context, in *pb.ClientGetCon log.Debug("Remote configuration service not initialized") return nil, errors.New("remote configuration service not initialized") } - return s.configService.ClientGetConfigs(in) + return s.configService.ClientGetConfigs(ctx, in) } func (s *serverSecure) GetConfigState(ctx context.Context, e *emptypb.Empty) (*pb.GetStateConfigResponse, error) { diff --git a/cmd/agent/api/internal/agent/agent.go b/cmd/agent/api/internal/agent/agent.go index 3f121cc933b01..2e5bd92cf8859 100644 --- a/cmd/agent/api/internal/agent/agent.go +++ b/cmd/agent/api/internal/agent/agent.go @@ -24,10 +24,11 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/cmd/agent/common/signals" "github.com/DataDog/datadog-agent/cmd/agent/gui" + "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/pkg/autodiscovery" "github.com/DataDog/datadog-agent/pkg/config" settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" - "github.com/DataDog/datadog-agent/pkg/flare" + pkgflare "github.com/DataDog/datadog-agent/pkg/flare" "github.com/DataDog/datadog-agent/pkg/logs" "github.com/DataDog/datadog-agent/pkg/logs/diagnostic" "github.com/DataDog/datadog-agent/pkg/metadata/inventories" @@ -45,10 +46,10 @@ import ( ) // SetupHandlers adds the specific handlers for /agent endpoints -func SetupHandlers(r *mux.Router) *mux.Router { +func SetupHandlers(r *mux.Router, flare flare.Component) *mux.Router { r.HandleFunc("/version", common.GetVersion).Methods("GET") r.HandleFunc("/hostname", getHostname).Methods("GET") - r.HandleFunc("/flare", makeFlare).Methods("POST") + r.HandleFunc("/flare", func(w http.ResponseWriter, r *http.Request) { makeFlare(w, r, flare) }).Methods("POST") r.HandleFunc("/stop", stopAgent).Methods("POST") r.HandleFunc("/status", getStatus).Methods("GET") r.HandleFunc("/stream-logs", streamLogs).Methods("POST") @@ -97,8 +98,8 @@ func getHostname(w http.ResponseWriter, r *http.Request) { w.Write(j) } -func makeFlare(w http.ResponseWriter, r *http.Request) { - var profile flare.ProfileData +func makeFlare(w http.ResponseWriter, r *http.Request, flare flare.Component) { + var profile pkgflare.ProfileData if r.Body != http.NoBody { body, err := io.ReadAll(r.Body) @@ -125,8 +126,18 @@ func makeFlare(w http.ResponseWriter, r *http.Request) { if jmxLogFile == "" { jmxLogFile = common.DefaultJmxLogFile } + + // If we're not in an FX app we fallback to pkgflare implementation. Once all app have been migrated to flare we + // could remove this. + var filePath string + var err error log.Infof("Making a flare") - filePath, err := flare.CreateArchive(false, common.GetDistPath(), common.PyChecksPath, []string{logFile, jmxLogFile}, profile, nil) + if flare != nil { + filePath, err = flare.Create(false, common.GetDistPath(), common.PyChecksPath, []string{logFile, jmxLogFile}, profile, nil) + } else { + filePath, err = pkgflare.CreateArchive(false, common.GetDistPath(), common.PyChecksPath, []string{logFile, jmxLogFile}, profile, nil) + } + if err != nil || filePath == "" { if err != nil { log.Errorf("The flare failed to be created: %s", err) diff --git a/cmd/agent/api/server.go b/cmd/agent/api/server.go index 0c3b7d07cad4e..07a9399811c09 100644 --- a/cmd/agent/api/server.go +++ b/cmd/agent/api/server.go @@ -30,6 +30,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/api/internal/agent" "github.com/DataDog/datadog-agent/cmd/agent/api/internal/check" + "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/pkg/api/util" "github.com/DataDog/datadog-agent/pkg/config" remoteconfig "github.com/DataDog/datadog-agent/pkg/config/remote/service" @@ -42,7 +43,7 @@ import ( var listener net.Listener // StartServer creates the router and starts the HTTP server -func StartServer(configService *remoteconfig.Service) error { +func StartServer(configService *remoteconfig.Service, flare flare.Component) error { initializeTLS() // get the transport we're going to use under HTTP @@ -105,7 +106,7 @@ func StartServer(configService *remoteconfig.Service) error { checkMux.Use(validateToken) mux := http.NewServeMux() - mux.Handle("/agent/", http.StripPrefix("/agent", agent.SetupHandlers(agentMux))) + mux.Handle("/agent/", http.StripPrefix("/agent", agent.SetupHandlers(agentMux, flare))) mux.Handle("/check/", http.StripPrefix("/check", check.SetupHandlers(checkMux))) mux.Handle("/", gwmux) diff --git a/cmd/agent/common/autodiscovery.go b/cmd/agent/common/autodiscovery.go index f7f8f66c7f907..e3d1e7f14cdaf 100644 --- a/cmd/agent/common/autodiscovery.go +++ b/cmd/agent/common/autodiscovery.go @@ -18,7 +18,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/autodiscovery/scheduler" "github.com/DataDog/datadog-agent/pkg/config" confad "github.com/DataDog/datadog-agent/pkg/config/autodiscovery" - "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -31,7 +30,7 @@ var ( "container": {"kubelet": struct{}{}}, } - incompatibleProviders = []string{"kubelet", "container", "docker"} + legacyProviders = []string{"kubelet", "container", "docker"} ) func setupAutoDiscovery(confSearchPaths []string, metaScheduler *scheduler.MetaScheduler) *autodiscovery.AutoConfig { @@ -72,28 +71,16 @@ func setupAutoDiscovery(confSearchPaths []string, metaScheduler *scheduler.MetaS } } - ccaInAD := util.CcaInAD() - if ccaInAD { - var enableContainerProvider bool - for _, p := range incompatibleProviders { - if _, found := uniqueConfigProviders[p]; found { - enableContainerProvider = true - delete(uniqueConfigProviders, p) - } + var enableContainerProvider bool + for _, p := range legacyProviders { + if _, found := uniqueConfigProviders[p]; found { + enableContainerProvider = true + delete(uniqueConfigProviders, p) } + } - if enableContainerProvider { - uniqueConfigProviders[names.KubeContainer] = config.ConfigurationProviders{Name: names.KubeContainer} - } - } else { - // The "docker" config provider was replaced with the "container" one - // that supports Docker, but also other runtimes. We need this - // conversion to avoid breaking configs that included "docker". - if options, found := uniqueConfigProviders["docker"]; found { - delete(uniqueConfigProviders, "docker") - options.Name = names.Container - uniqueConfigProviders["container"] = options - } + if enableContainerProvider { + uniqueConfigProviders[names.KubeContainer] = config.ConfigurationProviders{Name: names.KubeContainer} } for _, provider := range extraConfigProviders { diff --git a/cmd/agent/common/loader.go b/cmd/agent/common/loader.go index 5e511143e7b83..698c1a519025c 100644 --- a/cmd/agent/common/loader.go +++ b/cmd/agent/common/loader.go @@ -42,6 +42,10 @@ func LoadComponents(ctx context.Context, confdPath string) { options, err := remote.CLCRunnerOptions() if err != nil { log.Errorf("unable to configure the remote tagger: %s", err) + t = local.NewFakeTagger() + } else if options.Disabled { + log.Info("remote tagger is disabled") + t = local.NewFakeTagger() } else { t = remote.NewTagger(options) } diff --git a/cmd/agent/gui/agent.go b/cmd/agent/gui/agent.go index 897a5e9b08ec8..fba804f96eea9 100644 --- a/cmd/agent/gui/agent.go +++ b/cmd/agent/gui/agent.go @@ -132,6 +132,7 @@ func makeFlare(w http.ResponseWriter, r *http.Request) { payload, e := parseBody(r) if e != nil { w.Write([]byte(e.Error())) + return } else if payload.Email == "" || payload.CaseID == "" { w.Write([]byte("Error creating flare: missing information")) return @@ -191,6 +192,7 @@ func getConfigSetting(w http.ResponseWriter, r *http.Request) { }[setting]; !ok { w.WriteHeader(http.StatusForbidden) fmt.Fprintf(w, `"error": "requested setting is not whitelisted"`) + return } if err := json.NewEncoder(w).Encode(map[string]interface{}{ setting: config.Datadog.Get(setting), @@ -218,6 +220,7 @@ func setConfigFile(w http.ResponseWriter, r *http.Request) { payload, e := parseBody(r) if e != nil { w.Write([]byte(e.Error())) + return } data := []byte(payload.Config) diff --git a/cmd/agent/gui/agent_test.go b/cmd/agent/gui/agent_test.go new file mode 100644 index 0000000000000..7b8fe2465b691 --- /dev/null +++ b/cmd/agent/gui/agent_test.go @@ -0,0 +1,104 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package gui + +import ( + "fmt" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/gorilla/mux" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func Test_makeFlare(t *testing.T) { + tests := []struct { + name string + payload string + expectedBody string + }{ + { + name: "Bad payload", + payload: "a\n", + expectedBody: "invalid character 'a' looking for beginning of value", + }, + { + name: "Missing email", + payload: "{\"caseID\": \"102123123\"}", + expectedBody: "Error creating flare: missing information", + }, + { + name: "Missing caseID", + payload: "{\"email\": \"test@example.com\"}", + expectedBody: "Error creating flare: missing information", + }, + { + name: "Invalid caseID", + payload: "{\"email\": \"test@example.com\", \"caseID\": \"102123123a\"}", + expectedBody: "Invalid CaseID (must be a number)", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + req, err := http.NewRequest("POST", "/flare", strings.NewReader(tt.payload)) + require.NoError(t, err) + + rr := httptest.NewRecorder() + + router := mux.NewRouter() + agentHandler(router) + router.ServeHTTP(rr, req) + + resp := rr.Result() + defer resp.Body.Close() + body, _ := io.ReadAll(resp.Body) + assert.Equal(t, string(body), tt.expectedBody) + }) + } +} + +func Test_getConfigSetting(t *testing.T) { + tests := []struct { + name string + configSetting string + expectedBody string + }{ + { + name: "Allowed setting", + configSetting: "apm_config.receiver_port", + expectedBody: "{\"apm_config.receiver_port\":8126}\n", + }, + { + name: "Not allowed setting", + configSetting: "api_key", + expectedBody: "\"error\": \"requested setting is not whitelisted\"", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + path := fmt.Sprintf("/getConfig/%s", tt.configSetting) + req, err := http.NewRequest("GET", path, nil) + require.NoError(t, err) + + rr := httptest.NewRecorder() + + router := mux.NewRouter() + agentHandler(router) + router.ServeHTTP(rr, req) + + resp := rr.Result() + defer resp.Body.Close() + body, _ := io.ReadAll(resp.Body) + assert.Equal(t, string(body), tt.expectedBody) + }) + } +} diff --git a/cmd/agent/subcommands/configcheck/command.go b/cmd/agent/subcommands/configcheck/command.go index 53f6942bd7f73..de1cdb6225e20 100644 --- a/cmd/agent/subcommands/configcheck/command.go +++ b/cmd/agent/subcommands/configcheck/command.go @@ -17,6 +17,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/flare" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/scrubber" @@ -43,7 +44,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(run, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, true, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/configcheck/command_test.go b/cmd/agent/subcommands/configcheck/command_test.go index 4541360226692..ffd214a03b8e2 100644 --- a/cmd/agent/subcommands/configcheck/command_test.go +++ b/cmd/agent/subcommands/configcheck/command_test.go @@ -22,6 +22,6 @@ func TestCommand(t *testing.T) { run, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, true, cliParams.verbose) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/diagnose/command.go b/cmd/agent/subcommands/diagnose/command.go index 74464ad4f384f..d248910a4bfea 100644 --- a/cmd/agent/subcommands/diagnose/command.go +++ b/cmd/agent/subcommands/diagnose/command.go @@ -54,7 +54,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(runAll, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "info", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "info", true)}), core.Bundle, ) }, @@ -67,7 +69,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(runDatadogConnectivityDiagnose, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "info", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "info", true)}), core.Bundle, ) }, @@ -94,7 +98,9 @@ This command print the V5 metadata payload for the Agent. This payload is used t cliParams.payloadName = "v5" return fxutil.OneShot(printPayload, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, @@ -109,7 +115,9 @@ This command print the last Inventory metadata payload sent by the Agent. This p cliParams.payloadName = "inventory" return fxutil.OneShot(printPayload, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/diagnose/command_test.go b/cmd/agent/subcommands/diagnose/command_test.go index d7e63643ec88d..913890250338f 100644 --- a/cmd/agent/subcommands/diagnose/command_test.go +++ b/cmd/agent/subcommands/diagnose/command_test.go @@ -21,7 +21,7 @@ func TestDiagnoseCommand(t *testing.T) { []string{"diagnose"}, runAll, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } @@ -31,7 +31,7 @@ func TestMetadataAvailabilityCommand(t *testing.T) { []string{"diagnose", "metadata-availability"}, runAll, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } @@ -41,7 +41,7 @@ func TestShowMetadataV5Command(t *testing.T) { []string{"diagnose", "show-metadata", "v5"}, printPayload, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) require.Equal(t, "v5", cliParams.payloadName) }) } @@ -52,7 +52,7 @@ func TestShowMetadataInventoryCommand(t *testing.T) { []string{"diagnose", "show-metadata", "inventory"}, printPayload, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) require.Equal(t, "inventory", cliParams.payloadName) }) } @@ -63,7 +63,7 @@ func TestDatadogConnectivityCommand(t *testing.T) { []string{"diagnose", "datadog-connectivity", "--no-trace"}, runDatadogConnectivityDiagnose, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) require.Equal(t, true, cliParams.noTrace) }) } diff --git a/cmd/agent/subcommands/dogstatsdcapture/command.go b/cmd/agent/subcommands/dogstatsdcapture/command.go index cd41e62cd7c26..a004cba8d2c84 100644 --- a/cmd/agent/subcommands/dogstatsdcapture/command.go +++ b/cmd/agent/subcommands/dogstatsdcapture/command.go @@ -58,7 +58,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(dogstatsdCapture, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/dogstatsdcapture/command_test.go b/cmd/agent/subcommands/dogstatsdcapture/command_test.go index 28949abbfce89..dab85b28730f7 100644 --- a/cmd/agent/subcommands/dogstatsdcapture/command_test.go +++ b/cmd/agent/subcommands/dogstatsdcapture/command_test.go @@ -24,6 +24,6 @@ func TestCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, 10*time.Second, cliParams.dsdCaptureDuration) require.True(t, cliParams.dsdCaptureCompressed) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/dogstatsdreplay/command.go b/cmd/agent/subcommands/dogstatsdreplay/command.go index ad24baf16207e..fe0e636cacfd4 100644 --- a/cmd/agent/subcommands/dogstatsdreplay/command.go +++ b/cmd/agent/subcommands/dogstatsdreplay/command.go @@ -62,7 +62,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(dogstatsdReplay, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/dogstatsdreplay/command_test.go b/cmd/agent/subcommands/dogstatsdreplay/command_test.go index d0513bc8e38d7..bfa81a583c515 100644 --- a/cmd/agent/subcommands/dogstatsdreplay/command_test.go +++ b/cmd/agent/subcommands/dogstatsdreplay/command_test.go @@ -22,6 +22,6 @@ func TestCommand(t *testing.T) { dogstatsdReplay, func(cliParams *cliParams, coreParams core.BundleParams) { require.True(t, cliParams.dsdVerboseReplay) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/dogstatsdstats/command.go b/cmd/agent/subcommands/dogstatsdstats/command.go index e26e8fa17b520..30658ebb1ccc4 100644 --- a/cmd/agent/subcommands/dogstatsdstats/command.go +++ b/cmd/agent/subcommands/dogstatsdstats/command.go @@ -51,7 +51,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(requestDogstatsdStats, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/dogstatsdstats/command_test.go b/cmd/agent/subcommands/dogstatsdstats/command_test.go index 379fa3d1b7b7c..8543bc495fad5 100644 --- a/cmd/agent/subcommands/dogstatsdstats/command_test.go +++ b/cmd/agent/subcommands/dogstatsdstats/command_test.go @@ -22,6 +22,6 @@ func TestCommand(t *testing.T) { requestDogstatsdStats, func(cliParams *cliParams, coreParams core.BundleParams) { require.True(t, cliParams.jsonStatus) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/flare/command.go b/cmd/agent/subcommands/flare/command.go index d84468c652f4c..2fe63ab36b60b 100644 --- a/cmd/agent/subcommands/flare/command.go +++ b/cmd/agent/subcommands/flare/command.go @@ -11,6 +11,7 @@ import ( "encoding/json" "fmt" "os" + "path" "github.com/fatih/color" "github.com/hashicorp/go-multierror" @@ -21,10 +22,11 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/api/util" pkgconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/flare" + pkgflare "github.com/DataDog/datadog-agent/pkg/flare" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/input" ) @@ -60,9 +62,20 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { Long: ``, RunE: func(cmd *cobra.Command, args []string) error { cliParams.args = args + config := config.NewAgentParamsWithSecrets(globalParams.ConfFilePath, + config.WithSecurityAgentConfigFilePaths([]string{ + path.Join(common.DefaultConfPath, "security-agent.yaml"), + }), + config.WithConfigLoadSecurityAgent(true), + config.WithSysProbeConfFilePath(globalParams.SysProbeConfFilePath), + config.WithConfigLoadSysProbe(true)) + return fxutil.OneShot(makeFlare, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, true, core.WithLogForOneShot("CORE", "off", false))), + fx.Supply(core.BundleParams{ + ConfigParams: config, + LogParams: log.LogForOneShot("CORE", "off", false), + }), core.Bundle, ) }, @@ -81,10 +94,10 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { return []*cobra.Command{flareCmd} } -type profileCollector func(prefix, debugURL string, cpusec int, target *flare.ProfileData) error -type agentProfileCollector func(cliParams *cliParams, pdata *flare.ProfileData, c profileCollector) error +type profileCollector func(prefix, debugURL string, cpusec int, target *pkgflare.ProfileData) error +type agentProfileCollector func(cliParams *cliParams, pdata *pkgflare.ProfileData, c profileCollector) error -func readProfileData(cliParams *cliParams, pdata *flare.ProfileData, seconds int, collector profileCollector) error { +func readProfileData(cliParams *cliParams, pdata *pkgflare.ProfileData, seconds int, collector profileCollector) error { prevSettings, err := setRuntimeProfilingSettings(cliParams) if err != nil { return err @@ -128,10 +141,15 @@ func readProfileData(cliParams *cliParams, pdata *flare.ProfileData, seconds int }) } - if pkgconfig.Datadog.GetBool("runtime_security_config.enabled") || pkgconfig.Datadog.GetBool("compliance_config.enabled") { + agentCollectors = append(agentCollectors, agentCollector{ + name: "security-agent", + fn: serviceProfileCollector("security-agent", "security_agent.expvar_port", seconds), + }) + + if debugPort := pkgconfig.Datadog.GetInt("system_probe_config.debug_port"); debugPort > 0 { agentCollectors = append(agentCollectors, agentCollector{ - name: "security-agent", - fn: serviceProfileCollector("security-agent", "security_agent.expvar_port", seconds), + name: "system-probe", + fn: serviceProfileCollector("system-probe", "system_probe_config.debug_port", seconds), }) } @@ -146,16 +164,16 @@ func readProfileData(cliParams *cliParams, pdata *flare.ProfileData, seconds int } func serviceProfileCollector(service string, portConfig string, seconds int) agentProfileCollector { - return func(cliParams *cliParams, pdata *flare.ProfileData, collector profileCollector) error { + return func(cliParams *cliParams, pdata *pkgflare.ProfileData, collector profileCollector) error { fmt.Fprintln(color.Output, color.BlueString("Getting a %ds profile snapshot from %s.", seconds, service)) pprofURL := fmt.Sprintf("http://127.0.0.1:%d/debug/pprof", pkgconfig.Datadog.GetInt(portConfig)) return collector(service, pprofURL, seconds, pdata) } } -func makeFlare(log log.Component, config config.Component, cliParams *cliParams) error { +func makeFlare(flare flare.Component, log log.Component, config config.Component, cliParams *cliParams) error { var ( - profile flare.ProfileData + profile pkgflare.ProfileData err error ) @@ -166,7 +184,6 @@ func makeFlare(log log.Component, config config.Component, cliParams *cliParams) customerEmail := cliParams.customerEmail if customerEmail == "" { - var err error customerEmail, err = input.AskForEmail() if err != nil { fmt.Println("Error reading email, please retry or contact support") @@ -185,7 +202,7 @@ func makeFlare(log log.Component, config config.Component, cliParams *cliParams) logFiles := []string{logFile, jmxLogFile} if cliParams.profiling >= 30 { - if err := readProfileData(cliParams, &profile, cliParams.profiling, flare.CreatePerformanceProfile); err != nil { + if err := readProfileData(cliParams, &profile, cliParams.profiling, pkgflare.CreatePerformanceProfile); err != nil { fmt.Fprintln(color.Output, color.YellowString(fmt.Sprintf("Could not collect performance profile data: %s", err))) } } else if cliParams.profiling != -1 { @@ -195,9 +212,9 @@ func makeFlare(log log.Component, config config.Component, cliParams *cliParams) var filePath string if cliParams.forceLocal { - filePath, err = createArchive(logFiles, profile, nil) + filePath, err = createArchive(flare, logFiles, profile, nil) } else { - filePath, err = requestArchive(logFiles, profile) + filePath, err = requestArchive(flare, logFiles, profile) } if err != nil { @@ -219,7 +236,7 @@ func makeFlare(log log.Component, config config.Component, cliParams *cliParams) } } - response, e := flare.SendFlare(filePath, caseID, customerEmail) + response, e := pkgflare.SendFlare(filePath, caseID, customerEmail) fmt.Println(response) if e != nil { return e @@ -227,13 +244,13 @@ func makeFlare(log log.Component, config config.Component, cliParams *cliParams) return nil } -func requestArchive(logFiles []string, pdata flare.ProfileData) (string, error) { +func requestArchive(flare flare.Component, logFiles []string, pdata pkgflare.ProfileData) (string, error) { fmt.Fprintln(color.Output, color.BlueString("Asking the agent to build the flare archive.")) c := util.GetClient(false) // FIX: get certificates right then make this true ipcAddress, err := pkgconfig.GetIPCAddress() if err != nil { fmt.Fprintln(color.Output, color.RedString(fmt.Sprintf("Error getting IPC address for the agent: %s", err))) - return createArchive(logFiles, pdata, err) + return createArchive(flare, logFiles, pdata, err) } urlstr := fmt.Sprintf("https://%v:%v/agent/flare", ipcAddress, pkgconfig.Datadog.GetInt("cmd_port")) @@ -241,7 +258,7 @@ func requestArchive(logFiles []string, pdata flare.ProfileData) (string, error) // Set session token if err = util.SetAuthToken(); err != nil { fmt.Fprintln(color.Output, color.RedString(fmt.Sprintf("Error: %s", err))) - return createArchive(logFiles, pdata, err) + return createArchive(flare, logFiles, pdata, err) } p, err := json.Marshal(pdata) @@ -259,15 +276,15 @@ func requestArchive(logFiles []string, pdata flare.ProfileData) (string, error) fmt.Fprintln(color.Output, color.RedString("The agent was unable to make the flare. (is it running?)")) err = fmt.Errorf("Error getting flare from running agent: %w", err) } - return createArchive(logFiles, pdata, err) + return createArchive(flare, logFiles, pdata, err) } return string(r), nil } -func createArchive(logFiles []string, pdata flare.ProfileData, ipcError error) (string, error) { +func createArchive(flare flare.Component, logFiles []string, pdata pkgflare.ProfileData, ipcError error) (string, error) { fmt.Fprintln(color.Output, color.YellowString("Initiating flare locally.")) - filePath, err := flare.CreateArchive(true, common.GetDistPath(), common.PyChecksPath, logFiles, pdata, ipcError) + filePath, err := flare.Create(true, common.GetDistPath(), common.PyChecksPath, logFiles, pdata, ipcError) if err != nil { fmt.Printf("The flare zipfile failed to be created: %s\n", err) return "", err diff --git a/cmd/agent/subcommands/flare/command_test.go b/cmd/agent/subcommands/flare/command_test.go index a28db667e136e..2f5170eefc5c3 100644 --- a/cmd/agent/subcommands/flare/command_test.go +++ b/cmd/agent/subcommands/flare/command_test.go @@ -46,6 +46,7 @@ func TestReadProfileData(t *testing.T) { m.On("CreatePerformanceProfile", "core", "http://127.0.0.1:1001/debug/pprof", 30, pdata).Return(nil) m.On("CreatePerformanceProfile", "trace", "http://127.0.0.1:1002/debug/pprof", 9, pdata).Return(nil) m.On("CreatePerformanceProfile", "process", "http://127.0.0.1:1003/debug/pprof", 30, pdata).Return(nil) + m.On("CreatePerformanceProfile", "security-agent", "http://127.0.0.1:5011/debug/pprof", 30, pdata).Return(nil) err := readProfileData(&cliParams{}, pdata, 30, m.CreatePerformanceProfile) assert.NoError(t, err) @@ -64,6 +65,7 @@ func TestReadProfileDataNoTraceAgent(t *testing.T) { m.On("CreatePerformanceProfile", "core", "http://127.0.0.1:1001/debug/pprof", 30, pdata).Return(nil) m.On("CreatePerformanceProfile", "process", "http://127.0.0.1:1003/debug/pprof", 30, pdata).Return(nil) + m.On("CreatePerformanceProfile", "security-agent", "http://127.0.0.1:5011/debug/pprof", 30, pdata).Return(nil) err := readProfileData(&cliParams{}, pdata, 30, m.CreatePerformanceProfile) assert.NoError(t, err) @@ -85,6 +87,7 @@ func TestReadProfileDataErrors(t *testing.T) { m.On("CreatePerformanceProfile", "core", "http://127.0.0.1:1001/debug/pprof", 30, pdata).Return(errors.New("can't connect to core agent")) m.On("CreatePerformanceProfile", "trace", "http://127.0.0.1:1002/debug/pprof", 9, pdata).Return(errors.New("can't connect to trace agent")) m.On("CreatePerformanceProfile", "process", "http://127.0.0.1:1003/debug/pprof", 30, pdata).Return(nil) + m.On("CreatePerformanceProfile", "security-agent", "http://127.0.0.1:5011/debug/pprof", 30, pdata).Return(nil) err := readProfileData(&cliParams{}, pdata, 30, m.CreatePerformanceProfile) @@ -102,6 +105,6 @@ func TestCommand(t *testing.T) { makeFlare, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"1234"}, cliParams.args) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/hostname/command.go b/cmd/agent/subcommands/hostname/command.go index 9e7c2516a03e3..0ba3fe47a187f 100644 --- a/cmd/agent/subcommands/hostname/command.go +++ b/cmd/agent/subcommands/hostname/command.go @@ -38,7 +38,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(getHostname, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", false))), // never output anything but hostname + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", false)}), // never output anything but hostname core.Bundle, ) }, diff --git a/cmd/agent/subcommands/hostname/command_test.go b/cmd/agent/subcommands/hostname/command_test.go index 052dfdbbf306d..ae6239afc8daf 100644 --- a/cmd/agent/subcommands/hostname/command_test.go +++ b/cmd/agent/subcommands/hostname/command_test.go @@ -21,6 +21,6 @@ func TestCommand(t *testing.T) { []string{"hostname"}, getHostname, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/integrations/command.go b/cmd/agent/subcommands/integrations/command.go index e7bfce33efc0d..4ef9dac4f0669 100644 --- a/cmd/agent/subcommands/integrations/command.go +++ b/cmd/agent/subcommands/integrations/command.go @@ -103,7 +103,8 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { runOneShot := func(callback interface{}) error { return fxutil.OneShot(callback, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithConfigMissingOK(true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath, config.WithConfigMissingOK(true))}), core.Bundle, ) } diff --git a/cmd/agent/subcommands/integrations/command_test.go b/cmd/agent/subcommands/integrations/command_test.go index b5aba7224d75b..06158bf7557ca 100644 --- a/cmd/agent/subcommands/integrations/command_test.go +++ b/cmd/agent/subcommands/integrations/command_test.go @@ -26,8 +26,8 @@ func TestInstallCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"foo==1.0"}, cliParams.args) require.Equal(t, 1, cliParams.verbose) - require.Equal(t, false, coreParams.ConfigLoadSecrets) - require.Equal(t, true, coreParams.ConfigMissingOK) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) + require.Equal(t, true, coreParams.ConfigMissingOK()) }) } @@ -39,8 +39,8 @@ func TestRemoveCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"foo"}, cliParams.args) require.Equal(t, 0, cliParams.verbose) - require.Equal(t, false, coreParams.ConfigLoadSecrets) - require.Equal(t, true, coreParams.ConfigMissingOK) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) + require.Equal(t, true, coreParams.ConfigMissingOK()) }) } @@ -52,8 +52,8 @@ func TestFreezeCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{}, cliParams.args) require.Equal(t, 0, cliParams.verbose) - require.Equal(t, false, coreParams.ConfigLoadSecrets) - require.Equal(t, true, coreParams.ConfigMissingOK) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) + require.Equal(t, true, coreParams.ConfigMissingOK()) }) } @@ -65,7 +65,7 @@ func TestShowCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"foo"}, cliParams.args) require.Equal(t, 0, cliParams.verbose) - require.Equal(t, false, coreParams.ConfigLoadSecrets) - require.Equal(t, true, coreParams.ConfigMissingOK) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) + require.Equal(t, true, coreParams.ConfigMissingOK()) }) } diff --git a/cmd/agent/subcommands/jmx/command.go b/cmd/agent/subcommands/jmx/command.go index e4f52e176bcbf..7db96d2964307 100644 --- a/cmd/agent/subcommands/jmx/command.go +++ b/cmd/agent/subcommands/jmx/command.go @@ -83,11 +83,11 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { if cliParams.jmxLogLevel == "" { cliParams.jmxLogLevel = "debug" } - - params := core.CreateAgentBundleParams(globalParams.ConfFilePath, true, core.WithLogForOneShot("CORE", cliParams.jmxLogLevel, false)) - + params := core.BundleParams{ + ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", cliParams.jmxLogLevel, false)} if cliParams.logFile != "" { - params = params.LogToFile(cliParams.logFile) + params.LogParams.LogToFile(cliParams.logFile) } return fxutil.OneShot(callback, diff --git a/cmd/agent/subcommands/jmx/command_test.go b/cmd/agent/subcommands/jmx/command_test.go index 68f802aa94f6b..d68f3f0b79bed 100644 --- a/cmd/agent/subcommands/jmx/command_test.go +++ b/cmd/agent/subcommands/jmx/command_test.go @@ -34,8 +34,8 @@ func TestCollectCommand(t *testing.T) { require.Equal(t, "debug", coreParams.LogLevelFn(nil)) require.Equal(t, "", cliParams.logFile) require.Equal(t, "", coreParams.LogFileFn(nil)) - require.Equal(t, "CORE", coreParams.LoggerName) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, "CORE", coreParams.LoggerName()) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) }) @@ -50,8 +50,8 @@ func TestCollectCommand(t *testing.T) { require.Equal(t, "info", coreParams.LogLevelFn(nil)) require.Equal(t, "", cliParams.logFile) require.Equal(t, "", coreParams.LogFileFn(nil)) - require.Equal(t, "CORE", coreParams.LoggerName) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, "CORE", coreParams.LoggerName()) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) }) @@ -66,8 +66,8 @@ func TestCollectCommand(t *testing.T) { require.Equal(t, "debug", coreParams.LogLevelFn(nil)) // overrides --log-level require.True(t, strings.HasPrefix(cliParams.logFile, common.DefaultJMXFlareDirectory)) require.Equal(t, cliParams.logFile, coreParams.LogFileFn(nil)) - require.Equal(t, "CORE", coreParams.LoggerName) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, "CORE", coreParams.LoggerName()) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) }) } diff --git a/cmd/agent/subcommands/launchgui/command.go b/cmd/agent/subcommands/launchgui/command.go index 6975f15a5179b..3f4dd2d1929de 100644 --- a/cmd/agent/subcommands/launchgui/command.go +++ b/cmd/agent/subcommands/launchgui/command.go @@ -39,7 +39,8 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(launchGui, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/launchgui/command_test.go b/cmd/agent/subcommands/launchgui/command_test.go index f4a20b9d1dba1..5f5ad2d03e597 100644 --- a/cmd/agent/subcommands/launchgui/command_test.go +++ b/cmd/agent/subcommands/launchgui/command_test.go @@ -21,6 +21,6 @@ func TestCommand(t *testing.T) { []string{"launch-gui"}, launchGui, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/remoteconfig/command.go b/cmd/agent/subcommands/remoteconfig/command.go index e3fbf8fa012f7..1feb5c376da53 100644 --- a/cmd/agent/subcommands/remoteconfig/command.go +++ b/cmd/agent/subcommands/remoteconfig/command.go @@ -44,7 +44,8 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(state, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/remoteconfig/command_test.go b/cmd/agent/subcommands/remoteconfig/command_test.go index 64fe956d6a95f..a79dc986cd372 100644 --- a/cmd/agent/subcommands/remoteconfig/command_test.go +++ b/cmd/agent/subcommands/remoteconfig/command_test.go @@ -21,6 +21,6 @@ func TestCommand(t *testing.T) { []string{"remote-config"}, state, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/run/command.go b/cmd/agent/subcommands/run/command.go index 62fe6c4a52aa2..cab66563f728b 100644 --- a/cmd/agent/subcommands/run/command.go +++ b/cmd/agent/subcommands/run/command.go @@ -34,6 +34,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/manager" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/api/healthprobe" @@ -115,7 +116,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { // this will use `fxutil.Run` instead of `fxutil.OneShot`. return fxutil.OneShot(run, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, true).LogForDaemon("CORE", "log_file", common.DefaultLogFile)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath), + LogParams: log.LogForDaemon("CORE", "log_file", common.DefaultLogFile)}), core.Bundle, ) } @@ -141,7 +144,7 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { // run starts the main loop. // // This is exported because it also used from the deprecated `agent start` command. -func run(log log.Component, config config.Component, cliParams *cliParams) error { +func run(log log.Component, config config.Component, flare flare.Component, cliParams *cliParams) error { defer func() { stopAgent(cliParams) }() @@ -182,7 +185,7 @@ func run(log log.Component, config config.Component, cliParams *cliParams) error } }() - if err := startAgent(cliParams); err != nil { + if err := startAgent(cliParams, flare); err != nil { return err } @@ -195,17 +198,19 @@ func run(log log.Component, config config.Component, cliParams *cliParams) error // StartAgentWithDefaults is a temporary way for other packages to use startAgent. func StartAgentWithDefaults() error { // run startAgent in an app, so that the log and config components get initialized - return fxutil.OneShot(func(log log.Component, config config.Component) error { - return startAgent(&cliParams{GlobalParams: &command.GlobalParams{}}) + return fxutil.OneShot(func(log log.Component, config config.Component, flare flare.Component) error { + return startAgent(&cliParams{GlobalParams: &command.GlobalParams{}}, flare) }, // no config file path specification in this situation - fx.Supply(core.CreateAgentBundleParams("", true).LogForDaemon("CORE", "log_file", common.DefaultLogFile)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithSecrets(""), + LogParams: log.LogForDaemon("CORE", "log_file", common.DefaultLogFile)}), core.Bundle, ) } // startAgent Initializes the agent process -func startAgent(cliParams *cliParams) error { +func startAgent(cliParams *cliParams, flare flare.Component) error { var err error // Main context passed to components @@ -336,7 +341,7 @@ func startAgent(cliParams *cliParams) error { } // start the cmd HTTP server - if err = api.StartServer(configService); err != nil { + if err = api.StartServer(configService, flare); err != nil { return pkglog.Errorf("Error while starting api server, exiting: %v", err) } diff --git a/cmd/agent/subcommands/run/command_test.go b/cmd/agent/subcommands/run/command_test.go index a29b1a14d59e9..eac5a71790d31 100644 --- a/cmd/agent/subcommands/run/command_test.go +++ b/cmd/agent/subcommands/run/command_test.go @@ -21,7 +21,7 @@ func TestCommand(t *testing.T) { []string{"run"}, run, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) } @@ -32,6 +32,6 @@ func TestCommandPidfile(t *testing.T) { run, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, "/pid/file", cliParams.pidfilePath) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/secret/command.go b/cmd/agent/subcommands/secret/command.go index b0f619b527e1e..a4792a90d5ccc 100644 --- a/cmd/agent/subcommands/secret/command.go +++ b/cmd/agent/subcommands/secret/command.go @@ -41,7 +41,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(secret, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/secret/command_test.go b/cmd/agent/subcommands/secret/command_test.go index 2cc226e255953..f329036d17d86 100644 --- a/cmd/agent/subcommands/secret/command_test.go +++ b/cmd/agent/subcommands/secret/command_test.go @@ -21,6 +21,6 @@ func TestCommand(t *testing.T) { []string{"secret"}, secret, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/snmp/command.go b/cmd/agent/subcommands/snmp/command.go index d352fc8d6ed92..d3e2a70e5c3d4 100644 --- a/cmd/agent/subcommands/snmp/command.go +++ b/cmd/agent/subcommands/snmp/command.go @@ -21,6 +21,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" utilFunc "github.com/DataDog/datadog-agent/pkg/snmp/gosnmplib" parse "github.com/DataDog/datadog-agent/pkg/snmp/snmpparse" "github.com/DataDog/datadog-agent/pkg/util/fxutil" @@ -92,7 +93,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { cliParams.cmd = cmd return fxutil.OneShot(snmpwalk, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, true, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/status/command.go b/cmd/agent/subcommands/status/command.go index 53a301c2c1b4b..2c24f72178a3b 100644 --- a/cmd/agent/subcommands/status/command.go +++ b/cmd/agent/subcommands/status/command.go @@ -62,7 +62,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { return fxutil.OneShot(statusCmd, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithConfigLoadSysProbe(true), core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath, config.WithConfigLoadSysProbe(true)), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, @@ -86,7 +88,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { return fxutil.OneShot(componentStatusCmd, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/status/command_test.go b/cmd/agent/subcommands/status/command_test.go index 44b49e3cef4af..aaa88530731c2 100644 --- a/cmd/agent/subcommands/status/command_test.go +++ b/cmd/agent/subcommands/status/command_test.go @@ -25,8 +25,8 @@ func TestStatusCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{}, cliParams.args) require.Equal(t, true, cliParams.jsonStatus) - require.Equal(t, false, coreParams.ConfigLoadSecrets) - require.Equal(t, true, coreParams.ConfigLoadSysProbe) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) + require.Equal(t, true, coreParams.ConfigLoadSysProbe()) }) } @@ -39,7 +39,7 @@ func TestComponentStatusCommand(t *testing.T) { func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"abc"}, cliParams.args) require.Equal(t, false, cliParams.jsonStatus) - require.Equal(t, false, coreParams.ConfigLoadSecrets) - require.Equal(t, false, coreParams.ConfigLoadSysProbe) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) + require.Equal(t, false, coreParams.ConfigLoadSysProbe()) }) } diff --git a/cmd/agent/subcommands/stop/command.go b/cmd/agent/subcommands/stop/command.go index 286a4f752ff0a..2920f3ba678d5 100644 --- a/cmd/agent/subcommands/stop/command.go +++ b/cmd/agent/subcommands/stop/command.go @@ -19,6 +19,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/api/util" pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/fxutil" @@ -41,7 +42,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(stop, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/stop/command_test.go b/cmd/agent/subcommands/stop/command_test.go index 7621b224a7814..be33f9a037db5 100644 --- a/cmd/agent/subcommands/stop/command_test.go +++ b/cmd/agent/subcommands/stop/command_test.go @@ -24,6 +24,6 @@ func TestCommand(t *testing.T) { []string{"stop"}, stop, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/streamlogs/command.go b/cmd/agent/subcommands/streamlogs/command.go index 8afe6fa5a030d..2e9d867305db6 100644 --- a/cmd/agent/subcommands/streamlogs/command.go +++ b/cmd/agent/subcommands/streamlogs/command.go @@ -45,7 +45,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(streamLogs, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/streamlogs/command_test.go b/cmd/agent/subcommands/streamlogs/command_test.go index a233e81a2ac2b..58c5c599c0d5f 100644 --- a/cmd/agent/subcommands/streamlogs/command_test.go +++ b/cmd/agent/subcommands/streamlogs/command_test.go @@ -21,7 +21,7 @@ func TestCommand(t *testing.T) { []string{"stream-logs", "--type", "foo"}, streamLogs, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) require.Equal(t, "foo", cliParams.filters.Type) }) } diff --git a/cmd/agent/subcommands/taggerlist/command.go b/cmd/agent/subcommands/taggerlist/command.go index 9f154631c08be..275ae1594f181 100644 --- a/cmd/agent/subcommands/taggerlist/command.go +++ b/cmd/agent/subcommands/taggerlist/command.go @@ -41,7 +41,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(taggerList, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/taggerlist/command_test.go b/cmd/agent/subcommands/taggerlist/command_test.go index c4dee3506cb88..47a8258379e89 100644 --- a/cmd/agent/subcommands/taggerlist/command_test.go +++ b/cmd/agent/subcommands/taggerlist/command_test.go @@ -21,6 +21,6 @@ func TestCommand(t *testing.T) { []string{"tagger-list"}, taggerList, func(cliParams *cliParams, coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/agent/subcommands/workloadlist/command.go b/cmd/agent/subcommands/workloadlist/command.go index c580f2cc31b0a..58f7639d76439 100644 --- a/cmd/agent/subcommands/workloadlist/command.go +++ b/cmd/agent/subcommands/workloadlist/command.go @@ -44,7 +44,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(workloadList, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithLogForOneShot("CORE", "off", true))), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, diff --git a/cmd/agent/subcommands/workloadlist/command_test.go b/cmd/agent/subcommands/workloadlist/command_test.go index ba10ac4fc3184..3671c5e6e2a3d 100644 --- a/cmd/agent/subcommands/workloadlist/command_test.go +++ b/cmd/agent/subcommands/workloadlist/command_test.go @@ -22,6 +22,6 @@ func TestCommand(t *testing.T) { workloadList, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, true, cliParams.verboseList) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/cmd/cluster-agent/app/app.go b/cmd/cluster-agent/app/app.go index 9d108c3f591c6..b9e2dccc63b04 100644 --- a/cmd/cluster-agent/app/app.go +++ b/cmd/cluster-agent/app/app.go @@ -16,6 +16,7 @@ import ( "os/signal" "sync" "syscall" + "time" "github.com/fatih/color" "github.com/gorilla/mux" @@ -36,9 +37,13 @@ import ( "github.com/DataDog/datadog-agent/pkg/clusteragent" admissionpkg "github.com/DataDog/datadog-agent/pkg/clusteragent/admission" "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/mutate" + admissionpatch "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/patch" "github.com/DataDog/datadog-agent/pkg/clusteragent/clusterchecks" "github.com/DataDog/datadog-agent/pkg/collector" "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/remote" + "github.com/DataDog/datadog-agent/pkg/config/remote/data" + remoteconfig "github.com/DataDog/datadog-agent/pkg/config/remote/service" "github.com/DataDog/datadog-agent/pkg/config/resolver" "github.com/DataDog/datadog-agent/pkg/forwarder" "github.com/DataDog/datadog-agent/pkg/serializer" @@ -194,6 +199,17 @@ func start(cmd *cobra.Command, args []string) error { log.Debugf("Health check listening on port %d", healthPort) } + // Initialize remote configuration + if config.Datadog.GetBool("remote_configuration.enabled") { + rcClient, err := initializeRemoteConfig(mainCtx) + if err != nil { + log.Errorf("Failed to start remote-configuration: %v", err) + } else { + rcClient.Start() + defer rcClient.Close() + } + } + // Starting server early to ease investigations if err = api.StartServer(); err != nil { return log.Errorf("Error while starting agent API, exiting: %v", err) @@ -249,7 +265,7 @@ func start(cmd *cobra.Command, args []string) error { WPAClient: apiCl.WPAClient, WPAInformerFactory: apiCl.WPAInformerFactory, DDClient: apiCl.DDClient, - DDInformerFactory: apiCl.DDInformerFactory, + DDInformerFactory: apiCl.DynamicInformerFactory, Client: apiCl.Cl, IsLeaderFunc: le.IsLeader, EventRecorder: eventRecorder, @@ -262,9 +278,10 @@ func start(cmd *cobra.Command, args []string) error { } } + clusterName := clustername.GetClusterName(context.TODO(), hname) if config.Datadog.GetBool("orchestrator_explorer.enabled") { // Generate and persist a cluster ID - // this must be a UUID, and ideally be stable for the lifetime of a cluster + // this must be a UUID, and ideally be stable for the lifetime of a cluster, // so we store it in a configmap that we try and read before generating a new one. coreClient := apiCl.Cl.CoreV1().(*corev1.CoreV1Client) _, err = apicommon.GetOrCreateClusterID(coreClient) @@ -272,7 +289,6 @@ func start(cmd *cobra.Command, args []string) error { log.Errorf("Failed to generate or retrieve the cluster ID") } - clusterName := clustername.GetClusterName(context.TODO(), hname) if clusterName == "" { log.Warn("Failed to auto-detect a Kubernetes cluster name. We recommend you set it manually via the cluster_name config option") } @@ -335,6 +351,17 @@ func start(cmd *cobra.Command, args []string) error { } if config.Datadog.GetBool("admission_controller.enabled") { + if config.Datadog.GetBool("admission_controller.auto_instrumentation.patcher.enabled") { + patchCtx := admissionpatch.ControllerContext{ + IsLeaderFunc: le.IsLeader, + Client: apiCl.Cl, + StopCh: stopCh, + } + admissionpatch.StartControllers(patchCtx, clusterName) + } else { + log.Info("Auto instrumentation patcher is disabled") + } + admissionCtx := admissionpkg.ControllerContext{ IsLeaderFunc: le.IsLeader, LeaderSubscribeFunc: le.Subscribe, @@ -416,3 +443,21 @@ func setupClusterCheck(ctx context.Context) (*clusterchecks.Handler, error) { log.Info("Started cluster check Autodiscovery") return handler, nil } + +func initializeRemoteConfig(ctx context.Context) (*remote.Client, error) { + configService, err := remoteconfig.NewService() + if err != nil { + return nil, fmt.Errorf("unable to create remote-config service: %w", err) + } + + if err := configService.Start(ctx); err != nil { + return nil, fmt.Errorf("unable to start remote-config service: %w", err) + } + + rcClient, err := remote.NewClient("cluster-agent", configService, version.AgentVersion, []data.Product{}, time.Second*5) + if err != nil { + return nil, fmt.Errorf("unable to create local remote-config client: %w", err) + } + + return rcClient, nil +} diff --git a/cmd/cluster-agent/app/compliance_cmd.go b/cmd/cluster-agent/app/compliance_cmd.go index 78d811b0d241a..397abf7abbf73 100644 --- a/cmd/cluster-agent/app/compliance_cmd.go +++ b/cmd/cluster-agent/app/compliance_cmd.go @@ -13,6 +13,8 @@ import ( "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/check" "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" ) var ( @@ -24,9 +26,13 @@ var ( func init() { bundleParams := core.BundleParams{ - ConfFilePath: confPath, - ConfigName: "datadog-cluster", - }.LogForOneShot(string(loggerName), "off", true) + ConfigParams: config.NewParams( + "", + config.WithConfFilePath(confPath), + config.WithConfigName("datadog-cluster"), + ), + LogParams: log.LogForOneShot(string(loggerName), "off", true), + } complianceCmd.AddCommand(check.Commands(bundleParams)...) ClusterAgentCmd.AddCommand(complianceCmd) diff --git a/cmd/cluster-agent/commands/check/check.go b/cmd/cluster-agent/commands/check/check.go index b9ccbb2571a23..166cfced98778 100644 --- a/cmd/cluster-agent/commands/check/check.go +++ b/cmd/cluster-agent/commands/check/check.go @@ -122,11 +122,16 @@ func Check(loggerName config.LoggerName, confFilePath *string, flagNoColor *bool } previousIntegrationTracing := false + previousIntegrationTracingExhaustive := false if generateIntegrationTraces { if config.Datadog.IsSet("integration_tracing") { previousIntegrationTracing = config.Datadog.GetBool("integration_tracing") } + if config.Datadog.IsSet("integration_tracing_exhaustive") { + previousIntegrationTracingExhaustive = config.Datadog.GetBool("integration_tracing_exhaustive") + } config.Datadog.Set("integration_tracing", true) + config.Datadog.Set("integration_tracing_exhaustive", true) } if len(args) != 0 { @@ -448,6 +453,7 @@ func Check(loggerName config.LoggerName, confFilePath *string, flagNoColor *bool if generateIntegrationTraces { config.Datadog.Set("integration_tracing", previousIntegrationTracing) + config.Datadog.Set("integration_tracing_exhaustive", previousIntegrationTracingExhaustive) } return nil diff --git a/cmd/dogstatsd/command/command.go b/cmd/dogstatsd/command/command.go new file mode 100644 index 0000000000000..8b2a6cb7d89af --- /dev/null +++ b/cmd/dogstatsd/command/command.go @@ -0,0 +1,42 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package command + +import ( + _ "expvar" + _ "net/http/pprof" + + "github.com/spf13/cobra" + + "github.com/DataDog/datadog-agent/cmd/dogstatsd/subcommands/start" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/version" + + // register all workloadmeta collectors + _ "github.com/DataDog/datadog-agent/pkg/workloadmeta/collectors" +) + +func MakeRootCommand(defaultLogFile string) *cobra.Command { + // dogstatsdCmd is the root command + dogstatsdCmd := &cobra.Command{ + Use: "dogstatsd [command]", + Short: "Datadog dogstatsd at your service.", + Long: ` +DogStatsD accepts custom application metrics points over UDP, and then +periodically aggregates and forwards them to Datadog, where they can be graphed +on dashboards. DogStatsD implements the StatsD protocol, along with a few +extensions for special Datadog features.`, + } + + for _, cmd := range makeCommands(defaultLogFile) { + dogstatsdCmd.AddCommand(cmd) + } + + return dogstatsdCmd +} + +func makeCommands(defaultLogFile string) []*cobra.Command { + return []*cobra.Command{start.MakeCommand(defaultLogFile), version.MakeCommand("DogStatsD")} +} diff --git a/pkg/process/config/config_darwin.go b/cmd/dogstatsd/generate.go similarity index 55% rename from pkg/process/config/config_darwin.go rename to cmd/dogstatsd/generate.go index 1063d68ff41be..80979c2bb8f7b 100644 --- a/pkg/process/config/config_darwin.go +++ b/cmd/dogstatsd/generate.go @@ -3,7 +3,6 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package config +//go:generate go run ../../pkg/config/render_config.go dogstatsd ../../pkg/config/config_template.yaml ./dist/dogstatsd.yaml -// defaultSystemProbeAddress is the default unix socket path to be used for connecting to the system probe -const defaultSystemProbeAddress = "/opt/datadog-agent/run/sysprobe.sock" +package main diff --git a/cmd/dogstatsd/main_nix.go b/cmd/dogstatsd/main_nix.go index 0ac39b397146b..ae6e195ac8e4e 100644 --- a/cmd/dogstatsd/main_nix.go +++ b/cmd/dogstatsd/main_nix.go @@ -12,6 +12,7 @@ import ( _ "net/http/pprof" "os" + "github.com/DataDog/datadog-agent/cmd/dogstatsd/command" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -21,7 +22,7 @@ const defaultLogFile = "/var/log/datadog/dogstatsd.log" func main() { flavor.SetFlavor(flavor.Dogstatsd) - if err := MakeRootCommand().Execute(); err != nil { + if err := command.MakeRootCommand(defaultLogFile).Execute(); err != nil { log.Error(err) os.Exit(-1) } diff --git a/cmd/dogstatsd/main_windows.go b/cmd/dogstatsd/main_windows.go index 4c2aee7910e7f..6bc7c732a3fd6 100644 --- a/cmd/dogstatsd/main_windows.go +++ b/cmd/dogstatsd/main_windows.go @@ -13,6 +13,8 @@ import ( "path/filepath" "time" + "github.com/DataDog/datadog-agent/cmd/dogstatsd/command" + "github.com/DataDog/datadog-agent/cmd/dogstatsd/subcommands/start" "github.com/DataDog/datadog-agent/comp/core/config" pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/flavor" @@ -62,7 +64,7 @@ func main() { } defer log.Flush() - if err = MakeRootCommand().Execute(); err != nil { + if err = command.MakeRootCommand(defaultLogFile).Execute(); err != nil { log.Error(err) os.Exit(-1) } @@ -78,17 +80,21 @@ func (m *myservice) Execute(args []string, r <-chan svc.ChangeRequest, changes c log.Infof("Service control function") ctx, cancel := context.WithCancel(context.Background()) - cliParams := &cliParams{} - err := runDogstatsdFct( + cliParams := &start.CLIParams{} + + err := start.RunDogstatsdFct( cliParams, DefaultConfPath, - func(config config.Component) error { return runAgent(ctx, cliParams, config) }) + defaultLogFile, + func(config config.Component, params *start.Params) error { + return start.RunAgent(ctx, cliParams, config, params) + }) if err != nil { log.Errorf("Failed to start agent %v", err) elog.Error(0xc0000008, err.Error()) errno = 1 // indicates non-successful return from handler. - stopAgent(cancel) + start.StopAgent(cancel) changes <- svc.Status{State: svc.Stopped} return } @@ -125,7 +131,7 @@ loop: elog.Info(0x40000006, ServiceName) log.Infof("Initiating service shutdown") changes <- svc.Status{State: svc.StopPending} - stopAgent(cancel) + start.StopAgent(cancel) changes <- svc.Status{State: svc.Stopped} return } diff --git a/cmd/dogstatsd/main.go b/cmd/dogstatsd/subcommands/start/command.go similarity index 73% rename from cmd/dogstatsd/main.go rename to cmd/dogstatsd/subcommands/start/command.go index 682d702716b9e..3e638c7305c85 100644 --- a/cmd/dogstatsd/main.go +++ b/cmd/dogstatsd/subcommands/start/command.go @@ -3,25 +3,16 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:generate go run ../../pkg/config/render_config.go dogstatsd ../../pkg/config/config_template.yaml ./dist/dogstatsd.yaml - -package main +package start import ( "context" - _ "expvar" "fmt" "net/http" - _ "net/http/pprof" "os" "os/signal" - "runtime" "syscall" - "github.com/spf13/cobra" - "go.uber.org/fx" - - "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/api/healthprobe" @@ -29,7 +20,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/dogstatsd" "github.com/DataDog/datadog-agent/pkg/forwarder" "github.com/DataDog/datadog-agent/pkg/metadata" - "github.com/DataDog/datadog-agent/pkg/serializer" "github.com/DataDog/datadog-agent/pkg/status/health" "github.com/DataDog/datadog-agent/pkg/tagger" "github.com/DataDog/datadog-agent/pkg/tagger/local" @@ -39,9 +29,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" "github.com/DataDog/datadog-agent/pkg/workloadmeta" - - // register all workloadmeta collectors - _ "github.com/DataDog/datadog-agent/pkg/workloadmeta/collectors" + "github.com/spf13/cobra" + "go.uber.org/fx" ) var ( @@ -50,7 +39,7 @@ var ( dogstatsdStats *http.Server ) -type cliParams struct { +type CLIParams struct { confPath string } @@ -59,81 +48,59 @@ const ( loggerName pkgconfig.LoggerName = "DSD" ) -func MakeRootCommand() *cobra.Command { - // dogstatsdCmd is the root command - dogstatsdCmd := &cobra.Command{ - Use: "dogstatsd [command]", - Short: "Datadog dogstatsd at your service.", - Long: ` -DogStatsD accepts custom application metrics points over UDP, and then -periodically aggregates and forwards them to Datadog, where they can be graphed -on dashboards. DogStatsD implements the StatsD protocol, along with a few -extensions for special Datadog features.`, - } - - for _, cmd := range makeCommands() { - dogstatsdCmd.AddCommand(cmd) - } - - return dogstatsdCmd -} - -func makeCommands() []*cobra.Command { - cliParams := &cliParams{} +// MakeCommand returns the start subcommand for the 'dogstatsd' command. +func MakeCommand(defaultLogFile string) *cobra.Command { + cliParams := &CLIParams{} startCmd := &cobra.Command{ Use: "start", Short: "Start DogStatsD", Long: `Runs DogStatsD in the foreground`, RunE: func(*cobra.Command, []string) error { - return runDogstatsdFct(cliParams, "", start) - }, - } - - versionCmd := &cobra.Command{ - Use: "version", - Short: "Print the version number", - Long: ``, - Run: func(cmd *cobra.Command, args []string) { - av, _ := version.Agent() - fmt.Println(fmt.Sprintf("DogStatsD from Agent %s - Codename: %s - Commit: %s - Serialization version: %s - Go version: %s", - av.GetNumber(), av.Meta, av.Commit, serializer.AgentPayloadVersion, runtime.Version())) + return RunDogstatsdFct(cliParams, "", defaultLogFile, start) }, } // local flags - startCmd.Flags().StringVarP(&cliParams.confPath, "cfgpath", "c", "", "path to folder containing dogstatsd.yaml") - pkgconfig.Datadog.BindPFlag("conf_path", startCmd.Flags().Lookup("cfgpath")) //nolint:errcheck + startCmd.PersistentFlags().StringVarP(&cliParams.confPath, "cfgpath", "c", "", "path to directory containing datadog.yaml") + var socketPath string startCmd.Flags().StringVarP(&socketPath, "socket", "s", "", "listen to this socket instead of UDP") pkgconfig.Datadog.BindPFlag("dogstatsd_socket", startCmd.Flags().Lookup("socket")) //nolint:errcheck - return []*cobra.Command{startCmd, versionCmd} + return startCmd } -func runDogstatsdFct(cliParams *cliParams, defaultConfPath string, fct interface{}) error { +type Params struct { + DefaultLogFile string +} + +func RunDogstatsdFct(cliParams *CLIParams, defaultConfPath string, defaultLogFile string, fct interface{}) error { + params := &Params{ + DefaultLogFile: defaultLogFile, + } return fxutil.OneShot(fct, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( - core.WithConfFilePath(cliParams.confPath), - core.WithConfigLoadSecrets(true), - core.WithConfigMissingOK(true), - core.WithConfigName("dogstatsd"), - core.WithExcludeDefaultConfPath(true), - core.WithDefaultConfPath(defaultConfPath), - )), - core.Bundle, + fx.Supply(params), + fx.Supply(config.NewParams( + defaultConfPath, + config.WithConfFilePath(cliParams.confPath), + config.WithConfigLoadSecrets(true), + config.WithConfigMissingOK(true), + config.WithConfigName("dogstatsd")), + ), + config.Module, ) } -func start(cliParams *cliParams, config config.Component) error { +func start(cliParams *CLIParams, config config.Component, params *Params) error { // Main context passed to components ctx, cancel := context.WithCancel(context.Background()) - defer stopAgent(cancel) + defer StopAgent(cancel) stopCh := make(chan struct{}) go handleSignals(stopCh) - err := runAgent(ctx, cliParams, config) + err := RunAgent(ctx, cliParams, config, params) if err != nil { return err } @@ -144,7 +111,7 @@ func start(cliParams *cliParams, config config.Component) error { return nil } -func runAgent(ctx context.Context, cliParams *cliParams, config config.Component) (err error) { +func RunAgent(ctx context.Context, cliParams *CLIParams, config config.Component, params *Params) (err error) { if len(cliParams.confPath) == 0 { log.Infof("Config will be read from env variables") } @@ -165,7 +132,7 @@ func runAgent(ctx context.Context, cliParams *cliParams, config config.Component syslogURI := pkgconfig.GetSyslogURI() logFile := config.GetString("log_file") if logFile == "" { - logFile = defaultLogFile + logFile = params.DefaultLogFile } if config.GetBool("disable_file_logging") { @@ -280,7 +247,7 @@ func handleSignals(stopCh chan struct{}) { } } -func stopAgent(cancel context.CancelFunc) { +func StopAgent(cancel context.CancelFunc) { // retrieve the agent health before stopping the components // GetReadyNonBlocking has a 100ms timeout to avoid blocking health, err := health.GetReadyNonBlocking() diff --git a/cmd/dogstatsd/main_test.go b/cmd/dogstatsd/subcommands/start/command_test.go similarity index 73% rename from cmd/dogstatsd/main_test.go rename to cmd/dogstatsd/subcommands/start/command_test.go index 6ca152568d305..af6d7c60d5cb1 100644 --- a/cmd/dogstatsd/main_test.go +++ b/cmd/dogstatsd/subcommands/start/command_test.go @@ -3,22 +3,23 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package main +package start import ( "testing" - "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/spf13/cobra" "github.com/stretchr/testify/require" ) func TestStartCommand(t *testing.T) { fxutil.TestOneShotSubcommand(t, - makeCommands(), + []*cobra.Command{MakeCommand("defaultLogFile")}, []string{"start", "--cfgpath", "PATH"}, start, - func(cliParams *cliParams, coreParams core.BundleParams) { + func(cliParams *CLIParams, _ config.Params) { require.Equal(t, "PATH", cliParams.confPath) }) } diff --git a/cmd/process-agent/app/common.go b/cmd/process-agent/app/common.go deleted file mode 100644 index ef43bda03b800..0000000000000 --- a/cmd/process-agent/app/common.go +++ /dev/null @@ -1,38 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2022-present Datadog, Inc. - -package app - -import ( - "io" - - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/process-agent/flags" - ddconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/process/config" -) - -func initConfig(w io.Writer, cmd *cobra.Command) error { - err := config.LoadConfigIfExists(cmd.Flag(flags.CfgPath).Value.String()) - if err != nil { - writeError(w, err) - return err - } - - err = ddconfig.SetupLogger( - "process", - ddconfig.Datadog.GetString("log_level"), - "", - "", - false, - true, - false, - ) - if err != nil { - writeError(w, err) - } - return err -} diff --git a/cmd/process-agent/app/subcommands/subcommands.go b/cmd/process-agent/app/subcommands/subcommands.go deleted file mode 100644 index 6c12020f5d40c..0000000000000 --- a/cmd/process-agent/app/subcommands/subcommands.go +++ /dev/null @@ -1,21 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package subcommands - -import ( - "github.com/DataDog/datadog-agent/cmd/agent/command" - cmdversion "github.com/DataDog/datadog-agent/cmd/process-agent/app/subcommands/version" - cmdworkloadlist "github.com/DataDog/datadog-agent/cmd/process-agent/app/subcommands/workloadlist" -) - -// ProcessAgentSubcommands returns SubcommandFactories for the subcommands supported -// with the current build flags. -func ProcessAgentSubcommands() []command.SubcommandFactory { - return []command.SubcommandFactory{ - cmdversion.Commands, - cmdworkloadlist.Commands, - } -} diff --git a/cmd/process-agent/collector.go b/cmd/process-agent/collector.go index 58e8b13f29e97..a342e51195319 100644 --- a/cmd/process-agent/collector.go +++ b/cmd/process-agent/collector.go @@ -7,31 +7,20 @@ package main import ( "fmt" - "hash/fnv" "math/rand" "net/http" - "os" - "strconv" "sync" "time" model "github.com/DataDog/agent-payload/v5/process" + sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" ddconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/config/resolver" "github.com/DataDog/datadog-agent/pkg/forwarder" - "github.com/DataDog/datadog-agent/pkg/forwarder/transaction" - "github.com/DataDog/datadog-agent/pkg/orchestrator" + oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" - "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/process/util/api" - apicfg "github.com/DataDog/datadog-agent/pkg/process/util/api/config" - "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" - "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/version" - "go.uber.org/atomic" ) @@ -65,7 +54,8 @@ type Collector struct { groupID *atomic.Int32 rtIntervalCh chan time.Duration - cfg *config.AgentConfig + + orchestrator *oconfig.OrchestratorConfig // counters for each type of check runCounters sync.Map @@ -74,87 +64,45 @@ type Collector struct { // Controls the real-time interval, can change live. realTimeInterval time.Duration - processResults *api.WeightedQueue - rtProcessResults *api.WeightedQueue - eventResults *api.WeightedQueue - - connectionsResults *api.WeightedQueue - - podResults *api.WeightedQueue - - forwarderRetryQueueMaxBytes int - // Enables running realtime checks runRealTime bool // Drop payloads from specified checks dropCheckPayloads []string - // Used to cache the hash result of the host name and the pid of the process agent. Being used as part of - // getRequestID method. Must use pointer, to distinguish between uninitialized value and the theoretical but yet - // possible 0 value for the hash result. - requestIDCachedHash *uint64 + // Submits check payloads to datadog + submitter Submitter } // NewCollector creates a new Collector -func NewCollector(cfg *config.AgentConfig, enabledChecks []checks.Check) (Collector, error) { - sysInfo, err := checks.CollectSystemInfo(cfg) - if err != nil { - return Collector{}, err +func NewCollector(syscfg *sysconfig.Config, hostInfo *checks.HostInfo, enabledChecks []checks.Check) (*Collector, error) { + runRealTime := !ddconfig.Datadog.GetBool("process_config.disable_realtime_checks") + + cfg := &checks.SysProbeConfig{} + if syscfg != nil && syscfg.Enabled { + cfg.MaxConnsPerMessage = syscfg.MaxConnsPerMessage + cfg.SystemProbeAddress = syscfg.SocketAddress } - runRealTime := !ddconfig.Datadog.GetBool("process_config.disable_realtime_checks") for _, c := range enabledChecks { - c.Init(cfg, sysInfo) + if err := c.Init(cfg, hostInfo); err != nil { + return nil, err + } } - return NewCollectorWithChecks(cfg, enabledChecks, runRealTime), nil + return NewCollectorWithChecks(enabledChecks, runRealTime) } // NewCollectorWithChecks creates a new Collector -func NewCollectorWithChecks(cfg *config.AgentConfig, checks []checks.Check, runRealTime bool) Collector { - queueSize := ddconfig.Datadog.GetInt("process_config.queue_size") - if queueSize <= 0 { - log.Warnf("Invalid check queue size: %d. Using default value: %d", queueSize, ddconfig.DefaultProcessQueueSize) - queueSize = ddconfig.DefaultProcessQueueSize - } - - rtQueueSize := ddconfig.Datadog.GetInt("process_config.rt_queue_size") - if rtQueueSize <= 0 { - log.Warnf("Invalid rt check queue size: %d. Using default value: %d", rtQueueSize, ddconfig.DefaultProcessRTQueueSize) - rtQueueSize = ddconfig.DefaultProcessRTQueueSize - } - - queueBytes := ddconfig.Datadog.GetInt("process_config.process_queue_bytes") - if queueBytes <= 0 { - log.Warnf("Invalid queue bytes size: %d. Using default value: %d", queueBytes, ddconfig.DefaultProcessQueueBytes) - queueBytes = ddconfig.DefaultProcessQueueBytes - } - - processResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) - log.Debugf("Creating process check queue with max_size=%d and max_weight=%d", processResults.MaxSize(), processResults.MaxWeight()) - - // reuse main queue's ProcessQueueBytes because it's unlikely that it'll reach to that size in bytes, so we don't need a separate config for it - rtProcessResults := api.NewWeightedQueue(rtQueueSize, int64(queueBytes)) - log.Debugf("Creating rt process check queue with max_size=%d and max_weight=%d", rtProcessResults.MaxSize(), rtProcessResults.MaxWeight()) - - connectionsResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) - log.Debugf("Creating connections queue with max_size=%d and max_weight=%d", connectionsResults.MaxSize(), connectionsResults.MaxWeight()) - - podResults := api.NewWeightedQueue(queueSize, int64(cfg.Orchestrator.PodQueueBytes)) - log.Debugf("Creating pod check queue with max_size=%d and max_weight=%d", podResults.MaxSize(), podResults.MaxWeight()) - - eventResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) - log.Debugf("Creating event check queue with max_size=%d and max_weight=%d", eventResults.MaxSize(), eventResults.MaxWeight()) - - dropCheckPayloads := ddconfig.Datadog.GetStringSlice("process_config.drop_check_payloads") - if len(dropCheckPayloads) > 0 { - log.Debugf("Dropping payloads from checks: %v", dropCheckPayloads) +func NewCollectorWithChecks(checks []checks.Check, runRealTime bool) (*Collector, error) { + orchestrator := oconfig.NewDefaultOrchestratorConfig() + if err := orchestrator.Load(); err != nil { + return nil, err } - return Collector{ + return &Collector{ rtIntervalCh: make(chan time.Duration), - cfg: cfg, + orchestrator: orchestrator, groupID: atomic.NewInt32(rand.Int31()), enabledChecks: checks, @@ -162,27 +110,17 @@ func NewCollectorWithChecks(cfg *config.AgentConfig, checks []checks.Check, runR realTimeInterval: 2 * time.Second, realTimeEnabled: atomic.NewBool(false), - processResults: processResults, - rtProcessResults: rtProcessResults, - connectionsResults: connectionsResults, - podResults: podResults, - eventResults: eventResults, - - forwarderRetryQueueMaxBytes: queueBytes, - runRealTime: runRealTime, - - dropCheckPayloads: dropCheckPayloads, - } + }, nil } -func (l *Collector) runCheck(c checks.Check, results *api.WeightedQueue) { +func (l *Collector) runCheck(c checks.Check) { runCounter := l.nextRunCounter(c.Name()) start := time.Now() // update the last collected timestamp for info updateLastCollectTime(start) - messages, err := c.Run(l.cfg, l.nextGroupID()) + messages, err := c.Run(l.nextGroupID()) if err != nil { log.Errorf("Unable to run check '%s': %s", c.Name(), err) return @@ -193,28 +131,24 @@ func (l *Collector) runCheck(c checks.Check, results *api.WeightedQueue) { checks.StoreCheckOutput(c.Name(), nil) } - if c.Name() == config.PodCheckName { - handlePodChecks(l, start, messages, results) - } else { - l.messagesToResultsQueue(start, c.Name(), messages, results) - } + l.submitter.Submit(start, c.Name(), messages) if !c.RealTime() { logCheckDuration(c.Name(), start, runCounter) } } -func (l *Collector) runCheckWithRealTime(c checks.CheckWithRealTime, results, rtResults *api.WeightedQueue, options checks.RunOptions) { +func (l *Collector) runCheckWithRealTime(c checks.CheckWithRealTime, options checks.RunOptions) { start := time.Now() // update the last collected timestamp for info updateLastCollectTime(start) - run, err := c.RunWithOptions(l.cfg, l.nextGroupID, options) + run, err := c.RunWithOptions(l.nextGroupID, options) if err != nil { log.Errorf("Unable to run check '%s': %s", c.Name(), err) return } - l.messagesToResultsQueue(start, c.Name(), run.Standard, results) + l.submitter.Submit(start, c.Name(), run.Standard) if options.RunStandard { // We are only updating the run counter for the standard check // since RT checks are too frequent and we only log standard check @@ -224,7 +158,7 @@ func (l *Collector) runCheckWithRealTime(c checks.CheckWithRealTime, results, rt logCheckDuration(c.Name(), start, runCounter) } - l.messagesToResultsQueue(start, c.RealTimeName(), run.RealTime, rtResults) + l.submitter.Submit(start, c.RealTimeName(), run.RealTime) if options.RunRealTime { checks.StoreCheckOutput(c.RealTimeName(), run.RealTime) } @@ -255,16 +189,6 @@ func (l *Collector) nextGroupID() int32 { return l.groupID.Inc() } -func (l *Collector) messagesToResultsQueue(start time.Time, name string, messages []model.MessageBody, queue *api.WeightedQueue) { - result := l.messagesToCheckResult(start, name, messages) - if result == nil { - return - } - queue.Add(result) - // update proc and container count for info - updateProcContainerCount(messages) -} - const ( secondsNumberOfBits = 22 hashNumberOfBits = 28 @@ -274,113 +198,12 @@ const ( chunkMask = 1< 0 { - if updateRTStatus { - l.updateRTStatus(statuses) - } - } - } +func (l *Collector) UpdateRTStatus(statuses []*model.CollectorStatus) { + // If realtime mode is disabled in the config, do not change the real time status. + if !l.runRealTime { + return } -} -func (l *Collector) updateRTStatus(statuses []*model.CollectorStatus) { curEnabled := l.realTimeEnabled.Load() // If any of the endpoints wants real-time we'll do that. @@ -745,34 +380,6 @@ func (l *Collector) updateRTStatus(statuses []*model.CollectorStatus) { } } -func (l *Collector) logQueuesSize() { - var ( - processSize = l.processResults.Len() - rtProcessSize = l.rtProcessResults.Len() - connectionsSize = l.connectionsResults.Len() - eventsSize = l.eventResults.Len() - podSize = l.podResults.Len() - ) - - if processSize == 0 && - rtProcessSize == 0 && - connectionsSize == 0 && - eventsSize == 0 && - podSize == 0 { - return - } - - log.Infof( - "Delivery queues: process[size=%d, weight=%d], rtprocess[size=%d, weight=%d], connections[size=%d, weight=%d], event[size=%d, weight=%d], pod[size=%d, weight=%d]", - processSize, l.processResults.Weight(), - rtProcessSize, l.rtProcessResults.Weight(), - connectionsSize, l.connectionsResults.Weight(), - eventsSize, l.eventResults.Weight(), - podSize, l.podResults.Weight(), - ) - -} - // getContainerCount returns the number of containers in the message body func getContainerCount(mb model.MessageBody) int { switch v := mb.(type) { @@ -833,19 +440,9 @@ func readResponseStatuses(checkName string, responses <-chan forwarder.Response) func ignoreResponseBody(checkName string) bool { switch checkName { - case checks.Pod.Name(), config.PodCheckManifestName, checks.ProcessEvents.Name(): + case checks.Pod.Name(), checks.PodCheckManifestName, checks.ProcessEvents.Name(): return true default: return false } } - -// Pod check returns a list of messages can be divided into two parts : pod payloads and manifest payloads -// By default we only send pod payloads containing pod metadata and pod manifests (yaml) -// Manifest payloads is a copy of pod manifests, we only send manifest payloads when feature flag is true -func handlePodChecks(l *Collector, start time.Time, messages []model.MessageBody, results *api.WeightedQueue) { - l.messagesToResultsQueue(start, config.PodCheckName, messages[:len(messages)/2], results) - if l.cfg.Orchestrator.IsManifestCollectionEnabled { - l.messagesToResultsQueue(start, config.PodCheckManifestName, messages[len(messages)/2:], results) - } -} diff --git a/cmd/process-agent/collector_api_test.go b/cmd/process-agent/collector_api_test.go index 02bb7cf31fb70..84867740488f6 100644 --- a/cmd/process-agent/collector_api_test.go +++ b/cmd/process-agent/collector_api_test.go @@ -18,7 +18,6 @@ import ( "github.com/DataDog/agent-payload/v5/process" ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" apicfg "github.com/DataDog/datadog-agent/pkg/process/util/api/config" "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" "github.com/DataDog/datadog-agent/pkg/version" @@ -56,6 +55,19 @@ func setProcessEventsEndpointsForTest(config ddconfig.Config, eps ...apicfg.Endp config.Set("process_config.events_additional_endpoints", additionalEps) } +func setOrchestratorEndpointsForTest(config ddconfig.Config, eps ...apicfg.Endpoint) { + additionalEps := make(map[string][]string) + for i, ep := range eps { + if i == 0 { + config.Set("api_key", ep.APIKey) + config.Set("orchestrator_explorer.orchestrator_dd_url", ep.Endpoint) + } else { + additionalEps[ep.Endpoint.String()] = append(additionalEps[ep.Endpoint.String()], ep.APIKey) + } + } + config.Set("orchestrator_explorer.orchestrator_additional_endpoints", additionalEps) +} + func TestSendConnectionsMessage(t *testing.T) { m := &process.CollectorConnections{ HostName: testHostName, @@ -67,12 +79,12 @@ func TestSendConnectionsMessage(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v1/connections", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) apiEps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, apiEps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -87,7 +99,7 @@ func TestSendConnectionsMessage(t *testing.T) { cc, ok := reqBody.Body.(*process.CollectorConnections) require.True(t, ok) - assert.Equal(t, cfg.HostName, cc.HostName) + assert.Equal(t, testHostName, cc.HostName) assert.Equal(t, int32(1), cc.GroupId) }) } @@ -106,12 +118,12 @@ func TestSendContainerMessage(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v1/container", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -143,12 +155,12 @@ func TestSendProcMessage(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v1/collector", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -183,12 +195,12 @@ func TestSendProcessDiscoveryMessage(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v1/discovery", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -232,12 +244,12 @@ func TestSendProcessEventMessage(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v2/proclcycle", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getEventsAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -276,7 +288,7 @@ func TestSendProcMessageWithRetry(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { requests := []request{ <-ep.Requests, <-ep.Requests, @@ -284,7 +296,7 @@ func TestSendProcMessageWithRetry(t *testing.T) { timestamps := make(map[string]struct{}) for _, req := range requests { - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -315,7 +327,7 @@ func TestRTProcMessageNotRetried(t *testing.T) { data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests reqBody, err := process.DecodeMessage(req.body) @@ -336,20 +348,33 @@ func TestRTProcMessageNotRetried(t *testing.T) { } func TestSendPodMessageSendManifestPayload(t *testing.T) { - clusterID, cfg, check := getPodCheckMessage(t) - cfg.Orchestrator.IsManifestCollectionEnabled = true + clusterID, check := getPodCheckMessage(t) + + ddconfig.SetDetectedFeatures(ddconfig.FeatureMap{ddconfig.Kubernetes: {}}) + defer ddconfig.SetDetectedFeatures(nil) - runCollectorTest(t, check, cfg, &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { - testPodMessageMetadata(t, clusterID, cfg, ep) - testPodMessageManifest(t, clusterID, cfg, ep) + ddcfg := ddconfig.Mock(t) + ddcfg.Set("orchestrator_explorer.enabled", true) + ddcfg.Set("orchestrator_explorer.manifest_collection.enabled", true) + + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { + testPodMessageMetadata(t, clusterID, c, ep) + testPodMessageManifest(t, clusterID, c, ep) }) } func TestSendPodMessageNotSendManifestPayload(t *testing.T) { - clusterID, cfg, check := getPodCheckMessage(t) + clusterID, check := getPodCheckMessage(t) + + ddconfig.SetDetectedFeatures(ddconfig.FeatureMap{ddconfig.Kubernetes: {}}) + defer ddconfig.SetDetectedFeatures(nil) + + ddcfg := ddconfig.Mock(t) + ddcfg.Set("orchestrator_explorer.enabled", true) - runCollectorTest(t, check, cfg, &endpointConfig{}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { - testPodMessageMetadata(t, clusterID, cfg, ep) + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { + + testPodMessageMetadata(t, clusterID, c, ep) select { case q := <-ep.Requests: t.Fatalf("should not have received manifest payload %+v", q) @@ -359,13 +384,10 @@ func TestSendPodMessageNotSendManifestPayload(t *testing.T) { }) } -func getPodCheckMessage(t *testing.T) (string, *config.AgentConfig, checks.Check) { +func getPodCheckMessage(t *testing.T) (string, checks.Check) { clusterID := "d801b2b1-4811-11ea-8618-121d4d0938a3" - cfg := config.NewDefaultAgentConfig() - cfg.Orchestrator.OrchestrationCollectionEnabled = true - t.Setenv("DD_ORCHESTRATOR_CLUSTER_ID", clusterID) pd := make([]process.MessageBody, 0, 2) @@ -382,16 +404,16 @@ func getPodCheckMessage(t *testing.T) (string, *config.AgentConfig, checks.Check name: checks.Pod.Name(), data: [][]process.MessageBody{pd}, } - return clusterID, cfg, check + return clusterID, check } -func testPodMessageMetadata(t *testing.T, clusterID string, cfg *config.AgentConfig, ep *mockEndpoint) { +func testPodMessageMetadata(t *testing.T, clusterID string, c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v2/orch", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) - assert.Equal(t, cfg.Orchestrator.OrchestratorEndpoints[0].APIKey, req.headers.Get("DD-Api-Key")) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, c.orchestrator.OrchestratorEndpoints[0].APIKey, req.headers.Get("DD-Api-Key")) assert.Equal(t, "0", req.headers.Get(headers.ContainerCountHeader)) assert.Equal(t, "1", req.headers.Get("X-DD-Agent-Attempts")) assert.NotEmpty(t, req.headers.Get(headers.TimestampHeader)) @@ -403,15 +425,15 @@ func testPodMessageMetadata(t *testing.T, clusterID string, cfg *config.AgentCon require.True(t, ok) assert.Equal(t, clusterID, req.headers.Get(headers.ClusterIDHeader)) - assert.Equal(t, cfg.HostName, cp.HostName) + assert.Equal(t, testHostName, cp.HostName) } -func testPodMessageManifest(t *testing.T, clusterID string, cfg *config.AgentConfig, ep *mockEndpoint) { +func testPodMessageManifest(t *testing.T, clusterID string, c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v2/orchmanif", req.uri) - assert.Equal(t, cfg.HostName, req.headers.Get(headers.HostHeader)) - assert.Equal(t, cfg.Orchestrator.OrchestratorEndpoints[0].APIKey, req.headers.Get("DD-Api-Key")) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, c.orchestrator.OrchestratorEndpoints[0].APIKey, req.headers.Get("DD-Api-Key")) assert.Equal(t, "0", req.headers.Get(headers.ContainerCountHeader)) assert.Equal(t, "1", req.headers.Get("X-DD-Agent-Attempts")) assert.NotEmpty(t, req.headers.Get(headers.TimestampHeader)) @@ -438,9 +460,8 @@ func TestQueueSpaceNotAvailable(t *testing.T) { mockConfig := ddconfig.Mock(t) mockConfig.Set("process_config.process_queue_bytes", 1) - cfg := config.NewDefaultAgentConfig() - runCollectorTest(t, check, cfg, &endpointConfig{ErrorCount: 1}, mockConfig, func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{ErrorCount: 1}, mockConfig, func(_ *Collector, ep *mockEndpoint) { select { case r := <-ep.Requests: t.Fatalf("should not have received a request: %+v", r) @@ -469,9 +490,8 @@ func TestQueueSpaceReleased(t *testing.T) { mockConfig := ddconfig.Mock(t) mockConfig.Set("process_config.process_queue_bytes", 50) // This should be enough for one message, but not both if the space isn't released - cfg := config.NewDefaultAgentConfig() - runCollectorTest(t, check, cfg, &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(_ *Collector, ep *mockEndpoint) { req := <-ep.Requests reqBody, err := process.DecodeMessage(req.body) @@ -505,11 +525,9 @@ func TestMultipleAPIKeys(t *testing.T) { data: [][]process.MessageBody{{m}}, } - cfg := config.NewDefaultAgentConfig() apiKeys := []string{"apiKeyI", "apiKeyII", "apiKeyIII"} - orchKeys := []string{"orchKey"} - runCollectorTestWithAPIKeys(t, check, cfg, &endpointConfig{}, apiKeys, orchKeys, ddconfig.Mock(t), func(cfg *config.AgentConfig, ep *mockEndpoint) { + runCollectorTestWithAPIKeys(t, check, &endpointConfig{}, apiKeys, nil, ddconfig.Mock(t), func(_ *Collector, ep *mockEndpoint) { for _, expectedAPIKey := range apiKeys { request := <-ep.Requests assert.Equal(t, expectedAPIKey, request.headers.Get("DD-Api-Key")) @@ -517,11 +535,11 @@ func TestMultipleAPIKeys(t *testing.T) { }) } -func runCollectorTest(t *testing.T, check checks.Check, cfg *config.AgentConfig, epConfig *endpointConfig, mockConfig ddconfig.Config, tc func(cfg *config.AgentConfig, ep *mockEndpoint)) { - runCollectorTestWithAPIKeys(t, check, cfg, epConfig, []string{"apiKey"}, []string{"orchestratorApiKey"}, mockConfig, tc) +func runCollectorTest(t *testing.T, check checks.Check, epConfig *endpointConfig, mockConfig ddconfig.Config, tc func(c *Collector, ep *mockEndpoint)) { + runCollectorTestWithAPIKeys(t, check, epConfig, []string{"apiKey"}, []string{"orchestratorApiKey"}, mockConfig, tc) } -func runCollectorTestWithAPIKeys(t *testing.T, check checks.Check, cfg *config.AgentConfig, epConfig *endpointConfig, apiKeys, orchAPIKeys []string, mockConfig ddconfig.Config, tc func(cfg *config.AgentConfig, ep *mockEndpoint)) { +func runCollectorTestWithAPIKeys(t *testing.T, check checks.Check, epConfig *endpointConfig, apiKeys, orchAPIKeys []string, mockConfig ddconfig.Config, tc func(c *Collector, ep *mockEndpoint)) { ep := newMockEndpoint(t, epConfig) collectorAddr, eventsAddr, orchestratorAddr := ep.start() defer ep.stop() @@ -538,17 +556,24 @@ func runCollectorTestWithAPIKeys(t *testing.T, check checks.Check, cfg *config.A } setProcessEventsEndpointsForTest(mockConfig, eventsEps...) - cfg.Orchestrator.OrchestratorEndpoints = make([]apicfg.Endpoint, len(orchAPIKeys)) - for index, key := range orchAPIKeys { - cfg.Orchestrator.OrchestratorEndpoints[index] = apicfg.Endpoint{APIKey: key, Endpoint: orchestratorAddr} + orchestratorEndpoints := make([]apicfg.Endpoint, 0, len(orchAPIKeys)) + for _, key := range orchAPIKeys { + orchestratorEndpoints = append(orchestratorEndpoints, apicfg.Endpoint{APIKey: key, Endpoint: orchestratorAddr}) } - - cfg.HostName = testHostName - cfg.CheckIntervals[check.Name()] = 500 * time.Millisecond + setOrchestratorEndpointsForTest(mockConfig, orchestratorEndpoints...) exit := make(chan struct{}) - c := NewCollectorWithChecks(cfg, []checks.Check{check}, true) + hostInfo := &checks.HostInfo{ + HostName: testHostName, + } + c, err := NewCollectorWithChecks([]checks.Check{check}, true) + check.Init(nil, hostInfo) + + assert.NoError(t, err) + s, err := NewSubmitter(hostInfo.HostName, c.UpdateRTStatus) + require.NoError(t, err) + c.submitter = s var wg sync.WaitGroup wg.Add(1) @@ -558,7 +583,7 @@ func runCollectorTestWithAPIKeys(t *testing.T, check checks.Check, cfg *config.A require.NoError(t, err) }() - tc(cfg, ep) + tc(c, ep) close(exit) wg.Wait() @@ -569,7 +594,8 @@ type testCheck struct { data [][]process.MessageBody } -func (t *testCheck) Init(_ *config.AgentConfig, _ *process.SystemInfo) { +func (t *testCheck) Init(_ *checks.SysProbeConfig, _ *checks.HostInfo) error { + return nil } func (t *testCheck) Name() string { @@ -584,7 +610,7 @@ func (t *testCheck) ShouldSaveLastRun() bool { return false } -func (t *testCheck) Run(_ *config.AgentConfig, _ int32) ([]process.MessageBody, error) { +func (t *testCheck) Run(_ int32) ([]process.MessageBody, error) { if len(t.data) > 0 { result := t.data[0] t.data = t.data[1:] diff --git a/cmd/process-agent/collector_test.go b/cmd/process-agent/collector_test.go index 449c41563b7b5..bca5173573e97 100644 --- a/cmd/process-agent/collector_test.go +++ b/cmd/process-agent/collector_test.go @@ -6,30 +6,25 @@ package main import ( - "strconv" "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" model "github.com/DataDog/agent-payload/v5/process" + processmocks "github.com/DataDog/datadog-agent/cmd/process-agent/mocks" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" ddconfig "github.com/DataDog/datadog-agent/pkg/config" - oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/checks/mocks" - "github.com/DataDog/datadog-agent/pkg/process/config" - "github.com/DataDog/datadog-agent/pkg/process/util/api" - "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" - "github.com/DataDog/datadog-agent/pkg/version" + checkmocks "github.com/DataDog/datadog-agent/pkg/process/checks/mocks" ) func TestUpdateRTStatus(t *testing.T) { assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - c, err := NewCollector(cfg, []checks.Check{checks.Process}) + c, err := NewCollector(nil, &checks.HostInfo{}, []checks.Check{checks.Process}) assert.NoError(err) // XXX: Give the collector a big channel so it never blocks. c.rtIntervalCh = make(chan time.Duration, 1000) @@ -40,7 +35,7 @@ func TestUpdateRTStatus(t *testing.T) { {ActiveClients: 3, Interval: 2}, {ActiveClients: 0, Interval: 2}, } - c.updateRTStatus(statuses) + c.UpdateRTStatus(statuses) assert.True(c.realTimeEnabled.Load()) // Validate that we stay that way @@ -49,7 +44,7 @@ func TestUpdateRTStatus(t *testing.T) { {ActiveClients: 3, Interval: 2}, {ActiveClients: 0, Interval: 2}, } - c.updateRTStatus(statuses) + c.UpdateRTStatus(statuses) assert.True(c.realTimeEnabled.Load()) // And that it can turn back off @@ -58,14 +53,13 @@ func TestUpdateRTStatus(t *testing.T) { {ActiveClients: 0, Interval: 2}, {ActiveClients: 0, Interval: 2}, } - c.updateRTStatus(statuses) + c.UpdateRTStatus(statuses) assert.False(c.realTimeEnabled.Load()) } func TestUpdateRTInterval(t *testing.T) { assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - c, err := NewCollector(cfg, []checks.Check{checks.Process}) + c, err := NewCollector(nil, &checks.HostInfo{}, []checks.Check{checks.Process}) assert.NoError(err) // XXX: Give the collector a big channel so it never blocks. c.rtIntervalCh = make(chan time.Duration, 1000) @@ -76,7 +70,7 @@ func TestUpdateRTInterval(t *testing.T) { {ActiveClients: 3, Interval: 2}, {ActiveClients: 0, Interval: 10}, } - c.updateRTStatus(statuses) + c.UpdateRTStatus(statuses) assert.True(c.realTimeEnabled.Load()) assert.Equal(10*time.Second, c.realTimeInterval) } @@ -129,7 +123,6 @@ func TestDisableRealTime(t *testing.T) { } assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { @@ -137,10 +130,10 @@ func TestDisableRealTime(t *testing.T) { mockConfig.Set("process_config.disable_realtime_checks", tc.disableRealtime) mockConfig.Set("process_config.process_discovery.enabled", false) // Not an RT check so we don't care - enabledChecks := getChecks(&sysconfig.Config{}, &oconfig.OrchestratorConfig{}, true) + enabledChecks := getChecks(&sysconfig.Config{}, true) assert.EqualValues(tc.expectedChecks, enabledChecks) - c, err := NewCollector(cfg, enabledChecks) + c, err := NewCollector(nil, &checks.HostInfo{}, enabledChecks) assert.NoError(err) assert.Equal(!tc.disableRealtime, c.runRealTime) assert.ElementsMatch(tc.expectedChecks, c.enabledChecks) @@ -164,7 +157,6 @@ func TestDisableRealTimeProcessCheck(t *testing.T) { } assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() expectedChecks := []checks.Check{checks.Process} for _, tc := range tests { @@ -172,7 +164,7 @@ func TestDisableRealTimeProcessCheck(t *testing.T) { mockConfig := ddconfig.Mock(t) mockConfig.Set("process_config.disable_realtime_checks", tc.disableRealtime) - c, err := NewCollector(cfg, expectedChecks) + c, err := NewCollector(nil, &checks.HostInfo{}, expectedChecks) assert.NoError(err) assert.Equal(!tc.disableRealtime, c.runRealTime) assert.EqualValues(expectedChecks, c.enabledChecks) @@ -180,159 +172,6 @@ func TestDisableRealTimeProcessCheck(t *testing.T) { } } -func TestNewCollectorQueueSize(t *testing.T) { - tests := []struct { - name string - override bool - queueSize int - expectedQueueSize int - }{ - { - name: "default queue size", - override: false, - queueSize: 42, - expectedQueueSize: ddconfig.DefaultProcessQueueSize, - }, - { - name: "valid queue size override", - override: true, - queueSize: 42, - expectedQueueSize: 42, - }, - { - name: "invalid negative queue size override", - override: true, - queueSize: -10, - expectedQueueSize: ddconfig.DefaultProcessQueueSize, - }, - { - name: "invalid 0 queue size override", - override: true, - queueSize: 0, - expectedQueueSize: ddconfig.DefaultProcessQueueSize, - }, - } - - assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - mockConfig := ddconfig.Mock(t) - if tc.override { - mockConfig.Set("process_config.queue_size", tc.queueSize) - } - - c, err := NewCollector(cfg, []checks.Check{checks.Process, checks.Pod}) - assert.NoError(err) - assert.Equal(tc.expectedQueueSize, c.processResults.MaxSize()) - assert.Equal(tc.expectedQueueSize, c.podResults.MaxSize()) - }) - } -} - -func TestNewCollectorRTQueueSize(t *testing.T) { - tests := []struct { - name string - override bool - queueSize int - expectedQueueSize int - }{ - { - name: "default queue size", - override: false, - queueSize: 2, - expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, - }, - { - name: "valid queue size override", - override: true, - queueSize: 2, - expectedQueueSize: 2, - }, - { - name: "invalid negative size override", - override: true, - queueSize: -2, - expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, - }, - { - name: "invalid 0 queue size override", - override: true, - queueSize: 0, - expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, - }, - } - - assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - mockConfig := ddconfig.Mock(t) - if tc.override { - mockConfig.Set("process_config.rt_queue_size", tc.queueSize) - } - - c, err := NewCollector(cfg, []checks.Check{checks.Process}) - assert.NoError(err) - assert.Equal(tc.expectedQueueSize, c.rtProcessResults.MaxSize()) - }) - } -} - -func TestNewCollectorProcessQueueBytes(t *testing.T) { - tests := []struct { - name string - override bool - queueBytes int - expectedQueueSize int - }{ - { - name: "default queue size", - override: false, - queueBytes: 42000, - expectedQueueSize: ddconfig.DefaultProcessQueueBytes, - }, - { - name: "valid queue size override", - override: true, - queueBytes: 42000, - expectedQueueSize: 42000, - }, - { - name: "invalid negative queue size override", - override: true, - queueBytes: -2, - expectedQueueSize: ddconfig.DefaultProcessQueueBytes, - }, - { - name: "invalid 0 queue size override", - override: true, - queueBytes: 0, - expectedQueueSize: ddconfig.DefaultProcessQueueBytes, - }, - } - - assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - mockConfig := ddconfig.Mock(t) - if tc.override { - mockConfig.Set("process_config.process_queue_bytes", tc.queueBytes) - } - - c, err := NewCollector(cfg, []checks.Check{checks.Process}) - assert.NoError(err) - assert.Equal(int64(tc.expectedQueueSize), c.processResults.MaxWeight()) - assert.Equal(int64(tc.expectedQueueSize), c.rtProcessResults.MaxWeight()) - assert.Equal(tc.expectedQueueSize, c.forwarderRetryQueueMaxBytes) - }) - } -} - func TestIgnoreResponseBody(t *testing.T) { for _, tc := range []struct { checkName string @@ -344,7 +183,7 @@ func TestIgnoreResponseBody(t *testing.T) { {checkName: checks.Container.Name(), ignore: false}, {checkName: checks.RTContainer.Name(), ignore: false}, {checkName: checks.Pod.Name(), ignore: true}, - {checkName: config.PodCheckManifestName, ignore: true}, + {checkName: checks.PodCheckManifestName, ignore: true}, {checkName: checks.Connections.Name(), ignore: false}, {checkName: checks.ProcessEvents.Name(), ignore: true}, } { @@ -355,14 +194,12 @@ func TestIgnoreResponseBody(t *testing.T) { } func TestCollectorRunCheckWithRealTime(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - check := mocks.NewCheckWithRealTime(t) + check := checkmocks.NewCheckWithRealTime(t) - c, err := NewCollector(cfg, []checks.Check{}) + c, err := NewCollector(nil, &checks.HostInfo{}, []checks.Check{}) assert.NoError(t, err) - - results := api.NewWeightedQueue(1, 1024) - rtResults := api.NewWeightedQueue(1, 1024) + submitter := processmocks.NewSubmitter(t) + c.submitter = submitter standardOption := checks.RunOptions{ RunStandard: true, @@ -374,23 +211,14 @@ func TestCollectorRunCheckWithRealTime(t *testing.T) { }, } - check.On("RunWithOptions", mock.Anything, mock.Anything, standardOption).Once().Return(result, nil) + check.On("RunWithOptions", mock.Anything, standardOption).Once().Return(result, nil) check.On("Name").Return("foo") check.On("RealTimeName").Return("bar") - c.runCheckWithRealTime( - check, - results, - rtResults, - standardOption, - ) - - assert.Equal(t, results.Len(), 1) - item, ok := results.Poll() - assert.True(t, ok) - assert.Equal(t, item.Type(), "foo") + submitStandard := submitter.On("Submit", mock.Anything, check.Name(), mock.Anything).Return(nil) + submitter.On("Submit", mock.Anything, check.RealTimeName(), mock.Anything).Return(nil).NotBefore(submitStandard) - assert.Equal(t, rtResults.Len(), 0) + c.runCheckWithRealTime(check, standardOption) rtResult := &checks.RunResult{ RealTime: []model.MessageBody{ @@ -402,30 +230,21 @@ func TestCollectorRunCheckWithRealTime(t *testing.T) { RunRealTime: true, } - check.On("RunWithOptions", mock.Anything, mock.Anything, rtOption).Once().Return(rtResult, nil) - - c.runCheckWithRealTime( - check, - results, - rtResults, - rtOption, - ) + check.On("RunWithOptions", mock.Anything, rtOption).Once().Return(rtResult, nil) - assert.Equal(t, results.Len(), 0) - assert.Equal(t, rtResults.Len(), 1) - item, ok = rtResults.Poll() - assert.True(t, ok) - assert.Equal(t, item.Type(), "bar") + c.runCheckWithRealTime(check, rtOption) } func TestCollectorRunCheck(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - check := mocks.NewCheck(t) + check := checkmocks.NewCheck(t) - c, err := NewCollector(cfg, []checks.Check{}) - assert.NoError(t, err) + hostInfo := &checks.HostInfo{HostName: testHostName} - results := api.NewWeightedQueue(1, 1024) + c, err := NewCollector(nil, hostInfo, []checks.Check{}) + require.NoError(t, err) + submitter := processmocks.NewSubmitter(t) + require.NoError(t, err) + c.submitter = submitter result := []model.MessageBody{ &model.CollectorProc{}, @@ -435,167 +254,7 @@ func TestCollectorRunCheck(t *testing.T) { check.On("Name").Return("foo") check.On("RealTime").Return(false) check.On("ShouldSaveLastRun").Return(true) + submitter.On("Submit", mock.Anything, check.Name(), mock.Anything).Return(nil) - c.runCheck( - check, - results, - ) - - assert.Equal(t, results.Len(), 1) - item, ok := results.Poll() - assert.True(t, ok) - assert.Equal(t, item.Type(), "foo") -} - -func TestCollectorMessagesToCheckResult(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - cfg.HostName = "host" - - c, err := NewCollector(cfg, []checks.Check{}) - assert.NoError(t, err) - - now := time.Now() - agentVersion, _ := version.Agent() - - requestID := c.getRequestID(now, 0) - - tests := []struct { - name string - message model.MessageBody - expectHeaders map[string]string - }{ - { - name: "process", - message: &model.CollectorProc{ - Containers: []*model.Container{ - {}, {}, {}, - }, - }, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "3", - headers.ContentTypeHeader: headers.ProtobufContentType, - headers.RequestIDHeader: requestID, - }, - }, - { - name: "rt_process", - message: &model.CollectorRealTime{ - ContainerStats: []*model.ContainerStat{ - {}, {}, {}, - }, - }, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "3", - headers.ContentTypeHeader: headers.ProtobufContentType, - }, - }, - { - name: "container", - message: &model.CollectorContainer{ - Containers: []*model.Container{ - {}, {}, - }, - }, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "2", - headers.ContentTypeHeader: headers.ProtobufContentType, - }, - }, - { - name: "rt_container", - message: &model.CollectorContainerRealTime{ - Stats: []*model.ContainerStat{ - {}, {}, {}, {}, {}, - }, - }, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "5", - headers.ContentTypeHeader: headers.ProtobufContentType, - }, - }, - { - name: "process_discovery", - message: &model.CollectorProcDiscovery{}, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "0", - headers.ContentTypeHeader: headers.ProtobufContentType, - }, - }, - { - name: "process_events", - message: &model.CollectorProcEvent{}, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "0", - headers.ContentTypeHeader: headers.ProtobufContentType, - headers.EVPOriginHeader: "process-agent", - headers.EVPOriginVersionHeader: version.AgentVersion, - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - messages := []model.MessageBody{ - test.message, - } - result := c.messagesToCheckResult(now, test.name, messages) - assert.Equal(t, test.name, result.name) - assert.Len(t, result.payloads, 1) - payload := result.payloads[0] - assert.Len(t, payload.headers, len(test.expectHeaders)) - for k, v := range test.expectHeaders { - assert.Equal(t, v, payload.headers.Get(k)) - } - }) - } -} - -func Test_getRequestID(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - cfg.HostName = "host" - - c, err := NewCollector(cfg, []checks.Check{}) - assert.NoError(t, err) - - fixedDate1 := time.Date(2022, 9, 1, 0, 0, 1, 0, time.Local) - id1 := c.getRequestID(fixedDate1, 1) - id2 := c.getRequestID(fixedDate1, 1) - // The calculation should be deterministic, so making sure the parameters generates the same id. - assert.Equal(t, id1, id2) - fixedDate2 := time.Date(2022, 9, 1, 0, 0, 2, 0, time.Local) - id3 := c.getRequestID(fixedDate2, 1) - - // The request id is based on time, so if the difference it only the time, then the new ID should be greater. - id1Num, _ := strconv.ParseUint(id1, 10, 64) - id3Num, _ := strconv.ParseUint(id3, 10, 64) - assert.Greater(t, id3Num, id1Num) - - // Increasing the chunk index should increase the id. - id4 := c.getRequestID(fixedDate2, 3) - id4Num, _ := strconv.ParseUint(id4, 10, 64) - assert.Equal(t, id3Num+2, id4Num) - - // Changing the host -> changing the hash. - cfg.HostName = "host2" - c.requestIDCachedHash = nil - id5 := c.getRequestID(fixedDate1, 1) - assert.NotEqual(t, id1, id5) + c.runCheck(check) } diff --git a/cmd/process-agent/command/command.go b/cmd/process-agent/command/command.go new file mode 100644 index 0000000000000..4ea48ca9d053a --- /dev/null +++ b/cmd/process-agent/command/command.go @@ -0,0 +1,192 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package command implements the top-level `process-agent` binary, including its subcommands. +package command + +import ( + "os" + "path/filepath" + "strings" + + "github.com/fatih/color" + "github.com/spf13/cobra" + + "github.com/DataDog/datadog-agent/cmd/process-agent/flags" + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/process/util" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +const LoggerName config.LoggerName = "PROCESS" + +// GlobalParams contains the values of agent-global Cobra flags. +// +// A pointer to this type is passed to SubcommandFactory's, but its contents +// are not valid until Cobra calls the subcommand's Run or RunE function. +type GlobalParams struct { + // ConfFilePath holds the path to the folder containing the configuration + // file, to allow overrides from the command line + ConfFilePath string + + // SysProbeConfFilePath holds the path to the folder containing the system-probe + // configuration file, to allow overrides from the command line + SysProbeConfFilePath string + + // PidFilePath specifies the path to the pid file + PidFilePath string + + // Info + Info bool + + // WinParams provides windows specific options + WinParams WinParams +} + +// WinParams specifies Windows-specific CLI params +type WinParams struct { + // StartService handles starting the service + StartService bool + + // StopService handles stopping the service + StopService bool + + // Foreground handles running the service in the foreground + Foreground bool +} + +// SubcommandFactory is a callable that will return a slice of subcommands. +type SubcommandFactory func(globalParams *GlobalParams) []*cobra.Command + +// MakeCommand makes the top-level Cobra command for this app. +func MakeCommand(subcommandFactories []SubcommandFactory, winParams bool, rootCmdRun func(globalParams *GlobalParams)) *cobra.Command { + globalParams := GlobalParams{} + + rootCmd := &cobra.Command{ + Run: func(cmd *cobra.Command, args []string) { + rootCmdRun(&globalParams) + }, + SilenceUsage: true, + } + + rootCmd.PersistentFlags().StringVar(&globalParams.ConfFilePath, flags.CfgPath, flags.DefaultConfPath, "Path to datadog.yaml config") + + if flags.DefaultSysProbeConfPath != "" { + rootCmd.PersistentFlags().StringVar(&globalParams.SysProbeConfFilePath, flags.SysProbeConfig, flags.DefaultSysProbeConfPath, "Path to system-probe.yaml config") + } + + rootCmd.PersistentFlags().StringVarP(&globalParams.PidFilePath, "pid", "p", "", "Path to set pidfile for process") + rootCmd.PersistentFlags().BoolVarP(&globalParams.Info, "info", "i", false, "Show info about running process agent and exit") + rootCmd.PersistentFlags().BoolP("version", "v", false, "[deprecated] Print the version and exit") + rootCmd.PersistentFlags().String("check", "", + "[deprecated] Run a specific check and print the results. Choose from: process, rtprocess, container, rtcontainer, connections, process_discovery") + + if winParams { + // windows-specific options for controlling the service + rootCmd.PersistentFlags().BoolVar(&globalParams.WinParams.StartService, "start-service", false, "Starts the process agent service") + rootCmd.PersistentFlags().BoolVar(&globalParams.WinParams.StopService, "stop-service", false, "Stops the process agent service") + rootCmd.PersistentFlags().BoolVar(&globalParams.WinParams.Foreground, "foreground", false, "Always run foreground instead whether session is interactive or not") + } + // github.com/fatih/color sets its global color.NoColor to a default value based on + // whether the process is running in a tty. So, we only want to override that when + // the value is true. + var noColorFlag bool + rootCmd.PersistentFlags().BoolVarP(&noColorFlag, "no-color", "n", false, "disable color output") + rootCmd.PersistentPreRun = func(*cobra.Command, []string) { + if noColorFlag { + color.NoColor = true + } + } + + for _, sf := range subcommandFactories { + subcommands := sf(&globalParams) + for _, cmd := range subcommands { + rootCmd.AddCommand(cmd) + } + } + + return rootCmd +} + +// BootstrapConfig is a helper for process-agent config initialization (until we further refactor to use components) +func BootstrapConfig(path string, oneshotCommand bool) error { + setHostMountEnv() + + if err := loadConfigIfExists(path); err != nil { + return err + } + + // Resolve any secrets + if err := config.ResolveSecrets(config.Datadog, filepath.Base(path)); err != nil { + return err + } + + var ( + logFile string + syslogURI string + syslogRFC = false + logToConsole = true + logAsJSON = false + ) + + if !oneshotCommand { + syslogURI = config.GetSyslogURI() + syslogRFC = config.Datadog.GetBool("syslog_rfc") + logToConsole = config.Datadog.GetBool("log_to_console") + logAsJSON = config.Datadog.GetBool("log_format_json") + + if !config.Datadog.GetBool("disable_file_logging") { + logFile = config.Datadog.GetString("process_config.log_file") + } + } + + return config.SetupLogger( + LoggerName, + config.Datadog.GetString("log_level"), + logFile, + syslogURI, + syslogRFC, + logToConsole, + logAsJSON, + ) +} + +// setHostMountEnv sets HOST_PROC and HOST_SYS mounts if applicable in containerized environments +func setHostMountEnv() { + // Set default values for proc/sys paths if unset. + // Don't set this is /host is not mounted to use context within container. + // Generally only applicable for container-only cases like Fargate. + if !config.IsContainerized() || !util.PathExists("/host") { + return + } + + if v := os.Getenv("HOST_PROC"); v == "" { + os.Setenv("HOST_PROC", "/host/proc") + } + if v := os.Getenv("HOST_SYS"); v == "" { + os.Setenv("HOST_SYS", "/host/sys") + } +} + +// loadConfigIfExists takes a path to either a directory containing datadog.yaml or a direct path to a datadog.yaml file +// and loads it into ddconfig.Datadog. It does this silently, and does not produce any logs. +func loadConfigIfExists(path string) error { + if path == "" { + return nil + } + + if !util.PathExists(path) { + log.Infof("No config exists at %s, ignoring...", path) + return nil + } + + config.Datadog.AddConfigPath(path) + if strings.HasSuffix(path, ".yaml") { // If they set a config file directly, let's try to honor that + config.Datadog.SetConfigFile(path) + } + + _, err := config.LoadWithoutSecret() + return err +} diff --git a/cmd/process-agent/deprecated.go b/cmd/process-agent/command/deprecated.go similarity index 94% rename from cmd/process-agent/deprecated.go rename to cmd/process-agent/command/deprecated.go index d77615f7c6610..e0360bc39ab8c 100644 --- a/cmd/process-agent/deprecated.go +++ b/cmd/process-agent/command/deprecated.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package main +package command import ( "fmt" @@ -52,11 +52,11 @@ func replaceFlagSubCommandPosArg(replaceWith string) replaceFlagFunc { } } -// fixDeprecatedFlags transforms args so that they are conforming to the new CLI structure: +// FixDeprecatedFlags transforms args so that they are conforming to the new CLI structure: // - replace non-posix flags posix flags // - replace deprecated flags with their command equivalents // - display warnings when deprecated flags are encountered -func fixDeprecatedFlags(args []string, w io.Writer) []string { +func FixDeprecatedFlags(args []string, w io.Writer) []string { var ( replaceCfgPath = replaceFlagExact("--cfgpath") replaceVersion = replaceFlagExact("version") diff --git a/cmd/process-agent/deprecated_test.go b/cmd/process-agent/command/deprecated_test.go similarity index 98% rename from cmd/process-agent/deprecated_test.go rename to cmd/process-agent/command/deprecated_test.go index efc31fd7beb6a..c6ef0a4e42131 100644 --- a/cmd/process-agent/deprecated_test.go +++ b/cmd/process-agent/command/deprecated_test.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package main +package command import ( "strings" @@ -187,7 +187,7 @@ func TestFixDeprecatedFlags(t *testing.T) { for _, tc := range tests { t.Run(tc.cli, func(t *testing.T) { w := strings.Builder{} - actualArgs := fixDeprecatedFlags(strings.Split(tc.cli, " "), &w) + actualArgs := FixDeprecatedFlags(strings.Split(tc.cli, " "), &w) assert.Equal(t, tc.expectArgs, actualArgs) assert.Equal(t, tc.expectWarn, w.String()) diff --git a/cmd/process-agent/commands/config/config.go b/cmd/process-agent/commands/config/config.go deleted file mode 100644 index 3bc6dc10d66ee..0000000000000 --- a/cmd/process-agent/commands/config/config.go +++ /dev/null @@ -1,143 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package config - -import ( - "fmt" - - "github.com/DataDog/datadog-agent/pkg/config/settings" - - "github.com/spf13/cobra" -) - -// Config returns the main cobra config command. -func Config(getClient settings.ClientBuilder) *cobra.Command { - cmd := &cobra.Command{ - Use: "config", - Short: "Print the runtime configuration of a running agent", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { return showRuntimeConfiguration(getClient, cmd, args) }, - } - - cmd.AddCommand(listRuntime(getClient)) - cmd.AddCommand(set(getClient)) - cmd.AddCommand(get(getClient)) - - return cmd -} - -// listRuntime returns a cobra command to list the settings that can be changed at runtime. -func listRuntime(getClient settings.ClientBuilder) *cobra.Command { - return &cobra.Command{ - Use: "list-runtime", - Short: "List settings that can be changed at runtime", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - return listRuntimeConfigurableValue(getClient, cmd, args) - }, - } -} - -// set returns a cobra command to set a config value at runtime. -func set(getClient settings.ClientBuilder) *cobra.Command { - return &cobra.Command{ - Use: "set [setting] [value]", - Short: "Set, for the current runtime, the value of a given configuration setting", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { return setConfigValue(getClient, cmd, args) }, - } -} - -// get returns a cobra command to get a runtime config value. -func get(getClient settings.ClientBuilder) *cobra.Command { - return &cobra.Command{ - Use: "get [setting]", - Short: "Get, for the current runtime, the value of a given configuration setting", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { return getConfigValue(getClient, cmd, args) }, - } -} - -func showRuntimeConfiguration(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - c, err := getClient(cmd, args) - if err != nil { - return err - } - - runtimeConfig, err := c.FullConfig() - if err != nil { - return err - } - - fmt.Println(runtimeConfig) - - return nil -} - -func listRuntimeConfigurableValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - c, err := getClient(cmd, args) - if err != nil { - return err - } - - settingsList, err := c.List() - if err != nil { - return err - } - - fmt.Println("=== Settings that can be changed at runtime ===") - for setting, details := range settingsList { - if !details.Hidden { - fmt.Printf("%-30s %s\n", setting, details.Description) - } - } - - return nil -} - -func setConfigValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - if len(args) != 2 { - return fmt.Errorf("exactly two parameters are required: the setting name and its value") - } - - c, err := getClient(cmd, args) - if err != nil { - return err - } - - hidden, err := c.Set(args[0], args[1]) - if err != nil { - return err - } - - if hidden { - fmt.Printf("IMPORTANT: you have modified a hidden option, this may incur billing charges or have other unexpected side-effects.\n") - } - - fmt.Printf("Configuration setting %s is now set to: %s\n", args[0], args[1]) - - return nil -} - -func getConfigValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - if len(args) != 1 { - return fmt.Errorf("a single setting name must be specified") - } - - c, err := getClient(cmd, args) - if err != nil { - return err - } - - value, err := c.Get(args[0]) - if err != nil { - return err - } - - fmt.Printf("%s is set to: %v\n", args[0], value) - - return nil -} diff --git a/cmd/process-agent/config.go b/cmd/process-agent/config.go index 59db737d28bb1..a4214bb8a1d44 100644 --- a/cmd/process-agent/config.go +++ b/cmd/process-agent/config.go @@ -17,7 +17,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -func getChecks(sysCfg *sysconfig.Config, oCfg *oconfig.OrchestratorConfig, canAccessContainers bool) (checkCfg []checks.Check) { +func getChecks(sysCfg *sysconfig.Config, canAccessContainers bool) (checkCfg []checks.Check) { rtChecksEnabled := !ddconfig.Datadog.GetBool("process_config.disable_realtime_checks") if ddconfig.Datadog.GetBool("process_config.process_collection.enabled") { checkCfg = append(checkCfg, checks.Process) @@ -44,13 +44,8 @@ func getChecks(sysCfg *sysconfig.Config, oCfg *oconfig.OrchestratorConfig, canAc checkCfg = append(checkCfg, checks.ProcessEvents) } - // activate the pod collection if enabled and we have the cluster name set - if oCfg.OrchestrationCollectionEnabled { - if oCfg.KubeClusterName != "" { - checkCfg = append(checkCfg, checks.Pod) - } else { - _ = log.Warnf("Failed to auto-detect a Kubernetes cluster name. Pod collection will not start. To fix this, set it manually via the cluster_name config option") - } + if isOrchestratorCheckEnabled() { + checkCfg = append(checkCfg, checks.Pod) } if sysCfg.Enabled { @@ -65,6 +60,20 @@ func getChecks(sysCfg *sysconfig.Config, oCfg *oconfig.OrchestratorConfig, canAc return } +func isOrchestratorCheckEnabled() bool { + // activate the pod collection if enabled and we have the cluster name set + orchestratorEnabled, kubeClusterName := oconfig.IsOrchestratorEnabled() + if !orchestratorEnabled { + return false + } + + if kubeClusterName == "" { + _ = log.Warnf("Failed to auto-detect a Kubernetes cluster name. Pod collection will not start. To fix this, set it manually via the cluster_name config option") + return false + } + return true +} + func getAPIEndpoints() (eps []apicfg.Endpoint, err error) { return getAPIEndpointsWithKeys("https://process.", "process_config.process_dd_url", "process_config.additional_endpoints") } diff --git a/cmd/process-agent/config_test.go b/cmd/process-agent/config_test.go index 66dce2c28de56..c00b42d38accd 100644 --- a/cmd/process-agent/config_test.go +++ b/cmd/process-agent/config_test.go @@ -13,9 +13,9 @@ import ( sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" "github.com/DataDog/datadog-agent/pkg/config" - oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" "github.com/DataDog/datadog-agent/pkg/process/checks" apicfg "github.com/DataDog/datadog-agent/pkg/process/util/api/config" + "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" ) func mkurl(rawurl string) *url.URL { @@ -27,20 +27,20 @@ func mkurl(rawurl string) *url.URL { } func TestProcessDiscovery(t *testing.T) { - scfg, ocfg := &sysconfig.Config{}, &oconfig.OrchestratorConfig{} + scfg := &sysconfig.Config{} cfg := config.Mock(t) // Make sure the process_discovery check can be enabled t.Run("enabled", func(t *testing.T) { cfg.Set("process_config.process_discovery.enabled", true) - enabledChecks := getChecks(scfg, ocfg, false) + enabledChecks := getChecks(scfg, false) assert.Contains(t, enabledChecks, checks.ProcessDiscovery) }) // Make sure the process_discovery check can be disabled t.Run("disabled", func(t *testing.T) { cfg.Set("process_config.process_discovery.enabled", false) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.NotContains(t, enabledChecks, checks.ProcessDiscovery) }) @@ -48,13 +48,13 @@ func TestProcessDiscovery(t *testing.T) { t.Run("mutual exclusion", func(t *testing.T) { cfg.Set("process_config.process_discovery.enabled", true) cfg.Set("process_config.process_collection.enabled", true) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.NotContains(t, enabledChecks, checks.ProcessDiscovery) }) } func TestContainerCheck(t *testing.T) { - scfg, ocfg := &sysconfig.Config{}, &oconfig.OrchestratorConfig{} + scfg := &sysconfig.Config{} cfg := config.Mock(t) // Make sure the container check can be enabled if the process check is disabled @@ -63,7 +63,7 @@ func TestContainerCheck(t *testing.T) { cfg.Set("process_config.container_collection.enabled", true) cfg.Set("process_config.disable_realtime_checks", false) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.Contains(t, enabledChecks, checks.Container) assert.Contains(t, enabledChecks, checks.RTContainer) assert.NotContains(t, enabledChecks, checks.Process) @@ -75,7 +75,7 @@ func TestContainerCheck(t *testing.T) { cfg.Set("process_config.container_collection.enabled", true) cfg.Set("process_config.disable_realtime_checks", true) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.Contains(t, enabledChecks, checks.Container) assert.NotContains(t, enabledChecks, checks.RTContainer) }) @@ -85,7 +85,7 @@ func TestContainerCheck(t *testing.T) { cfg.Set("process_config.process_collection.enabled", false) cfg.Set("process_config.container_collection.enabled", true) - enabledChecks := getChecks(scfg, ocfg, false) + enabledChecks := getChecks(scfg, false) assert.NotContains(t, enabledChecks, checks.Container) assert.NotContains(t, enabledChecks, checks.RTContainer) }) @@ -95,7 +95,7 @@ func TestContainerCheck(t *testing.T) { cfg.Set("process_config.process_collection.enabled", true) cfg.Set("process_config.container_collection.enabled", true) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.Contains(t, enabledChecks, checks.Process) assert.NotContains(t, enabledChecks, checks.Container) assert.NotContains(t, enabledChecks, checks.RTContainer) @@ -108,24 +108,22 @@ func TestProcessCheck(t *testing.T) { scfg, err := sysconfig.New("") assert.NoError(t, err) - ocfg := &oconfig.OrchestratorConfig{} - t.Run("disabled", func(t *testing.T) { cfg.Set("process_config.process_collection.enabled", false) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.NotContains(t, enabledChecks, checks.Process) }) // Make sure the process check can be enabled t.Run("enabled", func(t *testing.T) { cfg.Set("process_config.process_collection.enabled", true) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.Contains(t, enabledChecks, checks.Process) }) } func TestSysprobeProcessModule(t *testing.T) { - cfg, ocfg := config.Mock(t), &oconfig.OrchestratorConfig{} + cfg := config.Mock(t) cfg.Set("process_config.process_collection.enabled", true) cfg.Set("system_probe_config.enabled", true) @@ -134,7 +132,7 @@ func TestSysprobeProcessModule(t *testing.T) { scfg, err := sysconfig.New("") assert.NoError(t, err) - _ = getChecks(scfg, ocfg, true) + _ = getChecks(scfg, true) assert.True(t, checks.Process.SysprobeProcessModuleEnabled) }) @@ -143,14 +141,13 @@ func TestSysprobeProcessModule(t *testing.T) { scfg, err := sysconfig.New("") assert.NoError(t, err) - _ = getChecks(scfg, ocfg, false) + _ = getChecks(scfg, false) assert.False(t, checks.Process.SysprobeProcessModuleEnabled) }) } func TestConnectionsCheck(t *testing.T) { cfg := config.Mock(t) - ocfg := &oconfig.OrchestratorConfig{} cfg.Set("system_probe_config.enabled", true) t.Run("enabled", func(t *testing.T) { @@ -158,7 +155,7 @@ func TestConnectionsCheck(t *testing.T) { scfg, err := sysconfig.New("") assert.NoError(t, err) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.Contains(t, enabledChecks, checks.Connections) }) @@ -167,55 +164,58 @@ func TestConnectionsCheck(t *testing.T) { scfg, err := sysconfig.New("") assert.NoError(t, err) - enabledChecks := getChecks(scfg, ocfg, true) + enabledChecks := getChecks(scfg, true) assert.NotContains(t, enabledChecks, checks.Connections) }) } func TestPodCheck(t *testing.T) { - cfg := config.Mock(t) + config.SetDetectedFeatures(config.FeatureMap{config.Kubernetes: {}}) + defer config.SetDetectedFeatures(nil) t.Run("enabled", func(t *testing.T) { - cfg.Set("orchestrator_explorer.enabled", true) + // Resets the cluster name so that it isn't cached during the call to `getChecks()` + clustername.ResetClusterName() + defer clustername.ResetClusterName() - ocfg := oconfig.NewDefaultOrchestratorConfig() - ocfg.KubeClusterName = "test" // We can't reliably detect a kubernetes cluster in a test - assert.NoError(t, ocfg.Load()) + cfg := config.Mock(t) + cfg.Set("orchestrator_explorer.enabled", true) + cfg.Set("cluster_name", "test") - enabledChecks := getChecks(&sysconfig.Config{}, ocfg, true) + enabledChecks := getChecks(&sysconfig.Config{}, true) assert.Contains(t, enabledChecks, checks.Pod) }) t.Run("disabled", func(t *testing.T) { - cfg.Set("orchestrator_explorer.enabled", false) + clustername.ResetClusterName() + defer clustername.ResetClusterName() - ocfg := oconfig.NewDefaultOrchestratorConfig() - ocfg.KubeClusterName = "test" // We can't reliably detect a kubernetes cluster in a test - assert.NoError(t, ocfg.Load()) + cfg := config.Mock(t) + cfg.Set("orchestrator_explorer.enabled", false) - enabledChecks := getChecks(&sysconfig.Config{}, ocfg, true) + enabledChecks := getChecks(&sysconfig.Config{}, true) assert.NotContains(t, enabledChecks, checks.Pod) }) } func TestProcessEventsCheck(t *testing.T) { - scfg, ocfg := &sysconfig.Config{}, &oconfig.OrchestratorConfig{} + scfg := &sysconfig.Config{} cfg := config.Mock(t) t.Run("default", func(t *testing.T) { - enabledChecks := getChecks(scfg, ocfg, false) + enabledChecks := getChecks(scfg, false) assert.NotContains(t, enabledChecks, checks.ProcessEvents) }) t.Run("enabled", func(t *testing.T) { cfg.Set("process_config.event_collection.enabled", true) - enabledChecks := getChecks(scfg, ocfg, false) + enabledChecks := getChecks(scfg, false) assert.Contains(t, enabledChecks, checks.ProcessEvents) }) t.Run("disabled", func(t *testing.T) { cfg.Set("process_config.event_collection.enabled", false) - enabledChecks := getChecks(scfg, ocfg, false) + enabledChecks := getChecks(scfg, false) assert.NotContains(t, enabledChecks, checks.ProcessEvents) }) } diff --git a/cmd/process-agent/flags/flags_windows.go b/cmd/process-agent/flags/flags_windows.go index 852f2eed06f48..ee39b0a4b3433 100644 --- a/cmd/process-agent/flags/flags_windows.go +++ b/cmd/process-agent/flags/flags_windows.go @@ -8,13 +8,23 @@ package flags -const ( +import ( + "path/filepath" + + "github.com/DataDog/datadog-agent/pkg/util/winutil" +) + +var ( // DefaultConfPath points to the location of datadog.yaml DefaultConfPath = "c:\\programdata\\datadog\\datadog.yaml" // DefaultSysProbeConfPath points to the location of system-probe.yaml DefaultSysProbeConfPath = "c:\\programdata\\datadog\\system-probe.yaml" - // DefaultConfdPath points to the location of conf.d - DefaultConfdPath = "c:\\programdata\\datadog\\conf.d" - // DefaultLogFilePath points to the location of process-agent.log - DefaultLogFilePath = "c:\\programdata\\datadog\\logs\\process-agent.log" ) + +func init() { + pd, err := winutil.GetProgramDataDir() + if err == nil { + DefaultConfPath = filepath.Join(pd, "datadog.yaml") + DefaultSysProbeConfPath = filepath.Join(pd, "system-probe.yaml") + } +} diff --git a/cmd/process-agent/info.go b/cmd/process-agent/info.go index 335620e080874..530d2a850e03f 100644 --- a/cmd/process-agent/info.go +++ b/cmd/process-agent/info.go @@ -23,7 +23,7 @@ import ( model "github.com/DataDog/agent-payload/v5/process" ddconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/checks" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/version" ) @@ -59,9 +59,14 @@ const ( {{.Banner}} Pid: {{.Status.Pid}} - Hostname: {{.Status.Config.HostName}} + Hostname: {{.Status.HostName}} Uptime: {{.Status.Uptime}} seconds Mem alloc: {{.Status.MemStats.Alloc}} bytes + {{- if .Status.SystemProbeProcessModuleEnabled }} + System Probe Process Module Status: Running + {{- else}} + System Probe Process Module Status: Not running + {{- end}} Last collection time: {{.Status.LastCollectTime}}{{if ne .Status.DockerSocket ""}} Docker socket: {{.Status.DockerSocket}}{{end}} @@ -100,6 +105,10 @@ const ( ` ) +func publishSystemProbeProcessModuleEnabled() interface{} { + return checks.Process.SysprobeProcessModuleEnabled +} + func publishUptime() interface{} { return int(time.Since(infoStart) / time.Second) } @@ -272,32 +281,33 @@ func getProgramBanner(version string) (string, string) { // StatusInfo is a structure to get information from expvar and feed to template type StatusInfo struct { - Pid int `json:"pid"` - Uptime int `json:"uptime"` - MemStats struct{ Alloc uint64 } `json:"memstats"` - Version version.Version `json:"version"` - Config config.AgentConfig `json:"config"` - DockerSocket string `json:"docker_socket"` - LastCollectTime string `json:"last_collect_time"` - ProcessCount int `json:"process_count"` - ContainerCount int `json:"container_count"` - ProcessQueueSize int `json:"process_queue_size"` - RTProcessQueueSize int `json:"rtprocess_queue_size"` - ConnectionsQueueSize int `json:"connections_queue_size"` - EventQueueSize int `json:"event_queue_size"` - PodQueueSize int `json:"pod_queue_size"` - ProcessQueueBytes int `json:"process_queue_bytes"` - RTProcessQueueBytes int `json:"rtprocess_queue_bytes"` - ConnectionsQueueBytes int `json:"connections_queue_bytes"` - EventQueueBytes int `json:"event_queue_bytes"` - PodQueueBytes int `json:"pod_queue_bytes"` - ContainerID string `json:"container_id"` - ProxyURL string `json:"proxy_url"` - LogFile string `json:"log_file"` - DropCheckPayloads []string `json:"drop_check_payloads"` + Pid int `json:"pid"` + HostName string `json:"host"` + Uptime int `json:"uptime"` + MemStats struct{ Alloc uint64 } `json:"memstats"` + Version version.Version `json:"version"` + DockerSocket string `json:"docker_socket"` + LastCollectTime string `json:"last_collect_time"` + ProcessCount int `json:"process_count"` + ContainerCount int `json:"container_count"` + ProcessQueueSize int `json:"process_queue_size"` + RTProcessQueueSize int `json:"rtprocess_queue_size"` + ConnectionsQueueSize int `json:"connections_queue_size"` + EventQueueSize int `json:"event_queue_size"` + PodQueueSize int `json:"pod_queue_size"` + ProcessQueueBytes int `json:"process_queue_bytes"` + RTProcessQueueBytes int `json:"rtprocess_queue_bytes"` + ConnectionsQueueBytes int `json:"connections_queue_bytes"` + EventQueueBytes int `json:"event_queue_bytes"` + PodQueueBytes int `json:"pod_queue_bytes"` + ContainerID string `json:"container_id"` + ProxyURL string `json:"proxy_url"` + LogFile string `json:"log_file"` + DropCheckPayloads []string `json:"drop_check_payloads"` + SystemProbeProcessModuleEnabled bool `json:"system_probe_process_module_enabled"` } -func initInfo(_ *config.AgentConfig) error { +func initInfo(hostname string) error { var err error funcMap := template.FuncMap{ @@ -309,6 +319,7 @@ func initInfo(_ *config.AgentConfig) error { }, } infoOnce.Do(func() { + expvar.NewString("host").Set(hostname) expvar.NewInt("pid").Set(int64(os.Getpid())) expvar.Publish("uptime", expvar.Func(publishUptime)) expvar.Publish("uptime_nano", expvar.Func(publishUptimeNano)) @@ -331,6 +342,7 @@ func initInfo(_ *config.AgentConfig) error { expvar.Publish("enabled_checks", expvar.Func(publishEnabledChecks)) expvar.Publish("endpoints", expvar.Func(publishEndpoints)) expvar.Publish("drop_check_payloads", expvar.Func(publishDropCheckPayloads)) + expvar.Publish("system_probe_process_module_enabled", expvar.Func(publishSystemProbeProcessModuleEnabled)) infoTmpl, err = template.New("info").Funcs(funcMap).Parse(infoTmplSrc) if err != nil { @@ -350,7 +362,7 @@ func initInfo(_ *config.AgentConfig) error { } // Info is called when --info flag is enabled when executing the agent binary -func Info(w io.Writer, _ *config.AgentConfig, expvarURL string) error { +func Info(w io.Writer, expvarURL string) error { agentVersion, _ := version.Agent() var err error client := http.Client{Timeout: 2 * time.Second} diff --git a/cmd/process-agent/info_test.go b/cmd/process-agent/info_test.go index 27edc6f1b218a..90fd080e4253a 100644 --- a/cmd/process-agent/info_test.go +++ b/cmd/process-agent/info_test.go @@ -16,7 +16,6 @@ import ( "github.com/stretchr/testify/assert" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/version" ) @@ -29,6 +28,7 @@ Processes and Containers Agent (v 0.99.0) Hostname: ubuntu-1404.vagrantup.com Uptime: 3464 seconds Mem alloc: 2096792 bytes + System Probe Process Module Status: Not running Last collection time: 2017-09-28 07:10:16 Docker socket: /var/run/docker.sock @@ -63,6 +63,13 @@ Processes and Containers Agent (v 0.99.0) Error: EOF ` + expVarPath = "/debug/vars" + sysProbeProcessModuleEnabledExpVarPath = "/debug/vars/sysprobeprocessmoduleon" + expVarResponse = `{ + "cmdline":["/opt/datadog-agent/bin/process-agent"], "host":"ubuntu-1404.vagrantup.com", "container_count":0,"container_id":"", + "system_probe_process_module_enabled":false, + "docker_socket":"/var/run/docker.sock","forwarder":{"APIKeyStatus":{},"TransactionsCreated":{"RetryQueueSize":0}},"last_collect_time":"2017-09-28 07:10:16","memstats":{"Alloc":2096792,"BuckHashSys":1482366,"BySize":[{"Frees":0,"Mallocs":0,"Size":0},{"Frees":412497,"Mallocs":412634,"Size":8},{"Frees":2158061,"Mallocs":2161254,"Size":16},{"Frees":6301195,"Mallocs":6310794,"Size":32},{"Frees":1025554,"Mallocs":1026617,"Size":48},{"Frees":290415,"Mallocs":291445,"Size":64},{"Frees":67074,"Mallocs":67581,"Size":80},{"Frees":40953,"Mallocs":41171,"Size":96},{"Frees":171019,"Mallocs":171274,"Size":112},{"Frees":174757,"Mallocs":174840,"Size":128},{"Frees":1291,"Mallocs":1324,"Size":144},{"Frees":114113,"Mallocs":114205,"Size":160},{"Frees":45454,"Mallocs":45580,"Size":176},{"Frees":13201,"Mallocs":13208,"Size":192},{"Frees":311938,"Mallocs":311985,"Size":208},{"Frees":3497,"Mallocs":3503,"Size":224},{"Frees":1053,"Mallocs":1058,"Size":240},{"Frees":9967,"Mallocs":10007,"Size":256},{"Frees":937,"Mallocs":987,"Size":288},{"Frees":76158,"Mallocs":76606,"Size":320},{"Frees":1429,"Mallocs":1449,"Size":352},{"Frees":15,"Mallocs":17,"Size":384},{"Frees":48,"Mallocs":183,"Size":416},{"Frees":363,"Mallocs":365,"Size":448},{"Frees":45748,"Mallocs":45751,"Size":480},{"Frees":311959,"Mallocs":311981,"Size":512},{"Frees":46935,"Mallocs":47209,"Size":576},{"Frees":124,"Mallocs":136,"Size":640},{"Frees":31699,"Mallocs":31713,"Size":704},{"Frees":754,"Mallocs":755,"Size":768},{"Frees":106874,"Mallocs":107064,"Size":896},{"Frees":6997,"Mallocs":7045,"Size":1024},{"Frees":60,"Mallocs":68,"Size":1152},{"Frees":69,"Mallocs":83,"Size":1280},{"Frees":1127,"Mallocs":1133,"Size":1408},{"Frees":257413,"Mallocs":257413,"Size":1536},{"Frees":3235,"Mallocs":3245,"Size":1792},{"Frees":3155,"Mallocs":3201,"Size":2048},{"Frees":1069,"Mallocs":1078,"Size":2304},{"Frees":1757,"Mallocs":1774,"Size":2688},{"Frees":692,"Mallocs":692,"Size":3072},{"Frees":350,"Mallocs":352,"Size":3200},{"Frees":0,"Mallocs":5,"Size":3456},{"Frees":6847,"Mallocs":6861,"Size":4096},{"Frees":11,"Mallocs":22,"Size":4864},{"Frees":11,"Mallocs":12,"Size":5376},{"Frees":8,"Mallocs":11,"Size":6144},{"Frees":349,"Mallocs":349,"Size":6528},{"Frees":0,"Mallocs":1,"Size":6784},{"Frees":0,"Mallocs":0,"Size":6912},{"Frees":889,"Mallocs":891,"Size":8192},{"Frees":175,"Mallocs":176,"Size":9472},{"Frees":0,"Mallocs":0,"Size":9728},{"Frees":16,"Mallocs":16,"Size":10240},{"Frees":9,"Mallocs":11,"Size":10880},{"Frees":0,"Mallocs":0,"Size":12288},{"Frees":0,"Mallocs":0,"Size":13568},{"Frees":0,"Mallocs":0,"Size":14336},{"Frees":2,"Mallocs":2,"Size":16384},{"Frees":8,"Mallocs":11,"Size":18432},{"Frees":0,"Mallocs":0,"Size":19072}],"DebugGC":false,"EnableGC":true,"Frees":12980452,"GCCPUFraction":0.00027660329858230417,"GCSys":671744,"HeapAlloc":2096792,"HeapIdle":2113536,"HeapInuse":4243456,"HeapObjects":17826,"HeapReleased":0,"HeapSys":6356992,"LastGC":1506582616117567500,"Lookups":787843,"MCacheInuse":9600,"MCacheSys":16384,"MSpanInuse":85728,"MSpanSys":114688,"Mallocs":12998278,"NextGC":4194304,"NumForcedGC":0,"NumGC":580,"OtherSys":1489530,"PauseEnd":[1506582226101035000,1506582226112501200,1506582236177119200,1506582246109827600,1506582246161165300,1506582256157039800,1506582256196451300,1506582266100831200,1506582266112478200,1506582276101476900,1506582286106396000,1506582286126687500,1506582296099503000,1506582296110266000,1506582306106153200,1506582316097177900,1506582316110753300,1506582326106338000,1506582326122362000,1506582336109635800,1506582346098246400,1506582346111455200,1506582356100117800,1506582356113638400,1506582366106036500,1506582376103559700,1506582376118026000,1506582386103282000,1506582386114026000,1506582396105205200,1506582406101939000,1506582406127845400,1506582416100454100,1506582416111487000,1506582426104607200,1506582436106598000,1506582436121981400,1506582446105687600,1506582446132311000,1506582456104680000,1506582466133406200,1506582466197264000,1506582476123873800,1506582476188246800,1506582486101491500,1506582486113159400,1506582496106409500,1506582506099725000,1506582506115678200,1506582516101830400,1506582516120312600,1506582526133332700,1506582536133508400,1506582536174795500,1506582546101393700,1506582546112282000,1506582556102495500,1506582566097362700,1506582566107364400,1506582576102698000,1506582576113667000,1506582586111737900,1506582596134309400,1506582596154338300,1506582606109634600,1506582606140238800,1506582616100704800,1506582616117567500,1506581106098407200,1506581106109227000,1506581116101760500,1506581116109269000,1506581126107651600,1506581126135905000,1506581136113266200,1506581146101469000,1506581146110897700,1506581156101606000,1506581156112118500,1506581166103714600,1506581176102541300,1506581176115352800,1506581186101816600,1506581186113160200,1506581196102513400,1506581206098444800,1506581206108308700,1506581216099007200,1506581216108940300,1506581226105730800,1506581226126397200,1506581236105284000,1506581246100745200,1506581246109144600,1506581256099923700,1506581256112433700,1506581266104015600,1506581276097864700,1506581276114086700,1506581286143012600,1506581286191402800,1506581296157393200,1506581296262120200,1506581306195998500,1506581316173913000,1506581316257029000,1506581326100242000,1506581326110632400,1506581336106426600,1506581346098762500,1506581346122147800,1506581356171365600,1506581356205906700,1506581366199512300,1506581366274589700,1506581376106299100,1506581376117759500,1506581386104804900,1506581396102094000,1506581396117333000,1506581406101776000,1506581416097738800,1506581416107423000,1506581426099014100,1506581426109568500,1506581436110609700,1506581446098193400,1506581446109034500,1506581456107947800,1506581456122633200,1506581466103874000,1506581476133261300,1506581476160198100,1506581486115513600,1506581486138224400,1506581496116856600,1506581496198111000,1506581506115676000,1506581516100093700,1506581516117489200,1506581526110691000,1506581526122211300,1506581536117504500,1506581546103023600,1506581546122240500,1506581556106510000,1506581566101397200,1506581566117625000,1506581576108421400,1506581576122919200,1506581586113834000,1506581596155364000,1506581596216066600,1506581606105134300,1506581606115653000,1506581616114833700,1506581626101752800,1506581626109803300,1506581636101229300,1506581636117020200,1506581646104537000,1506581656102321400,1506581656110860500,1506581666101982500,1506581676102100700,1506581676111583500,1506581686107026200,1506581686123608300,1506581696107647500,1506581706101321700,1506581706108631300,1506581716100399400,1506581716112764200,1506581726108076500,1506581736103447000,1506581736117864000,1506581746102340600,1506581756099405600,1506581756110430700,1506581766098815200,1506581766108658200,1506581776105958700,1506581786100751000,1506581786109499600,1506581796106018300,1506581796116269600,1506581806111348000,1506581816098433500,1506581816107445500,1506581826102063800,1506581826113313300,1506581836106883800,1506581846098780700,1506581846109101800,1506581856104110600,1506581856115759800,1506581866107832000,1506581876098012200,1506581876107959000,1506581886101321200,1506581886112426200,1506581896105218000,1506581906112097800,1506581906149966600,1506581916147979300,1506581916269657300,1506581926117701000,1506581936101587200,1506581936110430700,1506581946101771000,1506581946111723800,1506581956103544000,1506581966101098800,1506581966110184400,1506581976105113900,1506581976114027300,1506581986155667200,1506581996107511600,1506581996126415400,1506582006102447400,1506582006111234300,1506582016100840200,1506582016111904300,1506582026109052200,1506582036099488300,1506582036109610200,1506582046104646400,1506582056101391000,1506582056109750800,1506582066099548700,1506582066109651700,1506582076157450500,1506582086140934400,1506582086166320000,1506582096106871300,1506582096143585000,1506582106106380800,1506582106134424800,1506582116104113400,1506582126099607600,1506582126110588700,1506582136102966500,1506582146101210400,1506582146142070500,1506582156155882500,1506582156246712600,1506582166157606400,1506582166199486500,1506582176105659400,1506582186097889000,1506582186107386600,1506582196102539300,1506582196111375400,1506582206103425500,1506582216098815700,1506582216122575000],"PauseNs":[202108,111195,21103433,4734207,15843043,17352156,20656960,325707,120873,145645,1259619,165623,206534,201725,678258,94953,164909,278077,411994,4234278,324415,113182,118542,181238,2308665,531144,225488,1524394,203164,1016146,172322,9750220,150765,113357,123909,7350338,129862,1782936,6970455,280722,3123825,8507248,1213709,390248,792984,264343,182112,167632,304755,294682,241455,4768157,11009560,17620970,73196,139842,109420,148579,259885,833279,165886,6578634,2389416,2169273,4134418,1347554,780562,531306,137560,147447,163720,152183,667379,3140549,630481,82678,122852,117171,87366,285812,887783,201820,146584,130057,151639,236975,110644,177687,164236,1106801,4601777,270537,54591,490993,161521,252501,110987,254652,1085837,24134635,5505333,19258429,16958700,25820682,37778785,15691409,337939,211482,178633,144971,2766195,12353022,6834896,44842527,22457655,172082,686213,200130,112915,232162,138353,80799,117007,97286,108548,1937426,280192,156610,99514,430100,155465,687228,2882711,6731693,65804,1624821,159652,285577,60549,157904,5916134,412288,132597,908879,272218,180757,732263,169132,745769,306887,7252246,4394707,951611,82203,213042,117441,112781,112222,300525,1211909,145623,113760,164115,225506,96600,953395,1874155,204582,115017,187433,130060,156279,312904,97728,2302220,232036,124466,632575,121143,149310,200161,248362,153779,119662,494180,534981,316531,185806,152670,211013,132662,2033315,253769,850340,299891,140935,120561,170304,87502,712511,758267,102834,472697,1307030,24962796,254714,2628369,266971,1318833,108503,131614,120129,222602,1789785,129309,746252,19088113,823822,253070,163050,183856,123350,126196,226394,97382,152971,1404152,196053,1299475,136466,185384,20561432,12951037,1264979,5630592,2187745,254259,1811039,164578,144580,244778,207351,2194256,12554634,16700526,5939874,18788363,9003636,379686,92515,771011,1034056,795588,842805,313889,553591],"PauseTotalNs":833945600,"StackInuse":983040,"StackSys":983040,"Sys":11114744,"TotalAlloc":1301199968},"pid":485,"process_count":84,"queue_size":0,"splitter":{},"uptime":3464,"version":{"Major": 0,"Minor": 99,"Patch": 0},"log_file":"/var/log/datadog/process-agent.log" + }` ) type testServerHandler struct { @@ -72,18 +79,23 @@ type testServerHandler struct { func (h *testServerHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") switch r.URL.Path { - case "/debug/vars": + case expVarPath: h.t.Logf("serving fake info data for %s", r.URL.Path) - _, err := w.Write([]byte(`{ -"cmdline":["/opt/datadog-agent/bin/process-agent"],"config":{"APIEndpoint":{"ForceQuery":false,"Fragment":"","Host":"localhost:3000","Opaque":"","Path":"","RawPath":"","RawQuery":"","Scheme":"http","User":null},"APIKey":"apikey_2","AllowRealTime":true,"Blacklist":[],"CheckIntervals":{"connections":10800000000000,"container":10000000000,"process":10000000000,"rtcontainer":2000000000,"rtprocess":2000000000},"CollectDockerNetwork":true,"CollectKubernetesMetadata":true,"ContainerBlacklist":null,"ContainerCacheDuration":30000000000,"ContainerWhitelist":null,"DDAgentPy":"/opt/datadog-agent/embedded/bin/python","DDAgentPyEnv":["PYTHONPATH=/opt/datadog-agent/agent"],"Enabled":true,"EnabledChecks":["process","rtprocess"],"HostName":"ubuntu-1404.vagrantup.com","KubernetesHTTPKubeletPort":10255,"KubernetesHTTPSKubeletPort":10250,"KubernetesKubeletHost":"","LogLevel":"info","Logger":null,"MaxProcFDs":200,"ProcLimit":100,"Proxy":null,"QueueSize":20,"StatsdHost":"localhost","StatsdPort":8125},"container_count":0,"container_id":"","docker_socket":"/var/run/docker.sock","forwarder":{"APIKeyStatus":{},"TransactionsCreated":{"RetryQueueSize":0}},"last_collect_time":"2017-09-28 07:10:16","memstats":{"Alloc":2096792,"BuckHashSys":1482366,"BySize":[{"Frees":0,"Mallocs":0,"Size":0},{"Frees":412497,"Mallocs":412634,"Size":8},{"Frees":2158061,"Mallocs":2161254,"Size":16},{"Frees":6301195,"Mallocs":6310794,"Size":32},{"Frees":1025554,"Mallocs":1026617,"Size":48},{"Frees":290415,"Mallocs":291445,"Size":64},{"Frees":67074,"Mallocs":67581,"Size":80},{"Frees":40953,"Mallocs":41171,"Size":96},{"Frees":171019,"Mallocs":171274,"Size":112},{"Frees":174757,"Mallocs":174840,"Size":128},{"Frees":1291,"Mallocs":1324,"Size":144},{"Frees":114113,"Mallocs":114205,"Size":160},{"Frees":45454,"Mallocs":45580,"Size":176},{"Frees":13201,"Mallocs":13208,"Size":192},{"Frees":311938,"Mallocs":311985,"Size":208},{"Frees":3497,"Mallocs":3503,"Size":224},{"Frees":1053,"Mallocs":1058,"Size":240},{"Frees":9967,"Mallocs":10007,"Size":256},{"Frees":937,"Mallocs":987,"Size":288},{"Frees":76158,"Mallocs":76606,"Size":320},{"Frees":1429,"Mallocs":1449,"Size":352},{"Frees":15,"Mallocs":17,"Size":384},{"Frees":48,"Mallocs":183,"Size":416},{"Frees":363,"Mallocs":365,"Size":448},{"Frees":45748,"Mallocs":45751,"Size":480},{"Frees":311959,"Mallocs":311981,"Size":512},{"Frees":46935,"Mallocs":47209,"Size":576},{"Frees":124,"Mallocs":136,"Size":640},{"Frees":31699,"Mallocs":31713,"Size":704},{"Frees":754,"Mallocs":755,"Size":768},{"Frees":106874,"Mallocs":107064,"Size":896},{"Frees":6997,"Mallocs":7045,"Size":1024},{"Frees":60,"Mallocs":68,"Size":1152},{"Frees":69,"Mallocs":83,"Size":1280},{"Frees":1127,"Mallocs":1133,"Size":1408},{"Frees":257413,"Mallocs":257413,"Size":1536},{"Frees":3235,"Mallocs":3245,"Size":1792},{"Frees":3155,"Mallocs":3201,"Size":2048},{"Frees":1069,"Mallocs":1078,"Size":2304},{"Frees":1757,"Mallocs":1774,"Size":2688},{"Frees":692,"Mallocs":692,"Size":3072},{"Frees":350,"Mallocs":352,"Size":3200},{"Frees":0,"Mallocs":5,"Size":3456},{"Frees":6847,"Mallocs":6861,"Size":4096},{"Frees":11,"Mallocs":22,"Size":4864},{"Frees":11,"Mallocs":12,"Size":5376},{"Frees":8,"Mallocs":11,"Size":6144},{"Frees":349,"Mallocs":349,"Size":6528},{"Frees":0,"Mallocs":1,"Size":6784},{"Frees":0,"Mallocs":0,"Size":6912},{"Frees":889,"Mallocs":891,"Size":8192},{"Frees":175,"Mallocs":176,"Size":9472},{"Frees":0,"Mallocs":0,"Size":9728},{"Frees":16,"Mallocs":16,"Size":10240},{"Frees":9,"Mallocs":11,"Size":10880},{"Frees":0,"Mallocs":0,"Size":12288},{"Frees":0,"Mallocs":0,"Size":13568},{"Frees":0,"Mallocs":0,"Size":14336},{"Frees":2,"Mallocs":2,"Size":16384},{"Frees":8,"Mallocs":11,"Size":18432},{"Frees":0,"Mallocs":0,"Size":19072}],"DebugGC":false,"EnableGC":true,"Frees":12980452,"GCCPUFraction":0.00027660329858230417,"GCSys":671744,"HeapAlloc":2096792,"HeapIdle":2113536,"HeapInuse":4243456,"HeapObjects":17826,"HeapReleased":0,"HeapSys":6356992,"LastGC":1506582616117567500,"Lookups":787843,"MCacheInuse":9600,"MCacheSys":16384,"MSpanInuse":85728,"MSpanSys":114688,"Mallocs":12998278,"NextGC":4194304,"NumForcedGC":0,"NumGC":580,"OtherSys":1489530,"PauseEnd":[1506582226101035000,1506582226112501200,1506582236177119200,1506582246109827600,1506582246161165300,1506582256157039800,1506582256196451300,1506582266100831200,1506582266112478200,1506582276101476900,1506582286106396000,1506582286126687500,1506582296099503000,1506582296110266000,1506582306106153200,1506582316097177900,1506582316110753300,1506582326106338000,1506582326122362000,1506582336109635800,1506582346098246400,1506582346111455200,1506582356100117800,1506582356113638400,1506582366106036500,1506582376103559700,1506582376118026000,1506582386103282000,1506582386114026000,1506582396105205200,1506582406101939000,1506582406127845400,1506582416100454100,1506582416111487000,1506582426104607200,1506582436106598000,1506582436121981400,1506582446105687600,1506582446132311000,1506582456104680000,1506582466133406200,1506582466197264000,1506582476123873800,1506582476188246800,1506582486101491500,1506582486113159400,1506582496106409500,1506582506099725000,1506582506115678200,1506582516101830400,1506582516120312600,1506582526133332700,1506582536133508400,1506582536174795500,1506582546101393700,1506582546112282000,1506582556102495500,1506582566097362700,1506582566107364400,1506582576102698000,1506582576113667000,1506582586111737900,1506582596134309400,1506582596154338300,1506582606109634600,1506582606140238800,1506582616100704800,1506582616117567500,1506581106098407200,1506581106109227000,1506581116101760500,1506581116109269000,1506581126107651600,1506581126135905000,1506581136113266200,1506581146101469000,1506581146110897700,1506581156101606000,1506581156112118500,1506581166103714600,1506581176102541300,1506581176115352800,1506581186101816600,1506581186113160200,1506581196102513400,1506581206098444800,1506581206108308700,1506581216099007200,1506581216108940300,1506581226105730800,1506581226126397200,1506581236105284000,1506581246100745200,1506581246109144600,1506581256099923700,1506581256112433700,1506581266104015600,1506581276097864700,1506581276114086700,1506581286143012600,1506581286191402800,1506581296157393200,1506581296262120200,1506581306195998500,1506581316173913000,1506581316257029000,1506581326100242000,1506581326110632400,1506581336106426600,1506581346098762500,1506581346122147800,1506581356171365600,1506581356205906700,1506581366199512300,1506581366274589700,1506581376106299100,1506581376117759500,1506581386104804900,1506581396102094000,1506581396117333000,1506581406101776000,1506581416097738800,1506581416107423000,1506581426099014100,1506581426109568500,1506581436110609700,1506581446098193400,1506581446109034500,1506581456107947800,1506581456122633200,1506581466103874000,1506581476133261300,1506581476160198100,1506581486115513600,1506581486138224400,1506581496116856600,1506581496198111000,1506581506115676000,1506581516100093700,1506581516117489200,1506581526110691000,1506581526122211300,1506581536117504500,1506581546103023600,1506581546122240500,1506581556106510000,1506581566101397200,1506581566117625000,1506581576108421400,1506581576122919200,1506581586113834000,1506581596155364000,1506581596216066600,1506581606105134300,1506581606115653000,1506581616114833700,1506581626101752800,1506581626109803300,1506581636101229300,1506581636117020200,1506581646104537000,1506581656102321400,1506581656110860500,1506581666101982500,1506581676102100700,1506581676111583500,1506581686107026200,1506581686123608300,1506581696107647500,1506581706101321700,1506581706108631300,1506581716100399400,1506581716112764200,1506581726108076500,1506581736103447000,1506581736117864000,1506581746102340600,1506581756099405600,1506581756110430700,1506581766098815200,1506581766108658200,1506581776105958700,1506581786100751000,1506581786109499600,1506581796106018300,1506581796116269600,1506581806111348000,1506581816098433500,1506581816107445500,1506581826102063800,1506581826113313300,1506581836106883800,1506581846098780700,1506581846109101800,1506581856104110600,1506581856115759800,1506581866107832000,1506581876098012200,1506581876107959000,1506581886101321200,1506581886112426200,1506581896105218000,1506581906112097800,1506581906149966600,1506581916147979300,1506581916269657300,1506581926117701000,1506581936101587200,1506581936110430700,1506581946101771000,1506581946111723800,1506581956103544000,1506581966101098800,1506581966110184400,1506581976105113900,1506581976114027300,1506581986155667200,1506581996107511600,1506581996126415400,1506582006102447400,1506582006111234300,1506582016100840200,1506582016111904300,1506582026109052200,1506582036099488300,1506582036109610200,1506582046104646400,1506582056101391000,1506582056109750800,1506582066099548700,1506582066109651700,1506582076157450500,1506582086140934400,1506582086166320000,1506582096106871300,1506582096143585000,1506582106106380800,1506582106134424800,1506582116104113400,1506582126099607600,1506582126110588700,1506582136102966500,1506582146101210400,1506582146142070500,1506582156155882500,1506582156246712600,1506582166157606400,1506582166199486500,1506582176105659400,1506582186097889000,1506582186107386600,1506582196102539300,1506582196111375400,1506582206103425500,1506582216098815700,1506582216122575000],"PauseNs":[202108,111195,21103433,4734207,15843043,17352156,20656960,325707,120873,145645,1259619,165623,206534,201725,678258,94953,164909,278077,411994,4234278,324415,113182,118542,181238,2308665,531144,225488,1524394,203164,1016146,172322,9750220,150765,113357,123909,7350338,129862,1782936,6970455,280722,3123825,8507248,1213709,390248,792984,264343,182112,167632,304755,294682,241455,4768157,11009560,17620970,73196,139842,109420,148579,259885,833279,165886,6578634,2389416,2169273,4134418,1347554,780562,531306,137560,147447,163720,152183,667379,3140549,630481,82678,122852,117171,87366,285812,887783,201820,146584,130057,151639,236975,110644,177687,164236,1106801,4601777,270537,54591,490993,161521,252501,110987,254652,1085837,24134635,5505333,19258429,16958700,25820682,37778785,15691409,337939,211482,178633,144971,2766195,12353022,6834896,44842527,22457655,172082,686213,200130,112915,232162,138353,80799,117007,97286,108548,1937426,280192,156610,99514,430100,155465,687228,2882711,6731693,65804,1624821,159652,285577,60549,157904,5916134,412288,132597,908879,272218,180757,732263,169132,745769,306887,7252246,4394707,951611,82203,213042,117441,112781,112222,300525,1211909,145623,113760,164115,225506,96600,953395,1874155,204582,115017,187433,130060,156279,312904,97728,2302220,232036,124466,632575,121143,149310,200161,248362,153779,119662,494180,534981,316531,185806,152670,211013,132662,2033315,253769,850340,299891,140935,120561,170304,87502,712511,758267,102834,472697,1307030,24962796,254714,2628369,266971,1318833,108503,131614,120129,222602,1789785,129309,746252,19088113,823822,253070,163050,183856,123350,126196,226394,97382,152971,1404152,196053,1299475,136466,185384,20561432,12951037,1264979,5630592,2187745,254259,1811039,164578,144580,244778,207351,2194256,12554634,16700526,5939874,18788363,9003636,379686,92515,771011,1034056,795588,842805,313889,553591],"PauseTotalNs":833945600,"StackInuse":983040,"StackSys":983040,"Sys":11114744,"TotalAlloc":1301199968},"pid":485,"process_count":84,"queue_size":0,"splitter":{},"uptime":3464,"version":{"Major": 0,"Minor": 99,"Patch": 0},"log_file":"/var/log/datadog/process-agent.log" - }`)) + _, err := w.Write([]byte(expVarResponse)) + if err != nil { + h.t.Errorf("error serving %s: %v", r.URL, err) + } + case sysProbeProcessModuleEnabledExpVarPath: + // serve same information as above, except that system probe config flag is enabled + h.t.Logf("serving fake info data for %s", r.URL.Path) + sysProbeEnabledResponse := strings.ReplaceAll(expVarResponse, `"system_probe_process_module_enabled":false`, `"system_probe_process_module_enabled":true`) + _, err := w.Write([]byte(sysProbeEnabledResponse)) if err != nil { h.t.Errorf("error serving %s: %v", r.URL, err) } default: h.t.Logf("answering 404 for %s", r.URL) w.WriteHeader(http.StatusNotFound) - } } @@ -106,19 +118,28 @@ func TestInfo(t *testing.T) { defer reset() assert := assert.New(t) - conf := config.NewDefaultAgentConfig() server := testServer(t) assert.NotNil(server) defer server.Close() - err := initInfo(conf) + err := initInfo("ubuntu-1404.vagrantup.com") assert.NoError(err) var buf bytes.Buffer - err = Info(&buf, conf, server.URL+"/debug/vars") + err = Info(&buf, server.URL+expVarPath) assert.NoError(err) info := buf.String() - assert.Equal(expectedInfo, info) + + // check that if system probe process module config flag is disabled, + // it is displayed correctly in info command output + buf.Reset() // empty the buffer before reusing + err = Info(&buf, server.URL+sysProbeProcessModuleEnabledExpVarPath) + assert.NoError(err) + info = buf.String() + sysProbeProcessModuleEnabledExpectedInfo := strings.ReplaceAll(expectedInfo, + "System Probe Process Module Status: Not running", + "System Probe Process Module Status: Running") + assert.Equal(sysProbeProcessModuleEnabledExpectedInfo, info) } func TestNotRunning(t *testing.T) { @@ -126,12 +147,11 @@ func TestNotRunning(t *testing.T) { defer reset() assert := assert.New(t) - conf := config.NewDefaultAgentConfig() server := testServer(t) assert.NotNil(server) defer server.Close() - err := initInfo(conf) + err := initInfo("host") assert.NoError(err) var buf bytes.Buffer // we are going to use a different port so we got @@ -144,7 +164,7 @@ func TestNotRunning(t *testing.T) { assert.NoError(err) newURL := "http://" + hostPort[0] + ":" + strconv.Itoa(port+1) - err = Info(&buf, conf, newURL) + err = Info(&buf, newURL) assert.Error(err) info := buf.String() assert.Equal(notRunningInfo, info) @@ -155,16 +175,15 @@ func TestError(t *testing.T) { defer reset() assert := assert.New(t) - conf := config.NewDefaultAgentConfig() server := testServer(t) assert.NotNil(server) defer server.Close() - err := initInfo(conf) + err := initInfo("host") assert.NoError(err) var buf bytes.Buffer // same port but a 404 response - err = Info(&buf, conf, server.URL+"/haha") + err = Info(&buf, server.URL+"/haha") assert.Error(err) info := buf.String() diff --git a/cmd/process-agent/main.go b/cmd/process-agent/main.go index 39da484679291..460f82d62b8ce 100644 --- a/cmd/process-agent/main.go +++ b/cmd/process-agent/main.go @@ -9,35 +9,14 @@ package main import ( - "os" - - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/process-agent/flags" + "github.com/DataDog/datadog-agent/cmd/process-agent/command" ) -func rootCmdRun(cmd *cobra.Command, args []string) { +const useWinParams = false + +func rootCmdRun(globalParams *command.GlobalParams) { exit := make(chan struct{}) // Invoke the Agent - runAgent(exit) -} - -func main() { - rootCmd.PersistentFlags().StringVar(&opts.configPath, flags.CfgPath, flags.DefaultConfPath, "Path to datadog.yaml config") - - if flags.DefaultSysProbeConfPath != "" { - rootCmd.PersistentFlags().StringVar(&opts.sysProbeConfigPath, flags.SysProbeConfig, flags.DefaultSysProbeConfPath, "Path to system-probe.yaml config") - } - - rootCmd.PersistentFlags().StringVarP(&opts.pidfilePath, "pid", "p", "", "Path to set pidfile for process") - rootCmd.PersistentFlags().BoolVarP(&opts.info, "info", "i", false, "Show info about running process agent and exit") - rootCmd.PersistentFlags().BoolP("version", "v", false, "[deprecated] Print the version and exit") - rootCmd.PersistentFlags().String("check", "", - "[deprecated] Run a specific check and print the results. Choose from: process, rtprocess, container, rtcontainer, connections, process_discovery") - - os.Args = fixDeprecatedFlags(os.Args, os.Stdout) - if err := rootCmd.Execute(); err != nil { - os.Exit(-1) - } + runAgent(globalParams, exit) } diff --git a/cmd/process-agent/main_common.go b/cmd/process-agent/main_common.go index 371ee76246019..7579844c63359 100644 --- a/cmd/process-agent/main_common.go +++ b/cmd/process-agent/main_common.go @@ -13,23 +13,18 @@ import ( "os" "time" - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/cmd/agent/common/misconfig" + "github.com/DataDog/datadog-agent/cmd/internal/runcmd" "github.com/DataDog/datadog-agent/cmd/manager" "github.com/DataDog/datadog-agent/cmd/process-agent/api" - "github.com/DataDog/datadog-agent/cmd/process-agent/app" - "github.com/DataDog/datadog-agent/cmd/process-agent/app/subcommands" - cmdconfig "github.com/DataDog/datadog-agent/cmd/process-agent/commands/config" + "github.com/DataDog/datadog-agent/cmd/process-agent/command" + "github.com/DataDog/datadog-agent/cmd/process-agent/subcommands" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" - apiutil "github.com/DataDog/datadog-agent/pkg/api/util" ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/config/settings" - settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/pidfile" - "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/checks" "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/tagger" @@ -46,67 +41,6 @@ import ( _ "github.com/DataDog/datadog-agent/pkg/workloadmeta/collectors" ) -const loggerName ddconfig.LoggerName = "PROCESS" - -var opts struct { - configPath string - sysProbeConfigPath string - pidfilePath string - debug bool - info bool -} - -var ( - rootCmd = &cobra.Command{ - Run: rootCmdRun, - SilenceUsage: true, - } - - configCommand = cmdconfig.Config(getSettingsClient) -) - -func getSettingsClient(_ *cobra.Command, _ []string) (settings.Client, error) { - // Set up the config so we can get the port later - // We set this up differently from the main process-agent because this way is quieter - cfg := config.NewDefaultAgentConfig() - if opts.configPath != "" { - if err := config.LoadConfigIfExists(opts.configPath); err != nil { - return nil, err - } - } - err := cfg.LoadAgentConfig(opts.configPath) - if err != nil { - return nil, err - } - - httpClient := apiutil.GetClient(false) - ipcAddress, err := ddconfig.GetIPCAddress() - - port := ddconfig.Datadog.GetInt("process_config.cmd_port") - if port <= 0 { - return nil, fmt.Errorf("invalid process_config.cmd_port -- %d", port) - } - - ipcAddressWithPort := fmt.Sprintf("http://%s:%d/config", ipcAddress, port) - if err != nil { - return nil, err - } - settingsClient := settingshttp.NewClient(httpClient, ipcAddressWithPort, "process-agent") - return settingsClient, nil -} - -func init() { - rootCmd.AddCommand(configCommand, app.StatusCmd, app.CheckCmd, app.EventsCmd, app.TaggerCmd) - - globalParams := command.GlobalParams{} - - for _, factory := range subcommands.ProcessAgentSubcommands() { - for _, subcmd := range factory(&globalParams) { - rootCmd.AddCommand(subcmd) - } - } -} - const ( agent6DisabledMessage = `process-agent not enabled. Set env var DD_PROCESS_CONFIG_PROCESS_COLLECTION_ENABLED=true or add @@ -117,22 +51,32 @@ to your datadog.yaml file. Exiting.` ) -func runAgent(exit chan struct{}) { +// main is the main application entry point +func main() { + os.Args = command.FixDeprecatedFlags(os.Args, os.Stdout) + + rootCmd := command.MakeCommand(subcommands.ProcessAgentSubcommands(), useWinParams, rootCmdRun) + os.Exit(runcmd.Run(rootCmd)) +} + +func runAgent(globalParams *command.GlobalParams, exit chan struct{}) { if err := ddutil.SetupCoreDump(); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } - if !opts.info && opts.pidfilePath != "" { - err := pidfile.WritePID(opts.pidfilePath) + cleanupAndExit := cleanupAndExitHandler(globalParams) + + if !globalParams.Info && globalParams.PidFilePath != "" { + err := pidfile.WritePID(globalParams.PidFilePath) if err != nil { log.Errorf("Error while writing PID file, exiting: %v", err) cleanupAndExit(1) } - log.Infof("pid '%d' written to pid file '%s'", os.Getpid(), opts.pidfilePath) + log.Infof("pid '%d' written to pid file '%s'", os.Getpid(), globalParams.PidFilePath) defer func() { // remove pidfile if set - os.Remove(opts.pidfilePath) + os.Remove(globalParams.PidFilePath) }() } @@ -140,25 +84,19 @@ func runAgent(exit chan struct{}) { // "Unknown environment variable" warning will show up whenever valid system probe environment variables are defined. ddconfig.InitSystemProbeConfig(ddconfig.Datadog) - if err := config.LoadConfigIfExists(opts.configPath); err != nil { - _ = log.Criticalf("Error parsing config: %s", err) + if err := command.BootstrapConfig(globalParams.ConfFilePath, false); err != nil { + _ = log.Critical(err) cleanupAndExit(1) } // For system probe, there is an additional config file that is shared with the system-probe - syscfg, err := sysconfig.Merge(opts.sysProbeConfigPath) + syscfg, err := sysconfig.Merge(globalParams.SysProbeConfFilePath) if err != nil { _ = log.Critical(err) cleanupAndExit(1) } - config.InitRuntimeSettings() - - cfg, err := config.NewAgentConfig(loggerName, opts.configPath, syscfg) - if err != nil { - log.Criticalf("Error parsing config: %s", err) - cleanupAndExit(1) - } + initRuntimeSettings() mainCtx, mainCancel := context.WithCancel(context.Background()) defer mainCancel() @@ -169,8 +107,8 @@ func runAgent(exit chan struct{}) { } // Now that the logger is configured log host info - hostInfo := host.GetStatusInformation() - log.Infof("running on platform: %s", hostInfo.Platform) + hostStatus := host.GetStatusInformation() + log.Infof("running on platform: %s", hostStatus.Platform) agentVersion, _ := version.Agent() log.Infof("running version: %s", agentVersion.GetNumberAndPre()) @@ -178,7 +116,13 @@ func runAgent(exit chan struct{}) { misconfig.ToLog(misconfig.ProcessAgent) // Start workload metadata store before tagger (used for containerCollection) - store := workloadmeta.CreateGlobalStore(workloadmeta.NodeAgentCatalog) + var workloadmetaCollectors workloadmeta.CollectorCatalog + if ddconfig.Datadog.GetBool("process_config.remote_workloadmeta") { + workloadmetaCollectors = workloadmeta.RemoteCatalog + } else { + workloadmetaCollectors = workloadmeta.NodeAgentCatalog + } + store := workloadmeta.CreateGlobalStore(workloadmetaCollectors) store.Start(mainCtx) // Tagger must be initialized after agent config has been setup @@ -201,18 +145,12 @@ func runAgent(exit chan struct{}) { } defer tagger.Stop() //nolint:errcheck - err = initInfo(cfg) - if err != nil { - log.Criticalf("Error initializing info: %s", err) - cleanupAndExit(1) - } - if err := statsd.Configure(ddconfig.GetBindHost(), ddconfig.Datadog.GetInt("dogstatsd_port")); err != nil { log.Criticalf("Error configuring statsd: %s", err) cleanupAndExit(1) } - enabledChecks := getChecks(syscfg, cfg.Orchestrator, ddconfig.IsAnyContainerFeaturePresent()) + enabledChecks := getChecks(syscfg, ddconfig.IsAnyContainerFeaturePresent()) // Exit if agent is not enabled. if len(enabledChecks) == 0 { @@ -276,10 +214,23 @@ func runAgent(exit chan struct{}) { expVarPort = ddconfig.DefaultProcessExpVarPort } - if opts.info { + hostInfo, err := checks.CollectHostInfo() + if err != nil { + log.Criticalf("Error collecting host details: %s", err) + cleanupAndExit(1) + return + } + + err = initInfo(hostInfo.HostName) + if err != nil { + log.Criticalf("Error initializing info: %s", err) + cleanupAndExit(1) + } + + if globalParams.Info { // using the debug port to get info to work url := fmt.Sprintf("http://localhost:%d/debug/vars", expVarPort) - if err := Info(os.Stdout, cfg, url); err != nil { + if err := Info(os.Stdout, url); err != nil { cleanupAndExit(1) } return @@ -302,12 +253,19 @@ func runAgent(exit chan struct{}) { _ = log.Error(err) } - cl, err := NewCollector(cfg, enabledChecks) + cl, err := NewCollector(syscfg, hostInfo, enabledChecks) if err != nil { log.Criticalf("Error creating collector: %s", err) cleanupAndExit(1) return } + cl.submitter, err = NewSubmitter(hostInfo.HostName, cl.UpdateRTStatus) + if err != nil { + log.Criticalf("Error creating checkSubmitter: %s", err) + cleanupAndExit(1) + return + } + if err := cl.run(exit); err != nil { log.Criticalf("Error starting collector: %s", err) os.Exit(1) @@ -322,15 +280,32 @@ func runAgent(exit chan struct{}) { } } -// cleanupAndExit cleans all resources allocated by the agent before calling -// os.Exit -func cleanupAndExit(status int) { - // remove pidfile if set - if opts.pidfilePath != "" { - if _, err := os.Stat(opts.pidfilePath); err == nil { - os.Remove(opts.pidfilePath) +// cleanupAndExitHandler cleans all resources allocated by the agent before calling os.Exit +func cleanupAndExitHandler(globalParams *command.GlobalParams) func(int) { + return func(status int) { + // remove pidfile if set + if globalParams.PidFilePath != "" { + if _, err := os.Stat(globalParams.PidFilePath); err == nil { + os.Remove(globalParams.PidFilePath) + } } + + os.Exit(status) + } +} + +// initRuntimeSettings registers settings to be added to the runtime config. +func initRuntimeSettings() { + // NOTE: Any settings you want to register should simply be added here + processRuntimeSettings := []settings.RuntimeSetting{ + settings.LogLevelRuntimeSetting{}, } - os.Exit(status) + // Before we begin listening, register runtime settings + for _, setting := range processRuntimeSettings { + err := settings.RegisterRuntimeSetting(setting) + if err != nil { + _ = log.Warnf("Cannot initialize the runtime setting %s: %v", setting.Name(), err) + } + } } diff --git a/cmd/process-agent/main_windows.go b/cmd/process-agent/main_windows.go index a978f9ab9cf5b..81352b217b549 100644 --- a/cmd/process-agent/main_windows.go +++ b/cmd/process-agent/main_windows.go @@ -11,14 +11,10 @@ package main import ( "fmt" _ "net/http/pprof" - "os" - "path/filepath" "time" - "github.com/DataDog/datadog-agent/cmd/process-agent/flags" - "github.com/DataDog/datadog-agent/pkg/util/winutil" + "github.com/DataDog/datadog-agent/cmd/process-agent/command" - "github.com/spf13/cobra" "golang.org/x/sys/windows/svc" "golang.org/x/sys/windows/svc/debug" "golang.org/x/sys/windows/svc/eventlog" @@ -27,29 +23,16 @@ import ( var elog debug.Log -// ServiceName is the service name used for the process-agent -const ServiceName = "datadog-process-agent" - -// opts are the command-line options -var defaultConfigPath = flags.DefaultConfPath -var defaultSysProbeConfigPath = flags.DefaultSysProbeConfPath - -var winopts struct { - startService bool - stopService bool - foreground bool -} +const ( + // ServiceName is the service name used for the process-agent + ServiceName = "datadog-process-agent" + useWinParams = true +) -func init() { - pd, err := winutil.GetProgramDataDir() - if err == nil { - defaultConfigPath = filepath.Join(pd, "datadog.yaml") - defaultSysProbeConfigPath = filepath.Join(pd, "system-probe.yaml") - } +type myservice struct { + globalParams *command.GlobalParams } -type myservice struct{} - func (m *myservice) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) { const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown changes <- svc.Status{State: svc.StartPending} @@ -81,13 +64,13 @@ func (m *myservice) Execute(args []string, r <-chan svc.ChangeRequest, changes c } }() elog.Info(0x40000003, ServiceName) - runAgent(exit) + runAgent(m.globalParams, exit) changes <- svc.Status{State: svc.Stopped} return } -func runService(isDebug bool) { +func runService(globalParams *command.GlobalParams, isDebug bool) { var err error if isDebug { elog = debug.New(ServiceName) @@ -104,7 +87,12 @@ func runService(isDebug bool) { run = debug.Run } elog.Info(0x40000007, ServiceName) - err = run(ServiceName, &myservice{}) + + service := &myservice{ + globalParams: globalParams, + } + + err = run(ServiceName, service) if err != nil { elog.Error(0xc0000008, err.Error()) return @@ -112,57 +100,37 @@ func runService(isDebug bool) { elog.Info(0x40000004, ServiceName) } -// main is the main application entry point -func main() { - rootCmd.PersistentFlags().StringVar(&opts.configPath, flags.CfgPath, defaultConfigPath, "Path to datadog.yaml config") - rootCmd.PersistentFlags().StringVar(&opts.sysProbeConfigPath, flags.SysProbeConfig, defaultSysProbeConfigPath, "Path to system-probe.yaml config") - rootCmd.PersistentFlags().BoolVarP(&opts.info, "info", "i", false, "Show info about running process agent and exit") - rootCmd.PersistentFlags().BoolP("version", "v", false, "[deprecated] Print the version and exit") - rootCmd.PersistentFlags().String("check", "", "[deprecated] Run a specific check and print the results. Choose from: process, rtprocess, container, rtcontainer, connections, process_discovery") - - // windows-specific options for controlling the service - rootCmd.PersistentFlags().BoolVar(&winopts.startService, "start-service", false, "Starts the process agent service") - rootCmd.PersistentFlags().BoolVar(&winopts.stopService, "stop-service", false, "Stops the process agent service") - rootCmd.PersistentFlags().BoolVar(&winopts.foreground, "foreground", false, "Always run foreground instead whether session is interactive or not") - - // Invoke the Agent - os.Args = fixDeprecatedFlags(os.Args, os.Stdout) - if err := rootCmd.Execute(); err != nil { - os.Exit(-1) - } -} - -func rootCmdRun(cmd *cobra.Command, args []string) { - if !winopts.foreground { +func rootCmdRun(globalParams *command.GlobalParams) { + if !globalParams.WinParams.Foreground { isIntSess, err := svc.IsAnInteractiveSession() if err != nil { fmt.Printf("failed to determine if we are running in an interactive session: %v\n", err) } if !isIntSess { - runService(false) + runService(globalParams, false) return } // sigh. Go doesn't have boolean xor operator. The options are mutually exclusive, // make sure more than one wasn't specified optcount := 0 - if winopts.startService { + if globalParams.WinParams.StartService { optcount++ } - if winopts.stopService { + if globalParams.WinParams.StopService { optcount++ } if optcount > 1 { fmt.Println("Incompatible options chosen") return } - if winopts.startService { + if globalParams.WinParams.StartService { if err = startService(); err != nil { fmt.Printf("Error starting service %v\n", err) } return } - if winopts.stopService { + if globalParams.WinParams.StopService { if err = stopService(); err != nil { fmt.Printf("Error stopping service %v\n", err) } @@ -172,7 +140,7 @@ func rootCmdRun(cmd *cobra.Command, args []string) { exit := make(chan struct{}) // Invoke the Agent - runAgent(exit) + runAgent(globalParams, exit) } func startService() error { diff --git a/cmd/process-agent/mocks/submitter.go b/cmd/process-agent/mocks/submitter.go new file mode 100644 index 0000000000000..e6782315e2bca --- /dev/null +++ b/cmd/process-agent/mocks/submitter.go @@ -0,0 +1,54 @@ +// Code generated by mockery v2.16.0. DO NOT EDIT. + +package mocks + +import ( + process "github.com/DataDog/agent-payload/v5/process" + mock "github.com/stretchr/testify/mock" + + time "time" +) + +// Submitter is an autogenerated mock type for the Submitter type +type Submitter struct { + mock.Mock +} + +// Start provides a mock function with given fields: +func (_m *Submitter) Start() error { + ret := _m.Called() + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// Stop provides a mock function with given fields: +func (_m *Submitter) Stop() { + _m.Called() +} + +// Submit provides a mock function with given fields: start, name, messages +func (_m *Submitter) Submit(start time.Time, name string, messages []process.MessageBody) { + _m.Called(start, name, messages) +} + +type mockConstructorTestingTNewSubmitter interface { + mock.TestingT + Cleanup(func()) +} + +// NewSubmitter creates a new instance of Submitter. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewSubmitter(t mockConstructorTestingTNewSubmitter) *Submitter { + mock := &Submitter{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/cmd/process-agent/app/check.go b/cmd/process-agent/subcommands/check/check.go similarity index 59% rename from cmd/process-agent/app/check.go rename to cmd/process-agent/subcommands/check/check.go index a151362a9d2e9..1e232c0597c5a 100644 --- a/cmd/process-agent/app/check.go +++ b/cmd/process-agent/subcommands/check/check.go @@ -14,54 +14,63 @@ import ( "github.com/fatih/color" "github.com/spf13/cobra" + "go.uber.org/fx" "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/cmd/process-agent/flags" + "github.com/DataDog/datadog-agent/cmd/process-agent/command" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/tagger" "github.com/DataDog/datadog-agent/pkg/tagger/local" "github.com/DataDog/datadog-agent/pkg/tagger/remote" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" "github.com/DataDog/datadog-agent/pkg/workloadmeta" ) -var ( - waitInterval time.Duration -) - -const ( - defaultWaitInterval = time.Second -) +const defaultWaitInterval = time.Second -func init() { - CheckCmd.Flags().BoolVar(&checkOutputJSON, "json", false, "Output check results in JSON") - CheckCmd.Flags().DurationVarP(&waitInterval, "wait", "w", defaultWaitInterval, "How long to wait before running the check") +type cliParams struct { + *command.GlobalParams + checkName string + checkOutputJSON bool + waitInterval time.Duration } -// CheckCmd is a command that runs the process-agent version data -var CheckCmd = &cobra.Command{ - Use: "check", - Short: "Run a specific check and print the results. Choose from: process, rtprocess, container, rtcontainer, connections, process_discovery, process_events", +// Commands returns a slice of subcommands for the `check` command in the Process Agent +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{ + GlobalParams: globalParams, + } - Args: cobra.ExactArgs(1), - RunE: runCheckCmd, - SilenceUsage: true, -} + checkCmd := &cobra.Command{ + Use: "check", + Short: "Run a specific check and print the results. Choose from: process, rtprocess, container, rtcontainer, connections, process_discovery, process_events", + + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + cliParams.checkName = args[0] + return fxutil.OneShot(runCheckCmd, + fx.Supply(cliParams), + ) + }, + SilenceUsage: true, + } -const loggerName ddconfig.LoggerName = "PROCESS" + checkCmd.Flags().BoolVar(&cliParams.checkOutputJSON, "json", false, "Output check results in JSON") + checkCmd.Flags().DurationVarP(&cliParams.waitInterval, "wait", "w", defaultWaitInterval, "How long to wait before running the check") -var checkOutputJSON = false + return []*cobra.Command{checkCmd} +} -func runCheckCmd(cmd *cobra.Command, args []string) error { +func runCheckCmd(cliParams *cliParams) error { // Override the log_to_console setting if `--json` is specified. This way the check command will output proper json. - if checkOutputJSON { + if cliParams.checkOutputJSON { ddconfig.Datadog.Set("log_to_console", false) } @@ -72,38 +81,33 @@ func runCheckCmd(cmd *cobra.Command, args []string) error { // "Unknown environment variable" warning will show up whenever valid system probe environment variables are defined. ddconfig.InitSystemProbeConfig(ddconfig.Datadog) - configPath := cmd.Flag(flags.CfgPath).Value.String() - var sysprobePath string - if cmd.Flag(flags.SysProbeConfig) != nil { - sysprobePath = cmd.Flag(flags.SysProbeConfig).Value.String() - } - - if err := config.LoadConfigIfExists(configPath); err != nil { + if err := command.BootstrapConfig(cliParams.GlobalParams.ConfFilePath, true); err != nil { return log.Criticalf("Error parsing config: %s", err) } // For system probe, there is an additional config file that is shared with the system-probe - syscfg, err := sysconfig.Merge(sysprobePath) + syscfg, err := sysconfig.Merge(cliParams.SysProbeConfFilePath) if err != nil { return log.Critical(err) } - cfg, err := config.NewAgentConfig(loggerName, configPath, syscfg) - if err != nil { - return log.Criticalf("Error parsing config: %s", err) - } - ctx, cancel := context.WithCancel(context.Background()) defer cancel() // Now that the logger is configured log host info - hostInfo := host.GetStatusInformation() - log.Infof("running on platform: %s", hostInfo.Platform) + hostStatus := host.GetStatusInformation() + log.Infof("running on platform: %s", hostStatus.Platform) agentVersion, _ := version.Agent() log.Infof("running version: %s", agentVersion.GetNumberAndPre()) // Start workload metadata store before tagger (used for containerCollection) - store := workloadmeta.CreateGlobalStore(workloadmeta.NodeAgentCatalog) + var workloadmetaCollectors workloadmeta.CollectorCatalog + if ddconfig.Datadog.GetBool("process_config.remote_workloadmeta") { + workloadmetaCollectors = workloadmeta.RemoteCatalog + } else { + workloadmetaCollectors = workloadmeta.NodeAgentCatalog + } + store := workloadmeta.CreateGlobalStore(workloadmetaCollectors) store.Start(ctx) // Tagger must be initialized after agent config has been setup @@ -126,13 +130,11 @@ func runCheckCmd(cmd *cobra.Command, args []string) error { } defer tagger.Stop() //nolint:errcheck - sysInfo, err := checks.CollectSystemInfo(cfg) + hostInfo, err := checks.CollectHostInfo() if err != nil { log.Errorf("failed to collect system info: %s", err) } - check := args[0] - cleanups := make([]func(), 0) defer func() { for _, c := range cleanups { @@ -144,15 +146,17 @@ func runCheckCmd(cmd *cobra.Command, args []string) error { _, checks.Process.SysprobeProcessModuleEnabled = syscfg.EnabledModules[sysconfig.ProcessModule] if checks.Process.SysprobeProcessModuleEnabled { - net.SetSystemProbePath(cfg.SystemProbeAddress) + net.SetSystemProbePath(syscfg.SocketAddress) } // Connections check requires process-check to have occurred first (for process creation ts), - if check == checks.Connections.Name() { + if cliParams.checkName == checks.Connections.Name() { // use a different client ID to prevent destructive querying of connections data checks.ProcessAgentClientID = "process-agent-cli-check-id" - checks.Process.Init(cfg, sysInfo) - checks.Process.Run(cfg, 0) //nolint:errcheck + if err := checks.Process.Init(nil, hostInfo); err != nil { + return err + } + checks.Process.Run(0) //nolint:errcheck // Clean up the process check state only after the connections check is executed cleanups = append(cleanups, checks.Process.Cleanup) } @@ -161,43 +165,52 @@ func runCheckCmd(cmd *cobra.Command, args []string) error { for _, ch := range checks.All { names = append(names, ch.Name()) - if ch.Name() == check { - ch.Init(cfg, sysInfo) + cfg := &checks.SysProbeConfig{ + MaxConnsPerMessage: syscfg.MaxConnsPerMessage, + SystemProbeAddress: syscfg.SocketAddress, + } + + if ch.Name() == cliParams.checkName { + if err = ch.Init(cfg, hostInfo); err != nil { + return err + } cleanups = append(cleanups, ch.Cleanup) - return runCheck(cfg, ch) + return runCheck(cliParams, ch) } withRealTime, ok := ch.(checks.CheckWithRealTime) - if ok && withRealTime.RealTimeName() == check { - withRealTime.Init(cfg, sysInfo) + if ok && withRealTime.RealTimeName() == cliParams.checkName { + if err = withRealTime.Init(cfg, hostInfo); err != nil { + return err + } cleanups = append(cleanups, withRealTime.Cleanup) - return runCheckAsRealTime(cfg, withRealTime) + return runCheckAsRealTime(cliParams, withRealTime) } } - return log.Errorf("invalid check '%s', choose from: %v", check, names) + return log.Errorf("invalid check '%s', choose from: %v", cliParams.checkName, names) } -func runCheck(cfg *config.AgentConfig, ch checks.Check) error { +func runCheck(cliParams *cliParams, ch checks.Check) error { // Run the check once to prime the cache. - if _, err := ch.Run(cfg, 0); err != nil { + if _, err := ch.Run(0); err != nil { return fmt.Errorf("collection error: %s", err) } - log.Infof("Waiting %s before running the check", waitInterval.String()) - time.Sleep(waitInterval) + log.Infof("Waiting %s before running the check", cliParams.waitInterval.String()) + time.Sleep(cliParams.waitInterval) - if !checkOutputJSON { + if !cliParams.checkOutputJSON { printResultsBanner(ch.Name()) } - msgs, err := ch.Run(cfg, 1) + msgs, err := ch.Run(1) if err != nil { return fmt.Errorf("collection error: %s", err) } - return printResults(ch.Name(), msgs) + return printResults(ch.Name(), msgs, cliParams.checkOutputJSON) } -func runCheckAsRealTime(cfg *config.AgentConfig, ch checks.CheckWithRealTime) error { +func runCheckAsRealTime(cliParams *cliParams, ch checks.CheckWithRealTime) error { options := checks.RunOptions{ RunStandard: true, RunRealTime: true, @@ -212,23 +225,23 @@ func runCheckAsRealTime(cfg *config.AgentConfig, ch checks.CheckWithRealTime) er // We need to run the check twice in order to initialize the stats // Rate calculations rely on having two datapoints - if _, err := ch.RunWithOptions(cfg, nextGroupID, options); err != nil { + if _, err := ch.RunWithOptions(nextGroupID, options); err != nil { return fmt.Errorf("collection error: %s", err) } - log.Infof("Waiting %s before running the check", waitInterval.String()) - time.Sleep(waitInterval) + log.Infof("Waiting %s before running the check", cliParams.waitInterval.String()) + time.Sleep(cliParams.waitInterval) - if !checkOutputJSON { + if !cliParams.checkOutputJSON { printResultsBanner(ch.RealTimeName()) } - run, err := ch.RunWithOptions(cfg, nextGroupID, options) + run, err := ch.RunWithOptions(nextGroupID, options) if err != nil { return fmt.Errorf("collection error: %s", err) } - return printResults(ch.RealTimeName(), run.RealTime) + return printResults(ch.RealTimeName(), run.RealTime, cliParams.checkOutputJSON) } func printResultsBanner(name string) { @@ -237,7 +250,7 @@ func printResultsBanner(name string) { fmt.Printf("-----------------------------\n\n") } -func printResults(check string, msgs []process.MessageBody) error { +func printResults(check string, msgs []process.MessageBody, checkOutputJSON bool) error { if checkOutputJSON { return printResultsJSON(msgs) } diff --git a/cmd/process-agent/subcommands/config/config.go b/cmd/process-agent/subcommands/config/config.go new file mode 100644 index 0000000000000..c3533070d33d1 --- /dev/null +++ b/cmd/process-agent/subcommands/config/config.go @@ -0,0 +1,167 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package config + +import ( + "fmt" + + "github.com/spf13/cobra" + + "github.com/DataDog/datadog-agent/cmd/process-agent/command" + apiutil "github.com/DataDog/datadog-agent/pkg/api/util" + ddconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/settings" + settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// Commands returns a slice of subcommands for the `config` command in the Process Agent +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := &cobra.Command{ + Use: "config", + Short: "Print the runtime configuration of a running agent", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + return showRuntimeConfiguration(globalParams) + }, + } + + cmd.AddCommand( + &cobra.Command{ + Use: "list-runtime", + Short: "List settings that can be changed at runtime", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + return listRuntimeConfigurableValue(globalParams) + }, + }, + ) + + cmd.AddCommand( + &cobra.Command{ + Use: "set [setting] [value]", + Short: "Set, for the current runtime, the value of a given configuration setting", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + return setConfigValue(globalParams, args) + }, + }, + ) + cmd.AddCommand( + &cobra.Command{ + Use: "get [setting]", + Short: "Get, for the current runtime, the value of a given configuration setting", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + return getConfigValue(globalParams, args) + }, + }, + ) + + return []*cobra.Command{cmd} +} + +func showRuntimeConfiguration(globalParams *command.GlobalParams) error { + c, err := getClient(globalParams) + if err != nil { + return err + } + + runtimeConfig, err := c.FullConfig() + if err != nil { + return err + } + + fmt.Println(runtimeConfig) + + return nil +} + +func listRuntimeConfigurableValue(globalParams *command.GlobalParams) error { + c, err := getClient(globalParams) + if err != nil { + return err + } + + settingsList, err := c.List() + if err != nil { + return err + } + + fmt.Println("=== Settings that can be changed at runtime ===") + for setting, details := range settingsList { + if !details.Hidden { + fmt.Printf("%-30s %s\n", setting, details.Description) + } + } + + return nil +} + +func setConfigValue(globalParams *command.GlobalParams, args []string) error { + c, err := getClient(globalParams) + if err != nil { + return err + } + + if len(args) != 2 { + return fmt.Errorf("exactly two parameters are required: the setting name and its value") + } + + hidden, err := c.Set(args[0], args[1]) + if err != nil { + return err + } + + if hidden { + fmt.Printf("IMPORTANT: you have modified a hidden option, this may incur billing charges or have other unexpected side-effects.\n") + } + + fmt.Printf("Configuration setting %s is now set to: %s\n", args[0], args[1]) + + return nil +} + +func getConfigValue(globalParams *command.GlobalParams, args []string) error { + c, err := getClient(globalParams) + if err != nil { + return err + } + + if len(args) != 1 { + return fmt.Errorf("a single setting name must be specified") + } + + value, err := c.Get(args[0]) + if err != nil { + return err + } + + fmt.Printf("%s is set to: %v\n", args[0], value) + + return nil +} + +func getClient(globalParams *command.GlobalParams) (settings.Client, error) { + if err := command.BootstrapConfig(globalParams.ConfFilePath, true); err != nil { + return nil, log.Criticalf("Error parsing config: %s", err) + } + + httpClient := apiutil.GetClient(false) + ipcAddress, err := ddconfig.GetIPCAddress() + + port := ddconfig.Datadog.GetInt("process_config.cmd_port") + if port <= 0 { + return nil, fmt.Errorf("invalid process_config.cmd_port -- %d", port) + } + + ipcAddressWithPort := fmt.Sprintf("http://%s:%d/config", ipcAddress, port) + if err != nil { + return nil, err + } + settingsClient := settingshttp.NewClient(httpClient, ipcAddressWithPort, "process-agent") + return settingsClient, nil +} diff --git a/cmd/process-agent/app/events.go b/cmd/process-agent/subcommands/events/events.go similarity index 53% rename from cmd/process-agent/app/events.go rename to cmd/process-agent/subcommands/events/events.go index 4bd0d4234e814..33e344e78b5a3 100644 --- a/cmd/process-agent/app/events.go +++ b/cmd/process-agent/subcommands/events/events.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package app +package events import ( "context" @@ -15,93 +15,99 @@ import ( payload "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/datadog-go/v5/statsd" "github.com/spf13/cobra" + "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/process-agent/flags" + "github.com/DataDog/datadog-agent/cmd/process-agent/command" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/events" "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/process/util" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/log" ) -var ( - pullInterval time.Duration - eventsOutputJSON bool -) - const ( defaultPullInterval = time.Duration(5) * time.Second defaultEventsOutputJSON = false ) -// EventsCmd is a command to interact with process lifecycle events -var EventsCmd = &cobra.Command{ - Use: "events", - Short: "Interact with process lifecycle events. This feature is currently in alpha version and needs root privilege to run.", - SilenceUsage: true, -} +type cliParams struct { + *command.GlobalParams -// EventsListenCmd is a command to listen for process lifecycle events -var EventsListenCmd = &cobra.Command{ - Use: "listen", - Short: "Open a session to listen for process lifecycle events. This feature is currently in alpha version and needs root privilege to run.", - RunE: runEventListener, - SilenceUsage: true, + pullInterval time.Duration + eventsOutputJSON bool } -// EventsPullCmd is a command to pull process lifecycle events -var EventsPullCmd = &cobra.Command{ - Use: "pull", - Short: "Periodically pull process lifecycle events. This feature is currently in alpha version and needs root privilege to run.", - RunE: runEventStore, - SilenceUsage: true, -} +// Commands returns a slice of subcommands for the `events` command in the Process Agent +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{ + GlobalParams: globalParams, + } -func init() { - EventsCmd.AddCommand(EventsListenCmd, EventsPullCmd) - EventsListenCmd.Flags().BoolVar(&eventsOutputJSON, "json", defaultEventsOutputJSON, "Output events as JSON") - EventsPullCmd.Flags().BoolVar(&eventsOutputJSON, "json", defaultEventsOutputJSON, "Output events as JSON") - EventsPullCmd.Flags().DurationVarP(&pullInterval, "tick", "t", defaultPullInterval, "The period between 2 consecutive pulls to fetch process events") -} + // eventsCmd is a command to interact with process lifecycle events + eventsCmd := &cobra.Command{ + Use: "events", + Short: "Interact with process lifecycle events. This feature is currently in alpha version and needs root privilege to run.", + SilenceUsage: true, + } -func bootstrapEventsCmd(cmd *cobra.Command) error { - ddconfig.InitSystemProbeConfig(ddconfig.Datadog) + // eventsListenCmd is a command to listen for process lifecycle events + eventsListenCmd := &cobra.Command{ + Use: "listen", + Short: "Open a session to listen for process lifecycle events. This feature is currently in alpha version and needs root privilege to run.", + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.OneShot(runEventListener, + fx.Supply(cliParams), + ) + }, + SilenceUsage: true, + } - configPath := cmd.Flag(flags.CfgPath).Value.String() - var sysprobePath string - if cmd.Flag(flags.SysProbeConfig) != nil { - sysprobePath = cmd.Flag(flags.SysProbeConfig).Value.String() + // eventsPullCmd is a command to pull process lifecycle events + eventsPullCmd := &cobra.Command{ + Use: "pull", + Short: "Periodically pull process lifecycle events. This feature is currently in alpha version and needs root privilege to run.", + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.OneShot(runEventStore, + fx.Supply(cliParams), + ) + }, + SilenceUsage: true, } - if err := config.LoadConfigIfExists(configPath); err != nil { + eventsCmd.AddCommand(eventsListenCmd, eventsPullCmd) + eventsListenCmd.Flags().BoolVar(&cliParams.eventsOutputJSON, "json", defaultEventsOutputJSON, "Output events as JSON") + eventsPullCmd.Flags().BoolVar(&cliParams.eventsOutputJSON, "json", defaultEventsOutputJSON, "Output events as JSON") + eventsPullCmd.Flags().DurationVarP(&cliParams.pullInterval, "tick", "t", defaultPullInterval, "The period between 2 consecutive pulls to fetch process events") + + return []*cobra.Command{eventsCmd} +} + +func bootstrapEventsCmd(cliParams *cliParams) error { + ddconfig.InitSystemProbeConfig(ddconfig.Datadog) + + if err := command.BootstrapConfig(cliParams.GlobalParams.ConfFilePath, true); err != nil { return log.Criticalf("Error parsing config: %s", err) } // Load system-probe.yaml file and merge it to the global Datadog config - sysCfg, err := sysconfig.Merge(sysprobePath) + _, err := sysconfig.Merge(cliParams.SysProbeConfFilePath) if err != nil { return log.Critical(err) } - // Set up logger - _, err = config.NewAgentConfig(loggerName, configPath, sysCfg) - if err != nil { - return log.Criticalf("Error parsing config: %s", err) - } - return nil } -func printEvents(events ...*model.ProcessEvent) error { +func printEvents(cliParams *cliParams, events ...*model.ProcessEvent) error { // Return early to avoid printing new lines without any event if len(events) == 0 { return nil } - if eventsOutputJSON { + if cliParams.eventsOutputJSON { return printEventsJSON(events) } @@ -123,15 +129,15 @@ func printEventsJSON(events []*model.ProcessEvent) error { return nil } -func runEventListener(cmd *cobra.Command, args []string) error { - err := bootstrapEventsCmd(cmd) +func runEventListener(cliParams *cliParams) error { + err := bootstrapEventsCmd(cliParams) if err != nil { return err } // Create a handler to print the collected event to stdout handler := func(e *model.ProcessEvent) { - err = printEvents(e) + err = printEvents(cliParams, e) if err != nil { log.Error(err) } @@ -153,8 +159,8 @@ func runEventListener(cmd *cobra.Command, args []string) error { return nil } -func runEventStore(cmd *cobra.Command, args []string) error { - err := bootstrapEventsCmd(cmd) +func runEventStore(cliParams *cliParams) error { + err := bootstrapEventsCmd(cliParams) if err != nil { return err } @@ -178,7 +184,7 @@ func runEventStore(cmd *cobra.Command, args []string) error { exit := make(chan struct{}) go util.HandleSignals(exit) - ticker := time.NewTicker(pullInterval) + ticker := time.NewTicker(cliParams.pullInterval) defer ticker.Stop() go func() { for { @@ -190,7 +196,7 @@ func runEventStore(cmd *cobra.Command, args []string) error { continue } - err = printEvents(events...) + err = printEvents(cliParams, events...) if err != nil { log.Error(err) } diff --git a/cmd/process-agent/app/status.go b/cmd/process-agent/subcommands/status/status.go similarity index 73% rename from cmd/process-agent/app/status.go rename to cmd/process-agent/subcommands/status/status.go index 87f0f76ff4b8b..187941df730dd 100644 --- a/cmd/process-agent/app/status.go +++ b/cmd/process-agent/subcommands/status/status.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package app +package status import ( "encoding/json" @@ -13,11 +13,14 @@ import ( "text/template" "github.com/spf13/cobra" + "go.uber.org/fx" + "github.com/DataDog/datadog-agent/cmd/process-agent/command" apiutil "github.com/DataDog/datadog-agent/pkg/api/util" ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/util" ddstatus "github.com/DataDog/datadog-agent/pkg/status" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -43,6 +46,31 @@ Error ` ) +type cliParams struct { + *command.GlobalParams +} + +// Commands returns a slice of subcommands for the `status` command in the Process Agent +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{ + GlobalParams: globalParams, + } + + // statusCmd is a cobra command that prints the current status + statusCmd := &cobra.Command{ + Use: "status", + Short: "Print the current status", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.OneShot(runStatus, + fx.Supply(cliParams), + ) + }, + } + + return []*cobra.Command{statusCmd} +} + func writeNotRunning(w io.Writer) { _, err := fmt.Fprint(w, notRunning) if err != nil { @@ -124,17 +152,9 @@ func getStatusURL() (string, error) { return fmt.Sprintf("http://%s/agent/status", addressPort), nil } -// StatusCmd is a cobra command that prints the current status -var StatusCmd = &cobra.Command{ - Use: "status", - Short: "Print the current status", - Long: ``, - RunE: runStatus, -} - -func runStatus(cmd *cobra.Command, _ []string) error { - if err := initConfig(os.Stdout, cmd); err != nil { - return err +func runStatus(cliParams *cliParams) error { + if err := command.BootstrapConfig(cliParams.GlobalParams.ConfFilePath, true); err != nil { + return log.Criticalf("Error parsing config: %s", err) } statusURL, err := getStatusURL() diff --git a/cmd/process-agent/app/status_test.go b/cmd/process-agent/subcommands/status/status_test.go similarity index 99% rename from cmd/process-agent/app/status_test.go rename to cmd/process-agent/subcommands/status/status_test.go index ed6d15fd52c67..47fd4e27565f5 100644 --- a/cmd/process-agent/app/status_test.go +++ b/cmd/process-agent/subcommands/status/status_test.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2022-present Datadog, Inc. -package app +package status import ( "encoding/json" diff --git a/cmd/process-agent/subcommands/subcommands.go b/cmd/process-agent/subcommands/subcommands.go new file mode 100644 index 0000000000000..be423f49c3816 --- /dev/null +++ b/cmd/process-agent/subcommands/subcommands.go @@ -0,0 +1,30 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package subcommands + +import ( + "github.com/DataDog/datadog-agent/cmd/process-agent/command" + cmdcheck "github.com/DataDog/datadog-agent/cmd/process-agent/subcommands/check" + cmdconfig "github.com/DataDog/datadog-agent/cmd/process-agent/subcommands/config" + cmdevents "github.com/DataDog/datadog-agent/cmd/process-agent/subcommands/events" + cmdstatus "github.com/DataDog/datadog-agent/cmd/process-agent/subcommands/status" + cmdtaggerlist "github.com/DataDog/datadog-agent/cmd/process-agent/subcommands/taggerlist" + cmdversion "github.com/DataDog/datadog-agent/cmd/process-agent/subcommands/version" + cmdworkloadlist "github.com/DataDog/datadog-agent/cmd/process-agent/subcommands/workloadlist" +) + +// ProcessAgentSubcommands returns SubcommandFactories for the subcommands in the Process Agent +func ProcessAgentSubcommands() []command.SubcommandFactory { + return []command.SubcommandFactory{ + cmdcheck.Commands, + cmdconfig.Commands, + cmdevents.Commands, + cmdstatus.Commands, + cmdtaggerlist.Commands, + cmdversion.Commands, + cmdworkloadlist.Commands, + } +} diff --git a/cmd/process-agent/app/tagger_list.go b/cmd/process-agent/subcommands/taggerlist/tagger_list.go similarity index 51% rename from cmd/process-agent/app/tagger_list.go rename to cmd/process-agent/subcommands/taggerlist/tagger_list.go index 1b110b7ef1637..23b90772871b7 100644 --- a/cmd/process-agent/app/tagger_list.go +++ b/cmd/process-agent/subcommands/taggerlist/tagger_list.go @@ -7,34 +7,50 @@ package app import ( "fmt" - "os" "github.com/fatih/color" "github.com/spf13/cobra" + "go.uber.org/fx" + "github.com/DataDog/datadog-agent/cmd/process-agent/command" ddconfig "github.com/DataDog/datadog-agent/pkg/config" tagger_api "github.com/DataDog/datadog-agent/pkg/tagger/api" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/log" ) const taggerListURLTpl = "http://%s/agent/tagger-list" -// TaggerCmd is a command that prints the process-agent version data -var TaggerCmd = &cobra.Command{ - Use: "tagger-list", - Short: "Print the tagger content of a running agent", - Long: "", - RunE: func(cmd *cobra.Command, args []string) error { - return getTaggerList(cmd) - }, - SilenceUsage: true, +type cliParams struct { + *command.GlobalParams } -func getTaggerList(cmd *cobra.Command) error { +// Commands returns a slice of subcommands for the `tagger-list` command in the Process Agent +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{ + GlobalParams: globalParams, + } + + taggerCmd := &cobra.Command{ + Use: "tagger-list", + Short: "Print the tagger content of a running agent", + Long: "", + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.OneShot(taggerList, + fx.Supply(cliParams), + ) + }, + SilenceUsage: true, + } + + return []*cobra.Command{taggerCmd} +} + +func taggerList(cliParams *cliParams) error { log.Info("Got a request for the tagger-list. Calling tagger.") - if err := initConfig(os.Stdout, cmd); err != nil { - return err + if err := command.BootstrapConfig(cliParams.GlobalParams.ConfFilePath, true); err != nil { + return log.Criticalf("Error parsing config: %s", err) } taggerURL, err := getTaggerURL() diff --git a/cmd/process-agent/app/subcommands/version/version.go b/cmd/process-agent/subcommands/version/version.go similarity index 77% rename from cmd/process-agent/app/subcommands/version/version.go rename to cmd/process-agent/subcommands/version/version.go index 1bd331fd083d2..3c5f61ace083c 100644 --- a/cmd/process-agent/app/subcommands/version/version.go +++ b/cmd/process-agent/subcommands/version/version.go @@ -6,13 +6,13 @@ package version import ( - "github.com/DataDog/datadog-agent/cmd/agent/command" + "github.com/DataDog/datadog-agent/cmd/process-agent/command" "github.com/DataDog/datadog-agent/pkg/cli/subcommands/version" "github.com/spf13/cobra" ) -// Commands returns a slice of subcommands for the 'process-agent' command. +// Commands returns a slice of subcommands for the `version` command in the Process Agent func Commands(globalParams *command.GlobalParams) []*cobra.Command { versionCmd := version.MakeCommand("Agent") diff --git a/cmd/process-agent/app/subcommands/workloadlist/command.go b/cmd/process-agent/subcommands/workloadlist/command.go similarity index 88% rename from cmd/process-agent/app/subcommands/workloadlist/command.go rename to cmd/process-agent/subcommands/workloadlist/command.go index 2f944ec060d2e..ad9d4acee1177 100644 --- a/cmd/process-agent/app/subcommands/workloadlist/command.go +++ b/cmd/process-agent/subcommands/workloadlist/command.go @@ -13,7 +13,7 @@ import ( "github.com/spf13/cobra" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/agent/command" + "github.com/DataDog/datadog-agent/cmd/process-agent/command" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" @@ -28,7 +28,7 @@ type cliParams struct { verboseList bool } -// Commands returns a slice of subcommands for the 'process-agent' command. +// Commands returns a slice of subcommands for the `workload-list` command in the Process Agent func Commands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &cliParams{ GlobalParams: globalParams, @@ -40,7 +40,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(workloadList, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false).LogForOneShot("PROCESS", "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("PROCESS", "off", true)}), core.Bundle, ) }, diff --git a/cmd/process-agent/submitter.go b/cmd/process-agent/submitter.go new file mode 100644 index 0000000000000..cd779176e0484 --- /dev/null +++ b/cmd/process-agent/submitter.go @@ -0,0 +1,527 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package main + +import ( + "fmt" + "hash/fnv" + "net/http" + "os" + "strconv" + "sync" + "time" + + model "github.com/DataDog/agent-payload/v5/process" + ddconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/resolver" + "github.com/DataDog/datadog-agent/pkg/forwarder" + "github.com/DataDog/datadog-agent/pkg/forwarder/transaction" + "github.com/DataDog/datadog-agent/pkg/orchestrator" + oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" + "github.com/DataDog/datadog-agent/pkg/process/checks" + "github.com/DataDog/datadog-agent/pkg/process/statsd" + "github.com/DataDog/datadog-agent/pkg/process/util/api" + apicfg "github.com/DataDog/datadog-agent/pkg/process/util/api/config" + "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" + "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/version" +) + +type Submitter interface { + Submit(start time.Time, name string, messages []model.MessageBody) + Start() error + Stop() +} + +var _ Submitter = &checkSubmitter{} + +type checkSubmitter struct { + // Per-check Weighted Queues + processResults *api.WeightedQueue + rtProcessResults *api.WeightedQueue + eventResults *api.WeightedQueue + connectionsResults *api.WeightedQueue + podResults *api.WeightedQueue + + // Forwarders + processForwarder *forwarder.DefaultForwarder + rtProcessForwarder *forwarder.DefaultForwarder + connectionsForwarder *forwarder.DefaultForwarder + podForwarder *forwarder.DefaultForwarder + eventForwarder *forwarder.DefaultForwarder + + orchestrator *oconfig.OrchestratorConfig + hostname string + + exit chan struct{} + wg *sync.WaitGroup + + // Used to cache the hash result of the host name and the pid of the process agent. Being used as part of + // getRequestID method. Must use pointer, to distinguish between uninitialized value and the theoretical but yet + // possible 0 value for the hash result. + requestIDCachedHash *uint64 + dropCheckPayloads []string + + forwarderRetryMaxQueueBytes int + + // Callback for setting realtime mode. If this is nil realtime mode is never toggled. + updateRTStatusCallback func([]*model.CollectorStatus) +} + +func NewSubmitter(hostname string, enableRealtimeCallback func([]*model.CollectorStatus)) (*checkSubmitter, error) { + queueBytes := ddconfig.Datadog.GetInt("process_config.process_queue_bytes") + if queueBytes <= 0 { + log.Warnf("Invalid queue bytes size: %d. Using default value: %d", queueBytes, ddconfig.DefaultProcessQueueBytes) + queueBytes = ddconfig.DefaultProcessQueueBytes + } + + queueSize := ddconfig.Datadog.GetInt("process_config.queue_size") + if queueSize <= 0 { + log.Warnf("Invalid check queue size: %d. Using default value: %d", queueSize, ddconfig.DefaultProcessQueueSize) + queueSize = ddconfig.DefaultProcessQueueSize + } + processResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) + log.Debugf("Creating process check queue with max_size=%d and max_weight=%d", processResults.MaxSize(), processResults.MaxWeight()) + + rtQueueSize := ddconfig.Datadog.GetInt("process_config.rt_queue_size") + if rtQueueSize <= 0 { + log.Warnf("Invalid rt check queue size: %d. Using default value: %d", rtQueueSize, ddconfig.DefaultProcessRTQueueSize) + rtQueueSize = ddconfig.DefaultProcessRTQueueSize + } + // reuse main queue's ProcessQueueBytes because it's unlikely that it'll reach to that size in bytes, so we don't need a separate config for it + rtProcessResults := api.NewWeightedQueue(rtQueueSize, int64(queueBytes)) + log.Debugf("Creating rt process check queue with max_size=%d and max_weight=%d", rtProcessResults.MaxSize(), rtProcessResults.MaxWeight()) + + connectionsResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) + log.Debugf("Creating connections queue with max_size=%d and max_weight=%d", connectionsResults.MaxSize(), connectionsResults.MaxWeight()) + + orchestrator := oconfig.NewDefaultOrchestratorConfig() + if err := orchestrator.Load(); err != nil { + return nil, err + } + podResults := api.NewWeightedQueue(queueSize, int64(orchestrator.PodQueueBytes)) + log.Debugf("Creating pod check queue with max_size=%d and max_weight=%d", podResults.MaxSize(), podResults.MaxWeight()) + + eventResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) + log.Debugf("Creating event check queue with max_size=%d and max_weight=%d", eventResults.MaxSize(), eventResults.MaxWeight()) + + dropCheckPayloads := ddconfig.Datadog.GetStringSlice("process_config.drop_check_payloads") + if len(dropCheckPayloads) > 0 { + log.Debugf("Dropping payloads from checks: %v", dropCheckPayloads) + } + + // Forwarder initialization + processAPIEndpoints, err := getAPIEndpoints() + if err != nil { + return nil, err + } + processForwarderOpts := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(apicfg.KeysPerDomains(processAPIEndpoints))) + processForwarderOpts.DisableAPIKeyChecking = true + processForwarderOpts.RetryQueuePayloadsTotalMaxSize = queueBytes // Allow more in-flight requests than the default + processForwarder := forwarder.NewDefaultForwarder(processForwarderOpts) + + // rt forwarder reuses processForwarder's config + rtProcessForwarder := forwarder.NewDefaultForwarder(processForwarderOpts) + + // connections forwarder reuses processForwarder's config + connectionsForwarder := forwarder.NewDefaultForwarder(processForwarderOpts) + + podForwarderOpts := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(apicfg.KeysPerDomains(orchestrator.OrchestratorEndpoints))) + podForwarderOpts.DisableAPIKeyChecking = true + podForwarderOpts.RetryQueuePayloadsTotalMaxSize = queueBytes // Allow more in-flight requests than the default + podForwarder := forwarder.NewDefaultForwarder(podForwarderOpts) + + processEventsAPIEndpoints, err := getEventsAPIEndpoints() + if err != nil { + return nil, err + } + eventForwarderOpts := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(apicfg.KeysPerDomains(processEventsAPIEndpoints))) + eventForwarderOpts.DisableAPIKeyChecking = true + eventForwarderOpts.RetryQueuePayloadsTotalMaxSize = queueBytes // Allow more in-flight requests than the default + eventForwarder := forwarder.NewDefaultForwarder(eventForwarderOpts) + + printStartMessage(hostname, processAPIEndpoints, processEventsAPIEndpoints, orchestrator.OrchestratorEndpoints) + return &checkSubmitter{ + processResults: processResults, + rtProcessResults: rtProcessResults, + eventResults: eventResults, + connectionsResults: connectionsResults, + podResults: podResults, + + processForwarder: processForwarder, + rtProcessForwarder: rtProcessForwarder, + connectionsForwarder: connectionsForwarder, + podForwarder: podForwarder, + eventForwarder: eventForwarder, + + orchestrator: orchestrator, + hostname: hostname, + + dropCheckPayloads: dropCheckPayloads, + + forwarderRetryMaxQueueBytes: queueBytes, + + updateRTStatusCallback: enableRealtimeCallback, + + wg: &sync.WaitGroup{}, + exit: make(chan struct{}), + }, nil +} + +func printStartMessage(hostname string, processAPIEndpoints, processEventsAPIEndpoints, orchestratorEndpoints []apicfg.Endpoint) { + eps := make([]string, 0, len(processAPIEndpoints)) + for _, e := range processAPIEndpoints { + eps = append(eps, e.Endpoint.String()) + } + orchestratorEps := make([]string, 0, len(orchestratorEndpoints)) + for _, e := range orchestratorEndpoints { + orchestratorEps = append(orchestratorEps, e.Endpoint.String()) + } + eventsEps := make([]string, 0, len(processEventsAPIEndpoints)) + for _, e := range processEventsAPIEndpoints { + eventsEps = append(eventsEps, e.Endpoint.String()) + } + + log.Infof("Starting checkSubmitter for host=%s, endpoints=%s, events endpoints=%s orchestrator endpoints=%s", hostname, eps, eventsEps, orchestratorEps) +} + +func (s *checkSubmitter) Submit(start time.Time, name string, messages []model.MessageBody) { + results := s.resultsQueueForCheck(name) + if name == checks.PodCheckName { + s.messagesToResultsQueue(start, checks.PodCheckName, messages[:len(messages)/2], results) + if s.orchestrator.IsManifestCollectionEnabled { + s.messagesToResultsQueue(start, checks.PodCheckManifestName, messages[len(messages)/2:], results) + } + return + } + + s.messagesToResultsQueue(start, name, messages, results) + return +} + +func (s *checkSubmitter) Start() error { + if err := s.processForwarder.Start(); err != nil { + return fmt.Errorf("error starting forwarder: %s", err) + } + + if err := s.rtProcessForwarder.Start(); err != nil { + return fmt.Errorf("error starting RT forwarder: %s", err) + } + + if err := s.connectionsForwarder.Start(); err != nil { + return fmt.Errorf("error starting connections forwarder: %s", err) + } + + if err := s.podForwarder.Start(); err != nil { + return fmt.Errorf("error starting pod forwarder: %s", err) + } + + if err := s.eventForwarder.Start(); err != nil { + return fmt.Errorf("error starting event forwarder: %s", err) + } + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.processResults, s.processForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.rtProcessResults, s.rtProcessForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.connectionsResults, s.connectionsForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.podResults, s.podForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.eventResults, s.eventForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + + heartbeat := time.NewTicker(15 * time.Second) + defer heartbeat.Stop() + + queueSizeTicker := time.NewTicker(10 * time.Second) + defer queueSizeTicker.Stop() + + queueLogTicker := time.NewTicker(time.Minute) + defer queueLogTicker.Stop() + + agentVersion, _ := version.Agent() + tags := []string{ + fmt.Sprintf("version:%s", agentVersion.GetNumberAndPre()), + fmt.Sprintf("revision:%s", agentVersion.Commit), + } + for { + select { + case <-heartbeat.C: + statsd.Client.Gauge("datadog.process.agent", 1, tags, 1) //nolint:errcheck + case <-queueSizeTicker.C: + updateQueueStats(&queueStats{ + processQueueSize: s.processResults.Len(), + rtProcessQueueSize: s.rtProcessResults.Len(), + connectionsQueueSize: s.connectionsResults.Len(), + eventQueueSize: s.eventResults.Len(), + podQueueSize: s.podResults.Len(), + processQueueBytes: s.processResults.Weight(), + rtProcessQueueBytes: s.rtProcessResults.Weight(), + connectionsQueueBytes: s.connectionsResults.Weight(), + eventQueueBytes: s.eventResults.Weight(), + podQueueBytes: s.podResults.Weight(), + }) + case <-queueLogTicker.C: + s.logQueuesSize() + case <-s.exit: + return + } + } + }() + + return nil +} + +func (s *checkSubmitter) Stop() { + s.processResults.Stop() + s.rtProcessResults.Stop() + s.connectionsResults.Stop() + s.podResults.Stop() + s.eventResults.Stop() + + s.processForwarder.Stop() + s.rtProcessForwarder.Stop() + s.connectionsForwarder.Stop() + s.podForwarder.Stop() + s.eventForwarder.Stop() + + close(s.exit) + s.wg.Wait() +} + +func (s *checkSubmitter) consumePayloads(results *api.WeightedQueue, fwd forwarder.Forwarder) { + for { + // results.Poll() will return ok=false when stopped + item, ok := results.Poll() + if !ok { + return + } + result := item.(*checkResult) + for _, payload := range result.payloads { + var ( + forwarderPayload = transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&payload.body}) + responses chan forwarder.Response + err error + updateRTStatus bool + ) + + if s.shouldDropPayload(result.name) { + continue + } + + switch result.name { + case checks.Process.Name(): + updateRTStatus = true + responses, err = fwd.SubmitProcessChecks(forwarderPayload, payload.headers) + case checks.Process.RealTimeName(): + updateRTStatus = true + responses, err = fwd.SubmitRTProcessChecks(forwarderPayload, payload.headers) + case checks.Container.Name(): + updateRTStatus = true + responses, err = fwd.SubmitContainerChecks(forwarderPayload, payload.headers) + case checks.RTContainer.Name(): + updateRTStatus = true + responses, err = fwd.SubmitRTContainerChecks(forwarderPayload, payload.headers) + case checks.Connections.Name(): + updateRTStatus = true + responses, err = fwd.SubmitConnectionChecks(forwarderPayload, payload.headers) + // Pod check metadata + case checks.Pod.Name(): + responses, err = fwd.SubmitOrchestratorChecks(forwarderPayload, payload.headers, int(orchestrator.K8sPod)) + // Pod check manifest data + case checks.PodCheckManifestName: + responses, err = fwd.SubmitOrchestratorManifests(forwarderPayload, payload.headers) + case checks.ProcessDiscovery.Name(): + // A Process Discovery check does not change the RT mode + responses, err = fwd.SubmitProcessDiscoveryChecks(forwarderPayload, payload.headers) + case checks.ProcessEvents.Name(): + responses, err = fwd.SubmitProcessEventChecks(forwarderPayload, payload.headers) + default: + err = fmt.Errorf("unsupported payload type: %s", result.name) + } + + if err != nil { + log.Errorf("Unable to submit payload: %s", err) + continue + } + + if statuses := readResponseStatuses(result.name, responses); len(statuses) > 0 { + if updateRTStatus && s.updateRTStatusCallback != nil { + s.updateRTStatusCallback(statuses) + } + } + } + } +} + +func (s *checkSubmitter) resultsQueueForCheck(name string) *api.WeightedQueue { + switch name { + case checks.Pod.Name(): + return s.podResults + case checks.Process.RealTimeName(), checks.RTContainer.Name(): + return s.rtProcessResults + case checks.Connections.Name(): + return s.connectionsResults + case checks.ProcessEvents.Name(): + return s.eventResults + } + return s.processResults +} + +func (s *checkSubmitter) logQueuesSize() { + var ( + processSize = s.processResults.Len() + rtProcessSize = s.rtProcessResults.Len() + connectionsSize = s.connectionsResults.Len() + eventsSize = s.eventResults.Len() + podSize = s.podResults.Len() + ) + + if processSize == 0 && + rtProcessSize == 0 && + connectionsSize == 0 && + eventsSize == 0 && + podSize == 0 { + return + } + + log.Infof( + "Delivery queues: process[size=%d, weight=%d], rtprocess[size=%d, weight=%d], connections[size=%d, weight=%d], event[size=%d, weight=%d], pod[size=%d, weight=%d]", + processSize, s.processResults.Weight(), + rtProcessSize, s.rtProcessResults.Weight(), + connectionsSize, s.connectionsResults.Weight(), + eventsSize, s.eventResults.Weight(), + podSize, s.podResults.Weight(), + ) +} + +func (s *checkSubmitter) messagesToResultsQueue(start time.Time, name string, messages []model.MessageBody, queue *api.WeightedQueue) { + result := s.messagesToCheckResult(start, name, messages) + if result == nil { + return + } + queue.Add(result) + // update proc and container count for info + updateProcContainerCount(messages) +} + +func (s *checkSubmitter) messagesToCheckResult(start time.Time, name string, messages []model.MessageBody) *checkResult { + if len(messages) == 0 { + return nil + } + + payloads := make([]checkPayload, 0, len(messages)) + sizeInBytes := 0 + + for messageIndex, m := range messages { + body, err := api.EncodePayload(m) + if err != nil { + log.Errorf("Unable to encode message: %s", err) + continue + } + + agentVersion, _ := version.Agent() + extraHeaders := make(http.Header) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(start.Unix()))) + extraHeaders.Set(headers.HostHeader, s.hostname) + extraHeaders.Set(headers.ProcessVersionHeader, agentVersion.GetNumber()) + extraHeaders.Set(headers.ContainerCountHeader, strconv.Itoa(getContainerCount(m))) + extraHeaders.Set(headers.ContentTypeHeader, headers.ProtobufContentType) + + if s.orchestrator.OrchestrationCollectionEnabled { + if cid, err := clustername.GetClusterID(); err == nil && cid != "" { + extraHeaders.Set(headers.ClusterIDHeader, cid) + } + extraHeaders.Set(headers.EVPOriginHeader, "process-agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + } + + switch name { + case checks.ProcessEvents.Name(): + extraHeaders.Set(headers.EVPOriginHeader, "process-agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + case checks.Connections.Name(), checks.Process.Name(): + requestID := s.getRequestID(start, messageIndex) + log.Debugf("the request id of the current message: %s", requestID) + extraHeaders.Set(headers.RequestIDHeader, requestID) + } + + payloads = append(payloads, checkPayload{ + body: body, + headers: extraHeaders, + }) + + sizeInBytes += len(body) + } + + return &checkResult{ + name: name, + payloads: payloads, + sizeInBytes: int64(sizeInBytes), + } +} + +// getRequestID generates a unique identifier (string representation of 64 bits integer) that is composed as follows: +// 1. 22 bits of the seconds in the current month. +// 2. 28 bits of hash of the hostname and process agent pid. +// 3. 14 bits of the current message in the batch being sent to the server. +func (s *checkSubmitter) getRequestID(start time.Time, chunkIndex int) string { + // The epoch is the beginning of the month of the `start` variable. + epoch := time.Date(start.Year(), start.Month(), 1, 0, 0, 0, 0, start.Location()) + // We are taking the seconds in the current month, and representing them under 22 bits. + // In a month we have 60 seconds per minute * 60 minutes per hour * 24 hours per day * maximum 31 days a month + // which is 2678400, and it can be represented with log2(2678400) = 21.35 bits. + seconds := (uint64(start.Sub(epoch).Seconds()) & secondsMask) << (hashNumberOfBits + chunkNumberOfBits) + + //// Next, we want 28 bits of hashed hostname & process agent pid. + if s.requestIDCachedHash == nil { + hash := fnv.New32() + hash.Write([]byte(s.hostname)) + hash.Write([]byte(strconv.Itoa(os.Getpid()))) + hostNamePIDHash := (uint64(hash.Sum32()) & hashMask) << chunkNumberOfBits + s.requestIDCachedHash = &hostNamePIDHash + } + + // Next, we take up to 14 bits to represent the message index in the batch. + // It means that we support up to 16384 (2 ^ 14) different messages being sent on the same batch. + chunk := uint64(chunkIndex & chunkMask) + return fmt.Sprintf("%d", seconds+*s.requestIDCachedHash+chunk) +} + +func (s *checkSubmitter) shouldDropPayload(check string) bool { + for _, d := range s.dropCheckPayloads { + if d == check { + return true + } + } + + return false +} diff --git a/cmd/process-agent/submitter_test.go b/cmd/process-agent/submitter_test.go new file mode 100644 index 0000000000000..1a4faa452743e --- /dev/null +++ b/cmd/process-agent/submitter_test.go @@ -0,0 +1,310 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package main + +import ( + "strconv" + "testing" + "time" + + "github.com/stretchr/testify/assert" + + model "github.com/DataDog/agent-payload/v5/process" + ddconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" + "github.com/DataDog/datadog-agent/pkg/version" +) + +func TestNewCollectorQueueSize(t *testing.T) { + tests := []struct { + name string + override bool + queueSize int + expectedQueueSize int + }{ + { + name: "default queue size", + override: false, + queueSize: 42, + expectedQueueSize: ddconfig.DefaultProcessQueueSize, + }, + { + name: "valid queue size override", + override: true, + queueSize: 42, + expectedQueueSize: 42, + }, + { + name: "invalid negative queue size override", + override: true, + queueSize: -10, + expectedQueueSize: ddconfig.DefaultProcessQueueSize, + }, + { + name: "invalid 0 queue size override", + override: true, + queueSize: 0, + expectedQueueSize: ddconfig.DefaultProcessQueueSize, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + mockConfig := ddconfig.Mock(t) + if tc.override { + mockConfig.Set("process_config.queue_size", tc.queueSize) + } + + c, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + assert.Equal(t, tc.expectedQueueSize, c.processResults.MaxSize()) + assert.Equal(t, tc.expectedQueueSize, c.podResults.MaxSize()) + }) + } +} + +func TestNewCollectorRTQueueSize(t *testing.T) { + tests := []struct { + name string + override bool + queueSize int + expectedQueueSize int + }{ + { + name: "default queue size", + override: false, + queueSize: 2, + expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, + }, + { + name: "valid queue size override", + override: true, + queueSize: 2, + expectedQueueSize: 2, + }, + { + name: "invalid negative size override", + override: true, + queueSize: -2, + expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, + }, + { + name: "invalid 0 queue size override", + override: true, + queueSize: 0, + expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + mockConfig := ddconfig.Mock(t) + if tc.override { + mockConfig.Set("process_config.rt_queue_size", tc.queueSize) + } + + c, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + assert.Equal(t, tc.expectedQueueSize, c.rtProcessResults.MaxSize()) + }) + } +} + +func TestNewCollectorProcessQueueBytes(t *testing.T) { + tests := []struct { + name string + override bool + queueBytes int + expectedQueueSize int + }{ + { + name: "default queue size", + override: false, + queueBytes: 42000, + expectedQueueSize: ddconfig.DefaultProcessQueueBytes, + }, + { + name: "valid queue size override", + override: true, + queueBytes: 42000, + expectedQueueSize: 42000, + }, + { + name: "invalid negative queue size override", + override: true, + queueBytes: -2, + expectedQueueSize: ddconfig.DefaultProcessQueueBytes, + }, + { + name: "invalid 0 queue size override", + override: true, + queueBytes: 0, + expectedQueueSize: ddconfig.DefaultProcessQueueBytes, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + mockConfig := ddconfig.Mock(t) + if tc.override { + mockConfig.Set("process_config.process_queue_bytes", tc.queueBytes) + } + + s, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + assert.Equal(t, int64(tc.expectedQueueSize), s.processResults.MaxWeight()) + assert.Equal(t, int64(tc.expectedQueueSize), s.rtProcessResults.MaxWeight()) + assert.Equal(t, tc.expectedQueueSize, s.forwarderRetryMaxQueueBytes) + }) + } +} + +func TestCollectorMessagesToCheckResult(t *testing.T) { + submitter, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + + now := time.Now() + agentVersion, _ := version.Agent() + + requestID := submitter.getRequestID(now, 0) + + tests := []struct { + name string + message model.MessageBody + expectHeaders map[string]string + }{ + { + name: "process", + message: &model.CollectorProc{ + Containers: []*model.Container{ + {}, {}, {}, + }, + }, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "3", + headers.ContentTypeHeader: headers.ProtobufContentType, + headers.RequestIDHeader: requestID, + }, + }, + { + name: "rt_process", + message: &model.CollectorRealTime{ + ContainerStats: []*model.ContainerStat{ + {}, {}, {}, + }, + }, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "3", + headers.ContentTypeHeader: headers.ProtobufContentType, + }, + }, + { + name: "container", + message: &model.CollectorContainer{ + Containers: []*model.Container{ + {}, {}, + }, + }, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "2", + headers.ContentTypeHeader: headers.ProtobufContentType, + }, + }, + { + name: "rt_container", + message: &model.CollectorContainerRealTime{ + Stats: []*model.ContainerStat{ + {}, {}, {}, {}, {}, + }, + }, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "5", + headers.ContentTypeHeader: headers.ProtobufContentType, + }, + }, + { + name: "process_discovery", + message: &model.CollectorProcDiscovery{}, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "0", + headers.ContentTypeHeader: headers.ProtobufContentType, + }, + }, + { + name: "process_events", + message: &model.CollectorProcEvent{}, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "0", + headers.ContentTypeHeader: headers.ProtobufContentType, + headers.EVPOriginHeader: "process-agent", + headers.EVPOriginVersionHeader: version.AgentVersion, + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + messages := []model.MessageBody{ + test.message, + } + result := submitter.messagesToCheckResult(now, test.name, messages) + assert.Equal(t, test.name, result.name) + assert.Len(t, result.payloads, 1) + payload := result.payloads[0] + assert.Len(t, payload.headers, len(test.expectHeaders)) + for k, v := range test.expectHeaders { + assert.Equal(t, v, payload.headers.Get(k)) + } + }) + } +} + +func Test_getRequestID(t *testing.T) { + s, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + + fixedDate1 := time.Date(2022, 9, 1, 0, 0, 1, 0, time.Local) + id1 := s.getRequestID(fixedDate1, 1) + id2 := s.getRequestID(fixedDate1, 1) + // The calculation should be deterministic, so making sure the parameters generates the same id. + assert.Equal(t, id1, id2) + fixedDate2 := time.Date(2022, 9, 1, 0, 0, 2, 0, time.Local) + id3 := s.getRequestID(fixedDate2, 1) + + // The request id is based on time, so if the difference it only the time, then the new ID should be greater. + id1Num, _ := strconv.ParseUint(id1, 10, 64) + id3Num, _ := strconv.ParseUint(id3, 10, 64) + assert.Greater(t, id3Num, id1Num) + + // Increasing the chunk index should increase the id. + id4 := s.getRequestID(fixedDate2, 3) + id4Num, _ := strconv.ParseUint(id4, 10, 64) + assert.Equal(t, id3Num+2, id4Num) + + // Changing the host -> changing the hash. + s.hostname = "host2" + s.requestIDCachedHash = nil + id5 := s.getRequestID(fixedDate1, 1) + assert.NotEqual(t, id1, id5) +} diff --git a/cmd/security-agent/app/app.go b/cmd/security-agent/app/app.go index 67c83e355106c..2fef88b29b49b 100644 --- a/cmd/security-agent/app/app.go +++ b/cmd/security-agent/app/app.go @@ -9,6 +9,7 @@ import ( "context" "errors" "fmt" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" "net/http" "os" "path" @@ -21,18 +22,16 @@ import ( "github.com/fatih/color" "github.com/spf13/cobra" - ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" - commonagent "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/cmd/manager" "github.com/DataDog/datadog-agent/cmd/security-agent/api" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/compliance" subconfig "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/config" "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/flare" "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/runtime" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/status" - subversion "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/version" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/status" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/version" compconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/config/resolver" @@ -48,15 +47,16 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/profiling" "github.com/DataDog/datadog-agent/pkg/util/startstop" - "github.com/DataDog/datadog-agent/pkg/version" + pkgversion "github.com/DataDog/datadog-agent/pkg/version" "github.com/DataDog/datadog-agent/pkg/workloadmeta" + ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" coreconfig "github.com/DataDog/datadog-agent/pkg/config" ) const ( // loggerName is the name of the security agent logger - loggerName coreconfig.LoggerName = common.LoggerName + loggerName coreconfig.LoggerName = command.LoggerName ) var ( @@ -66,7 +66,7 @@ var ( ) func CreateSecurityAgentCmd() *cobra.Command { - globalParams := common.GlobalParams{} + globalParams := command.GlobalParams{} var flagNoColor bool SecurityAgentCmd := &cobra.Command{ @@ -81,7 +81,7 @@ Datadog Security Agent takes care of running compliance and security checks.`, } // TODO(paulcacheux): remove this once all subcommands have been converted to use config component - _, err := compconfig.MergeConfigurationFiles("datadog", globalParams.ConfPathArray, cmd.Flags().Lookup("cfgpath").Changed) + _, err := compconfig.MergeConfigurationFiles("datadog", globalParams.ConfigFilePaths, cmd.Flags().Lookup(flags.CfgPath).Changed) return err }, PersistentPostRun: func(cmd *cobra.Command, args []string) { @@ -89,20 +89,20 @@ Datadog Security Agent takes care of running compliance and security checks.`, }, } - defaultConfPathArray := []string{ + defaultConfigFilePaths := []string{ path.Join(commonagent.DefaultConfPath, "datadog.yaml"), path.Join(commonagent.DefaultConfPath, "security-agent.yaml"), } - SecurityAgentCmd.PersistentFlags().StringArrayVarP(&globalParams.ConfPathArray, "cfgpath", "c", defaultConfPathArray, "path to a yaml configuration file") - SecurityAgentCmd.PersistentFlags().BoolVarP(&flagNoColor, "no-color", "n", false, "disable color output") + SecurityAgentCmd.PersistentFlags().StringArrayVarP(&globalParams.ConfigFilePaths, flags.CfgPath, "c", defaultConfigFilePaths, "path to a yaml configuration file") + SecurityAgentCmd.PersistentFlags().BoolVarP(&flagNoColor, flags.NoColor, "n", false, "disable color output") - factories := []common.SubcommandFactory{ + factories := []command.SubcommandFactory{ status.Commands, flare.Commands, subconfig.Commands, compliance.Commands, runtime.Commands, - subversion.Commands, + version.Commands, StartCommands, } @@ -167,7 +167,12 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { if !coreconfig.Datadog.IsSet("api_key") { log.Critical("no API key configured, exiting") - return nil + + // A sleep is necessary so that sysV doesn't think the agent has failed + // to startup because of an error. Only applies on Debian 7. + time.Sleep(5 * time.Second) + + return errAllComponentsDisabled } err = manager.ConfigureAutoExit(ctx) @@ -213,7 +218,7 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { opts.UseOrchestratorForwarder = false opts.UseContainerLifecycleForwarder = false demux := aggregator.InitAndStartAgentDemultiplexer(opts, hostnameDetected) - demux.AddAgentStartupTelemetry(fmt.Sprintf("%s - Datadog Security Agent", version.AgentVersion)) + demux.AddAgentStartupTelemetry(fmt.Sprintf("%s - Datadog Security Agent", pkgversion.AgentVersion)) stopper = startstop.NewSerialStopper() @@ -232,6 +237,15 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { return log.Criticalf("Error creating statsd Client: %s", err) } + workloadmetaCollectors := workloadmeta.NodeAgentCatalog + if coreconfig.Datadog.GetBool("security_agent.remote_workloadmeta") { + workloadmetaCollectors = workloadmeta.RemoteCatalog + } + + // Start workloadmeta store + store := workloadmeta.CreateGlobalStore(workloadmetaCollectors) + store.Start(ctx) + // Initialize the remote tagger if coreconfig.Datadog.GetBool("security_agent.remote_tagger") { options, err := remote.NodeAgentOptions() @@ -246,10 +260,6 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { } } - // Start workloadmeta store - store := workloadmeta.CreateGlobalStore(workloadmeta.NodeAgentCatalog) - store.Start(ctx) - complianceAgent, err := compliance.StartCompliance(hostnameDetected, stopper, statsdClient) if err != nil { return err @@ -322,7 +332,7 @@ func StopAgent(cancel context.CancelFunc) { func setupInternalProfiling() error { cfg := coreconfig.Datadog if cfg.GetBool(secAgentKey("internal_profiling.enabled")) { - v, _ := version.Agent() + v, _ := pkgversion.Agent() cfgSite := cfg.GetString(secAgentKey("internal_profiling.site")) cfgURL := cfg.GetString(secAgentKey("security_agent.internal_profiling.profile_dd_url")) diff --git a/cmd/security-agent/app/start.go b/cmd/security-agent/app/start.go index 66411cc18814c..5616a05e400b4 100644 --- a/cmd/security-agent/app/start.go +++ b/cmd/security-agent/app/start.go @@ -8,23 +8,24 @@ package app import ( "context" "errors" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/spf13/cobra" "os" "os/signal" "syscall" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/pkg/tagger" "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/spf13/cobra" ) type startCliParams struct { - *common.GlobalParams + *command.GlobalParams pidfilePath string } -func StartCommands(globalParams *common.GlobalParams) []*cobra.Command { +func StartCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := startCliParams{ GlobalParams: globalParams, } @@ -38,7 +39,7 @@ func StartCommands(globalParams *common.GlobalParams) []*cobra.Command { }, } - startCmd.Flags().StringVarP(&cliParams.pidfilePath, "pidfile", "p", "", "path to the pidfile") + startCmd.Flags().StringVarP(&cliParams.pidfilePath, flags.PidFile, "p", "", "path to the pidfile") return []*cobra.Command{startCmd} } diff --git a/cmd/security-agent/app/subcommands/check/command.go b/cmd/security-agent/app/subcommands/check/command.go index 7e1d0752986b9..0f58084e5d088 100644 --- a/cmd/security-agent/app/subcommands/check/command.go +++ b/cmd/security-agent/app/subcommands/check/command.go @@ -11,19 +11,19 @@ package check import ( "context" "errors" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "os" "time" "github.com/spf13/cobra" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/compliance/agent" "github.com/DataDog/datadog-agent/pkg/compliance/checks" - pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/hostname" @@ -44,12 +44,10 @@ type checkCliParams struct { skipRegoEval bool } -func SecAgentCommands(globalParams *common.GlobalParams) []*cobra.Command { +func SecAgentCommands(globalParams *command.GlobalParams) []*cobra.Command { bp := core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "info", true) - + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)} return Commands(bp) } @@ -63,6 +61,10 @@ func Commands(bundleParams core.BundleParams) []*cobra.Command { Long: ``, RunE: func(cmd *cobra.Command, args []string) error { checkArgs.args = args + if checkArgs.verbose { + bundleParams.LogParams = log.LogForOneShot(bundleParams.LogParams.LoggerName(), "trace", true) + } + return fxutil.OneShot(runCheck, fx.Supply(checkArgs), fx.Supply(bundleParams), @@ -71,14 +73,14 @@ func Commands(bundleParams core.BundleParams) []*cobra.Command { }, } - cmd.Flags().StringVarP(&checkArgs.framework, "framework", "", "", "Framework to run the checks from") - cmd.Flags().StringVarP(&checkArgs.file, "file", "f", "", "Compliance suite file to read rules from") - cmd.Flags().BoolVarP(&checkArgs.verbose, "verbose", "v", false, "Include verbose details") - cmd.Flags().BoolVarP(&checkArgs.report, "report", "r", false, "Send report") - cmd.Flags().StringVarP(&checkArgs.overrideRegoInput, "override-rego-input", "", "", "Rego input to use when running rego checks") - cmd.Flags().StringVarP(&checkArgs.dumpRegoInput, "dump-rego-input", "", "", "Path to file where to dump the Rego input JSON") - cmd.Flags().StringVarP(&checkArgs.dumpReports, "dump-reports", "", "", "Path to file where to dump reports") - cmd.Flags().BoolVarP(&checkArgs.skipRegoEval, "skip-rego-eval", "", false, "Skip rego evaluation") + cmd.Flags().StringVarP(&checkArgs.framework, flags.Framework, "", "", "Framework to run the checks from") + cmd.Flags().StringVarP(&checkArgs.file, flags.File, "f", "", "Compliance suite file to read rules from") + cmd.Flags().BoolVarP(&checkArgs.verbose, flags.Verbose, "v", false, "Include verbose details") + cmd.Flags().BoolVarP(&checkArgs.report, flags.Report, "r", false, "Send report") + cmd.Flags().StringVarP(&checkArgs.overrideRegoInput, flags.OverrideRegoInput, "", "", "Rego input to use when running rego checks") + cmd.Flags().StringVarP(&checkArgs.dumpRegoInput, flags.DumpRegoInput, "", "", "Path to file where to dump the Rego input JSON") + cmd.Flags().StringVarP(&checkArgs.dumpReports, flags.DumpReports, "", "", "Path to file where to dump reports") + cmd.Flags().BoolVarP(&checkArgs.skipRegoEval, flags.SkipRegoEval, "", false, "Skip rego evaluation") return []*cobra.Command{cmd} } @@ -106,15 +108,6 @@ func runCheck(log log.Component, config config.Component, checkArgs *checkCliPar checks.MayFail(checks.WithDocker()), checks.MayFail(checks.WithAudit()), }...) - - if pkgconfig.IsKubernetes() { - nodeLabels, err := agent.WaitGetNodeLabels() - if err != nil { - log.Error(err) - } else { - options = append(options, checks.WithNodeLabels(nodeLabels)) - } - } } var ruleID string diff --git a/cmd/security-agent/app/subcommands/check/command_unsupported.go b/cmd/security-agent/app/subcommands/check/command_unsupported.go index 79a85fa25d747..28ee13b1ab11e 100644 --- a/cmd/security-agent/app/subcommands/check/command_unsupported.go +++ b/cmd/security-agent/app/subcommands/check/command_unsupported.go @@ -8,11 +8,10 @@ package check import ( + "github.com/DataDog/datadog-agent/cmd/security-agent/command" "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" ) -func SecAgentCommands(globalParams *common.GlobalParams) []*cobra.Command { +func SecAgentCommands(globalParams *command.GlobalParams) []*cobra.Command { return nil } diff --git a/cmd/security-agent/app/subcommands/compliance/command.go b/cmd/security-agent/app/subcommands/compliance/command.go index 1163cb3582413..87dde7d7151ee 100644 --- a/cmd/security-agent/app/subcommands/compliance/command.go +++ b/cmd/security-agent/app/subcommands/compliance/command.go @@ -7,15 +7,19 @@ package compliance import ( "fmt" + "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "strings" "github.com/spf13/cobra" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/check" "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" compconfig "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" complog "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/compliance/event" coreconfig "github.com/DataDog/datadog-agent/pkg/config" @@ -23,7 +27,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/startstop" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { complianceCmd := &cobra.Command{ Use: "compliance", Short: "Compliance Agent utility commands", @@ -36,7 +40,7 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { } type eventCliParams struct { - *common.GlobalParams + *command.GlobalParams sourceName string sourceType string @@ -44,7 +48,7 @@ type eventCliParams struct { data []string } -func complianceEventCommand(globalParams *common.GlobalParams) *cobra.Command { +func complianceEventCommand(globalParams *command.GlobalParams) *cobra.Command { eventArgs := &eventCliParams{ GlobalParams: globalParams, } @@ -56,22 +60,21 @@ func complianceEventCommand(globalParams *common.GlobalParams) *cobra.Command { return fxutil.OneShot(eventRun, fx.Supply(eventArgs), fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "info", true)), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, Hidden: true, } - eventCmd.Flags().StringVarP(&eventArgs.sourceType, "source-type", "", "compliance", "Log source name") - eventCmd.Flags().StringVarP(&eventArgs.sourceName, "source-name", "", "compliance-agent", "Log source name") - eventCmd.Flags().StringVarP(&eventArgs.event.AgentRuleID, "rule-id", "", "", "Rule ID") - eventCmd.Flags().StringVarP(&eventArgs.event.ResourceID, "resource-id", "", "", "Resource ID") - eventCmd.Flags().StringVarP(&eventArgs.event.ResourceType, "resource-type", "", "", "Resource type") - eventCmd.Flags().StringSliceVarP(&eventArgs.event.Tags, "tags", "t", []string{"security:compliance"}, "Tags") - eventCmd.Flags().StringSliceVarP(&eventArgs.data, "data", "d", []string{}, "Data KV fields") + eventCmd.Flags().StringVarP(&eventArgs.sourceType, flags.SourceType, "", "compliance", "Log source name") + eventCmd.Flags().StringVarP(&eventArgs.sourceName, flags.SourceName, "", "compliance-agent", "Log source name") + eventCmd.Flags().StringVarP(&eventArgs.event.AgentRuleID, flags.RuleID, "", "", "Rule ID") + eventCmd.Flags().StringVarP(&eventArgs.event.ResourceID, flags.ResourceID, "", "", "Resource ID") + eventCmd.Flags().StringVarP(&eventArgs.event.ResourceType, flags.ResourceType, "", "", "Resource type") + eventCmd.Flags().StringSliceVarP(&eventArgs.event.Tags, flags.Tags, "t", []string{"security:compliance"}, "Tags") + eventCmd.Flags().StringSliceVarP(&eventArgs.data, flags.Data, "d", []string{}, "Data KV fields") return eventCmd } diff --git a/cmd/security-agent/app/subcommands/compliance/compliance.go b/cmd/security-agent/app/subcommands/compliance/compliance.go index cdea0851b2c60..852e4700ef58e 100644 --- a/cmd/security-agent/app/subcommands/compliance/compliance.go +++ b/cmd/security-agent/app/subcommands/compliance/compliance.go @@ -7,12 +7,12 @@ package compliance import ( "fmt" + "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" "os" "time" ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" "github.com/DataDog/datadog-agent/pkg/collector/runner" "github.com/DataDog/datadog-agent/pkg/collector/scheduler" "github.com/DataDog/datadog-agent/pkg/compliance/agent" @@ -62,15 +62,6 @@ func StartCompliance(hostname string, stopper startstop.Stopper, statsdClient *d checks.WithStatsd(statsdClient), } - if coreconfig.IsKubernetes() { - nodeLabels, err := agent.WaitGetNodeLabels() - if err != nil { - log.Error(err) - } else { - options = append(options, checks.WithNodeLabels(nodeLabels)) - } - } - agent, err := agent.New( reporter, scheduler, diff --git a/cmd/security-agent/app/subcommands/config/config.go b/cmd/security-agent/app/subcommands/config/config.go index 8be053de769e3..e115073cb532d 100644 --- a/cmd/security-agent/app/subcommands/config/config.go +++ b/cmd/security-agent/app/subcommands/config/config.go @@ -10,10 +10,10 @@ package config import ( "fmt" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" "github.com/spf13/cobra" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" cmdconfig "github.com/DataDog/datadog-agent/cmd/security-agent/commands/config" "github.com/DataDog/datadog-agent/pkg/api/util" "github.com/DataDog/datadog-agent/pkg/config" @@ -21,13 +21,13 @@ import ( settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { cmd := cmdconfig.Config(getSettingsClient) return []*cobra.Command{cmd} } func setupConfig(cmd *cobra.Command) error { - err := config.SetupLogger(common.LoggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) + err := config.SetupLogger(command.LoggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) if err != nil { fmt.Printf("Cannot setup logger, exiting: %v\n", err) return err diff --git a/cmd/security-agent/app/subcommands/config/config_unsupported.go b/cmd/security-agent/app/subcommands/config/config_unsupported.go index 45280794d6158..534f1058c9854 100644 --- a/cmd/security-agent/app/subcommands/config/config_unsupported.go +++ b/cmd/security-agent/app/subcommands/config/config_unsupported.go @@ -9,11 +9,10 @@ package config import ( + "github.com/DataDog/datadog-agent/cmd/security-agent/command" "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { return nil } diff --git a/cmd/security-agent/app/subcommands/flare/command.go b/cmd/security-agent/app/subcommands/flare/command.go index 576df0e8181cf..525d3c789246c 100644 --- a/cmd/security-agent/app/subcommands/flare/command.go +++ b/cmd/security-agent/app/subcommands/flare/command.go @@ -13,9 +13,11 @@ import ( "github.com/spf13/cobra" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/api/util" "github.com/DataDog/datadog-agent/pkg/flare" "github.com/DataDog/datadog-agent/pkg/util/fxutil" @@ -23,14 +25,14 @@ import ( ) type flareCliParams struct { - *common.GlobalParams + *command.GlobalParams customerEmail string autoconfirm bool caseID string } -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &flareCliParams{ GlobalParams: globalParams, } @@ -47,17 +49,16 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { // The flare command should not log anything, all errors should be reported directly to the console without the log format return fxutil.OneShot(requestFlare, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewParams("", config.WithSecurityAgentConfigFilePaths(globalParams.ConfigFilePaths), config.WithConfigLoadSecurityAgent(true)), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), core.Bundle, ) }, } - flareCmd.Flags().StringVarP(&cliParams.customerEmail, "email", "e", "", "Your email") - flareCmd.Flags().BoolVarP(&cliParams.autoconfirm, "send", "s", false, "Automatically send flare (don't prompt for confirmation)") + flareCmd.Flags().StringVarP(&cliParams.customerEmail, flags.Email, "e", "", "Your email") + flareCmd.Flags().BoolVarP(&cliParams.autoconfirm, flags.Send, "s", false, "Automatically send flare (don't prompt for confirmation)") flareCmd.SetArgs([]string{"caseID"}) return []*cobra.Command{flareCmd} diff --git a/cmd/security-agent/app/subcommands/runtime/activity_dump.go b/cmd/security-agent/app/subcommands/runtime/activity_dump.go index f0263d1961b54..9c8188c8f98f3 100644 --- a/cmd/security-agent/app/subcommands/runtime/activity_dump.go +++ b/cmd/security-agent/app/subcommands/runtime/activity_dump.go @@ -10,8 +10,9 @@ package runtime import ( "fmt" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" "github.com/DataDog/datadog-agent/comp/core" compconfig "github.com/DataDog/datadog-agent/comp/core/config" complog "github.com/DataDog/datadog-agent/comp/core/log" @@ -26,7 +27,7 @@ import ( ) type activityDumpCliParams struct { - *common.GlobalParams + *command.GlobalParams name string containerID string @@ -42,7 +43,7 @@ type activityDumpCliParams struct { remoteRequest bool } -func activityDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { +func activityDumpCommands(globalParams *command.GlobalParams) []*cobra.Command { activityDumpCmd := &cobra.Command{ Use: "activity-dump", Short: "activity dump command", @@ -55,16 +56,15 @@ func activityDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpCmd} } -func listCommands(globalParams *common.GlobalParams) []*cobra.Command { +func listCommands(globalParams *command.GlobalParams) []*cobra.Command { activityDumpListCmd := &cobra.Command{ Use: "list", Short: "get the list of running activity dumps", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(listActivityDumps, fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "info", true)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -73,7 +73,7 @@ func listCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpListCmd} } -func stopCommands(globalParams *common.GlobalParams) []*cobra.Command { +func stopCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &activityDumpCliParams{ GlobalParams: globalParams, } @@ -85,9 +85,8 @@ func stopCommands(globalParams *common.GlobalParams) []*cobra.Command { return fxutil.OneShot(stopActivityDump, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "info", true)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -95,19 +94,19 @@ func stopCommands(globalParams *common.GlobalParams) []*cobra.Command { activityDumpStopCmd.Flags().StringVar( &cliParams.name, - "name", + flags.Name, "", "an activity dump name can be used to filter the activity dump.", ) activityDumpStopCmd.Flags().StringVar( &cliParams.containerID, - "containerID", + flags.ContainerID, "", "an containerID can be used to filter the activity dump.", ) activityDumpStopCmd.Flags().StringVar( &cliParams.comm, - "comm", + flags.Comm, "", "a process command can be used to filter the activity dump from a specific process.", ) @@ -115,7 +114,7 @@ func stopCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpStopCmd} } -func generateCommands(globalParams *common.GlobalParams) []*cobra.Command { +func generateCommands(globalParams *command.GlobalParams) []*cobra.Command { activityDumpGenerateCmd := &cobra.Command{ Use: "generate", Short: "generate command for activity dumps", @@ -127,7 +126,7 @@ func generateCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpGenerateCmd} } -func generateDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { +func generateDumpCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &activityDumpCliParams{ GlobalParams: globalParams, } @@ -139,9 +138,8 @@ func generateDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { return fxutil.OneShot(generateActivityDump, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "info", true)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -149,49 +147,49 @@ func generateDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { activityDumpGenerateDumpCmd.Flags().StringVar( &cliParams.comm, - "comm", + flags.Comm, "", "a process command can be used to filter the activity dump from a specific process.", ) activityDumpGenerateDumpCmd.Flags().IntVar( &cliParams.timeout, - "timeout", + flags.Timeout, 60, "timeout for the activity dump in minutes", ) activityDumpGenerateDumpCmd.Flags().BoolVar( &cliParams.differentiateArgs, - "differentiate-args", + flags.DifferentiateArgs, true, "add the arguments in the process node merge algorithm", ) activityDumpGenerateDumpCmd.Flags().StringVar( &cliParams.localStorageDirectory, - "output", + flags.Output, "/tmp/activity_dumps/", "local storage output directory", ) activityDumpGenerateDumpCmd.Flags().BoolVar( &cliParams.localStorageCompression, - "compression", + flags.Compression, false, "defines if the local storage output should be compressed before persisting the data to disk", ) activityDumpGenerateDumpCmd.Flags().StringArrayVar( &cliParams.localStorageFormats, - "format", + flags.Format, []string{}, fmt.Sprintf("local storage output formats. Available options are %v.", config.AllStorageFormats()), ) activityDumpGenerateDumpCmd.Flags().BoolVar( &cliParams.remoteStorageCompression, - "remote-compression", + flags.RemoteCompression, true, "defines if the remote storage output should be compressed before sending the data", ) activityDumpGenerateDumpCmd.Flags().StringArrayVar( &cliParams.remoteStorageFormats, - "remote-format", + flags.RemoteFormat, []string{}, fmt.Sprintf("remote storage output formats. Available options are %v.", config.AllStorageFormats()), ) @@ -199,7 +197,7 @@ func generateDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpGenerateDumpCmd} } -func generateEncodingCommands(globalParams *common.GlobalParams) []*cobra.Command { +func generateEncodingCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &activityDumpCliParams{ GlobalParams: globalParams, } @@ -211,9 +209,8 @@ func generateEncodingCommands(globalParams *common.GlobalParams) []*cobra.Comman return fxutil.OneShot(generateEncodingFromActivityDump, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "info", true)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -221,44 +218,44 @@ func generateEncodingCommands(globalParams *common.GlobalParams) []*cobra.Comman activityDumpGenerateEncodingCmd.Flags().StringVar( &cliParams.file, - "input", + flags.Input, "", "path to the activity dump file", ) - _ = activityDumpGenerateEncodingCmd.MarkFlagRequired("input") + _ = activityDumpGenerateEncodingCmd.MarkFlagRequired(flags.Input) activityDumpGenerateEncodingCmd.Flags().StringVar( &cliParams.localStorageDirectory, - "output", + flags.Output, "/tmp/activity_dumps/", "local storage output directory", ) activityDumpGenerateEncodingCmd.Flags().BoolVar( &cliParams.localStorageCompression, - "compression", + flags.Compression, false, "defines if the local storage output should be compressed before persisting the data to disk", ) activityDumpGenerateEncodingCmd.Flags().StringArrayVar( &cliParams.localStorageFormats, - "format", + flags.Format, []string{}, fmt.Sprintf("local storage output formats. Available options are %v.", config.AllStorageFormats()), ) activityDumpGenerateEncodingCmd.Flags().BoolVar( &cliParams.remoteStorageCompression, - "remote-compression", + flags.RemoteCompression, true, "defines if the remote storage output should be compressed before sending the data", ) activityDumpGenerateEncodingCmd.Flags().StringArrayVar( &cliParams.remoteStorageFormats, - "remote-format", + flags.RemoteFormat, []string{}, fmt.Sprintf("remote storage output formats. Available options are %v.", config.AllStorageFormats()), ) activityDumpGenerateEncodingCmd.Flags().BoolVar( &cliParams.remoteRequest, - "remote", + flags.Remote, false, "when set, the transcoding will be done by system-probe instead of the current security-agent instance", ) diff --git a/cmd/security-agent/app/subcommands/runtime/command.go b/cmd/security-agent/app/subcommands/runtime/command.go index 16826204ebeb0..8ec366df60367 100644 --- a/cmd/security-agent/app/subcommands/runtime/command.go +++ b/cmd/security-agent/app/subcommands/runtime/command.go @@ -25,6 +25,8 @@ import ( "go.uber.org/fx" "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/pkg/compliance/event" coreconfig "github.com/DataDog/datadog-agent/pkg/config" @@ -37,6 +39,7 @@ import ( secagent "github.com/DataDog/datadog-agent/pkg/security/agent" "github.com/DataDog/datadog-agent/pkg/security/api" secconfig "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/security/events" sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" @@ -58,7 +61,7 @@ const ( cwsIntakeOrigin config.IntakeOrigin = "cloud-workload-security" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { runtimeCmd := &cobra.Command{ Use: "runtime", Short: "runtime Agent utility commands", @@ -77,12 +80,12 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { } type checkPoliciesCliParams struct { - *common.GlobalParams + *command.GlobalParams dir string } -func checkPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { +func checkPoliciesCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &checkPoliciesCliParams{ GlobalParams: globalParams, } @@ -94,30 +97,28 @@ func checkPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { return fxutil.OneShot(checkPolicies, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "off", false)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "off", false)}), core.Bundle, ) }, Deprecated: "please use `security-agent runtime policy check` instead", } - checkPoliciesCmd.Flags().StringVar(&cliParams.dir, "policies-dir", coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") + checkPoliciesCmd.Flags().StringVar(&cliParams.dir, flags.PoliciesDir, coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") return []*cobra.Command{checkPoliciesCmd} } -func reloadPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { +func reloadPoliciesCommands(globalParams *command.GlobalParams) []*cobra.Command { reloadPoliciesCmd := &cobra.Command{ Use: "reload", Short: "Reload policies", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(reloadRuntimePolicies, fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "info", true)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -126,7 +127,7 @@ func reloadPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command return []*cobra.Command{reloadPoliciesCmd} } -func commonPolicyCommands(globalParams *common.GlobalParams) []*cobra.Command { +func commonPolicyCommands(globalParams *command.GlobalParams) []*cobra.Command { commonPolicyCmd := &cobra.Command{ Use: "policy", Short: "Policy related commands", @@ -141,7 +142,7 @@ func commonPolicyCommands(globalParams *common.GlobalParams) []*cobra.Command { } type evalCliParams struct { - *common.GlobalParams + *command.GlobalParams dir string ruleID string @@ -149,7 +150,7 @@ type evalCliParams struct { debug bool } -func evalCommands(globalParams *common.GlobalParams) []*cobra.Command { +func evalCommands(globalParams *command.GlobalParams) []*cobra.Command { evalArgs := &evalCliParams{ GlobalParams: globalParams, } @@ -161,25 +162,24 @@ func evalCommands(globalParams *common.GlobalParams) []*cobra.Command { return fxutil.OneShot(evalRule, fx.Supply(evalArgs), fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "off", false)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "off", false)}), core.Bundle, ) }, } - evalCmd.Flags().StringVar(&evalArgs.dir, "policies-dir", coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") - evalCmd.Flags().StringVar(&evalArgs.ruleID, "rule-id", "", "Rule ID to evaluate") - _ = evalCmd.MarkFlagRequired("rule-id") - evalCmd.Flags().StringVar(&evalArgs.eventFile, "event-file", "", "File of the event data") - _ = evalCmd.MarkFlagRequired("event-file") - evalCmd.Flags().BoolVar(&evalArgs.debug, "debug", false, "Display an event dump if the evaluation fail") + evalCmd.Flags().StringVar(&evalArgs.dir, flags.PoliciesDir, coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") + evalCmd.Flags().StringVar(&evalArgs.ruleID, flags.RuleID, "", "Rule ID to evaluate") + _ = evalCmd.MarkFlagRequired(flags.RuleID) + evalCmd.Flags().StringVar(&evalArgs.eventFile, flags.EventFile, "", "File of the event data") + _ = evalCmd.MarkFlagRequired(flags.EventFile) + evalCmd.Flags().BoolVar(&evalArgs.debug, flags.Debug, false, "Display an event dump if the evaluation fail") return []*cobra.Command{evalCmd} } -func commonCheckPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { +func commonCheckPoliciesCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &checkPoliciesCliParams{ GlobalParams: globalParams, } @@ -191,29 +191,27 @@ func commonCheckPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Com return fxutil.OneShot(checkPolicies, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "off", false)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "off", false)}), core.Bundle, ) }, } - commonCheckPoliciesCmd.Flags().StringVar(&cliParams.dir, "policies-dir", coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") + commonCheckPoliciesCmd.Flags().StringVar(&cliParams.dir, flags.PoliciesDir, coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") return []*cobra.Command{commonCheckPoliciesCmd} } -func commonReloadPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { +func commonReloadPoliciesCommands(globalParams *command.GlobalParams) []*cobra.Command { commonReloadPoliciesCmd := &cobra.Command{ Use: "reload", Short: "Reload policies", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(reloadRuntimePolicies, fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "info", true)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -221,16 +219,15 @@ func commonReloadPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Co return []*cobra.Command{commonReloadPoliciesCmd} } -func selfTestCommands(globalParams *common.GlobalParams) []*cobra.Command { +func selfTestCommands(globalParams *command.GlobalParams) []*cobra.Command { selfTestCmd := &cobra.Command{ Use: "self-test", Short: "Run runtime self test", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(runRuntimeSelfTest, fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "info", true)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -240,13 +237,13 @@ func selfTestCommands(globalParams *common.GlobalParams) []*cobra.Command { } type downloadPolicyCliParams struct { - *common.GlobalParams + *command.GlobalParams check bool outputPath string } -func downloadPolicyCommands(globalParams *common.GlobalParams) []*cobra.Command { +func downloadPolicyCommands(globalParams *command.GlobalParams) []*cobra.Command { downloadPolicyArgs := &downloadPolicyCliParams{ GlobalParams: globalParams, } @@ -258,27 +255,26 @@ func downloadPolicyCommands(globalParams *common.GlobalParams) []*cobra.Command return fxutil.OneShot(downloadPolicy, fx.Supply(downloadPolicyArgs), fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "off", false)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "off", false)}), core.Bundle, ) }, } - downloadPolicyCmd.Flags().BoolVar(&downloadPolicyArgs.check, "check", false, "Check policies after downloading") - downloadPolicyCmd.Flags().StringVar(&downloadPolicyArgs.outputPath, "output-path", "", "Output path for downloaded policies") + downloadPolicyCmd.Flags().BoolVar(&downloadPolicyArgs.check, flags.Check, false, "Check policies after downloading") + downloadPolicyCmd.Flags().StringVar(&downloadPolicyArgs.outputPath, flags.OutputPath, "", "Output path for downloaded policies") return []*cobra.Command{downloadPolicyCmd} } type processCacheDumpCliParams struct { - *common.GlobalParams + *command.GlobalParams withArgs bool } -func processCacheCommands(globalParams *common.GlobalParams) []*cobra.Command { +func processCacheCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &processCacheDumpCliParams{ GlobalParams: globalParams, } @@ -290,14 +286,13 @@ func processCacheCommands(globalParams *common.GlobalParams) []*cobra.Command { return fxutil.OneShot(dumpProcessCache, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "info", true)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, } - processCacheDumpCmd.Flags().BoolVar(&cliParams.withArgs, "with-args", false, "add process arguments to the dump") + processCacheDumpCmd.Flags().BoolVar(&cliParams.withArgs, flags.WithArgs, false, "add process arguments to the dump") processCacheCmd := &cobra.Command{ Use: "process-cache", @@ -309,12 +304,12 @@ func processCacheCommands(globalParams *common.GlobalParams) []*cobra.Command { } type dumpNetworkNamespaceCliParams struct { - *common.GlobalParams + *command.GlobalParams snapshotInterfaces bool } -func networkNamespaceCommands(globalParams *common.GlobalParams) []*cobra.Command { +func networkNamespaceCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &dumpNetworkNamespaceCliParams{ GlobalParams: globalParams, } @@ -326,14 +321,13 @@ func networkNamespaceCommands(globalParams *common.GlobalParams) []*cobra.Comman return fxutil.OneShot(dumpNetworkNamespace, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "info", true)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, } - dumpNetworkNamespaceCmd.Flags().BoolVar(&cliParams.snapshotInterfaces, "snapshot-interfaces", true, "snapshot the interfaces of each network namespace during the dump") + dumpNetworkNamespaceCmd.Flags().BoolVar(&cliParams.snapshotInterfaces, flags.SnapshotInterfaces, true, "snapshot the interfaces of each network namespace during the dump") networkNamespaceCmd := &cobra.Command{ Use: "network-namespace", @@ -344,7 +338,7 @@ func networkNamespaceCommands(globalParams *common.GlobalParams) []*cobra.Comman return []*cobra.Command{networkNamespaceCmd} } -func discardersCommands(globalParams *common.GlobalParams) []*cobra.Command { +func discardersCommands(globalParams *command.GlobalParams) []*cobra.Command { dumpDiscardersCmd := &cobra.Command{ Use: "dump", @@ -352,9 +346,8 @@ func discardersCommands(globalParams *common.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(dumpDiscarders, fx.Supply(core.BundleParams{ - SecurityAgentConfigFilePaths: globalParams.ConfPathArray, - ConfigLoadSecurityAgent: true, - }.LogForOneShot(common.LoggerName, "info", true)), + ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: complog.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -467,18 +460,17 @@ func checkPoliciesInner(dir string) error { opts. WithSupportedDiscarders(sprobe.SupportedDiscarders). WithEventTypeEnabled(enabled). - WithReservedRuleIDs(sprobe.AllCustomRuleIDs()). + WithReservedRuleIDs(events.AllCustomRuleIDs()). WithStateScopes(map[rules.Scope]rules.VariableProviderFactory{ "process": func() rules.VariableProvider { return eval.NewScopedVariables(func(ctx *eval.Context) unsafe.Pointer { - return unsafe.Pointer(&(*model.Event)(ctx.Object).ProcessContext) + return unsafe.Pointer(&ctx.Event.(*model.Event).ProcessContext) }, nil) }, }). WithLogger(seclog.DefaultLogger) - model := &model.Model{} - ruleSet := rules.NewRuleSet(model, model.NewEvent, &opts, &evalOpts, &eval.MacroStore{}) + ruleSet := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) agentVersionFilter, err := newAgentVersionFilter() if err != nil { @@ -607,11 +599,11 @@ func evalRule(log complog.Component, config compconfig.Component, evalArgs *eval opts. WithSupportedDiscarders(sprobe.SupportedDiscarders). WithEventTypeEnabled(enabled). - WithReservedRuleIDs(sprobe.AllCustomRuleIDs()). + WithReservedRuleIDs(events.AllCustomRuleIDs()). WithLogger(seclog.DefaultLogger) model := &model.Model{} - ruleSet := rules.NewRuleSet(model, model.NewEvent, &opts, &evalOpts, &eval.MacroStore{}) + ruleSet := rules.NewRuleSet(model, model.NewEvent, &opts, &evalOpts) agentVersionFilter, err := newAgentVersionFilter() if err != nil { diff --git a/cmd/security-agent/app/subcommands/runtime/command_unsupported.go b/cmd/security-agent/app/subcommands/runtime/command_unsupported.go index 2efc1f9c61a2a..59441cbb25549 100644 --- a/cmd/security-agent/app/subcommands/runtime/command_unsupported.go +++ b/cmd/security-agent/app/subcommands/runtime/command_unsupported.go @@ -18,16 +18,15 @@ import ( "github.com/spf13/cobra" - ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" coreconfig "github.com/DataDog/datadog-agent/pkg/config" secagent "github.com/DataDog/datadog-agent/pkg/security/agent" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/startstop" + ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { return nil } diff --git a/cmd/security-agent/command/command.go b/cmd/security-agent/command/command.go new file mode 100644 index 0000000000000..d0f9fa7f2b894 --- /dev/null +++ b/cmd/security-agent/command/command.go @@ -0,0 +1,18 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package command + +import ( + "github.com/spf13/cobra" +) + +type GlobalParams struct { + ConfigFilePaths []string +} + +type SubcommandFactory func(globalParams *GlobalParams) []*cobra.Command + +const LoggerName = "SECURITY" diff --git a/cmd/security-agent/config/config.go b/cmd/security-agent/config/config.go new file mode 100644 index 0000000000000..1f037dca6f2e6 --- /dev/null +++ b/cmd/security-agent/config/config.go @@ -0,0 +1,31 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package config + +import ( + "fmt" + "os" + + aconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// Merge will merge the security-agent configuration into the existing datadog configuration +func Merge(configPaths []string) error { + for _, configPath := range configPaths { + if f, err := os.Open(configPath); err == nil { + err = aconfig.Datadog.MergeConfig(f) + _ = f.Close() + if err != nil { + return fmt.Errorf("error merging %s config file: %w", configPath, err) + } + } else { + log.Infof("no config exists at %s, ignoring...", configPath) + } + } + + return nil +} diff --git a/cmd/security-agent/flags/flags_common.go b/cmd/security-agent/flags/flags_common.go new file mode 100644 index 0000000000000..4d580bfd97d75 --- /dev/null +++ b/cmd/security-agent/flags/flags_common.go @@ -0,0 +1,64 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package flags + +const ( + // Start Subcommand + // CfgPath defines the cfgpath flag + CfgPath = "cfgpath" + NoColor = "no-color" + PidFile = "pidfile" + + // Status Subcommand + JSON = "json" + PrettyJSON = "pretty-json" + File = "file" // Also for check subcommand + + // Flare Subcommand + Email = "email" + Send = "send" + + // Runtime Subcommand + PoliciesDir = "policies-dir" + EventFile = "event-file" + Debug = "debug" + Check = "check" + OutputPath = "output-path" + WithArgs = "with-args" + SnapshotInterfaces = "snapshot-interfaces" + RuleID = "rule-id" // Also for compliance subcommand + + // Runtime Activity Dump Subcommand + Name = "name" + ContainerID = "containerID" + Comm = "comm" + Timeout = "timeout" + DifferentiateArgs = "differentiate-args" + Output = "output" // TODO: unify with OutputPath + Compression = "compression" + Format = "format" + RemoteCompression = "remote-compression" + RemoteFormat = "remote-format" + Input = "input" + Remote = "remote" + + // Compliance Subcommand + SourceType = "source-type" + SourceName = "source-name" + ResourceID = "resource-id" + ResourceType = "resource-type" + Tags = "tags" + Data = "data" + + // Check Subcommand + Framework = "framework" + Verbose = "verbose" + Report = "report" + OverrideRegoInput = "override-rego-input" + DumpRegoInput = "dump-rego-input" + DumpReports = "dump-reports" // TODO: Unify with OutputPath + SkipRegoEval = "skip-rego-eval" +) diff --git a/cmd/security-agent/main_windows.go b/cmd/security-agent/main_windows.go deleted file mode 100644 index 0fca3ac5fbedd..0000000000000 --- a/cmd/security-agent/main_windows.go +++ /dev/null @@ -1,153 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package main - -import ( - "context" - "fmt" - _ "net/http/pprof" - "os" - "path/filepath" - - "time" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app" - - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/flavor" - "github.com/DataDog/datadog-agent/pkg/util/log" - - "github.com/DataDog/datadog-agent/pkg/util/winutil" - - "golang.org/x/sys/windows/svc" - "golang.org/x/sys/windows/svc/debug" - "golang.org/x/sys/windows/svc/eventlog" -) - -var ( - elog debug.Log - defaultLogFile = "c:\\programdata\\datadog\\logs\\security-agent.log" - - // DefaultConfPath points to the folder containing datadog.yaml - DefaultConfPath = "c:\\programdata\\datadog" -) - -func init() { - // ISSUE: We need to make change to the MSI to install Security Agent. - pd, err := winutil.GetProgramDataDirForProduct("Datadog Security Agent") - if err == nil { - DefaultConfPath = pd - defaultLogFile = filepath.Join(pd, "logs", "security-agent.log") - } else { - winutil.LogEventViewer(ServiceName, 0x8000000F, defaultLogFile) - } -} - -// ServiceName is the name of the service in service control manager -const ServiceName = "datadog-security-agent" - -// EnableLoggingToFile -- set up logging to file - -func main() { - // set the Agent flavor - flavor.SetFlavor(flavor.Dogstatsd) - config.Datadog.AddConfigPath(DefaultConfPath) - - isIntSess, err := svc.IsAnInteractiveSession() - if err != nil { - fmt.Printf("failed to determine if we are running in an interactive session: %v\n", err) - } - if !isIntSess { - // confPath = DefaultConfPath - runService(false) - return - } - defer log.Flush() - - if err = app.CreateSecurityAgentCmd().Execute(); err != nil { - log.Error(err) - os.Exit(-1) - } -} - -type myservice struct{} - -func (m *myservice) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) { - const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown - changes <- svc.Status{State: svc.StartPending} - - log.Infof("Service control function") - - ctx, cancel := context.WithCancel(context.Background()) - err := app.RunAgent(ctx, "") - - if err != nil { - log.Errorf("Failed to start agent %v", err) - elog.Error(0xc0000008, err.Error()) - errno = 1 // indicates non-successful return from handler. - app.StopAgent(cancel) - changes <- svc.Status{State: svc.Stopped} - return - } - elog.Info(0x40000003, ServiceName) - - changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} - -loop: - for c := range r { - switch c.Cmd { - case svc.Interrogate: - changes <- c.CurrentStatus - // Testing deadlock from https://code.google.com/p/winsvc/issues/detail?id=4 - time.Sleep(100 * time.Millisecond) - changes <- c.CurrentStatus - case svc.Stop: - log.Info("Received stop message from service control manager") - elog.Info(0x4000000b, ServiceName) - break loop - case svc.PreShutdown: - log.Info("Received pre-shutdown message from service control manager") - elog.Info(0x4000000d, config.ServiceName) - break loop - case svc.Shutdown: - log.Info("Received shutdown message from service control manager") - elog.Info(0x4000000c, ServiceName) - break loop - default: - log.Warnf("unexpected control request #%d", c) - elog.Warning(0xc0000005, fmt.Sprint(c.Cmd)) - } - } - elog.Info(0x40000006, ServiceName) - log.Infof("Initiating service shutdown") - changes <- svc.Status{State: svc.StopPending} - app.StopAgent(cancel) - changes <- svc.Status{State: svc.Stopped} - return -} - -func runService(isDebug bool) { - var err error - if isDebug { - elog = debug.New(ServiceName) - } else { - elog, err = eventlog.Open(ServiceName) - if err != nil { - return - } - } - defer elog.Close() - - elog.Info(0x40000007, ServiceName) - run := svc.Run - - err = run(ServiceName, &myservice{}) - if err != nil { - elog.Error(0xc0000008, err.Error()) - return - } - elog.Info(0x40000004, ServiceName) -} diff --git a/cmd/security-agent/app/subcommands/status/command.go b/cmd/security-agent/subcommands/status/command.go similarity index 76% rename from cmd/security-agent/app/subcommands/status/command.go rename to cmd/security-agent/subcommands/status/command.go index 42c7d2aadcec8..33792811b515f 100644 --- a/cmd/security-agent/app/subcommands/status/command.go +++ b/cmd/security-agent/subcommands/status/command.go @@ -9,12 +9,12 @@ import ( "bytes" "encoding/json" "fmt" - "os" - "github.com/spf13/cobra" "go.uber.org/fx" + "os" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" @@ -23,16 +23,16 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) -type statusCliParams struct { - *common.GlobalParams +type cliParams struct { + *command.GlobalParams json bool prettyPrintJSON bool file string } -func Commands(globalParams *common.GlobalParams) []*cobra.Command { - cliParams := &statusCliParams{ +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{ GlobalParams: globalParams, } @@ -43,23 +43,22 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(runStatus, fx.Supply(cliParams), - fx.Supply(core.CreateBundleParams( - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), core.Bundle, ) }, } - statusCmd.Flags().BoolVarP(&cliParams.json, "json", "j", false, "print out raw json") - statusCmd.Flags().BoolVarP(&cliParams.prettyPrintJSON, "pretty-json", "p", false, "pretty print JSON") - statusCmd.Flags().StringVarP(&cliParams.file, "file", "o", "", "Output the status command to a file") + statusCmd.Flags().BoolVarP(&cliParams.json, flags.JSON, "j", false, "print out raw json") + statusCmd.Flags().BoolVarP(&cliParams.prettyPrintJSON, flags.PrettyJSON, "p", false, "pretty print JSON") + statusCmd.Flags().StringVarP(&cliParams.file, flags.File, "o", "", "Output the status command to a file") return []*cobra.Command{statusCmd} } -func runStatus(log log.Component, config config.Component, params *statusCliParams) error { +func runStatus(log log.Component, config config.Component, params *cliParams) error { fmt.Printf("Getting the status from the agent.\n") var e error var s string diff --git a/cmd/security-agent/subcommands/status/command_test.go b/cmd/security-agent/subcommands/status/command_test.go new file mode 100644 index 0000000000000..4909ec73a8084 --- /dev/null +++ b/cmd/security-agent/subcommands/status/command_test.go @@ -0,0 +1,43 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package status + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommand(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *cliParams, params core.BundleParams) + }{ + { + name: "status", + cliInput: []string{"status"}, + check: func(cliParams *cliParams, params core.BundleParams) { + // Verify logger defaults + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "off", params.LogLevelFn(nil), "log level not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + runStatus, + test.check, + ) + } +} diff --git a/cmd/security-agent/app/subcommands/version/command.go b/cmd/security-agent/subcommands/version/command.go similarity index 62% rename from cmd/security-agent/app/subcommands/version/command.go rename to cmd/security-agent/subcommands/version/command.go index 7aa5430a29dfb..a76fee57de158 100644 --- a/cmd/security-agent/app/subcommands/version/command.go +++ b/cmd/security-agent/subcommands/version/command.go @@ -7,30 +7,29 @@ package version import ( "fmt" + "github.com/fatih/color" + "github.com/spf13/cobra" + "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" "github.com/DataDog/datadog-agent/comp/core" - compconfig "github.com/DataDog/datadog-agent/comp/core/config" - complog "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/serializer" "github.com/DataDog/datadog-agent/pkg/util/fxutil" - "github.com/DataDog/datadog-agent/pkg/version" - "github.com/fatih/color" - "github.com/spf13/cobra" - "go.uber.org/fx" + pkgversion "github.com/DataDog/datadog-agent/pkg/version" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { versionCmd := &cobra.Command{ Use: "version", Short: "Print the version info", Long: ``, RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(displayVersion, - fx.Supply(core.CreateBundleParams( - core.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), - core.WithConfigLoadSecurityAgent(true), - ).LogForOneShot(common.LoggerName, "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), core.Bundle, ) }, @@ -39,8 +38,8 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{versionCmd} } -func displayVersion(log complog.Component, config compconfig.Component) { - av, _ := version.Agent() +func displayVersion(log log.Component, config config.Component) { + av, _ := pkgversion.Agent() meta := "" if av.Meta != "" { meta = fmt.Sprintf("- Meta: %s ", color.YellowString(av.Meta)) @@ -49,7 +48,7 @@ func displayVersion(log complog.Component, config compconfig.Component) { fmt.Fprintf(color.Output, "Security agent %s %s- Commit: '%s' - Serialization version: %s\n", color.BlueString(av.GetNumberAndPre()), meta, - color.GreenString(version.Commit), + color.GreenString(pkgversion.Commit), color.MagentaString(serializer.AgentPayloadVersion), ) } diff --git a/cmd/security-agent/subcommands/version/command_test.go b/cmd/security-agent/subcommands/version/command_test.go new file mode 100644 index 0000000000000..605607153e295 --- /dev/null +++ b/cmd/security-agent/subcommands/version/command_test.go @@ -0,0 +1,43 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package version + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommand(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(params core.BundleParams) + }{ + { + name: "version", + cliInput: []string{"version"}, + check: func(params core.BundleParams) { + // Verify logger defaults + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "off", params.LogLevelFn(nil), "log level not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + displayVersion, + test.check, + ) + } +} diff --git a/cmd/security-agent/windows_resources/security-agent-msg.mc b/cmd/security-agent/windows_resources/security-agent-msg.mc deleted file mode 100644 index c241eeccebb60..0000000000000 --- a/cmd/security-agent/windows_resources/security-agent-msg.mc +++ /dev/null @@ -1,85 +0,0 @@ -;// Header -MessageIdTypedef=DWORD - -LanguageNames=( - English=0x409:MSG00409 -) - - -;// Messages -MessageId=3 -SymbolicName=MSG_SERVICE_STARTED -Severity=Informational -Language=English -The %1 service has started. -. - -MessageId=4 -SymbolicName=MSG_SERVICE_STOPPED -Severity=Informational -Language=English -The %1 service has stopped. -. - -MessageId=5 -SymbolicName=MSG_UNKNOWN_CONTROL_REQUEST -Severity=Warning -Language=English -Unexpected control request %1 -. - -MessageId=6 -SymbolicName=MSG_SERVICE_STOPPING -Severity=Informational -Language=English -Received stop command, shutting down -. - -MessageId=7 -SymbolicName=MSG_SERVICE_STARTED -Severity=Informational -Language=English -starting the %1 service. -. - -MessageId=8 -SymbolicName=MSG_SERVICE_FAILED -Severity=Error -Language=English -The Service failed: %1 -. - -MessageId=9 -SymbolicName=MSG_SERVICE_FAILED -Severity=Warning -Language=English -The Service failed. %1 -. - -MessageId=10 -SymbolicName=MSG_UNEXPECTED_CONTROL_REQUEST -Severity=Error -Language=English -The Service failed: %1 -. - -MessageId=11 -SymbolicName=MSG_RECEIVED_STOP_COMMAND -Severity=Informational -Language=English -The service %1 received the stop command, shutting down. -. - -MessageId=12 -SymbolicName=MSG_RECEIVED_SHUTDOWN_COMMAND -Severity=Informational -Language=English -The service %1 received the shutdown command, shutting down. -. - -MessageId=13 -SymbolicName=MSG_AGENT_PRE_SHUTDOWN_STARTING -Severity=Informational -Language=English -The service %1 service is initiating pre-shutdown. -. diff --git a/cmd/security-agent/windows_resources/security-agent-msg.rc b/cmd/security-agent/windows_resources/security-agent-msg.rc deleted file mode 100644 index c559925b94f86..0000000000000 --- a/cmd/security-agent/windows_resources/security-agent-msg.rc +++ /dev/null @@ -1,9 +0,0 @@ -/* Do not edit this file manually. - This file is autogenerated by windmc. */ - - -// Country: United States -// Language: English -#pragma code_page(437) -LANGUAGE 0x9, 0x1 -1 MESSAGETABLE "MSG00409.bin" diff --git a/cmd/security-agent/windows_resources/security-agent.rc b/cmd/security-agent/windows_resources/security-agent.rc deleted file mode 100644 index dcb4476e1ca25..0000000000000 --- a/cmd/security-agent/windows_resources/security-agent.rc +++ /dev/null @@ -1,50 +0,0 @@ -#include "version.h" -#define RT_MANIFEST 24 -#define APP_MANIFEST 1 - - -//APP_MANIFEST RT_MANIFEST agent.exe.manifest - -#define MAIN_ICON 1 - -MAIN_ICON ICON "..\\..\\..\omnibus\\resources\\agent\\msi\\assets\\project.ico" - -#define VS_VERSION_INFO 1 -VS_VERSION_INFO VERSIONINFO - FILEVERSION RC_FILE_VERSION - PRODUCTVERSION RC_FILE_VERSION - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x0L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "Datadog, Inc." - VALUE "FileDescription", "Datadog Security Agent" - VALUE "FileVersion", FILE_VERSION_STRING - VALUE "InternalName", "security-agent" - VALUE "LegalCopyright", "Copyright (C) 2021" - VALUE "OriginalFilename", "security-agent.exe" - VALUE "ProductName", "Datadog Security Agent" - VALUE "ProductVersion", FILE_VERSION_STRING - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -// Country: United States -// Language: English -#pragma code_page(437) -LANGUAGE 0x9, 0x1 -1 MESSAGETABLE "MSG00409.bin" diff --git a/cmd/security-agent/windows_resources/version.h b/cmd/security-agent/windows_resources/version.h deleted file mode 100644 index 083087b04bfff..0000000000000 --- a/cmd/security-agent/windows_resources/version.h +++ /dev/null @@ -1,7 +0,0 @@ - -#define RC_FILE_VERSION MAJ_VER,MIN_VER,PATCH_VER,0 - -#define STRINGIFY(x) #x -#define TO_STRING(x) STRINGIFY(x) - -#define FILE_VERSION_STRING TO_STRING(MAJ_VER.MIN_VER.PATCH_VER.0) \ No newline at end of file diff --git a/cmd/serverless-init/main.go b/cmd/serverless-init/main.go index b1fd96e456758..c3e893c7a7d42 100644 --- a/cmd/serverless-init/main.go +++ b/cmd/serverless-init/main.go @@ -19,6 +19,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/serverless-init/tag" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/serverless/metrics" + "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/serverless/trace" ) @@ -50,7 +51,7 @@ func main() { } func setupTraceAgent(traceAgent *trace.ServerlessTraceAgent, tags map[string]string) { - traceAgent.Start(config.Datadog.GetBool("apm_config.enabled"), &trace.LoadConfig{Path: datadogConfigPath}, nil) + traceAgent.Start(config.Datadog.GetBool("apm_config.enabled"), &trace.LoadConfig{Path: datadogConfigPath}, nil, random.Random.Uint64()) traceAgent.SetTags(tag.GetBaseTagsMapWithMetadata(tags)) for range time.Tick(3 * time.Second) { traceAgent.Flush() diff --git a/cmd/serverless/main.go b/cmd/serverless/main.go index ec2ab86e46845..081cf46ec8c5d 100644 --- a/cmd/serverless/main.go +++ b/cmd/serverless/main.go @@ -24,9 +24,11 @@ import ( serverlessLogs "github.com/DataDog/datadog-agent/pkg/serverless/logs" "github.com/DataDog/datadog-agent/pkg/serverless/metrics" "github.com/DataDog/datadog-agent/pkg/serverless/proxy" + "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/serverless/registration" "github.com/DataDog/datadog-agent/pkg/serverless/trace" "github.com/DataDog/datadog-agent/pkg/serverless/trace/inferredspan" + "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -118,7 +120,7 @@ func runAgent(stopCh chan struct{}) (serverlessDaemon *daemon.Daemon, err error) if err != nil { log.Debug("Unable to restore the state from file") } else { - serverlessDaemon.ComputeGlobalTags(config.GetConfiguredTags(true)) + serverlessDaemon.ComputeGlobalTags(config.GetGlobalConfiguredTags(true)) serverlessDaemon.StartLogCollection() } // serverless parts @@ -211,11 +213,14 @@ func runAgent(stopCh chan struct{}) (serverlessDaemon *daemon.Daemon, err error) } config.LoadProxyFromEnv(config.Datadog) logChannel := make(chan *logConfig.ChannelMessage) - + // Channels for ColdStartCreator + lambdaSpanChan := make(chan *pb.Span) + initDurationChan := make(chan float64) + coldStartSpanId := random.Random.Uint64() metricAgent := &metrics.ServerlessMetricAgent{} metricAgent.Start(daemon.FlushTimeout, &metrics.MetricConfig{}, &metrics.MetricDogStatsD{}) serverlessDaemon.SetStatsdServer(metricAgent) - serverlessDaemon.SetupLogCollectionHandler(logsAPICollectionRoute, logChannel, config.Datadog.GetBool("serverless.logs_enabled"), config.Datadog.GetBool("enhanced_metrics")) + serverlessDaemon.SetupLogCollectionHandler(logsAPICollectionRoute, logChannel, config.Datadog.GetBool("serverless.logs_enabled"), config.Datadog.GetBool("enhanced_metrics"), initDurationChan) // Concurrently start heavyweight features var wg sync.WaitGroup @@ -225,7 +230,7 @@ func runAgent(stopCh chan struct{}) (serverlessDaemon *daemon.Daemon, err error) go func() { defer wg.Done() traceAgent := &trace.ServerlessTraceAgent{} - traceAgent.Start(config.Datadog.GetBool("apm_config.enabled"), &trace.LoadConfig{Path: datadogConfigPath}, serverlessDaemon.ExecutionContext) + traceAgent.Start(config.Datadog.GetBool("apm_config.enabled"), &trace.LoadConfig{Path: datadogConfigPath}, lambdaSpanChan, coldStartSpanId) serverlessDaemon.SetTraceAgent(traceAgent) }() @@ -269,6 +274,19 @@ func runAgent(stopCh chan struct{}) (serverlessDaemon *daemon.Daemon, err error) wg.Wait() + coldStartSpanCreator := &trace.ColdStartSpanCreator{ + LambdaSpanChan: lambdaSpanChan, + InitDurationChan: initDurationChan, + TraceAgent: serverlessDaemon.TraceAgent, + StopChan: make(chan struct{}), + ColdStartSpanId: coldStartSpanId, + } + + log.Debug("Starting ColdStartSpanCreator") + coldStartSpanCreator.Run() + log.Debug("Setting ColdStartSpanCreator on Daemon") + serverlessDaemon.SetColdStartSpanCreator(coldStartSpanCreator) + // set up invocation processor in the serverless Daemon to be used for the proxy and/or lifecycle API serverlessDaemon.InvocationProcessor = &invocationlifecycle.LifecycleProcessor{ ExtraTags: serverlessDaemon.ExtraTags, diff --git a/cmd/system-probe/config/config.go b/cmd/system-probe/config/config.go index 589b7d9a5d0b3..35bc4ce6b6a6d 100644 --- a/cmd/system-probe/config/config.go +++ b/cmd/system-probe/config/config.go @@ -28,6 +28,7 @@ const ( // Namespace is the top-level configuration key that all system-probe settings are nested underneath Namespace = "system_probe_config" spNS = Namespace + smNS = "service_monitoring_config" defaultConfigFileName = "system-probe.yaml" defaultConnsMessageBatchSize = 600 @@ -186,7 +187,7 @@ func load(configPath string) (*Config, error) { // this check must come first so we can accurately tell if system_probe was explicitly enabled npmEnabled := cfg.GetBool("network_config.enabled") - usmEnabled := cfg.GetBool("service_monitoring_config.enabled") + usmEnabled := cfg.GetBool(key(smNS, "enabled")) if npmEnabled { log.Info("network_config.enabled detected: enabling system-probe with network module running.") @@ -233,9 +234,19 @@ func load(configPath string) (*Config, error) { c.Enabled = false c.SocketAddress = "" } + cfg.Set(key(spNS, "sysprobe_socket"), c.SocketAddress) cfg.Set(key(spNS, "enabled"), c.Enabled) + if cfg.GetBool(key(smNS, "process_service_inference", "enabled")) { + if !usmEnabled { + log.Info("service monitoring is disabled, disabling process service inference") + cfg.Set(key(smNS, "process_service_inference", "enabled"), false) + } else { + log.Info("process service inference is enabled") + } + } + return c, nil } diff --git a/cmd/system-probe/modules/network_tracer_test.go b/cmd/system-probe/modules/network_tracer_test.go index 72cd591b2e654..ec78b70deff60 100644 --- a/cmd/system-probe/modules/network_tracer_test.go +++ b/cmd/system-probe/modules/network_tracer_test.go @@ -12,12 +12,12 @@ import ( "net/http/httptest" "testing" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/DataDog/datadog-agent/pkg/network" "github.com/DataDog/datadog-agent/pkg/network/encoding" "github.com/DataDog/datadog-agent/pkg/process/util" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) func TestDecode(t *testing.T) { @@ -29,14 +29,10 @@ func TestDecode(t *testing.T) { { Source: util.AddressFromString("10.1.1.1"), Dest: util.AddressFromString("10.2.2.2"), - Monotonic: network.StatCountersByCookie{ - { - StatCounters: network.StatCounters{ - SentBytes: 1, - RecvBytes: 100, - Retransmits: 201, - }, - }, + Monotonic: network.StatCounters{ + SentBytes: 1, + RecvBytes: 100, + Retransmits: 201, }, Last: network.StatCounters{ SentBytes: 2, diff --git a/cmd/systray/systray.go b/cmd/systray/systray.go index c71b413f05027..414b03b6a59eb 100644 --- a/cmd/systray/systray.go +++ b/cmd/systray/systray.go @@ -174,7 +174,7 @@ func isUserAnAdmin() (bool, error) { } func showCustomMessage(notifyIcon *walk.NotifyIcon, message string) { - if err := notifyIcon.ShowCustom("Datadog Agent Manager", message); err != nil { + if err := notifyIcon.ShowCustom("Datadog Agent Manager", message, nil); err != nil { log.Warnf("Failed to show custom message %v", err) } } @@ -251,7 +251,7 @@ func main() { log.Warnf("Failed to load icon %v", err) } // Create the notify icon and make sure we clean it up on exit. - ni, err = walk.NewNotifyIcon() + ni, err = walk.NewNotifyIcon(mw) if err != nil { log.Errorf("Failed to create newNotifyIcon %v", err) os.Exit(2) diff --git a/cmd/trace-agent/config/config.go b/cmd/trace-agent/config/config.go index a8ad34344283e..ec011c64a0167 100644 --- a/cmd/trace-agent/config/config.go +++ b/cmd/trace-agent/config/config.go @@ -75,23 +75,18 @@ func prepareConfig(path string) (*config.AgentConfig, error) { cfg.DDAgentBin = defaultDDAgentBin cfg.AgentVersion = version.AgentVersion cfg.GitCommit = version.Commit - ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) - orch := fargate.GetOrchestrator(ctx) - cancel() - if err := ctx.Err(); err != nil && err != context.Canceled { - log.Errorf("Failed to get Fargate orchestrator. This may cause issues if you are in a Fargate instance: %v", err) - } - cfg.FargateOrchestrator = config.FargateOrchestratorName(orch) coreconfig.Datadog.SetConfigFile(path) if _, err := coreconfig.Load(); err != nil { return cfg, err } + orch := fargate.GetOrchestrator() // Needs to be after loading config, because it relies on feature auto-detection + cfg.FargateOrchestrator = config.FargateOrchestratorName(orch) if p := coreconfig.GetProxies(); p != nil { cfg.Proxy = httputils.GetProxyTransportFunc(p) } cfg.ConfigPath = path if coreconfig.Datadog.GetBool("remote_configuration.enabled") && coreconfig.Datadog.GetBool("remote_configuration.apm_sampling.enabled") { - client, err := remote.NewClient(rcClientName, version.AgentVersion, []data.Product{data.ProductAPMSampling}, rcClientPollInterval) + client, err := remote.NewGRPCClient(rcClientName, version.AgentVersion, []data.Product{data.ProductAPMSampling}, rcClientPollInterval) if err != nil { log.Errorf("Error when subscribing to remote config management %v", err) } else { @@ -326,13 +321,7 @@ func applyDatadogConfig(c *config.AgentConfig) error { } } - // undocumented - if coreconfig.Datadog.IsSet("apm_config.max_cpu_percent") { - c.MaxCPU = coreconfig.Datadog.GetFloat64("apm_config.max_cpu_percent") / 100 - } - if coreconfig.Datadog.IsSet("apm_config.max_memory") { - c.MaxMemory = coreconfig.Datadog.GetFloat64("apm_config.max_memory") - } + setMaxMemCPU(c, coreconfig.IsContainerized()) // undocumented writers for key, cfg := range map[string]*config.WriterConfig{ @@ -669,3 +658,20 @@ func SetHandler() http.Handler { func httpError(w http.ResponseWriter, status int, err error) { http.Error(w, fmt.Sprintf(`{"error": %q}`, err.Error()), status) } + +// setMaxMemCPU sets watchdog's max_memory and max_cpu_percent parameters. +// If the agent is containerized, max_memory and max_cpu_percent are disabled by default. +// Resource limits are better handled by container runtimes and orchestrators. +func setMaxMemCPU(c *config.AgentConfig, isContainerized bool) { + if coreconfig.Datadog.IsSet("apm_config.max_cpu_percent") { + c.MaxCPU = coreconfig.Datadog.GetFloat64("apm_config.max_cpu_percent") / 100 + } else if isContainerized { + c.MaxCPU = 0 + } + + if coreconfig.Datadog.IsSet("apm_config.max_memory") { + c.MaxMemory = coreconfig.Datadog.GetFloat64("apm_config.max_memory") + } else if isContainerized { + c.MaxMemory = 0 + } +} diff --git a/cmd/trace-agent/config/config_test.go b/cmd/trace-agent/config/config_test.go index 470b381e3105d..7e34fb7d61f4b 100644 --- a/cmd/trace-agent/config/config_test.go +++ b/cmd/trace-agent/config/config_test.go @@ -14,6 +14,7 @@ import ( "path/filepath" "reflect" "regexp" + "runtime" "strings" "testing" "time" @@ -990,3 +991,88 @@ func TestLoadEnv(t *testing.T) { } }) } + +func TestFargateConfig(t *testing.T) { + assert := assert.New(t) + type testData struct { + name string + envKey string + envValue string + orchestrator config.FargateOrchestratorName + } + for _, data := range []testData{ + { + name: "ecs_fargate", + envKey: "ECS_FARGATE", + envValue: "true", + orchestrator: config.OrchestratorECS, + }, + { + name: "eks_fargate", + envKey: "DD_EKS_FARGATE", + envValue: "true", + orchestrator: config.OrchestratorEKS, + }, + { + name: "unknown", + envKey: "ECS_FARGATE", + envValue: "", + orchestrator: config.OrchestratorUnknown, + }, + } { + t.Run("", func(t *testing.T) { + defer cleanConfig()() + t.Setenv(data.envKey, data.envValue) + cfg, err := LoadConfigFile("./testdata/no_apm_config.yaml") + assert.NoError(err) + + if runtime.GOOS == "darwin" { + assert.Equal(config.OrchestratorUnknown, cfg.FargateOrchestrator) + } else { + assert.Equal(data.orchestrator, cfg.FargateOrchestrator) + } + }) + } +} + +func TestSetMaxMemCPU(t *testing.T) { + t.Run("default, non-containerized", func(t *testing.T) { + cleanConfig() + defer cleanConfig() + c := config.New() + setMaxMemCPU(c, false) + assert.Equal(t, 0.5, c.MaxCPU) + assert.Equal(t, 5e8, c.MaxMemory) + }) + + t.Run("default, containerized", func(t *testing.T) { + cleanConfig() + defer cleanConfig() + c := config.New() + setMaxMemCPU(c, true) + assert.Equal(t, 0.0, c.MaxCPU) + assert.Equal(t, 0.0, c.MaxMemory) + }) + + t.Run("limits set, non-containerized", func(t *testing.T) { + cleanConfig() + defer cleanConfig() + c := config.New() + coreconfig.Datadog.Set("apm_config.max_cpu_percent", "20") + coreconfig.Datadog.Set("apm_config.max_memory", "200") + setMaxMemCPU(c, false) + assert.Equal(t, 0.2, c.MaxCPU) + assert.Equal(t, 200.0, c.MaxMemory) + }) + + t.Run("limits set, containerized", func(t *testing.T) { + cleanConfig() + defer cleanConfig() + c := config.New() + coreconfig.Datadog.Set("apm_config.max_cpu_percent", "30") + coreconfig.Datadog.Set("apm_config.max_memory", "300") + setMaxMemCPU(c, true) + assert.Equal(t, 0.3, c.MaxCPU) + assert.Equal(t, 300.0, c.MaxMemory) + }) +} diff --git a/cmd/trace-agent/remote_config.go b/cmd/trace-agent/remote_config.go index 8f0b6471e3ff8..b7922f846c5c4 100644 --- a/cmd/trace-agent/remote_config.go +++ b/cmd/trace-agent/remote_config.go @@ -42,7 +42,7 @@ func putBuffer(buffer *bytes.Buffer) { } func remoteConfigHandler(r *api.HTTPReceiver, client pbgo.AgentSecureClient, token string, cfg *config.AgentConfig) http.Handler { - cidProvider := api.NewIDProvider("/proc") + cidProvider := api.NewIDProvider(cfg.ContainerProcRoot) return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { defer timing.Since("datadog.trace_agent.receiver.config_process_ms", time.Now()) tags := r.TagStats(api.V07, req.Header).AsTags() diff --git a/cmd/trace-agent/test/testsuite/traces_test.go b/cmd/trace-agent/test/testsuite/traces_test.go index 8fe8f0c5d99cc..d601f84786503 100644 --- a/cmd/trace-agent/test/testsuite/traces_test.go +++ b/cmd/trace-agent/test/testsuite/traces_test.go @@ -10,10 +10,15 @@ import ( "time" "github.com/DataDog/datadog-agent/cmd/trace-agent/test" + "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/testutil" + "github.com/stretchr/testify/assert" ) +// create a new config to access default config values +var defaultAgentConfig = config.New() + func TestTraces(t *testing.T) { var r test.Runner if err := r.Start(); err != nil { @@ -157,6 +162,10 @@ func payloadsEqual(t *testing.T, from pb.Traces, to pb.AgentPayload) { if found != len(from) { t.Fatalf("Failed to match traces") } + // validate the reported sampling configuration + assert.Equal(t, to.TargetTPS, defaultAgentConfig.TargetTPS) + assert.Equal(t, to.ErrorTPS, defaultAgentConfig.ErrorTPS) + assert.Equal(t, to.RareSamplerEnabled, defaultAgentConfig.RareSamplerEnabled) } // tracesEqual reports whether from and to are equal traces. The latter is allowed diff --git a/comp/README.md b/comp/README.md index 794a17fc446f3..c5b8728941d5c 100644 --- a/comp/README.md +++ b/comp/README.md @@ -16,6 +16,10 @@ agent flavors and binaries. Package config implements a component to handle agent configuration. This component temporarily wraps pkg/config. +### [comp/core/flare](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/core/flare) + +Package flare implements a component to generate flares from the agent. + ### [comp/core/log](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/core/log) Package log implements a component to handle logging internal to the agent. diff --git a/comp/core/bundle.go b/comp/core/bundle.go index 04ed9b3445942..513636d78d06c 100644 --- a/comp/core/bundle.go +++ b/comp/core/bundle.go @@ -14,20 +14,28 @@ package core import ( "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "go.uber.org/fx" ) // team: agent-shared-components // Bundle defines the fx options for this bundle. var Bundle = fxutil.Bundle( + // As `config.Module` expects `config.Params` as a parameter, it is require to define how to get `config.Params` from `BundleParams`. + fx.Provide(func(params BundleParams) config.Params { return params.ConfigParams }), config.Module, + fx.Provide(func(params BundleParams) log.Params { return params.LogParams }), log.Module, + flare.Module, ) // MockBundle defines the mock fx options for this bundle. var MockBundle = fxutil.Bundle( - config.MockModule, + fx.Provide(func(params BundleParams) config.Params { return params.ConfigParams }), + config.Module, + fx.Provide(func(params BundleParams) log.Params { return params.LogParams }), log.Module, ) diff --git a/comp/core/bundle_params.go b/comp/core/bundle_params.go index d706a41551fad..1522577adda5e 100644 --- a/comp/core/bundle_params.go +++ b/comp/core/bundle_params.go @@ -6,97 +6,20 @@ package core import ( - "github.com/DataDog/datadog-agent/comp/core/internal" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" ) // BundleParams defines the parameters for this bundle. -type BundleParams = internal.BundleParams - -// CreateAgentBundleParams creates a new BundleParams for the Core Agent -func CreateAgentBundleParams(confFilePath string, configLoadSecrets bool, options ...func(*BundleParams)) BundleParams { - params := CreateBundleParams(options...) - params.ConfFilePath = confFilePath - params.ConfigLoadSecrets = configLoadSecrets - return params -} - -// CreateBundleParams creates a new BundleParams -func CreateBundleParams(options ...func(*BundleParams)) BundleParams { - bundleParams := BundleParams{} - for _, o := range options { - o(&bundleParams) - } - return bundleParams -} - -func WithConfigName(name string) func(*BundleParams) { - return func(b *BundleParams) { - b.ConfigName = name - } -} - -func WithConfigMissingOK(v bool) func(*BundleParams) { - return func(b *BundleParams) { - b.ConfigMissingOK = v - } -} - -func WithConfigLoadSysProbe(v bool) func(*BundleParams) { - return func(b *BundleParams) { - b.ConfigLoadSysProbe = v - } -} - -func WithSecurityAgentConfigFilePaths(securityAgentConfigFilePaths []string) func(*BundleParams) { - return func(b *BundleParams) { - b.SecurityAgentConfigFilePaths = securityAgentConfigFilePaths - } -} - -func WithConfigLoadSecurityAgent(configLoadSecurityAgent bool) func(*BundleParams) { - return func(b *BundleParams) { - b.ConfigLoadSecurityAgent = configLoadSecurityAgent - } -} - -func WithConfFilePath(confFilePath string) func(*BundleParams) { - return func(b *BundleParams) { - b.ConfFilePath = confFilePath - } -} - -func WithConfigLoadSecrets(configLoadSecrets bool) func(*BundleParams) { - return func(b *BundleParams) { - b.ConfigLoadSecrets = configLoadSecrets - } -} - -func WithExcludeDefaultConfPath(excludeDefaultConfPath bool) func(*BundleParams) { - return func(b *BundleParams) { - b.ExcludeDefaultConfPath = excludeDefaultConfPath - } -} - -func WithDefaultConfPath(defaultConfPath string) func(*BundleParams) { - return func(b *BundleParams) { - b.DefaultConfPath = defaultConfPath - } -} - -func WithLogForOneShot(loggerName, level string, overrideFromEnv bool) func(*BundleParams) { - return func(b *BundleParams) { - *b = b.LogForOneShot(loggerName, level, overrideFromEnv) - } -} - -func WithLogForDaemon(loggerName, logFileConfig, defaultLogFile string) func(*BundleParams) { - return func(b *BundleParams) { - *b = b.LogForDaemon(loggerName, logFileConfig, defaultLogFile) - } -} - -func WithLogToFile(logFile string) func(*BundleParams) { - return func(b *BundleParams) { - *b = b.LogToFile(logFile) - } -} +// +// Logs-related parameters are implemented as unexported fields containing +// callbacks. These fields can be set with the `LogXxx()` methods, which +// return the updated BundleParams. One of `LogForOneShot` or `LogForDaemon` +// must be called. +type BundleParams struct { + ConfigParams + LogParams +} + +type ConfigParams = config.Params +type LogParams = log.Params diff --git a/comp/core/bundle_test.go b/comp/core/bundle_test.go index cf1873139660b..d2fe2c00139a9 100644 --- a/comp/core/bundle_test.go +++ b/comp/core/bundle_test.go @@ -12,6 +12,7 @@ import ( "go.uber.org/fx" "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/comp/core/log" ) @@ -21,6 +22,7 @@ func TestBundleDependencies(t *testing.T) { // automatically. fx.Invoke(func(config.Component) {}), fx.Invoke(func(log.Component) {}), + fx.Invoke(func(flare.Component) {}), fx.Supply(BundleParams{}), Bundle)) diff --git a/comp/core/config/config.go b/comp/core/config/config.go index 4f4b030599459..e5cc5ceb05cbe 100644 --- a/comp/core/config/config.go +++ b/comp/core/config/config.go @@ -13,8 +13,8 @@ import ( "go.uber.org/fx" + secconfig "github.com/DataDog/datadog-agent/cmd/security-agent/config" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" - "github.com/DataDog/datadog-agent/comp/core/internal" "github.com/DataDog/datadog-agent/pkg/config" ) @@ -30,30 +30,25 @@ type cfg struct { type dependencies struct { fx.In - Params internal.BundleParams + Params Params } func newConfig(deps dependencies) (Component, error) { - if deps.Params.ConfigLoadSecurityAgent { - warnings, err := MergeConfigurationFiles("datadog", deps.Params.SecurityAgentConfigFilePaths, true) - return &cfg{warnings}, err - } - - warnings, err := setupConfig( - deps.Params.ConfFilePath, - deps.Params.ConfigName, - !deps.Params.ConfigLoadSecrets, - !deps.Params.ConfigMissingOK, - !deps.Params.ExcludeDefaultConfPath, - deps.Params.DefaultConfPath) + warnings, err := setupConfig(deps) if err != nil { return nil, err } - if deps.Params.ConfigLoadSysProbe { - _, err := sysconfig.Merge(deps.Params.SysProbeConfFilePath) + if deps.Params.configLoadSysProbe { + _, err := sysconfig.Merge(deps.Params.sysProbeConfFilePath) if err != nil { - return nil, err + return &cfg{warnings}, err + } + } + + if deps.Params.configLoadSecurityAgent { + if err := secconfig.Merge(deps.Params.securityAgentConfigFilePaths); err != nil { + return &cfg{warnings}, err } } diff --git a/comp/core/config/config_test.go b/comp/core/config/config_test.go index 62f651369b604..2ba6b71cced7b 100644 --- a/comp/core/config/config_test.go +++ b/comp/core/config/config_test.go @@ -14,7 +14,6 @@ import ( "github.com/stretchr/testify/require" - "github.com/DataDog/datadog-agent/comp/core/internal" "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) @@ -28,10 +27,11 @@ func TestRealConfig(t *testing.T) { defer func() { os.Unsetenv("DD_DD_URL") }() fxutil.Test(t, fx.Options( - fx.Supply(internal.BundleParams{ - ConfigMissingOK: true, - ConfFilePath: dir, - }), + fx.Supply(NewParams( + "", + WithConfigMissingOK(true), + WithConfFilePath(dir), + )), Module, ), func(config Component) { require.Equal(t, "https://example.com", config.GetString("dd_url")) @@ -46,7 +46,7 @@ func TestMockConfig(t *testing.T) { defer func() { os.Unsetenv("DD_DD_URL") }() fxutil.Test(t, fx.Options( - fx.Supply(internal.BundleParams{}), + fx.Supply(Params{}), MockModule, ), func(config Component) { // values aren't set from env.. diff --git a/comp/core/config/params.go b/comp/core/config/params.go new file mode 100644 index 0000000000000..9f2e7ab72c390 --- /dev/null +++ b/comp/core/config/params.go @@ -0,0 +1,162 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package config + +import "github.com/DataDog/datadog-agent/cmd/agent/common" + +// Params defines the parameters for the config component. +type Params struct { + // confFilePath is the path at which to look for configuration, usually + // given by the --cfgpath command-line flag. + confFilePath string + + // configName is the root of the name of the configuration file. The + // comp/core/config component will search for a file with this name + // in ConfFilePath, using a variety of extensions. The default is + // "datadog". + configName string + + // sysProbeConfFilePath is the path at which to look for system-probe + // configuration, usually given by --sysprobecfgpath. This is not used + // unless ConfigLoadSysProbe is true. + sysProbeConfFilePath string + + // ConfigLoadSysProbe determines whether to read the system-probe.yaml into + // the component's config data. + configLoadSysProbe bool + + // securityAgentConfigFilePaths are the paths at which to look for security-aegnt + // configuration, usually given by the --cfgpath command-line flag. + securityAgentConfigFilePaths []string + + // configLoadSecurityAgent determines whether to read the config from + // SecurityAgentConfigFilePaths or from ConfFilePath. + configLoadSecurityAgent bool + + // ConfigLoadSecrets determines whether secrets in the configuration file + // should be evaluated. This is typically false for one-shot commands. + configLoadSecrets bool + + // configMissingOK determines whether it is a fatal error if the config + // file does not exist. + configMissingOK bool + + // defaultConfPath determines the default configuration path. + // if defaultConfPath is empty, then no default configuration path is used. + defaultConfPath string +} + +// NewParams creates a new instance of Params +func NewParams(defaultConfPath string, options ...func(*Params)) Params { + params := Params{ + defaultConfPath: defaultConfPath, + } + for _, o := range options { + o(¶ms) + } + return params +} + +// NewAgentParamsWithSecrets creates a new instance of Params using secrets for the Agent. +func NewAgentParamsWithSecrets(confFilePath string, options ...func(*Params)) Params { + return newAgentParams(confFilePath, true, options...) +} + +// NewAgentParamsWithoutSecrets creates a new instance of Params without using secrets for the Agent. +func NewAgentParamsWithoutSecrets(confFilePath string, options ...func(*Params)) Params { + return newAgentParams(confFilePath, false, options...) +} + +func newAgentParams(confFilePath string, configLoadSecrets bool, options ...func(*Params)) Params { + params := NewParams(common.DefaultConfPath, options...) + params.confFilePath = confFilePath + params.configLoadSecrets = configLoadSecrets + return params +} + +// NewSecurityAgentParams creates a new instance of Params for the Security Agent. +func NewSecurityAgentParams(securityAgentConfigFilePaths []string, options ...func(*Params)) Params { + params := NewParams(common.DefaultConfPath, options...) + // TODO: Uncomment once we stop using the MergeConfigurationFiles for SecAgent launch + // This code block currently breaks the setup of only have security-agent.yaml and NOT datadog.yaml + //if len(securityAgentConfigFilePaths) > 0 { + // params.confFilePath = securityAgentConfigFilePaths[0] + //} + params.securityAgentConfigFilePaths = securityAgentConfigFilePaths + params.configLoadSecurityAgent = true + + params.configLoadSecrets = true + params.configMissingOK = false + return params +} + +func WithConfigName(name string) func(*Params) { + return func(b *Params) { + b.configName = name + } +} + +func WithConfigMissingOK(v bool) func(*Params) { + return func(b *Params) { + b.configMissingOK = v + } +} + +func WithConfigLoadSysProbe(v bool) func(*Params) { + return func(b *Params) { + b.configLoadSysProbe = v + } +} + +func WithSecurityAgentConfigFilePaths(securityAgentConfigFilePaths []string) func(*Params) { + return func(b *Params) { + b.securityAgentConfigFilePaths = securityAgentConfigFilePaths + } +} + +func WithConfigLoadSecurityAgent(configLoadSecurityAgent bool) func(*Params) { + return func(b *Params) { + b.configLoadSecurityAgent = configLoadSecurityAgent + } +} + +func WithConfFilePath(confFilePath string) func(*Params) { + return func(b *Params) { + b.confFilePath = confFilePath + } +} + +func WithConfigLoadSecrets(configLoadSecrets bool) func(*Params) { + return func(b *Params) { + b.configLoadSecrets = configLoadSecrets + } +} + +func WithSysProbeConfFilePath(sysProbeConfFilePath string) func(*Params) { + return func(b *Params) { + b.sysProbeConfFilePath = sysProbeConfFilePath + } +} + +// These functions are used in unit tests. + +// ConfigLoadSecrets determines whether secrets in the configuration file +// should be evaluated. This is typically false for one-shot commands. +func (p Params) ConfigLoadSecrets() bool { + return p.configLoadSecrets +} + +// ConfigMissingOK determines whether it is a fatal error if the config +// file does not exist. +func (p Params) ConfigMissingOK() bool { + return p.configMissingOK +} + +// ConfigLoadSysProbe determines whether to read the system-probe.yaml into +// the component's config data. +func (p Params) ConfigLoadSysProbe() bool { + return p.configLoadSysProbe +} diff --git a/comp/core/config/params_test.go b/comp/core/config/params_test.go new file mode 100644 index 0000000000000..a349d19574958 --- /dev/null +++ b/comp/core/config/params_test.go @@ -0,0 +1,54 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package config + +import ( + "github.com/DataDog/datadog-agent/cmd/agent/common" + "github.com/stretchr/testify/require" + "testing" +) + +func TestNewSecurityAgentParams(t *testing.T) { + tests := []struct { + name string + input []string + check func(params Params) + }{ + { + name: "no security agent config file paths", + input: []string{}, + check: func(params Params) { + require.Equal(t, "", params.confFilePath) + require.Equal(t, []string{}, params.securityAgentConfigFilePaths, "Security Agent Config File Paths not matching") + }, + }, + { + name: "1 security agent config file path", + input: []string{"/etc/datadog-agent/security-agent.yaml"}, + check: func(params Params) { + require.Equal(t, "/etc/datadog-agent/security-agent.yaml", params.confFilePath) + require.Equal(t, []string{"/etc/datadog-agent/security-agent.yaml"}, params.securityAgentConfigFilePaths, "Security Agent config file paths not matching") + }, + }, + { + name: "more than 1 security agent config file paths", + input: []string{"/etc/datadog-agent/security-agent.yaml", "/etc/datadog-agent/other.yaml"}, + check: func(params Params) { + require.Equal(t, "/etc/datadog-agent/security-agent.yaml", params.confFilePath) + require.Equal(t, []string{"/etc/datadog-agent/security-agent.yaml"}, params.securityAgentConfigFilePaths, "Security Agent config file paths not matching") + }, + }, + } + + for _, test := range tests { + configComponentParams := NewSecurityAgentParams(test.input) + + require.Equal(t, true, configComponentParams.configLoadSecurityAgent, "configLoadSecurityAgent values not matching") + require.Equal(t, common.DefaultConfPath, configComponentParams.defaultConfPath, "defaultConfPath values not matching") + require.Equal(t, true, configComponentParams.configLoadSecrets, "configLoadSecrets values not matching") + require.Equal(t, false, configComponentParams.configMissingOK, "configMissingOK values not matching") + } +} diff --git a/comp/core/config/setup.go b/comp/core/config/setup.go index 23cadb2ef5133..0e0e220020afe 100644 --- a/comp/core/config/setup.go +++ b/comp/core/config/setup.go @@ -13,23 +13,22 @@ import ( "runtime" "strings" - "github.com/DataDog/viper" - - "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/viper" ) // setupConfig is copied from cmd/agent/common/helpers.go. -func setupConfig( - confFilePath string, - configName string, - withoutSecrets bool, - failOnMissingFile bool, - useDefaultConfigPath bool, - defaultConfPath string) (*config.Warnings, error) { +func setupConfig(deps dependencies) (*config.Warnings, error) { + confFilePath := deps.Params.confFilePath + configName := deps.Params.configName + withoutSecrets := !deps.Params.configLoadSecrets + failOnMissingFile := !deps.Params.configMissingOK + defaultConfPath := deps.Params.defaultConfPath + if configName != "" { config.Datadog.SetConfigName(configName) } + // set the paths where a config file is expected if len(confFilePath) != 0 { // if the configuration file path was supplied on the command line, @@ -40,10 +39,7 @@ func setupConfig( config.Datadog.SetConfigFile(confFilePath) } } - if useDefaultConfigPath { - if len(defaultConfPath) == 0 { - defaultConfPath = common.DefaultConfPath - } + if defaultConfPath != "" { config.Datadog.AddConfigPath(defaultConfPath) } @@ -74,8 +70,8 @@ func setupConfig( return warnings, nil } -// MergeConfigurationFiles reads an array of configuration filenames and attempts to merge them. The userDefined value is used to specify that configurationFilesArray contains filenames defined on the command line -// TODO(paulcacheux): change this a component method once all security-agent commands have been converted to fx +// MergeConfigurationFiles reads an array of configuration filenames and attempts to merge them. The userDefined value is used to specify that configurationFilesArray contains filenames defined on the command line. +// TODO: This is ONLY for SecAgent use! Deleting this once all SecAgent commands have been converted to fx func MergeConfigurationFiles(configName string, configurationFilesArray []string, userDefined bool) (*config.Warnings, error) { // we'll search for a config file named `datadog.yaml` config.Datadog.SetConfigName(configName) @@ -84,6 +80,7 @@ func MergeConfigurationFiles(configName string, configurationFilesArray []string loadedConfiguration := false var warnings *config.Warnings + var deps dependencies // Load and merge configuration files for _, configurationFilename := range configurationFilesArray { @@ -94,7 +91,14 @@ func MergeConfigurationFiles(configName string, configurationFilesArray []string continue } if !loadedConfiguration { - w, err := setupConfig(configurationFilename, "", false, true, true, "") + deps.Params.confFilePath = configurationFilename + deps.Params.configName = "" + deps.Params.configLoadSecrets = true + deps.Params.configMissingOK = false + deps.Params.defaultConfPath = "" + deps.Params.configLoadSecurityAgent = true + + w, err := setupConfig(deps) if err != nil { if userDefined { fmt.Printf("Warning: unable to open %s\n", configurationFilename) diff --git a/comp/core/flare/component.go b/comp/core/flare/component.go new file mode 100644 index 0000000000000..fa84173c042c4 --- /dev/null +++ b/comp/core/flare/component.go @@ -0,0 +1,32 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package flare implements a component to generate flares from the agent. +// +// A flare is a archive containing all the information necessary to troubleshoot the Agent. When openeing a support +// ticket a flare might be requested. Flares contain the Agent logs, configurations and much more. +package flare + +import ( + pkgFlare "github.com/DataDog/datadog-agent/pkg/flare" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "go.uber.org/fx" +) + +// team: agent-shared-components + +// Component is the component type. +type Component interface { + // Create creates a new flare locally and returns the path to the flare file. + Create(local bool, distPath, pyChecksPath string, logFilePaths []string, pdata pkgFlare.ProfileData, ipcError error) (string, error) +} + +// Module defines the fx options for this component. +var Module = fxutil.Component( + fx.Provide(newFlare), +) + +// The flare component doesn't provides a mock since other component don't use it directly. Other component will use the +// mock for the FlareBuilder instead. diff --git a/comp/core/flare/flare.go b/comp/core/flare/flare.go new file mode 100644 index 0000000000000..98e8636fa457c --- /dev/null +++ b/comp/core/flare/flare.go @@ -0,0 +1,54 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package flare + +import ( + "reflect" + "runtime" + + "github.com/DataDog/datadog-agent/comp/core/flare/helpers" + "github.com/DataDog/datadog-agent/comp/core/log" + pkgFlare "github.com/DataDog/datadog-agent/pkg/flare" + "go.uber.org/fx" +) + +type dependencies struct { + fx.In + + Log log.Component + Providers []helpers.FlareProvider `group:"flare"` +} + +type flare struct { + log log.Component + providers []helpers.FlareProvider +} + +func newFlare(deps dependencies) (Component, error) { + return &flare{ + log: deps.Log, + providers: deps.Providers, + }, nil +} + +func (f *flare) Create(local bool, distPath, pyChecksPath string, logFilePaths []string, pdata pkgFlare.ProfileData, ipcError error) (string, error) { + fb, err := helpers.NewFlareBuilder() + if err != nil { + return "", err + } + + for _, p := range f.providers { + err = p.Callback(fb) + f.log.Error("error calling '%s' for flare creation: %s", + runtime.FuncForPC(reflect.ValueOf(p.Callback).Pointer()).Name(), // reflect p.Callback function name + err) + } + + // Legacy flare code + pkgFlare.CompleteFlare(fb, local, distPath, pyChecksPath, logFilePaths, pdata, ipcError) + + return fb.Save() +} diff --git a/comp/core/flare/helpers/builder.go b/comp/core/flare/helpers/builder.go new file mode 100644 index 0000000000000..0ce667f9cd222 --- /dev/null +++ b/comp/core/flare/helpers/builder.go @@ -0,0 +1,266 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package helpers + +import ( + "context" + "fmt" + "os" + "path/filepath" + "regexp" + "strings" + "time" + + "github.com/DataDog/datadog-agent/pkg/util/hostname" + "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/util/scrubber" + "github.com/mholt/archiver/v3" +) + +func newBuilder(root string, hostname string) (*builder, error) { + fb := &builder{ + tmpDir: root, + permsInfos: permissionsInfos{}, + } + + fb.flareDir = filepath.Join(fb.tmpDir, hostname) + if err := os.MkdirAll(fb.flareDir, os.ModePerm); err != nil { + return nil, fmt.Errorf("Could not create root dir '%s' for flare: %v", fb.flareDir, err) + } + + fb.scrubber = scrubber.New() + scrubber.AddDefaultReplacers(fb.scrubber) + + // The default scrubber doesn't deal with api keys of other services, for + // example powerDNS which has an "api_key" field in its YAML configuration. + // We add a replacer to scrub even those credentials. + // + // It is a best effort to match the api key field without matching our + // own already scrubbed (we don't want to match: "**************************abcde") + // Basically we allow many special chars while forbidding *. + // + // We want the value to be at least 2 characters which will avoid matching the first '"' from the regular + // replacer for api_key. + otherAPIKeysRx := regexp.MustCompile(`api_key\s*:\s*[a-zA-Z0-9\\\/\^\]\[\(\){}!|%:;"~><=#@$_\-\+]{2,}`) + fb.scrubber.AddReplacer(scrubber.SingleLine, scrubber.Replacer{ + Regex: otherAPIKeysRx, + ReplFunc: func(b []byte) []byte { + return []byte("api_key: \"********\"") + }, + }) + + logPath, err := fb.PrepareFilePath("flare_creation.log") + if err != nil { + return nil, err + } + + f, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY, os.ModePerm) + if err != nil { + return nil, fmt.Errorf("Could not create flare_creation.log file: %s", err) + } + fb.logFile = f + + return fb, nil +} + +// NewFlareBuilder returns a new FlareBuilder ready to be used. You need to call the Save method to archive all the data +// pushed to the flare as well as cleanup the temporary directories created. Not calling 'Save' after NewFlareBuilder +// will leave temporary directory on the file system. +func NewFlareBuilder() (FlareBuilder, error) { + tmpDir, err := os.MkdirTemp("", "") + if err != nil { + return nil, fmt.Errorf("Could not create temp dir for flare: %s", err) + } + + // Get hostname, if there's an error in getting the hostname, + // set the hostname to unknown + hostname, err := hostname.Get(context.TODO()) + if err != nil { + hostname = "unknown" + } + hostname = validate.CleanHostnameDir(hostname) + + return newBuilder(tmpDir, hostname) +} + +// builder implements the FlareBuilder interface +type builder struct { + // tmpDir is the temp directory to store data before being archived + tmpDir string + // flareDir is the top directory to add file to. This is the equivalent to tmpDir/ + flareDir string + // permsInfos stores the original rights for the files/dirs that were copied into the flare + permsInfos permissionsInfos + + // specialized scrubber for flare content + scrubber *scrubber.Scrubber + + logFile *os.File +} + +func getArchiveName() string { + t := time.Now().UTC() + timeString := strings.ReplaceAll(t.Format(time.RFC3339), ":", "-") + + logLevel, err := log.GetLogLevel() + logLevelString := "" + if err == nil { + logLevelString = fmt.Sprintf("-%s", logLevel.String()) + } + + return fmt.Sprintf("datadog-agent-%s%s.zip", timeString, logLevelString) +} + +func (fb *builder) Save() (string, error) { + defer fb.clean() + + _ = fb.AddFileFromFunc("permissions.log", fb.permsInfos.commit) + _ = fb.logFile.Close() + + archivePath := filepath.Join(os.TempDir(), getArchiveName()) + + // File format is determined based on archivePath extension, so zip + err := archiver.Archive([]string{fb.flareDir}, archivePath) + if err != nil { + return "", err + } + + return archivePath, nil +} + +func (fb *builder) clean() { + os.RemoveAll(fb.tmpDir) +} + +func (fb *builder) logError(format string, params ...interface{}) error { + err := log.Errorf(format, params...) + _, _ = fb.logFile.WriteString(err.Error() + "\n") + return err +} + +func (fb *builder) AddFileFromFunc(destFile string, cb func() ([]byte, error)) error { + content, err := cb() + if err != nil { + return fb.logError("error collecting data from callback for '%s': %s", destFile, err) + } + + return fb.AddFile(destFile, content) +} + +func (fb *builder) AddFile(destFile string, content []byte) error { + content, err := fb.scrubber.ScrubBytes(content) + if err != nil { + return fb.logError("error scrubbing content for '%s': %s", destFile, err) + } + + f, err := fb.PrepareFilePath(destFile) + if err != nil { + return err + } + + if err := os.WriteFile(f, content, os.ModePerm); err != nil { + return fb.logError("error writing data to '%s': %s", destFile, err) + } + return nil +} + +func (fb *builder) copyFileTo(shouldScrub bool, srcFile string, destFile string) error { + fb.permsInfos.add(srcFile) + + path, err := fb.PrepareFilePath(destFile) + if err != nil { + return err + } + + content, err := os.ReadFile(srcFile) + if err != nil { + return fb.logError("error reading file '%s' to be copy to '%s': %s", srcFile, destFile, err) + } + + if shouldScrub { + var err error + content, err = fb.scrubber.ScrubBytes(content) + if err != nil { + return fb.logError("error scrubbing content for file '%s': %s", destFile, err) + } + } + + err = os.WriteFile(path, content, os.ModePerm) + if err != nil { + return fb.logError("error writing file '%s': %s", destFile, err) + } + + return nil +} + +func (fb *builder) CopyFileTo(srcFile string, destFile string) error { + return fb.copyFileTo(true, srcFile, destFile) +} + +func (fb *builder) CopyFile(srcFile string) error { + return fb.copyFileTo(true, srcFile, filepath.Base(srcFile)) +} + +func (fb *builder) copyDirTo(shouldScrub bool, srcDir string, destDir string, shouldInclude func(string) bool) error { + srcDir, err := filepath.Abs(srcDir) + if err != nil { + return fb.logError("error getting absolute path for '%s': %s", srcDir, err) + } + fb.permsInfos.add(srcDir) + + err = filepath.Walk(srcDir, func(src string, f os.FileInfo, err error) error { + if f == nil { + return nil + } + if f.IsDir() { + return nil + } + + if !shouldInclude(src) { + return nil + } + + targetFile := filepath.Join(destDir, strings.Replace(src, srcDir, "", 1)) + _ = fb.copyFileTo(shouldScrub, src, targetFile) + return nil + }) + if err != nil { + return fb.logError("error walking dir '%s': %s", srcDir, err) + } + return nil +} + +func (fb *builder) CopyDirToWithoutScrubbing(srcDir string, destDir string, shouldInclude func(string) bool) error { + return fb.copyDirTo(false, srcDir, destDir, shouldInclude) +} + +func (fb *builder) CopyDirTo(srcDir string, destDir string, shouldInclude func(string) bool) error { + return fb.copyDirTo(true, srcDir, destDir, shouldInclude) +} + +func (fb *builder) PrepareFilePath(path string) (string, error) { + p := filepath.Join(fb.flareDir, path) + + err := os.MkdirAll(filepath.Dir(p), os.ModePerm) + if err != nil { + return "", fb.logError("error creating directory for file '%s': %s", path, err) + } + return p, nil +} + +func (fb *builder) RegisterFilePerm(path string) { + fb.permsInfos.add(path) +} + +func (fb *builder) RegisterDirPerm(path string) { + _ = filepath.Walk(path, func(src string, f os.FileInfo, err error) error { + if f != nil { + fb.RegisterFilePerm(src) + } + return nil + }) +} diff --git a/comp/core/flare/helpers/builder_mock.go b/comp/core/flare/helpers/builder_mock.go new file mode 100644 index 0000000000000..200051a9e7765 --- /dev/null +++ b/comp/core/flare/helpers/builder_mock.go @@ -0,0 +1,75 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package helpers + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +type FlareBuilderMock struct { + Fb FlareBuilder + Root string + t *testing.T +} + +func NewFlareBuilderMock(t *testing.T) *FlareBuilderMock { + root := t.TempDir() + + builder, err := newBuilder(root, "test-hostname") + require.NoError(t, err) + + fb := &FlareBuilderMock{ + Fb: builder, + Root: builder.flareDir, + t: t, + } + t.Cleanup(func() { builder.logFile.Close() }) + return fb +} +func (m *FlareBuilderMock) filePath(path ...string) string { + return filepath.Join( + append( + []string{m.Root}, + path..., + )...) +} + +// AssertFileExists asserts that a file exists within the flare +func (m *FlareBuilderMock) AssertFileExists(paths ...string) bool { + return assert.FileExists(m.t, m.filePath(paths...)) +} + +// AssertFileContent asserts that a file exists within the flare and has the correct content +func (m *FlareBuilderMock) AssertFileContent(content string, paths ...string) { + path := m.filePath(paths...) + + if assert.FileExists(m.t, path) { + data, err := os.ReadFile(path) + require.NoError(m.t, err) + assert.Equal(m.t, content, string(data), "Content of file %s is different from expected", path) + } +} + +// AssertFileContent asserts that a file exists within the flare and has the correct content +func (m *FlareBuilderMock) AssertFileContentMatch(pattern string, paths ...string) { + path := m.filePath(paths...) + + if assert.FileExists(m.t, path) { + data, err := os.ReadFile(path) + require.NoError(m.t, err) + assert.Regexp(m.t, pattern, string(data), "Content of file %s does not match Regexp", path) + } +} + +// AssertNoFileExists asserts that a file does not exists within the flare +func (m *FlareBuilderMock) AssertNoFileExists(paths ...string) bool { + return assert.NoFileExists(m.t, m.filePath(paths...)) +} diff --git a/comp/core/flare/helpers/builder_test.go b/comp/core/flare/helpers/builder_test.go new file mode 100644 index 0000000000000..4611c34ca6e7a --- /dev/null +++ b/comp/core/flare/helpers/builder_test.go @@ -0,0 +1,266 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package helpers + +import ( + "context" + "fmt" + "os" + "path/filepath" + "testing" + + "github.com/mholt/archiver/v3" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/util/hostname" + "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" +) + +var FromSlash = filepath.FromSlash + +func setupDirWithData(t *testing.T) string { + root := filepath.Join(t.TempDir(), "root") + require.NoError(t, os.MkdirAll(filepath.Join(root, "depth1", "depth2"), os.ModePerm)) + + f1 := filepath.Join(root, "test1") + f2 := filepath.Join(root, "test2") + f3 := filepath.Join(root, "depth1", "test3") + f4 := filepath.Join(root, "depth1", "depth2", "test4") + + require.NoError(t, os.WriteFile(f1, []byte("some data"), os.ModePerm)) + require.NoError(t, os.WriteFile(f2, []byte("some data\napi_key: 123456789006789009"), os.ModePerm)) + require.NoError(t, os.WriteFile(f3, []byte("some data"), os.ModePerm)) + require.NoError(t, os.WriteFile(f4, []byte("some data"), os.ModePerm)) + + return root +} + +func assertFileContent(t *testing.T, fb *builder, expected string, path string) { + path = filepath.Join(fb.flareDir, FromSlash(path)) + + require.FileExists(t, path) + content, err := os.ReadFile(path) + require.NoError(t, err) + assert.Equal(t, []byte(expected), content) +} + +func getNewBuilder(t *testing.T) *builder { + f, err := NewFlareBuilder() + require.NotNil(t, f) + require.NoError(t, err) + + fb, success := f.(*builder) + require.True(t, success, "FlareBuilder returned by FlareBuilder is not a *builder type") + return fb +} + +func TestNewFlareBuilder(t *testing.T) { + fb := getNewBuilder(t) + + require.DirExists(t, fb.tmpDir) + require.DirExists(t, fb.flareDir) + require.FileExists(t, filepath.Join(fb.flareDir, "flare_creation.log")) + + archive, err := fb.Save() + assert.NoError(t, err) + assert.FileExists(t, archive) + os.RemoveAll(archive) + + assert.NoDirExists(t, fb.tmpDir) + assert.NoDirExists(t, fb.flareDir) +} + +func TestSave(t *testing.T) { + fb := getNewBuilder(t) + + root := setupDirWithData(t) + fb.CopyDirTo(root, "test", func(string) bool { return true }) + fb.AddFile("test.data", []byte("some data")) + + archivePath, err := fb.Save() + require.NoError(t, err) + assert.NoDirExists(t, fb.tmpDir) + require.FileExists(t, archivePath) + + defer os.RemoveAll(archivePath) + + tmpDir := t.TempDir() + + hostname, err := hostname.Get(context.TODO()) + if err != nil { + hostname = "unknown" + } + hostname = validate.CleanHostnameDir(hostname) + + archiver.Unarchive(archivePath, tmpDir) + assert.FileExists(t, filepath.Join(tmpDir, hostname, "test.data")) + assert.FileExists(t, filepath.Join(tmpDir, hostname, "test/depth1/depth2/test4")) +} + +func TestAddFileFromFunc(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + fb.AddFileFromFunc(FromSlash("test/AddFileFromFunc"), func() ([]byte, error) { + return []byte("some data"), nil + }) + assertFileContent(t, fb, "some data", "test/AddFileFromFunc") + + fb.AddFileFromFunc(FromSlash("test/AddFileFromFunc_nil"), func() ([]byte, error) { + return nil, nil + }) + assertFileContent(t, fb, "", "test/AddFileFromFunc_nil") + + err := fb.AddFileFromFunc(FromSlash("test/AddFileFromFunc_error"), func() ([]byte, error) { + return nil, fmt.Errorf("some error") + }) + assert.Error(t, err) + assert.Equal(t, FromSlash("error collecting data from callback for 'test/AddFileFromFunc_error': some error"), err.Error()) + assert.NoFileExists(t, filepath.Join(fb.flareDir, "test", "AddFileFromFunc_error")) +} + +func TestAddFile(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + fb.AddFile(FromSlash("test/AddFile"), []byte("some data")) + assertFileContent(t, fb, "some data", "test/AddFile") + + fb.AddFile(FromSlash("test/AddFile_scrubbed_api_key"), []byte("api_key : 123456789006789009")) + assertFileContent(t, fb, "api_key: \"********\"", "test/AddFile_scrubbed_api_key") +} + +// Test that writeScrubbedFile actually scrubs third-party API keys. +func TestRedactingOtherServicesApiKey(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + clear := []byte(`init_config: +instances: +- host: 127.0.0.1 + api_key: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + port: 8082 + api_key: dGhpc2++lzM+XBhc3N3b3JkW113aXRo/c29tZWN]oYXJzMTIzCg== + version: 4 # omit this line if you're running pdns_recursor version 3.x`) + redacted := `init_config: +instances: +- host: 127.0.0.1 + api_key: "***************************aaaaa" + port: 8082 + api_key: "********" + version: 4 # omit this line if you're running pdns_recursor version 3.x` + + fb.AddFile("test.conf", clear) + assertFileContent(t, fb, redacted, "test.conf") +} + +func TestCopyFileTo(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + path := filepath.Join(t.TempDir(), "test.data") + os.WriteFile(path, []byte("some data"), os.ModePerm) + + assert.NoError(t, fb.CopyFileTo(path, FromSlash("test/copy/test.data"))) + assertFileContent(t, fb, "some data", "test/copy/test.data") + assert.NoError(t, fb.CopyFileTo(path, FromSlash("test/copy2/new.data"))) + assertFileContent(t, fb, "some data", "test/copy2/new.data") + assert.NoError(t, fb.CopyFileTo(path, FromSlash("new.data"))) + assertFileContent(t, fb, "some data", "new.data") +} + +func TestCopyFile(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + path := filepath.Join(t.TempDir(), "test.data") + os.WriteFile(path, []byte("some data"), os.ModePerm) + + assert.NoError(t, fb.CopyFile(path)) + assertFileContent(t, fb, "some data", "test.data") +} + +func TestCopyDirTo(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + root := setupDirWithData(t) + + require.NoError(t, fb.CopyDirTo( + root, + "test", + func(f string) bool { + return filepath.Base(f) != "test3" + }, + )) + + assertFileContent(t, fb, "some data", filepath.Join("test", "test1")) + assertFileContent(t, fb, "some data\napi_key: \"********\"", filepath.Join("test", "test2")) + assert.NoFileExists(t, filepath.Join(fb.flareDir, "test", "depth1", "test3")) + assertFileContent(t, fb, "some data", filepath.Join("test", "depth1", "depth2", "test4")) +} + +func TestCopyDirToWithoutScrubbing(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + root := setupDirWithData(t) + + require.NoError(t, fb.CopyDirToWithoutScrubbing( + root, + "test", + func(f string) bool { + return filepath.Base(f) != "test3" + }, + )) + + assertFileContent(t, fb, "some data", filepath.Join("test", "test1")) + assertFileContent(t, fb, "some data\napi_key: 123456789006789009", filepath.Join("test", "test2")) + assert.NoFileExists(t, filepath.Join(fb.flareDir, "test", "depth1", "test3")) + assertFileContent(t, fb, "some data", filepath.Join("test", "depth1", "depth2", "test4")) +} + +func TestPrepareFilePath(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + fb.PrepareFilePath("a") + assert.NoDirExists(t, filepath.Join(fb.flareDir, "a")) + + fb.PrepareFilePath(FromSlash("a/")) + assert.NoDirExists(t, filepath.Join(fb.flareDir, "a")) + + fb.PrepareFilePath(FromSlash("a/file")) + assert.DirExists(t, filepath.Join(fb.flareDir, "a")) + + fb.PrepareFilePath(FromSlash("a/b/c/d/file")) + assert.DirExists(t, filepath.Join(fb.flareDir, "a", "b", "c", "d")) +} + +func TestRegisterDirPerm(t *testing.T) { + fb := getNewBuilder(t) + defer fb.clean() + + root := setupDirWithData(t) + + fb.RegisterDirPerm(root) + + expectedPaths := []string{ + fmt.Sprintf("%s", root), + fmt.Sprintf("%s/test1", root), + fmt.Sprintf("%s/test2", root), + fmt.Sprintf("%s/depth1", root), + fmt.Sprintf("%s/depth1/test3", root), + fmt.Sprintf("%s/depth1/depth2", root), + fmt.Sprintf("%s/depth1/depth2/test4", root), + } + + require.Len(t, fb.permsInfos, len(expectedPaths)) + for _, path := range expectedPaths { + assert.Contains(t, fb.permsInfos, path) + } +} diff --git a/comp/core/flare/helpers/helpers.go b/comp/core/flare/helpers/helpers.go new file mode 100644 index 0000000000000..916f4dafb8b16 --- /dev/null +++ b/comp/core/flare/helpers/helpers.go @@ -0,0 +1,146 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package helpers + +import ( + "go.uber.org/fx" +) + +// FlareBuilder contains all the helpers to add files to a flare archive. +// +// When adding data to a flare the builder will do multiple things internally. +// +// First a log of the archive creation will be kept and shipped with the flare. When using the the FlareBuilder you +// should not stop at the first error. We want to collect as much as possible. Any error returned by the a FlareBuilder +// method is added to the flare log. In general, you can safely ignore those errors unless sending a flare without some +// file/information would not make sense. +// +// The builder will automatically scrub any sensitive data from content and copied files. Still carefully analyze what +// is being added to ensure that it contains no credentials or unnecessary user-specific data. The FlareBuilder scrubs +// secrets that match pre-programmed patterns, but it is always better to not capture data containing secrets, than to +// scrub that data. +// +// Everytime a file is copied to the flare the original permissions and ownership of the file is recorded (Unix only). +// +// There are reserved path in the flare: "permissions.log" and "flare-creationg.log" (both at the root of the flare). +// Note as well that the flare does nothing to prevent files to be overwritten by different calls. It's up to the caller +// to make sure the path used in the flare doesn't clash with other modules. +type FlareBuilder interface { + // AddFile creates a new file in the flare with the content. + // + // 'destFile' is a path relative to the flare root (ex: "some/path/to/a/file"). Any necessary directory will + // automatically be created. + // + // 'content' is automatically scrubbed of any sensitive informations before being added to the flare. + AddFile(destFile string, content []byte) error + + // AddFileFromFunc creates a new file in the flare with the content returned by the callback. + // + // 'destFile' is a path relative to the flare root (ex: "some/path/to/a/file"). Any necessary directory will + // automatically be created. + // + // If the 'cb' returns an error, the file will not be created, the error is added to the flare's logs and returned to + // the caller. + // + // The data returned by 'cb' is automatically scrubbed of any sensitive informations before being added to the flare. + AddFileFromFunc(destFile string, cb func() ([]byte, error)) error + + // CopyFile copies the content of 'srcFile' to the root of the flare. + // + // 'destFile' is a path relative to the flare root (ex: "some/path/to/a/file"). Any necessary directory will + // automatically be created. + // + // The data is automatically scrubbed of any sensitive informations before being copied. + // + // Example: CopyFile("/etc/datadog/datadog.yaml") will create a copy of "/etc/datadog/datadog.yaml", named + // "datadog.yaml", at the root of the flare. + CopyFile(srcFile string) error + + // CopyFileTo copies the content of 'srcFile' to 'destFile' in the flare. + // + // The data is automatically scrubbed of any sensitive informations before being copied. + // + // 'destFile' is a path relative to the flare root (ex: "path/to/a/file"). Any necessary directory will + // automatically be created. + // + // Example: CopyFile("/etc/datadog/datadog.yaml", "etc/datadog.yaml") will create a copy of "/etc/datadog/datadog.yaml" + // at "etc/datadog.yaml" at the root of the flare. + CopyFileTo(srcFile string, destFile string) error + + // CopyDirTo copies files from the 'srcDir' to a specific directory in the flare. + // + // The path for each file in 'srcDir' is passed to the 'shouldInclude' callback. If 'shouldInclude' returns true, the + // file is copies to the flare. If not, the file is ignored. + // + // 'destFile' is a path relative to the flare root (ex: "some/path/to/a/dir"). + // + // The data of each copied file is automatically scrubbed of any sensitive informations before being copied. + // + // Example: CopyDir("/var/log/datadog/agent", "logs", ) will copy files from "/var/log/datadog/agent/" to + // "logs/agent/" in the flare. + CopyDirTo(srcDir string, destDir string, shouldInclude func(string) bool) error + + // CopyDirTo copies files from the 'srcDir' to a specific directory in the flare. + // + // The path for each file in 'srcDir' is passed to the 'shouldInclude' callback. If 'shouldInclude' returns true, the + // file is copies to the flare. If not, the file is ignored. + // + // 'destFile' is a path relative to the flare root (ex: "some/path/to/a/dir"). + // + // The data of each copied file is NOT scrubbed of any sensitive informations before being copied. Only files + // already scrubbed should be added in this way (ex: agent logs that are scrubbed at creation). + // + // Example: CopyDir("/var/log/datadog/agent", "logs", ) will copy files from "/var/log/datadog/agent/" to + // "logs/agent/" in the flare. + CopyDirToWithoutScrubbing(srcDir string, destDir string, shouldInclude func(string) bool) error + + // PrepareFilePath returns the full path of a file in the flare. + // + // PrepareFilePath will create the necessary directories in the flare temporary dir so that file can be create, but will + // not create the file. This method should only be used when the data is generated by another program/library. + // + // Example: PrepareFilePath("db-monitoring/db-dump.log") will create the 'db-monitoring' directory at the root of the + // flare and return the full path to db-dump.log: "/path/to/the/flare/db-monitoring/db-dump.log". + PrepareFilePath(path string) (string, error) + + // RegisterFilePerm add the current permissions for a file to the flare's permissions.log. + RegisterFilePerm(path string) + + // RegisterDirPerm add the current permissions for all the files in a directory to the flare's permissions.log. + RegisterDirPerm(path string) + + // Save archives all the data added to the flare, cleanup all the temporary directories and return the path to + // the archive file. Upon error the cleanup is still done. + // Error or not, once Save as been called the FlareBuilder is no longer capable of receiving new data. It is the caller + // responsibility to make sure of this. + // + // This method must not be used by flare callbacks and will be removed once all flare code has been migrated to + // components. + Save() (string, error) +} + +type flareCallback func(fb FlareBuilder) error + +// FlareProvider represents a callback to be used when creating a flare +type FlareProvider struct { + Callback flareCallback +} + +// Provider is provided by other components to register themselves to provide flare data. +type Provider struct { + fx.Out + + Provider FlareProvider `group:"flare"` +} + +// NewProvider returns a new Provider to be called when a flare is created +func NewProvider(callback flareCallback) Provider { + return Provider{ + Provider: FlareProvider{ + Callback: callback, + }, + } +} diff --git a/pkg/process/config/config_windows.go b/comp/core/flare/helpers/perm_info.go similarity index 55% rename from pkg/process/config/config_windows.go rename to comp/core/flare/helpers/perm_info.go index fc74322c321ea..b363648841c2d 100644 --- a/pkg/process/config/config_windows.go +++ b/comp/core/flare/helpers/perm_info.go @@ -3,10 +3,9 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build windows -// +build windows +package helpers -package config - -// defaultSystemProbeAddress is the default address to be used for connecting to the system probe -const defaultSystemProbeAddress = "localhost:3333" +// permissionsInfos holds permissions info about the files shipped +// in the flare. +// The key is the filepath of the file. +type permissionsInfos map[string]*filePermsInfo diff --git a/comp/core/flare/helpers/perm_info_nix.go b/comp/core/flare/helpers/perm_info_nix.go new file mode 100644 index 0000000000000..118da0452e8d0 --- /dev/null +++ b/comp/core/flare/helpers/perm_info_nix.go @@ -0,0 +1,105 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows +// +build !windows + +package helpers + +import ( + "bytes" + "fmt" + "os" + "os/user" + "strconv" + "strings" + "syscall" +) + +// filePermsInfo represents file rights on linux +type filePermsInfo struct { + path string + mode string + owner string + group string + err error +} + +// Add puts the given filepath in the map +// of files to process later during the commit phase. +func (p permissionsInfos) add(filePath string) { + info := filePermsInfo{ + path: filePath, + } + p[filePath] = &info + + fi, err := os.Stat(filePath) + if err != nil { + info.err = fmt.Errorf("could not stat file %s: %s", filePath, err) + return + } + info.mode = fi.Mode().String() + + var sys syscall.Stat_t + if err := syscall.Stat(filePath, &sys); err != nil { + info.err = fmt.Errorf("can't retrieve file %s uid/gid infos: %s", filePath, err) + return + } + + var uid = strconv.Itoa(int(sys.Uid)) + u, err := user.LookupId(uid) + if err != nil { + // User not found, eg: it was deleted from the system + info.owner = uid + } else if len(u.Name) > 0 { + info.owner = u.Name + } else { + info.owner = u.Username + } + + var gid = strconv.Itoa(int(sys.Gid)) + g, err := user.LookupGroupId(gid) + if err != nil { + // Group not found, eg: it was deleted from the system + info.group = gid + } else { + info.group = g.Name + } +} + +// Commit resolves the infos of every stacked files in the map +// and then writes the permissions.log file on the filesystem. +func (p permissionsInfos) commit() ([]byte, error) { + f := &bytes.Buffer{} + // write headers + s := fmt.Sprintf("%-50s | %-5s | %-10s | %-10s | %-10s|\n", "File path", "mode", "owner", "group", "error") + if _, err := f.Write([]byte(s)); err != nil { + return nil, err + } + if _, err := f.Write([]byte(strings.Repeat("-", len(s)) + "\n")); err != nil { + return nil, err + } + + // write each file permissions infos + for _, info := range p { + infoError := "" + if info.err != nil { + infoError = info.err.Error() + } + + _, err := f.Write([]byte( + fmt.Sprintf("%-50s | %-5s | %-10s | %-10s | %-10s|\n", + info.path, + info.mode, + info.owner, + info.group, + infoError, + ))) + if err != nil { + return f.Bytes(), err + } + } + return f.Bytes(), nil +} diff --git a/comp/core/flare/helpers/perm_info_nix_test.go b/comp/core/flare/helpers/perm_info_nix_test.go new file mode 100644 index 0000000000000..83d8d314be3ea --- /dev/null +++ b/comp/core/flare/helpers/perm_info_nix_test.go @@ -0,0 +1,88 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows +// +build !windows + +package helpers + +import ( + "os" + "path/filepath" + "regexp" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func createPermsTestFile(t *testing.T) (string, string, string) { + tempDir := t.TempDir() + + f1 := filepath.Join(tempDir, "file_1") + f2 := filepath.Join(tempDir, "file_2") + f3 := filepath.Join(tempDir, "file_3") + + os.WriteFile(f1, nil, 0765) + os.WriteFile(f2, nil, 0400) + return f1, f2, f3 +} + +func TestPermsFileAdd(t *testing.T) { + f1, f2, f3 := createPermsTestFile(t) + + pi := permissionsInfos{} + + pi.add(f1) + pi.add(f2) + pi.add(f3) + + require.Len(t, pi, 3) + + assert.Equal(t, f1, pi[f1].path) + assert.Equal(t, "-rwxrw----", pi[f1].mode) + assert.NotNil(t, pi[f1].owner) + assert.NotNil(t, pi[f1].group) + assert.Nil(t, pi[f1].err) + + assert.Equal(t, f2, pi[f2].path) + assert.Equal(t, "-r--------", pi[f2].mode) + assert.NotNil(t, pi[f2].owner) + assert.NotNil(t, pi[f2].group) + assert.Nil(t, pi[f2].err) + + assert.Equal(t, f2, pi[f2].path) + assert.Equal(t, "-r--------", pi[f2].mode) + assert.NotNil(t, pi[f2].owner) + assert.NotNil(t, pi[f2].group) + assert.Nil(t, pi[f2].err) + + assert.Equal(t, f3, pi[f3].path) + assert.Empty(t, pi[f3].mode) + assert.Empty(t, pi[f3].owner) + assert.Empty(t, pi[f3].group) + assert.NotNil(t, pi[f3].err) +} + +func TestPermsFileCommit(t *testing.T) { + f1, f2, f3 := createPermsTestFile(t) + + pi := permissionsInfos{} + pi.add(f1) + pi.add(f2) + pi.add(f3) + + b, err := pi.commit() + require.NoError(t, err) + + pattern := []byte(`File path | mode | owner | group | error | +--------------------------------------------------------------------------------------------------- +.+/file_a | -rwxrw---- | \w+\s*| \w+\s*| | +.+/file_a | -r-------- | \w+\s*| \w+\s*| | +.+/file_a | | | | could not stat file .+/file_3: stat .+/file_3: no such file or directory|`) + + res, _ := regexp.Match(string(b), pattern) + assert.True(t, res) +} diff --git a/comp/core/flare/helpers/perm_info_win.go b/comp/core/flare/helpers/perm_info_win.go new file mode 100644 index 0000000000000..11cdfdafd7adf --- /dev/null +++ b/comp/core/flare/helpers/perm_info_win.go @@ -0,0 +1,20 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows +// +build windows + +package helpers + +// filePermsInfo represents file rights on windows. +type filePermsInfo struct{} + +func (p permissionsInfos) add(filePath string) error { + return nil +} + +func (p permissionsInfos) commit() ([]byte, error) { + return nil, nil +} diff --git a/comp/core/flare/helpers/perm_info_win_test.go b/comp/core/flare/helpers/perm_info_win_test.go new file mode 100644 index 0000000000000..b81e8e3add962 --- /dev/null +++ b/comp/core/flare/helpers/perm_info_win_test.go @@ -0,0 +1,26 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows +// +build windows + +package helpers + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +// Test that addParentPerms does not loop on Windows. +func TestPermissionsInfosAddWindows(t *testing.T) { + permsInfos := make(permissionsInfos) + expectedParentPerms := map[string]filePermsInfo{} + + // Basic Case + path := "C:\\a\\b\\c\\d" + permsInfos.Add(path) + assert.NotContains(t, permsInfos, path) +} diff --git a/comp/core/internal/params.go b/comp/core/internal/params.go deleted file mode 100644 index aa9374f867bad..0000000000000 --- a/comp/core/internal/params.go +++ /dev/null @@ -1,174 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package internal - -import ( - "runtime" - - "github.com/DataDog/datadog-agent/pkg/config" -) - -// BundleParams defines the parameters for this bundle. -// -// Logs-related parameters are implemented as unexported fields containing -// callbacks. These fields can be set with the `LogXxx()` methods, which -// return the updated BundleParams. One of `LogForOneShot` or `LogForDaemon` -// must be called. -type BundleParams struct { - // ConfFilePath is the path at which to look for configuration, usually - // given by the --cfgpath command-line flag. - ConfFilePath string - - // ConfigName is the root of the name of the configuration file. The - // comp/core/config component will search for a file with this name - // in ConfFilePath, using a variety of extensions. The default is - // "datadog". - ConfigName string - - // SysProbeConfFilePath is the path at which to look for system-probe - // configuration, usually given by --sysprobecfgpath. This is not used - // unless ConfigLoadSysProbe is true. - SysProbeConfFilePath string - - // ConfigLoadSysProbe determines whether to read the system-probe.yaml into - // the component's config data. - ConfigLoadSysProbe bool - - // SecurityAgentConfigFilePaths are the paths at which to look for security-aegnt - // configuration, usually given by the --cfgpath command-line flag. - SecurityAgentConfigFilePaths []string - - // ConfigLoadSecurityAgent determines whether to read the config from - // SecurityAgentConfigFilePaths or from ConfFilePath. - ConfigLoadSecurityAgent bool - - // ConfigLoadSecrets determines whether secrets in the configuration file - // should be evaluated. This is typically false for one-shot commands. - ConfigLoadSecrets bool - - // ConfigMissingOK determines whether it is a fatal error if the config - // file does not exist. - ConfigMissingOK bool - - // LoggerName is the name that appears in the logfile - LoggerName string - - // ExcludeDefaultConfPath determines whether the default config path must be excluded. - ExcludeDefaultConfPath bool - - // DefaultConfPath determines the default configuration path. - // if DefaultConfPath is empty, then the default configuration path of the Agent is used. - // if ExcludeDefaultConfPath is true this field is ignored. - DefaultConfPath string - - // LogLevelFn returns the log level. This field is set by methods on this - // type. - LogLevelFn func(configGetter) string - - // LogFileFn returns the log file. This field is set by methods on this type. - LogFileFn func(configGetter) string - - // LogSyslogURIFn returns the syslog URI. This field is set by methods on this type. - LogSyslogURIFn func(configGetter) string - - // LogSyslogRFCFn returns a boolean determining whether to use syslog RFC - // 5424. This field is set by methods on this type. - LogSyslogRFCFn func(configGetter) bool - - // LogToConsoleFn returns a boolean determining whether to write logs to - // the console. This field is set by methods on this type. - LogToConsoleFn func(configGetter) bool - - // LogFormatJSONFn returns a boolean determining whether logs should be - // written in JSON format. - LogFormatJSONFn func(configGetter) bool -} - -// configGetter is a subset of the comp/core/config component, able to get -// config values for the xxxFn fields in BundleParams. comp/core/log uses -// this interface to get parameters that may depend on a configuration value. -type configGetter interface { - GetString(key string) string - GetBool(key string) bool -} - -// LogForOneShot sets up logging parameters for a one-shot app. -// -// If overrideFromEnv is set, then DD_LOG_LEVEL will override the given level. -// -// Otherwise, file logging is disabled, syslog is disabled, console logging is -// enabled, and JSON formatting is disabled. -func (params BundleParams) LogForOneShot(loggerName, level string, overrideFromEnv bool) BundleParams { - params.LoggerName = loggerName - if overrideFromEnv { - params.LogLevelFn = func(configGetter) string { return config.GetEnvDefault("DD_LOG_LEVEL", level) } - } else { - params.LogLevelFn = func(configGetter) string { return level } - } - params.LogFileFn = func(configGetter) string { return "" } - params.LogSyslogURIFn = func(configGetter) string { return "" } - params.LogSyslogRFCFn = func(configGetter) bool { return false } - params.LogToConsoleFn = func(configGetter) bool { return true } - params.LogFormatJSONFn = func(configGetter) bool { return false } - return params -} - -// LogForDaemon sets up logging parameters for a daemon app. -// -// The log level is set based on the `log_level` config parameter. -// -// The log file is set based on the logFileConfig config parameter, -// or disabled if `disable_file_logging` is set. -// -// On platforms which support it, syslog is enabled if `log_to_syslog` is set, -// using `syslog_uri` or defaulting to "unixgram:///dev/log" if that is empty. -// The `syslog_rfc` config parameter determines whether this produces 5424-compliant -// output. -// -// Console logging is enabled if `log_to_console` is set. Lots are formatted -// as JSON if `log_format_json` is set. -func (params BundleParams) LogForDaemon(loggerName, logFileConfig, defaultLogFile string) BundleParams { - params.LoggerName = loggerName - params.LogLevelFn = func(g configGetter) string { return g.GetString("log_level") } - params.LogFileFn = func(g configGetter) string { - if g.GetBool("disable_file_logging") { - return "" - } - logFile := g.GetString(logFileConfig) - if logFile == "" { - logFile = defaultLogFile - } - return logFile - } - params.LogSyslogURIFn = func(g configGetter) string { - if runtime.GOOS == "windows" { - return "" // syslog not supported on Windows - } - enabled := g.GetBool("log_to_syslog") - uri := g.GetString("syslog_uri") - - if !enabled { - return "" - } - - if uri == "" { - return "unixgram:///dev/log" - } - - return uri - } - params.LogSyslogRFCFn = func(g configGetter) bool { return g.GetBool("syslog_rfc") } - params.LogToConsoleFn = func(g configGetter) bool { return g.GetBool("log_to_console") } - params.LogFormatJSONFn = func(g configGetter) bool { return g.GetBool("log_format_json") } - return params -} - -// LogToFile modifies the parameters to set the destination log file, overriding any -// previous logfile parameter. -func (params BundleParams) LogToFile(logFile string) BundleParams { - params.LogFileFn = func(configGetter) string { return logFile } - return params -} diff --git a/comp/core/internal/params_test.go b/comp/core/internal/params_test.go deleted file mode 100644 index 76ef9d3443fd6..0000000000000 --- a/comp/core/internal/params_test.go +++ /dev/null @@ -1,172 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package internal - -import ( - "runtime" - "testing" - - "github.com/stretchr/testify/require" -) - -type getter struct { - strs map[string]string - bools map[string]bool -} - -func (g *getter) GetString(k string) string { - return g.strs[k] -} - -func (g *getter) GetBool(k string) bool { - return g.bools[k] -} - -func TestLogForOneShot_noOverride(t *testing.T) { - params := BundleParams{}.LogForOneShot("TEST", "trace", false) - g := &getter{} - t.Setenv("DD_LOG_LEVEL", "debug") - - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "", params.LogFileFn(g)) - require.Equal(t, "", params.LogSyslogURIFn(g)) - require.Equal(t, false, params.LogSyslogRFCFn(g)) - require.Equal(t, true, params.LogToConsoleFn(g)) - require.Equal(t, false, params.LogFormatJSONFn(g)) -} - -func TestLogForOneShot_override(t *testing.T) { - params := BundleParams{}.LogForOneShot("TEST", "trace", true) - g := &getter{} - t.Setenv("DD_LOG_LEVEL", "debug") - - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "debug", params.LogLevelFn(g)) - require.Equal(t, "", params.LogFileFn(g)) - require.Equal(t, "", params.LogSyslogURIFn(g)) - require.Equal(t, false, params.LogSyslogRFCFn(g)) - require.Equal(t, true, params.LogToConsoleFn(g)) - require.Equal(t, false, params.LogFormatJSONFn(g)) -} - -func TestLogForDaemon_windows(t *testing.T) { - if runtime.GOOS != "windows" { - t.Skip() - } - params := BundleParams{}.LogForDaemon("TEST", "unused", "unused") - g := &getter{ - strs: map[string]string{ - "log_level": "trace", - }, - bools: map[string]bool{ - "log_to_syslog": true, // enabled, but doesn't exist on windows - }, - } - - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "", params.LogFileFn(g)) - require.Equal(t, "", params.LogSyslogURIFn(g)) // still empty - require.Equal(t, false, params.LogSyslogRFCFn(g)) - require.Equal(t, true, params.LogToConsoleFn(g)) - require.Equal(t, false, params.LogFormatJSONFn(g)) -} - -func TestLogForDaemon_linux(t *testing.T) { - if runtime.GOOS != "linux" { - t.Skip() - } - makeGetter := func() *getter { - return &getter{ - strs: map[string]string{ - "log_level": "trace", - "log_file": "", - "syslog_uri": "", - }, - bools: map[string]bool{ - "disable_file_logging": false, - "log_to_syslog": false, - "syslog_rfc": true, - "log_to_console": false, - "log_format_json": true, - }, - } - } - - t.Run("log_file config", func(t *testing.T) { - params := BundleParams{}.LogForDaemon("TEST", "log_file", "unused") - g := makeGetter() - g.strs["log_file"] = "/foo/bar" - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "/foo/bar", params.LogFileFn(g)) - require.Equal(t, "", params.LogSyslogURIFn(g)) - require.Equal(t, true, params.LogSyslogRFCFn(g)) - require.Equal(t, false, params.LogToConsoleFn(g)) - require.Equal(t, true, params.LogFormatJSONFn(g)) - }) - - t.Run("log_file default", func(t *testing.T) { - params := BundleParams{}.LogForDaemon("TEST", "log_file", "/default/log") - g := makeGetter() - g.strs["log_file"] = "" - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "/default/log", params.LogFileFn(g)) - require.Equal(t, "", params.LogSyslogURIFn(g)) - require.Equal(t, true, params.LogSyslogRFCFn(g)) - require.Equal(t, false, params.LogToConsoleFn(g)) - require.Equal(t, true, params.LogFormatJSONFn(g)) - }) - - t.Run("disable_file_logging", func(t *testing.T) { - params := BundleParams{}.LogForDaemon("TEST", "log_file", "/default/log") - g := makeGetter() - g.bools["disable_file_logging"] = true - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "", params.LogFileFn(g)) - require.Equal(t, "", params.LogSyslogURIFn(g)) - require.Equal(t, true, params.LogSyslogRFCFn(g)) - require.Equal(t, false, params.LogToConsoleFn(g)) - require.Equal(t, true, params.LogFormatJSONFn(g)) - }) - - t.Run("log to syslog", func(t *testing.T) { - params := BundleParams{}.LogForDaemon("TEST", "log_file", "/default/log") - g := makeGetter() - g.bools["log_to_syslog"] = true - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "/default/log", params.LogFileFn(g)) - require.Equal(t, "unixgram:///dev/log", params.LogSyslogURIFn(g)) - require.Equal(t, true, params.LogSyslogRFCFn(g)) - require.Equal(t, false, params.LogToConsoleFn(g)) - require.Equal(t, true, params.LogFormatJSONFn(g)) - }) - - t.Run("log to syslog with uri", func(t *testing.T) { - params := BundleParams{}.LogForDaemon("TEST", "log_file", "/default/log") - g := makeGetter() - g.bools["log_to_syslog"] = true - g.strs["syslog_uri"] = "test:///" - require.Equal(t, "TEST", params.LoggerName) - require.Equal(t, "trace", params.LogLevelFn(g)) - require.Equal(t, "/default/log", params.LogFileFn(g)) - require.Equal(t, "test:///", params.LogSyslogURIFn(g)) - require.Equal(t, true, params.LogSyslogRFCFn(g)) - require.Equal(t, false, params.LogToConsoleFn(g)) - require.Equal(t, true, params.LogFormatJSONFn(g)) - }) -} - -func TestLogToFile(t *testing.T) { - params := BundleParams{}.LogForOneShot("TEST", "trace", true).LogToFile("/some/file") - g := &getter{} - - require.Equal(t, "/some/file", params.LogFileFn(g)) -} diff --git a/comp/core/log/logger.go b/comp/core/log/logger.go index ab481b0b8b9a8..fcfe3416671b6 100644 --- a/comp/core/log/logger.go +++ b/comp/core/log/logger.go @@ -9,7 +9,6 @@ import ( "errors" "github.com/DataDog/datadog-agent/comp/core/config" - "github.com/DataDog/datadog-agent/comp/core/internal" pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -20,18 +19,18 @@ type logger struct { // pkg/util/log, and uses globals in that package. } -func newLogger(params internal.BundleParams, config config.Component) (Component, error) { - if params.LogLevelFn == nil { +func newLogger(params Params, config config.Component) (Component, error) { + if params.logLevelFn == nil { return nil, errors.New("must call one of core.BundleParams.LogForOneShot or LogForDaemon") } err := pkgconfig.SetupLogger( - pkgconfig.LoggerName(params.LoggerName), - params.LogLevelFn(config), - params.LogFileFn(config), - params.LogSyslogURIFn(config), - params.LogSyslogRFCFn(config), - params.LogToConsoleFn(config), - params.LogFormatJSONFn(config)) + pkgconfig.LoggerName(params.loggerName), + params.logLevelFn(config), + params.logFileFn(config), + params.logSyslogURIFn(config), + params.logSyslogRFCFn(config), + params.logToConsoleFn(config), + params.logFormatJSONFn(config)) if err != nil { return nil, err } diff --git a/comp/core/log/logger_test.go b/comp/core/log/logger_test.go index f10b9f386283a..1c1ca68257e7c 100644 --- a/comp/core/log/logger_test.go +++ b/comp/core/log/logger_test.go @@ -11,13 +11,13 @@ import ( "go.uber.org/fx" "github.com/DataDog/datadog-agent/comp/core/config" - "github.com/DataDog/datadog-agent/comp/core/internal" "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) func TestLogging(t *testing.T) { fxutil.Test(t, fx.Options( - fx.Supply(internal.BundleParams{}.LogForOneShot("TEST", "debug", false)), + fx.Supply(LogForOneShot("TEST", "debug", false)), + fx.Supply(config.Params{}), config.MockModule, Module, ), func(log Component) { diff --git a/comp/core/log/mock_test.go b/comp/core/log/mock_test.go index 296ec2b7e495e..979a6a6bc2399 100644 --- a/comp/core/log/mock_test.go +++ b/comp/core/log/mock_test.go @@ -11,13 +11,12 @@ import ( "go.uber.org/fx" "github.com/DataDog/datadog-agent/comp/core/config" - "github.com/DataDog/datadog-agent/comp/core/internal" "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) func TestMockLogging(t *testing.T) { fxutil.Test(t, fx.Options( - fx.Supply(internal.BundleParams{}), + fx.Supply(Params{}), config.MockModule, MockModule, ), func(log Component) { diff --git a/comp/core/log/params.go b/comp/core/log/params.go new file mode 100644 index 0000000000000..14bb04ac2d825 --- /dev/null +++ b/comp/core/log/params.go @@ -0,0 +1,149 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package log + +import ( + "runtime" + + "github.com/DataDog/datadog-agent/pkg/config" +) + +// Params defines the parameters for this log component. +// +// Logs-related parameters are implemented as unexported fields containing +// callbacks. These fields can be set with the `LogXxx()` methods, which +// return the updated LogParams. One of `LogForOneShot` or `LogForDaemon` +// must be called. +type Params struct { + // loggerName is the name that appears in the logfile + loggerName string + + // logLevelFn returns the log level. This field is set by methods on this + // type. + logLevelFn func(configGetter) string + + // logFileFn returns the log file. This field is set by methods on this type. + logFileFn func(configGetter) string + + // logSyslogURIFn returns the syslog URI. This field is set by methods on this type. + logSyslogURIFn func(configGetter) string + + // logSyslogRFCFn returns a boolean determining whether to use syslog RFC + // 5424. This field is set by methods on this type. + logSyslogRFCFn func(configGetter) bool + + // logToConsoleFn returns a boolean determining whether to write logs to + // the console. This field is set by methods on this type. + logToConsoleFn func(configGetter) bool + + // logFormatJSONFn returns a boolean determining whether logs should be + // written in JSON format. + logFormatJSONFn func(configGetter) bool +} + +// configGetter is a subset of the comp/core/config component, able to get +// config values for the xxxFn fields in LogParams. comp/core/log uses +// this interface to get parameters that may depend on a configuration value. +type configGetter interface { + GetString(key string) string + GetBool(key string) bool +} + +// LogForOneShot sets up logging parameters for a one-shot app. +// +// If overrideFromEnv is set, then DD_LOG_LEVEL will override the given level. +// +// Otherwise, file logging is disabled, syslog is disabled, console logging is +// enabled, and JSON formatting is disabled. +func LogForOneShot(loggerName, level string, overrideFromEnv bool) Params { + params := Params{} + params.loggerName = loggerName + if overrideFromEnv { + params.logLevelFn = func(configGetter) string { return config.GetEnvDefault("DD_LOG_LEVEL", level) } + } else { + params.logLevelFn = func(configGetter) string { return level } + } + params.logFileFn = func(configGetter) string { return "" } + params.logSyslogURIFn = func(configGetter) string { return "" } + params.logSyslogRFCFn = func(configGetter) bool { return false } + params.logToConsoleFn = func(configGetter) bool { return true } + params.logFormatJSONFn = func(configGetter) bool { return false } + return params +} + +// LogForDaemon sets up logging parameters for a daemon app. +// +// The log level is set based on the `log_level` config parameter. +// +// The log file is set based on the logFileConfig config parameter, +// or disabled if `disable_file_logging` is set. +// +// On platforms which support it, syslog is enabled if `log_to_syslog` is set, +// using `syslog_uri` or defaulting to "unixgram:///dev/log" if that is empty. +// The `syslog_rfc` config parameter determines whether this produces 5424-compliant +// output. +// +// Console logging is enabled if `log_to_console` is set. Lots are formatted +// as JSON if `log_format_json` is set. +func LogForDaemon(loggerName, logFileConfig, defaultLogFile string) Params { + params := Params{} + params.loggerName = loggerName + params.logLevelFn = func(g configGetter) string { return g.GetString("log_level") } + params.logFileFn = func(g configGetter) string { + if g.GetBool("disable_file_logging") { + return "" + } + logFile := g.GetString(logFileConfig) + if logFile == "" { + logFile = defaultLogFile + } + return logFile + } + params.logSyslogURIFn = func(g configGetter) string { + if runtime.GOOS == "windows" { + return "" // syslog not supported on Windows + } + enabled := g.GetBool("log_to_syslog") + uri := g.GetString("syslog_uri") + + if !enabled { + return "" + } + + if uri == "" { + return "unixgram:///dev/log" + } + + return uri + } + params.logSyslogRFCFn = func(g configGetter) bool { return g.GetBool("syslog_rfc") } + params.logToConsoleFn = func(g configGetter) bool { return g.GetBool("log_to_console") } + params.logFormatJSONFn = func(g configGetter) bool { return g.GetBool("log_format_json") } + return params +} + +// LogToFile modifies the parameters to set the destination log file, overriding any +// previous logfile parameter. +func (params *Params) LogToFile(logFile string) { + params.logFileFn = func(configGetter) string { return logFile } +} + +// LoggerName is the name that appears in the logfile +func (params Params) LoggerName() string { + return params.loggerName +} + +// These functions are used in unit tests. + +// LogLevelFn returns the log level +func (params Params) LogLevelFn(c configGetter) string { + return params.logLevelFn(c) +} + +// LogFileFn returns the log file +func (params Params) LogFileFn(c configGetter) string { + return params.logFileFn(c) +} diff --git a/comp/core/log/params_test.go b/comp/core/log/params_test.go new file mode 100644 index 0000000000000..98ef53786f24a --- /dev/null +++ b/comp/core/log/params_test.go @@ -0,0 +1,173 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package log + +import ( + "runtime" + "testing" + + "github.com/stretchr/testify/require" +) + +type getter struct { + strs map[string]string + bools map[string]bool +} + +func (g *getter) GetString(k string) string { + return g.strs[k] +} + +func (g *getter) GetBool(k string) bool { + return g.bools[k] +} + +func TestLogForOneShot_noOverride(t *testing.T) { + params := LogForOneShot("TEST", "trace", false) + g := &getter{} + t.Setenv("DD_LOG_LEVEL", "debug") + + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "", params.logFileFn(g)) + require.Equal(t, "", params.logSyslogURIFn(g)) + require.Equal(t, false, params.logSyslogRFCFn(g)) + require.Equal(t, true, params.logToConsoleFn(g)) + require.Equal(t, false, params.logFormatJSONFn(g)) +} + +func TestLogForOneShot_override(t *testing.T) { + params := LogForOneShot("TEST", "trace", true) + g := &getter{} + t.Setenv("DD_LOG_LEVEL", "debug") + + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "debug", params.logLevelFn(g)) + require.Equal(t, "", params.logFileFn(g)) + require.Equal(t, "", params.logSyslogURIFn(g)) + require.Equal(t, false, params.logSyslogRFCFn(g)) + require.Equal(t, true, params.logToConsoleFn(g)) + require.Equal(t, false, params.logFormatJSONFn(g)) +} + +func TestLogForDaemon_windows(t *testing.T) { + if runtime.GOOS != "windows" { + t.Skip() + } + params := LogForDaemon("TEST", "unused", "unused") + g := &getter{ + strs: map[string]string{ + "log_level": "trace", + }, + bools: map[string]bool{ + "log_to_syslog": true, // enabled, but doesn't exist on windows + }, + } + + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "", params.logFileFn(g)) + require.Equal(t, "", params.logSyslogURIFn(g)) // still empty + require.Equal(t, false, params.logSyslogRFCFn(g)) + require.Equal(t, true, params.logToConsoleFn(g)) + require.Equal(t, false, params.logFormatJSONFn(g)) +} + +func TestLogForDaemon_linux(t *testing.T) { + if runtime.GOOS != "linux" { + t.Skip() + } + makeGetter := func() *getter { + return &getter{ + strs: map[string]string{ + "log_level": "trace", + "log_file": "", + "syslog_uri": "", + }, + bools: map[string]bool{ + "disable_file_logging": false, + "log_to_syslog": false, + "syslog_rfc": true, + "log_to_console": false, + "log_format_json": true, + }, + } + } + + t.Run("log_file config", func(t *testing.T) { + params := LogForDaemon("TEST", "log_file", "unused") + g := makeGetter() + g.strs["log_file"] = "/foo/bar" + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "/foo/bar", params.logFileFn(g)) + require.Equal(t, "", params.logSyslogURIFn(g)) + require.Equal(t, true, params.logSyslogRFCFn(g)) + require.Equal(t, false, params.logToConsoleFn(g)) + require.Equal(t, true, params.logFormatJSONFn(g)) + }) + + t.Run("log_file default", func(t *testing.T) { + params := LogForDaemon("TEST", "log_file", "/default/log") + g := makeGetter() + g.strs["log_file"] = "" + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "/default/log", params.logFileFn(g)) + require.Equal(t, "", params.logSyslogURIFn(g)) + require.Equal(t, true, params.logSyslogRFCFn(g)) + require.Equal(t, false, params.logToConsoleFn(g)) + require.Equal(t, true, params.logFormatJSONFn(g)) + }) + + t.Run("disable_file_logging", func(t *testing.T) { + params := LogForDaemon("TEST", "log_file", "/default/log") + g := makeGetter() + g.bools["disable_file_logging"] = true + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "", params.logFileFn(g)) + require.Equal(t, "", params.logSyslogURIFn(g)) + require.Equal(t, true, params.logSyslogRFCFn(g)) + require.Equal(t, false, params.logToConsoleFn(g)) + require.Equal(t, true, params.logFormatJSONFn(g)) + }) + + t.Run("log to syslog", func(t *testing.T) { + params := LogForDaemon("TEST", "log_file", "/default/log") + g := makeGetter() + g.bools["log_to_syslog"] = true + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "/default/log", params.logFileFn(g)) + require.Equal(t, "unixgram:///dev/log", params.logSyslogURIFn(g)) + require.Equal(t, true, params.logSyslogRFCFn(g)) + require.Equal(t, false, params.logToConsoleFn(g)) + require.Equal(t, true, params.logFormatJSONFn(g)) + }) + + t.Run("log to syslog with uri", func(t *testing.T) { + params := LogForDaemon("TEST", "log_file", "/default/log") + g := makeGetter() + g.bools["log_to_syslog"] = true + g.strs["syslog_uri"] = "test:///" + require.Equal(t, "TEST", params.loggerName) + require.Equal(t, "trace", params.logLevelFn(g)) + require.Equal(t, "/default/log", params.logFileFn(g)) + require.Equal(t, "test:///", params.logSyslogURIFn(g)) + require.Equal(t, true, params.logSyslogRFCFn(g)) + require.Equal(t, false, params.logToConsoleFn(g)) + require.Equal(t, true, params.logFormatJSONFn(g)) + }) +} + +func TestLogToFile(t *testing.T) { + params := LogForOneShot("TEST", "trace", true) + params.LogToFile("/some/file") + g := &getter{} + + require.Equal(t, "/some/file", params.logFileFn(g)) +} diff --git a/devenv/scripts/Install-DevEnv.ps1 b/devenv/scripts/Install-DevEnv.ps1 index 5e2c0d50edff1..35dcea54a2eef 100644 --- a/devenv/scripts/Install-DevEnv.ps1 +++ b/devenv/scripts/Install-DevEnv.ps1 @@ -45,11 +45,11 @@ Write-Host -ForegroundColor Yellow -BackgroundColor DarkGreen '- Installing Gola $ErrorActionPreference = 'Stop' $ProgressPreference = 'SilentlyContinue' -Write-Host -ForegroundColor Green "Installing go 1.18.8" +Write-Host -ForegroundColor Green "Installing go 1.18.9" -$gozip = "https://dl.google.com/go/go1.18.8.windows-amd64.zip" +$gozip = "https://dl.google.com/go/go1.18.9.windows-amd64.zip" if ($Env:TARGET_ARCH -eq "x86") { - $gozip = "https://dl.google.com/go/go1.18.8.windows-386.zip" + $gozip = "https://dl.google.com/go/go1.18.9.windows-386.zip" } $out = 'c:\go.zip' diff --git a/docs/cloud-workload-security/agent_expressions.md b/docs/cloud-workload-security/agent_expressions.md index 4d221b3604b40..4366ef01888e4 100644 --- a/docs/cloud-workload-security/agent_expressions.md +++ b/docs/cloud-workload-security/agent_expressions.md @@ -4,7 +4,7 @@ kind: documentation description: "Agent expression attributes and operators for Cloud Workload Security Rules" disable_edit: true further_reading: -- link: "/security_platform/cloud_workload_security/getting_started/" +- link: "/security/cloud_workload_security/getting_started/" tag: "Documentation" text: "Get started with Datadog Cloud Workload Security" --- @@ -44,6 +44,7 @@ Triggers are events that correspond to types of activity seen by the system. The | `load_module` | Kernel | A new kernel module was loaded | 7.35 | | `mkdir` | File | A directory was created | 7.27 | | `mmap` | Kernel | A mmap command was executed | 7.35 | +| `mount` | File | [Experimental] A filesystem was mounted | 7.42 | | `mprotect` | Kernel | A mprotect command was executed | 7.35 | | `open` | File | A file was opened | 7.27 | | `ptrace` | Kernel | A ptrace command was executed | 7.35 | @@ -745,6 +746,19 @@ A mmap command was executed | `mmap.protection` | int | memory segment protection | Protection constants | | `mmap.retval` | int | Return value of the syscall | Error Constants | +### Event `mount` + +_This event type is experimental and may change in the future._ + +A filesystem was mounted + +| Property | Type | Definition | Constants | +| -------- | ---- | ---------- | --------- | +| `mount.fs_type` | string | Type of the mounted file system | | +| `mount.mountpoint.path` | string | Path of the mount point | | +| `mount.retval` | int | Return value of the syscall | Error Constants | +| `mount.source.path` | string | Source path of a bind mount | | + ### Event `mprotect` A mprotect command was executed diff --git a/docs/cloud-workload-security/backend.md b/docs/cloud-workload-security/backend.md index 5b6b9f8f26be8..f9c5dc8f1a66d 100644 --- a/docs/cloud-workload-security/backend.md +++ b/docs/cloud-workload-security/backend.md @@ -541,6 +541,56 @@ CWS logs have the following JSON schema: ], "description": "ModuleEventSerializer serializes a module event to JSON" }, + "MountEvent": { + "properties": { + "mountpoint": { + "$ref": "#/$defs/File" + }, + "source": { + "$ref": "#/$defs/File" + }, + "mount_id": { + "type": "integer" + }, + "group_id": { + "type": "integer" + }, + "parent_mount_id": { + "type": "integer" + }, + "bind_src_mount_id": { + "type": "integer" + }, + "device": { + "type": "integer" + }, + "fs_type": { + "type": "string" + }, + "mountpoint_path": { + "type": "string" + }, + "mountsource_path": { + "type": "string" + }, + "mountpoint_path_error": { + "type": "string" + }, + "mountsource_path_error": { + "type": "string" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "mount_id", + "group_id", + "parent_mount_id", + "bind_src_mount_id", + "device" + ], + "description": "MountEventSerializer serializes a mount event to JSON" + }, "NetworkContext": { "properties": { "device": { @@ -1108,6 +1158,9 @@ CWS logs have the following JSON schema: "exit": { "$ref": "#/$defs/ExitEvent" }, + "mount": { + "$ref": "#/$defs/MountEvent" + }, "usr": { "$ref": "#/$defs/UserContext" }, @@ -1148,6 +1201,7 @@ CWS logs have the following JSON schema: | `network` | $ref | Please see [NetworkContext](#networkcontext) | | `bind` | $ref | Please see [BindEvent](#bindevent) | | `exit` | $ref | Please see [ExitEvent](#exitevent) | +| `mount` | $ref | Please see [MountEvent](#mountevent) | | `usr` | $ref | Please see [UserContext](#usercontext) | | `process` | $ref | Please see [ProcessContext](#processcontext) | | `dd` | $ref | Please see [DDContext](#ddcontext) | @@ -1961,6 +2015,69 @@ CWS logs have the following JSON schema: | `loaded_from_memory` | indicates if a module was loaded from memory, as opposed to a file | +## `MountEvent` + + +{{< code-block lang="json" collapsible="true" >}} +{ + "properties": { + "mountpoint": { + "$ref": "#/$defs/File" + }, + "source": { + "$ref": "#/$defs/File" + }, + "mount_id": { + "type": "integer" + }, + "group_id": { + "type": "integer" + }, + "parent_mount_id": { + "type": "integer" + }, + "bind_src_mount_id": { + "type": "integer" + }, + "device": { + "type": "integer" + }, + "fs_type": { + "type": "string" + }, + "mountpoint_path": { + "type": "string" + }, + "mountsource_path": { + "type": "string" + }, + "mountpoint_path_error": { + "type": "string" + }, + "mountsource_path_error": { + "type": "string" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "mount_id", + "group_id", + "parent_mount_id", + "bind_src_mount_id", + "device" + ], + "description": "MountEventSerializer serializes a mount event to JSON" +} + +{{< /code-block >}} + + +| References | +| ---------- | +| [File](#file) | +| [File](#file) | + ## `NetworkContext` @@ -2748,5 +2865,5 @@ CWS logs have the following JSON schema: -[1]: /security_platform/cloud_workload_security/ -[2]: /security_platform/cloud_workload_security/agent_expressions +[1]: /security/cloud_workload_security/ +[2]: /security/cloud_workload_security/agent_expressions diff --git a/docs/cloud-workload-security/backend.schema.json b/docs/cloud-workload-security/backend.schema.json index 1bcbcc1160f59..1f775da3f71c4 100644 --- a/docs/cloud-workload-security/backend.schema.json +++ b/docs/cloud-workload-security/backend.schema.json @@ -525,6 +525,56 @@ ], "description": "ModuleEventSerializer serializes a module event to JSON" }, + "MountEvent": { + "properties": { + "mountpoint": { + "$ref": "#/$defs/File" + }, + "source": { + "$ref": "#/$defs/File" + }, + "mount_id": { + "type": "integer" + }, + "group_id": { + "type": "integer" + }, + "parent_mount_id": { + "type": "integer" + }, + "bind_src_mount_id": { + "type": "integer" + }, + "device": { + "type": "integer" + }, + "fs_type": { + "type": "string" + }, + "mountpoint_path": { + "type": "string" + }, + "mountsource_path": { + "type": "string" + }, + "mountpoint_path_error": { + "type": "string" + }, + "mountsource_path_error": { + "type": "string" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "mount_id", + "group_id", + "parent_mount_id", + "bind_src_mount_id", + "device" + ], + "description": "MountEventSerializer serializes a mount event to JSON" + }, "NetworkContext": { "properties": { "device": { @@ -1092,6 +1142,9 @@ "exit": { "$ref": "#/$defs/ExitEvent" }, + "mount": { + "$ref": "#/$defs/MountEvent" + }, "usr": { "$ref": "#/$defs/UserContext" }, diff --git a/docs/cloud-workload-security/scripts/templates/agent_expressions.md b/docs/cloud-workload-security/scripts/templates/agent_expressions.md index 79f4aacb010e7..f98858e758359 100644 --- a/docs/cloud-workload-security/scripts/templates/agent_expressions.md +++ b/docs/cloud-workload-security/scripts/templates/agent_expressions.md @@ -4,7 +4,7 @@ kind: documentation description: "Agent expression attributes and operators for Cloud Workload Security Rules" disable_edit: true further_reading: -- link: "/security_platform/cloud_workload_security/getting_started/" +- link: "/security/cloud_workload_security/getting_started/" tag: "Documentation" text: "Get started with Datadog Cloud Workload Security" --- diff --git a/docs/cloud-workload-security/scripts/templates/backend.md b/docs/cloud-workload-security/scripts/templates/backend.md index 9076ca2183ac0..6c3d656738d7c 100644 --- a/docs/cloud-workload-security/scripts/templates/backend.md +++ b/docs/cloud-workload-security/scripts/templates/backend.md @@ -56,5 +56,5 @@ CWS logs have the following JSON schema: {% endfor %} -[1]: /security_platform/cloud_workload_security/ -[2]: /security_platform/cloud_workload_security/agent_expressions +[1]: /security/cloud_workload_security/ +[2]: /security/cloud_workload_security/agent_expressions diff --git a/docs/cloud-workload-security/secl.json b/docs/cloud-workload-security/secl.json index d2088c01a40cb..4eb70a4f10288 100644 --- a/docs/cloud-workload-security/secl.json +++ b/docs/cloud-workload-security/secl.json @@ -3063,6 +3063,39 @@ } ] }, + { + "name": "mount", + "definition": "A filesystem was mounted", + "type": "File", + "from_agent_version": "7.42", + "experimental": true, + "properties": [ + { + "name": "mount.fs_type", + "type": "string", + "definition": "Type of the mounted file system", + "constants": "" + }, + { + "name": "mount.mountpoint.path", + "type": "string", + "definition": "Path of the mount point", + "constants": "" + }, + { + "name": "mount.retval", + "type": "int", + "definition": "Return value of the syscall", + "constants": "Error Constants" + }, + { + "name": "mount.source.path", + "type": "string", + "definition": "Source path of a bind mount", + "constants": "" + } + ] + }, { "name": "mprotect", "definition": "A mprotect command was executed", diff --git a/docs/components/README.md b/docs/components/README.md index ae630d11f4f71..280d86a4b8871 100644 --- a/docs/components/README.md +++ b/docs/components/README.md @@ -9,3 +9,4 @@ * [Defining Apps and Binaries](./defining-apps.md) * [Registrations](./registrations.md) * [Subscriptions](./subscriptions.md) + * [Migrating to components](./migrating-to-components.md) diff --git a/docs/components/migrating-to-components.md b/docs/components/migrating-to-components.md new file mode 100644 index 0000000000000..b6c5b47a59c0f --- /dev/null +++ b/docs/components/migrating-to-components.md @@ -0,0 +1,89 @@ +# Migrating to Components + +After your component has been created you can link it to other components such as flares (other like status pages, or health will come later). + +This page documents how to fully integrate your component in the Agent life cycle. + +## Flare + +The general idea is to register a callback within your component to be called each time a flare is created. This use fx +groups under the hood, but helpers are there to abstract all of that for you. + +Then, migrate the code related to your component's domain from `pkg/flare` to your component and delete it from `pkg/flare` once done. + +### Creating a callback + +To add data to a flare you will first need to register a callback, aka a `FlareBuilder`. + +Within your component create a method with the following signature `func (c *yourComp) fillFlare(fb flarehelpers.FlareBuilder) error`. + +This function is called every time the Agent generates a flare, either from the CLI or from the running Agent. This +callback receives a `comp/core/flare/helpers:FlareBuilder`. The `FlareBuilder` interface provides all the +helpers functions needed to add data to a flare (adding files, copying directories, scrubbing data, and so on). + +Example: + +```golang +import ( + yaml "gopkg.in/yaml.v2" + + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" +) + +func (c *myComponent) fillFlare(fb flarehelpers.FlareBuilder) error { + fb.AddFileFromFunc( + "runtime_config_dump.yaml", + func () ([]byte, error) { + return yaml.Marshal(c.AllSettings()) + }, + ) + + fb.CopyFile("/etc/datadog-agent/datadog.yaml") + return nil +} +``` + +Read the package documentation for `FlareBuilder` for more information on the API. + +All errors returned by the `FlareBuilder` are automatically added to a log file shipped within the flare. Ship as much +data as possible in a flare instead of stopping at the first error. Returning an error does not stop the flare from +being created or sent. + +While you can register multiple callbacks from the same component, keep all the flare code in a single callback. + +### Register your callback + +Now you need to register you callback to be called each time a flare is created. To do so your component constructor +need to provide a new `comp/core/flare/helpers:Provider`. Use `comp/core/flare/helpers:NewProvider` for this. + +Example: +```golang +import ( + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" +) + +type provides struct { + fx.Out + + // [...] + FlareProvider flarehelpers.Provider // Your component will provides a new FlareProvider + // [...] +} + +func newComponent(deps dependencies) (provides, error) { + // [...] + return provides{ + // [...] + FlareProvider: flarehelpers.NewProvider(myComponent.fillFlare), // NewProvider will wrap your callback in order to be use as a 'FlareProvider' + // [...] + }, nil +} +``` + +### Migrating your code + +Now migrate the require code from `pkg/flare` to you component callback. The code in `pkg/flare` already uses the +`FlareBuilder` interface, simplifying migration. Don't forget to migrate the tests too and expand them (most of the +flare features are not tested). `flarehelpers.NewFlareBuilderMock` will provides helpers for your tests. + +Keep in mind that the goal is to delete `pkg/flare` once the migration to component is done. diff --git a/docs/dev/agent_dev_env.md b/docs/dev/agent_dev_env.md index b009c562eeac2..eaf0aa911a7bc 100644 --- a/docs/dev/agent_dev_env.md +++ b/docs/dev/agent_dev_env.md @@ -1,6 +1,8 @@ -# Linux and MacOS Development Environments +# Development Environments -## Python +## Linux and MacOS + +### Python The Agent embeds a full-fledged CPython interpreter so it requires the development files to be available in the dev env. The Agent can embed Python2 @@ -28,7 +30,7 @@ sudo apt-get install python3.8-dev On Windows, install Python 2.7 and/or 3.8 via the [official installer](https://www.python.org/downloads/). -### Additional Windows Tools +#### Additional Windows Tools You will also need the Visual Studio for [Visual Studio for Python installer](http://aka.ms/vcpython27) Download the [gcc toolchain](http://win-builds.org/). @@ -37,9 +39,9 @@ Download the [gcc toolchain](http://win-builds.org/). - Add installation folder to the `%PATH%`. -### Python Dependencies +#### Python Dependencies -#### Preface +##### Preface To protect and isolate your system-wide python installation, a python virtual environment is _highly_ recommended (though optional). It will help keep a @@ -66,7 +68,7 @@ though). PYTHONPATH="./venv/lib/python3.8/site-packages:$PYTHONPATH" ./agent run ... ``` -### Invoke +#### Invoke [Invoke](http://www.pyinvoke.org/) is a task runner written in Python that is extensively used in this project to orchestrate builds and test @@ -91,9 +93,9 @@ are used in the official build. Such values are listed in the `invoke.yaml` file at the root of this repo and can be overridden by setting `INVOKE_*` env variables (see Invoke docs for more details). -## Golang +### Golang -You must [install Golang](https://golang.org/doc/install) version `1.18.8` or +You must [install Golang](https://golang.org/doc/install) version `1.18.9` or higher. Make sure that `$GOPATH/bin` is in your `$PATH` otherwise `invoke` cannot use any additional tool it might need. @@ -102,18 +104,18 @@ specified in our build images (see e.g. [here](https://github.com/DataDog/datado may not be able to build the agent and/or the [rtloader](https://github.com/DataDog/datadog-agent/tree/main/rtloader) binary properly.** -## Installing tooling +### Installing tooling From the root of `datadog-agent`, run `invoke install-tools` to install go tooling. This uses `go` to install the necessary dependencies. -## System or Embedded? +### System or Embedded? When working on the Agent codebase you can choose among two different ways to build the binary, informally named _System_ and _Embedded_ builds. For most contribution scenarios you should rely on the System build (the default) and use the Embedded one only for specific use cases. Let's explore the differences. -### System build +#### System build _System_ builds use your operating system's standard system libraries to satisfy the Agent's external dependencies. Since, for example, macOS 10.11 may provide a @@ -126,7 +128,7 @@ sure you have system copies of all the Agent's dependencies, skip the _Embedded build_ section below and read on to see how to install them via your usual package manager (apt, yum, brew, etc). -### Embedded build +#### Embedded build _Embedded_ builds download specifically-versioned dependencies and compile them locally from sources. We run Embedded builds to create Datadog's official Agent @@ -146,7 +148,7 @@ and build dependencies, so you need a recent `ruby` environment with `bundler` installed. See [how to build Agent packages with Omnibus][agent-omnibus] for more details. -### Systemd +#### Systemd The agent is able to collect systemd journal logs using a wrapper on the systemd utility library. @@ -160,7 +162,7 @@ On Redhat/CentOS: sudo yum install systemd-devel ``` -## Docker +### Docker If you want to build a Docker image containing the Agent, or if you wan to run [system and integration tests][testing] you need to run a recent version of Docker in your @@ -173,7 +175,7 @@ dev environment. [integrations-core]: https://github.com/DataDog/integrations-core [datadog_checks_base]: https://github.com/DataDog/integrations-core/tree/master/datadog_checks_base -## Doxygen +### Doxygen We use [Doxygen](http://www.doxygen.nl/) to generate the documentation for the `rtloader` part of the Agent. @@ -182,11 +184,11 @@ Alternatively, you can use already-compiled Doxygen binaries from [here](http:// To get the dependency graphs, you may also need to install the `dot` executable from [graphviz](http://www.graphviz.org/) and add it to your `$PATH`. -## Pre-commit hooks +### Pre-commit hooks It is optional but recommended to install `pre-commit` to run a number of checks done by the CI locally. -### Installation +#### Installation To install it, run: @@ -204,11 +206,11 @@ inv install-shellcheck --destination (by default, the shellcheck binary is installed in `/usr/local/bin`). -### Skipping `pre-commit` +#### Skipping `pre-commit` If you want to skip `pre-commit` for a specific commit you can add `--no-verify` to the `git commit` command. -### Running `pre-commit` manually +#### Running `pre-commit` manually If you want to run one of the checks manually, you can run `pre-commit run `. @@ -219,10 +221,24 @@ pre-commit run flake8 --all-files # run flake8 on all files See `pre-commit run --help` for further options. -# Setting up your Windows development environment +### Setting up Visual Studio Code Dev Container + +[Microsoft Visual Studio Code](https://code.visualstudio.com/download) with the [devcontainer plugin](https://code.visualstudio.com/docs/remote/containers) allow to use a container as remote development environment in vscode. It simplify and isolate +the dependencies needed to develop in this repository. + +To configure the vscode editor to use a container as remote development environment you need to: + +- Install the [devcontainer plugin](https://code.visualstudio.com/docs/remote/containers) and the [golang language plugin](https://code.visualstudio.com/docs/languages/go). +- Run the following invoke command `invoke vscode.setup-devcontainer --image ""`. + This command will create the devcontainer configuration file `./devcontainer/devcontainer.json`. +- Start or restart your vscode editor. +- A pop-up should show-up to propose to "reopen in container" your workspace. +- The first start, it might propose you to install the golang plugin dependencies/tooling. + +## Windows development environment -## Code editor +### Code editor [Microsoft Visual Studio Code](https://code.visualstudio.com/download) is recommended as it's lightweight and versatile. -Building on Windows would require multiple 3rd-party softwares to be installed. To avoid the complexity, it is recommended to make the code change in VS Code then do the build in Docker image. For complete information, see [Build the Agent packages](https://github.com/DataDog/datadog-agent/blob/main/docs/dev/agent_omnibus.md) +Building on Windows requires multiple 3rd-party software to be installed. To avoid the complexity, Datadog recommends to make the code change in VS Code, and then do the build in Docker image. For complete information, see [Build the Agent packages](https://github.com/DataDog/datadog-agent/blob/main/docs/dev/agent_omnibus.md) diff --git a/go.mod b/go.mod index d576e3f78e98b..46308092aafb4 100644 --- a/go.mod +++ b/go.mod @@ -20,10 +20,8 @@ replace ( github.com/cihub/seelog => github.com/cihub/seelog v0.0.0-20151216151435-d2c6e5aa9fbf // v2.6 github.com/coreos/go-systemd => github.com/coreos/go-systemd v0.0.0-20180202092358-40e2722dffea github.com/docker/distribution => github.com/docker/distribution v2.8.1+incompatible - github.com/lxn/walk => github.com/lxn/walk v0.0.0-20180521183810-02935bac0ab8 github.com/mholt/archiver => github.com/mholt/archiver v2.0.1-0.20171012052341-26cf5bb32d07+incompatible github.com/spf13/cast => github.com/DataDog/cast v1.3.1-0.20190301154711-1ee8c8bd14a3 - github.com/theupdateframework/go-tuf => github.com/DataDog/go-tuf v0.3.0--fix-localmeta github.com/ugorji/go => github.com/ugorji/go v1.1.7 ) @@ -43,19 +41,20 @@ require ( code.cloudfoundry.org/bbs v0.0.0-20200403215808-d7bc971db0db code.cloudfoundry.org/garden v0.0.0-20210208153517-580cadd489d2 code.cloudfoundry.org/lager v2.0.0+incompatible - github.com/DataDog/agent-payload/v5 v5.0.44-0.20221207141804-f43438fb6c0c - github.com/DataDog/datadog-agent/pkg/obfuscate v0.41.0-rc.3 - github.com/DataDog/datadog-agent/pkg/otlp/model v0.41.0-rc.3 - github.com/DataDog/datadog-agent/pkg/quantile v0.41.0-rc.3 - github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.41.0-rc.3 - github.com/DataDog/datadog-agent/pkg/security/secl v0.41.0-rc.3 - github.com/DataDog/datadog-agent/pkg/trace v0.41.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/cgroups v0.41.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.41.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.41.0-rc.3 + github.com/DataDog/agent-payload/v5 v5.0.61 + github.com/DataDog/datadog-agent/pkg/obfuscate v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/otlp/model v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/quantile v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/security/secl v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/trace v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/cgroups v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.42.0-rc.3 github.com/DataDog/datadog-go/v5 v5.1.1 github.com/DataDog/datadog-operator v0.7.1-0.20220602134901-4f6af09bf54f github.com/DataDog/ebpf-manager v0.1.0 + github.com/DataDog/go-tuf v0.3.0--fix-localmeta-fork github.com/DataDog/gohai v0.0.0-20221116153829-5d479901d2e9 github.com/DataDog/gopsutil v1.2.2 github.com/DataDog/nikos v1.10.0 @@ -72,7 +71,7 @@ require ( github.com/alecthomas/participle v0.7.1 github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1 github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 - github.com/avast/retry-go/v4 v4.3.1 + github.com/avast/retry-go/v4 v4.3.2 github.com/aws/aws-lambda-go v1.32.0 github.com/aws/aws-sdk-go v1.44.117 github.com/beevik/ntp v0.3.0 @@ -128,11 +127,11 @@ require ( github.com/imdario/mergo v0.3.13 github.com/invopop/jsonschema v0.7.0 github.com/iovisor/gobpf v0.2.0 - github.com/itchyny/gojq v0.12.10 + github.com/itchyny/gojq v0.12.11 github.com/json-iterator/go v1.1.12 github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 - github.com/lxn/walk v0.0.0-20191128110447-55ccb3a9f5c1 - github.com/lxn/win v0.0.0-20191128105842-2da648fda5b4 + github.com/lxn/walk v0.0.0-20210112085537-c389da54e794 + github.com/lxn/win v0.0.0-20210218163916-a377121e959e github.com/mailru/easyjson v0.7.7 github.com/mdlayher/netlink v1.6.2 github.com/mholt/archiver/v3 v3.5.1 @@ -144,7 +143,7 @@ require ( github.com/olekukonko/tablewriter v0.0.5 github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 github.com/open-policy-agent/opa v0.45.0 - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.64.0 + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.68.0 github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 github.com/openshift/api v3.9.0+incompatible @@ -165,7 +164,6 @@ require ( github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.8.1 github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 - github.com/theupdateframework/go-tuf v0.3.0 github.com/tinylib/msgp v1.1.6 github.com/twmb/murmur3 v1.1.6 github.com/urfave/negroni v1.0.0 @@ -176,26 +174,27 @@ require ( github.com/xeipuuv/gojsonschema v1.2.0 go.etcd.io/bbolt v1.3.6 go.etcd.io/etcd/client/v2 v2.306.0-alpha.0 - go.opentelemetry.io/collector v0.66.0 - go.opentelemetry.io/collector/component v0.66.0 - go.opentelemetry.io/collector/exporter/loggingexporter v0.66.0 - go.opentelemetry.io/collector/exporter/otlpexporter v0.66.0 - go.opentelemetry.io/collector/pdata v0.66.0 - go.opentelemetry.io/collector/processor/batchprocessor v0.66.0 - go.opentelemetry.io/collector/receiver/otlpreceiver v0.66.0 + go.opentelemetry.io/collector v0.68.0 + go.opentelemetry.io/collector/component v0.68.0 + go.opentelemetry.io/collector/confmap v0.68.0 + go.opentelemetry.io/collector/exporter/loggingexporter v0.68.0 + go.opentelemetry.io/collector/exporter/otlpexporter v0.68.0 + go.opentelemetry.io/collector/pdata v1.0.0-rc2 + go.opentelemetry.io/collector/processor/batchprocessor v0.68.0 + go.opentelemetry.io/collector/receiver/otlpreceiver v0.68.0 go.uber.org/atomic v1.10.0 go.uber.org/automaxprocs v1.5.1 - go.uber.org/multierr v1.8.0 - go.uber.org/zap v1.23.0 + go.uber.org/multierr v1.9.0 + go.uber.org/zap v1.24.0 go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4 golang.org/x/exp v0.0.0-20221114191408-850992195362 - golang.org/x/net v0.2.0 + golang.org/x/net v0.4.0 golang.org/x/sync v0.1.0 golang.org/x/sys v0.3.0 - golang.org/x/text v0.4.0 + golang.org/x/text v0.6.0 golang.org/x/time v0.0.0-20220411224347-583f2d630306 - golang.org/x/tools v0.3.0 + golang.org/x/tools v0.4.0 google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c google.golang.org/grpc v1.51.0 google.golang.org/grpc/examples v0.0.0-20221020162917-9127159caf5a @@ -277,7 +276,7 @@ require ( github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect github.com/emicklei/go-restful v2.16.0+incompatible // indirect github.com/emicklei/go-restful-swagger12 v0.0.0-20201014110547-68ccff494617 // indirect - github.com/evanphx/json-patch v4.12.0+incompatible // indirect + github.com/evanphx/json-patch v4.12.0+incompatible github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fsnotify/fsnotify v1.6.0 github.com/ghodss/yaml v1.0.0 // indirect @@ -321,7 +320,7 @@ require ( github.com/josharian/native v1.0.0 // indirect github.com/karrick/godirwalk v1.17.0 // indirect github.com/kjk/lzma v0.0.0-20161016003348-3fd93898850d // indirect - github.com/klauspost/compress v1.15.12 // indirect + github.com/klauspost/compress v1.15.13 // indirect github.com/klauspost/pgzip v1.2.5 // indirect github.com/knadh/koanf v1.4.4 // indirect github.com/libp2p/go-reuseport v0.1.0 // indirect @@ -330,7 +329,7 @@ require ( github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.16 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect github.com/mdlayher/socket v0.2.3 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect @@ -355,16 +354,17 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/prometheus/client_model v0.3.0 - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 + github.com/prometheus/common v0.38.0 // indirect + github.com/prometheus/procfs v0.9.0 github.com/prometheus/statsd_exporter v0.22.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rivo/uniseg v0.2.0 // indirect + github.com/rogpeppe/go-internal v1.8.1 // indirect github.com/rs/cors v1.8.2 // indirect github.com/sassoftware/go-rpmutils v0.2.0 // indirect - github.com/secure-systems-lab/go-securesystemslib v0.3.1 + github.com/secure-systems-lab/go-securesystemslib v0.4.0 github.com/shopspring/decimal v1.2.0 // indirect - github.com/skydive-project/go-debouncer v1.0.0 // indirect + github.com/skydive-project/go-debouncer v1.0.0 github.com/smira/go-ftp-protocol v0.0.0-20140829150050-066b75c2b70d // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/stretchr/objx v0.5.0 // indirect @@ -393,32 +393,31 @@ require ( go.etcd.io/etcd/client/v3 v3.6.0-alpha.0 // indirect go.etcd.io/etcd/server/v3 v3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/collector/consumer v0.66.0 // indirect - go.opentelemetry.io/collector/featuregate v0.66.0 // indirect - go.opentelemetry.io/collector/semconv v0.66.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.36.4 // indirect - go.opentelemetry.io/contrib/propagators/b3 v1.11.1 // indirect - go.opentelemetry.io/otel v1.11.1 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.33.0 // indirect - go.opentelemetry.io/otel/metric v0.33.0 // indirect - go.opentelemetry.io/otel/sdk v1.11.1 // indirect - go.opentelemetry.io/otel/sdk/metric v0.33.0 // indirect - go.opentelemetry.io/otel/trace v1.11.1 // indirect + go.opentelemetry.io/collector/consumer v0.68.0 // indirect + go.opentelemetry.io/collector/featuregate v0.68.0 // indirect + go.opentelemetry.io/collector/semconv v0.68.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0 // indirect + go.opentelemetry.io/contrib/propagators/b3 v1.12.0 // indirect + go.opentelemetry.io/otel v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.34.0 // indirect + go.opentelemetry.io/otel/metric v0.34.0 // indirect + go.opentelemetry.io/otel/sdk v1.11.2 // indirect + go.opentelemetry.io/otel/sdk/metric v0.34.0 // indirect + go.opentelemetry.io/otel/trace v1.11.2 // indirect go.uber.org/dig v1.15.0 go.uber.org/fx v1.18.2 golang.org/x/crypto v0.3.0 // indirect golang.org/x/mod v0.7.0 // indirect golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 // indirect - golang.org/x/term v0.2.0 // indirect + golang.org/x/term v0.3.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/api v0.103.0 // indirect google.golang.org/appengine v1.6.7 // indirect gopkg.in/Knetic/govaluate.v3 v3.0.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect - k8s.io/apiextensions-apiserver v0.23.5 // indirect + k8s.io/apiextensions-apiserver v0.23.5 k8s.io/component-base v0.23.8 // indirect k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c // indirect sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30 // indirect @@ -428,7 +427,22 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) -require github.com/DataDog/go-libddwaf v0.0.0-20221118110754-0372d7c76b8a +require ( + github.com/DataDog/go-libddwaf v0.0.0-20221118110754-0372d7c76b8a + github.com/go-redis/redis/v9 v9.0.0-rc.2 + github.com/streadway/amqp v1.0.0 + go.mongodb.org/mongo-driver v1.11.1 +) + +require ( + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.1.1 // indirect + github.com/xdg-go/stringprep v1.0.3 // indirect + github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect + gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect +) replace github.com/pahanini/go-grpc-bidirectional-streaming-example v0.0.0-20211027164128-cc6111af44be => github.com/DataDog/go-grpc-bidirectional-streaming-example v0.0.0-20221024060302-b9cf785c02fe diff --git a/go.sum b/go.sum index 392cafe7470db..2f1929d9fe7cf 100644 --- a/go.sum +++ b/go.sum @@ -119,8 +119,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.1.0 h1:ksErzDEI1khOiGPgpwuI7x2ebx/uXQNw7xJpn9Eq1+I= github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/agent-payload/v5 v5.0.44-0.20221207141804-f43438fb6c0c h1:EJ8IqxAAjx99POf9yFjC5NBLXvU8sX2BWI5SoRWPnck= -github.com/DataDog/agent-payload/v5 v5.0.44-0.20221207141804-f43438fb6c0c/go.mod h1:vhXPNG7eNDOLeW94Z7dLNUBv61kRBHK7vXnQ+RQfckk= +github.com/DataDog/agent-payload/v5 v5.0.61 h1:3HC4B1NpHgAedZHmM9/oCJvFo6pu/ugDAjrISK5AJsk= +github.com/DataDog/agent-payload/v5 v5.0.61/go.mod h1:oQZi1VZp1e3QvlSUX4iphZCpJaFepUxWq0hNXxihKBM= github.com/DataDog/aptly v1.5.0 h1:Oy6JVRC9iDgnmpeVYa4diXwP/exU7wJ/U1kuI4Zacxg= github.com/DataDog/aptly v1.5.0/go.mod h1:KVyvkYXGcFugxadGFZ+u5Fc3M6q/EfzFZyeTD9HVbkY= github.com/DataDog/cast v1.3.1-0.20190301154711-1ee8c8bd14a3 h1:SobA9WYm4K/MUtWlbKaomWTmnuYp1KhIm8Wlx3vmpsg= @@ -139,8 +139,8 @@ github.com/DataDog/go-grpc-bidirectional-streaming-example v0.0.0-20221024060302 github.com/DataDog/go-grpc-bidirectional-streaming-example v0.0.0-20221024060302-b9cf785c02fe/go.mod h1:90sqV0j7E8wYCyqIp5d9HmYWLTFQttqPFFtNYDyAybQ= github.com/DataDog/go-libddwaf v0.0.0-20221118110754-0372d7c76b8a h1:meBrg5ZW2Lv9S2ZtIwkSXXrzO3gV1y4dCd0DSZ+SHgY= github.com/DataDog/go-libddwaf v0.0.0-20221118110754-0372d7c76b8a/go.mod h1:4C1dtFUOavpVYXCqEQDGDXWXiu+O5TTdAHbqzRmiYSE= -github.com/DataDog/go-tuf v0.3.0--fix-localmeta h1:lM/fRQNIaJpsnLU7edjV3jYHylCym0Ah+kvoJWRTzsk= -github.com/DataDog/go-tuf v0.3.0--fix-localmeta/go.mod h1:E5XP0wXitrFUHe4b8cUcAAdxBW4LbfnqF4WXXGLgWNo= +github.com/DataDog/go-tuf v0.3.0--fix-localmeta-fork h1:yBq5PrAtrM4yVeSzQ+bn050+Ysp++RKF1QmtkL4VqvU= +github.com/DataDog/go-tuf v0.3.0--fix-localmeta-fork/go.mod h1:yA5JwkZsHTLuqq3zaRgUQf35DfDkpOZqgtBqHKpwrBs= github.com/DataDog/gohai v0.0.0-20221116153829-5d479901d2e9 h1:QBZ04VJZLtjKL4MbJbB/7/stiJVvobfZFIgFot0fB7M= github.com/DataDog/gohai v0.0.0-20221116153829-5d479901d2e9/go.mod h1:2rZHLOzPdGj56gQon9IyLVR7s18lOpUGxmErHt9HWP8= github.com/DataDog/gopsutil v1.2.2 h1:8lmthwyyCXa1NKiYcHlrtl9AAFdfbNI2gPcioCJcBPU= @@ -253,8 +253,8 @@ github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/avast/retry-go/v4 v4.3.1 h1:Mtg11F9PdAIMkMiio2RKcYauoVHjl2aB3zQJJlzD4cE= -github.com/avast/retry-go/v4 v4.3.1/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= +github.com/avast/retry-go/v4 v4.3.2 h1:x4sTEu3jSwr7zNjya8NTdIN+U88u/jtO/q3OupBoDtM= +github.com/avast/retry-go/v4 v4.3.2/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= github.com/awalterschulze/gographviz v0.0.0-20160912181450-761fd5fbb34e/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs= github.com/awalterschulze/gographviz v2.0.1+incompatible h1:XIECBRq9VPEQqkQL5pw2OtjCAdrtIgFKoJU8eT98AS8= github.com/awalterschulze/gographviz v2.0.1+incompatible/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs= @@ -503,6 +503,7 @@ github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUn github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-jump v0.0.0-20211018200510-ba001c3ffce0 h1:0wH6nO9QEa02Qx8sIQGw6ieKdz+BXjpccSOo9vXNl4U= github.com/dgryski/go-jump v0.0.0-20211018200510-ba001c3ffce0/go.mod h1:4hKCXuwrJoYvHZxJ86+bRVTOMyJ0Ej+RqfSm8mHi6KA= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g= @@ -673,6 +674,8 @@ github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4 github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-redis/redis/v7 v7.1.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= github.com/go-redis/redis/v8 v8.0.0/go.mod h1:isLoQT/NFSP7V67lyvM9GmdvLdyZ7pEhsXvvyQtnQTo= +github.com/go-redis/redis/v9 v9.0.0-rc.2 h1:IN1eI8AvJJeWHjMW/hlFAv2sAfvTun2DVksDDJ3a6a0= +github.com/go-redis/redis/v9 v9.0.0-rc.2/go.mod h1:cgBknjwcBJa2prbnuHH/4k/Mlj4r0pWNV2HBanHujfY= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= @@ -999,8 +1002,8 @@ github.com/invopop/jsonschema v0.7.0 h1:2vgQcBz1n256N+FpX3Jq7Y17AjYt46Ig3zIWyy77 github.com/invopop/jsonschema v0.7.0/go.mod h1:O9uiLokuu0+MGFlyiaqtWxwqJm41/+8Nj0lD7A36YH0= github.com/iovisor/gobpf v0.2.0 h1:34xkQxft+35GagXBk3n23eqhm0v7q0ejeVirb8sqEOQ= github.com/iovisor/gobpf v0.2.0/go.mod h1:WSY9Jj5RhdgC3ci1QaacvbFdQ8cbrEjrpiZbLHLt2s4= -github.com/itchyny/gojq v0.12.10 h1:6TcS0VYWS6wgntpF/4tnrzwdCMjiTxRAxIqZWfDsDQU= -github.com/itchyny/gojq v0.12.10/go.mod h1:o3FT8Gkbg/geT4pLI0tF3hvip5F3Y/uskjRz9OYa38g= +github.com/itchyny/gojq v0.12.11 h1:YhLueoHhHiN4mkfM+3AyJV6EPcCxKZsOnYf+aVSwaQw= +github.com/itchyny/gojq v0.12.11/go.mod h1:o3FT8Gkbg/geT4pLI0tF3hvip5F3Y/uskjRz9OYa38g= github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE= github.com/itchyny/timefmt-go v0.1.5/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= @@ -1127,8 +1130,8 @@ github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.14.2/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= -github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.13 h1:NFn1Wr8cfnenSJSA46lLq4wHCcBzKTSjnBIexDMMOV0= +github.com/klauspost/compress v1.15.13/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/crc32 v1.2.0/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= @@ -1169,10 +1172,10 @@ github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY= github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= -github.com/lxn/walk v0.0.0-20180521183810-02935bac0ab8 h1:kqUcMNgwsZClDdT80kUmq8sidJQKQS2KyQQ0DTgbqNU= -github.com/lxn/walk v0.0.0-20180521183810-02935bac0ab8/go.mod h1:E23UucZGqpuUANJooIbHWCufXvOcT6E7Stq81gU+CSQ= -github.com/lxn/win v0.0.0-20191128105842-2da648fda5b4 h1:5BmtGkQbch91lglMHQ9JIDGiYCL3kBRBA0ItZTvOcEI= -github.com/lxn/win v0.0.0-20191128105842-2da648fda5b4/go.mod h1:ouWl4wViUNh8tPSIwxTVMuS014WakR1hqvBc2I0bMoA= +github.com/lxn/walk v0.0.0-20210112085537-c389da54e794 h1:NVRJ0Uy0SOFcXSKLsS65OmI1sgCCfiDUPj+cwnH7GZw= +github.com/lxn/walk v0.0.0-20210112085537-c389da54e794/go.mod h1:E23UucZGqpuUANJooIbHWCufXvOcT6E7Stq81gU+CSQ= +github.com/lxn/win v0.0.0-20210218163916-a377121e959e h1:H+t6A/QJMbhCSEH5rAuRxh+CtW96g0Or0Fxa9IKr4uc= +github.com/lxn/win v0.0.0-20210218163916-a377121e959e/go.mod h1:KxxjdtRkfNoYDCUP5ryK7XJJNTnpC8atvtmTheChOtk= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= @@ -1224,8 +1227,9 @@ github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vq github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.2 h1:hAHbPm5IJGijwng3PWk09JkG9WeqChjprR5s9bBZ+OM= +github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= github.com/mdlayher/netlink v1.6.2 h1:D2zGSkvYsJ6NreeED3JiVTu1lj2sIYATqSaZlhPzUgQ= github.com/mdlayher/netlink v1.6.2/go.mod h1:O1HXX2sIWSMJ3Qn1BYZk1yZM+7iMki/uYGGiwGyq/iU= @@ -1291,6 +1295,7 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb h1:e+l77LJOEqXTIQihQJVkA6ZxPOUmfPM5e4H7rcpgtSk= github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= @@ -1354,12 +1359,12 @@ github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7 github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= github.com/open-policy-agent/opa v0.45.0 h1:P5nuhVRtR+e58fk3CMMbiqr6ZFyWQPNOC3otsorGsFs= github.com/open-policy-agent/opa v0.45.0/go.mod h1:/OnsYljNEWJ6DXeFOOnoGn8CvwZGMUS4iRqzYdJvmBI= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.64.0 h1:q/eqvFPeeAxZ+By7v7kZCboH0Qd8SlGoZhSJm0+Ep7I= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.64.0 h1:s+o8etLMu6wLm+iNE0A2mj71hqn1gMy/EmMvs99gpnc= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.64.0/go.mod h1:NXLo+jR2eisTG28/+UAtk7GJxdag/osWRP99PFbc0Is= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.68.0 h1:l3RvyAu1bGY9fPBl0+gFo//DAupNWxKZKYw5ZVlB/yE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.68.0 h1:7OiB9jr6Dz3zg4LmHzbqVYFT76+4dm9hI8QF50JEZf4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.68.0/go.mod h1:gxnTVPa/XgVQHXE53fFQfSBA89Pj2ISn/oBJdksBMEU= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -1471,8 +1476,9 @@ github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9 github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.38.0 h1:VTQitp6mXTdUoCmDMugDVOJ1opi6ADftKfp/yeqTR/E= +github.com/prometheus/common v0.38.0/go.mod h1:MBXfmBQZrK5XpbCkjofnXs96LD2QQ7fEq4C0xjC/yec= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1486,8 +1492,9 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0= github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= @@ -1507,8 +1514,9 @@ github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= @@ -1530,8 +1538,9 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUt github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/secure-systems-lab/go-securesystemslib v0.3.1 h1:LJuyMziazadwmQRRu1M7GMUo5S1oH1+YxU9FjuSFU8k= github.com/secure-systems-lab/go-securesystemslib v0.3.1/go.mod h1:o8hhjkbNl2gOamKUA/eNW3xUrntHT9L4W89W1nfj43U= +github.com/secure-systems-lab/go-securesystemslib v0.4.0 h1:b23VGrQhTA8cN2CbBw7/FulN9fTtqYUdS5+Oxzt+DUE= +github.com/secure-systems-lab/go-securesystemslib v0.4.0/go.mod h1:FGBZgq2tXWICsxWQW1msNf49F0Pf2Op5Htayx335Qbs= github.com/segmentio/kafka-go v0.4.29/go.mod h1:m1lXeqJtIFYZayv0shM/tjrAFljvWLTprxBHd+3PnaU= github.com/shirou/gopsutil/v3 v3.22.10 h1:4KMHdfBRYXGF9skjDWiL4RA2N+E8dRdodU/bOZpPoVg= github.com/shirou/gopsutil/v3 v3.22.10/go.mod h1:QNza6r4YQoydyCfo6rH0blGfKahgibh4dQmV5xdFkQk= @@ -1603,6 +1612,8 @@ github.com/square/certstrap v1.2.0 h1:ecgyABrbFLr8jSbOC6oTBmBek0t/HqtgrMUZCPuyfd github.com/square/certstrap v1.2.0/go.mod h1:CUHqV+fxJW0Y5UQFnnbYwQ7bpKXO1AKbic9g73799yw= github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -1726,9 +1737,14 @@ github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0 h1:3UeQBvD0TFrlVjOeLOBz+CPAI8dnbqNSVwUwRrkp7vQ= github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0/go.mod h1:IXCdmsXIht47RaVFLEdVnh1t+pgYtTAhQGj73kz+2DM= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -1747,6 +1763,7 @@ github.com/xor-gate/ar v0.0.0-20170530204233-5c72ae81e2b7/go.mod h1:TCWCUPhQU1j7 github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yashtewari/glob-intersection v0.1.0 h1:6gJvMYQlTDOL3dMsPF6J0+26vwX9MB8/1q3uAdhmTrg= github.com/yashtewari/glob-intersection v0.1.0/go.mod h1:LK7pIC3piUjovexikBbJ26Yml7g8xa5bsjfx2v1fwok= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1789,6 +1806,8 @@ go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVd go.etcd.io/etcd/server/v3 v3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1 h1:S801WVTlIcQnS+pA7srsyxgxg4qNYx4Fm/YToSDde+w= go.etcd.io/etcd/server/v3 v3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1/go.mod h1:sw82kLjlBpuhowfKyi54jk2s8qK8W4YG5EwlY/BleOY= go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw= +go.mongodb.org/mongo-driver v1.11.1 h1:QP0znIRTuL0jf1oBQoAoM0C6ZJfBK4kx0Uumtv1A7w8= +go.mongodb.org/mongo-driver v1.11.1/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -1799,63 +1818,65 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/collector v0.66.0 h1:5+0N2PCyqHoE3MYV8tgCsyeD86KbmIVDKmqKF9A7u9k= -go.opentelemetry.io/collector v0.66.0/go.mod h1:hE6jCs+0rfiufCrVPucKZTMwfHit1okfDPnwPT2eW1I= -go.opentelemetry.io/collector/component v0.66.0 h1:M2kI+BXGilmqEs8Kufo5nu0xiO+5cvwdPflV/r4pGkE= -go.opentelemetry.io/collector/component v0.66.0/go.mod h1:0c84EqXUhvYe6KW7hJfh76tiI/5yjWCH2amwyQ06XLM= -go.opentelemetry.io/collector/consumer v0.66.0 h1:wDx0MmqqsHGBcEa24HS0MlvDbLR0jT/936CSZ7vvP4M= -go.opentelemetry.io/collector/consumer v0.66.0/go.mod h1:WtoRZa5SnxQO1ZEQdVxYpFcXCmq62rakv0oUSlPO0NQ= -go.opentelemetry.io/collector/exporter/loggingexporter v0.66.0 h1:LLgWAS3zGce/H7UVB/EwPm49n3qNRbh/Gkd1IPORJDg= -go.opentelemetry.io/collector/exporter/loggingexporter v0.66.0/go.mod h1:X7fNHTbcgvOOio9QDEyVk0WbIm1JaVYby4z3VzsOc2k= -go.opentelemetry.io/collector/exporter/otlpexporter v0.66.0 h1:uXNkGlAXHyvUZL51qsQR8hS8oSt80m1ncbqwXRRkJMk= -go.opentelemetry.io/collector/exporter/otlpexporter v0.66.0/go.mod h1:IOoHR1lsV1r2TFOVctPogn9RUXT4jiU7kH+IhfUlP1w= -go.opentelemetry.io/collector/extension/zpagesextension v0.65.0 h1:T5JJIJ3cmClqdSMgkbjoIiP9p059AAvbfcd3houJkxM= -go.opentelemetry.io/collector/featuregate v0.66.0 h1:WW3IYWxOu9cfXa6fQwov0jswlf2Y/NEBHgiDkRPm4Uw= -go.opentelemetry.io/collector/featuregate v0.66.0/go.mod h1:tewuFKJYalWBU0bmNKg++MC1ipINXUr6szYzOw2p1GI= -go.opentelemetry.io/collector/pdata v0.66.0 h1:UdE5U6MsDNzuiWaXdjGx2lC3ElVqWmN/hiUE8vyvSuM= -go.opentelemetry.io/collector/pdata v0.66.0/go.mod h1:pqyaznLzk21m+1KL6fwOsRryRELL+zNM0qiVSn0MbVc= -go.opentelemetry.io/collector/processor/batchprocessor v0.66.0 h1:3GNIEOmGiVUSWljlisFGmjvIfsVKhn0OCafirS53YAs= -go.opentelemetry.io/collector/processor/batchprocessor v0.66.0/go.mod h1:XhGTsC1B/bq4gpg8IZ/QYBLXkzE4Gw3r7Xu2+ik8A1Q= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.66.0 h1:ZHEOeGOIYIDTKhI9xs30/obFfhUbb9b2+e/eahp1fJA= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.66.0/go.mod h1:pb+dcV+KJ44dP+CqV0N6L6dTeDDvCXB8StCqwlrrSkM= -go.opentelemetry.io/collector/semconv v0.66.0 h1:gz4fYzOVOt1EQCcOL6pbSmTRj93pZErjHD+H100pH+4= -go.opentelemetry.io/collector/semconv v0.66.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= +go.opentelemetry.io/collector v0.68.0 h1:+Jk+wOP1flo8hK1ozAMDr7iN5U2gnmLu1UMp7LbNx1k= +go.opentelemetry.io/collector v0.68.0/go.mod h1:cxJgs+tqF/KAxlfT+Ev9gAahcSc3j9zdpN+sGSfeCGQ= +go.opentelemetry.io/collector/component v0.68.0 h1:QkzZb8mpFHcltR1AV/WTj2N3DFA9MLHDZ8PYGFuVngU= +go.opentelemetry.io/collector/component v0.68.0/go.mod h1:3826mXASuiwSwKoCKkRLSiIndvViflYiwg4QxV/Dw7g= +go.opentelemetry.io/collector/confmap v0.68.0 h1:TYXfjHDQct9R7RW8Cfe0BOi50o7R1bnC5rlwOxa+JP0= +go.opentelemetry.io/collector/confmap v0.68.0/go.mod h1:gvG/g1eSLVHGKbRmn91g7ukfLuBx36hbuMf/ecpSzlE= +go.opentelemetry.io/collector/consumer v0.68.0 h1:TWctBeEhNZz4Vtkk4hybQkJOowEKIBFMWT3iZlvJc24= +go.opentelemetry.io/collector/consumer v0.68.0/go.mod h1:t6eNCk7ii4nPN+yMC+Wc+7FWRAnzDU7z06/RqQ9E8R0= +go.opentelemetry.io/collector/exporter/loggingexporter v0.68.0 h1:bI83kCp6mQ09efJ90bEqQwIKWB+dQ2YPckaMAlfNm3I= +go.opentelemetry.io/collector/exporter/loggingexporter v0.68.0/go.mod h1:TX0T4dExxa338akVeJHF+YIY+IutDn5UpkKIIC2Zb/s= +go.opentelemetry.io/collector/exporter/otlpexporter v0.68.0 h1:JFE3ulfQwT++BMY2Fj9qjDZ8mGnHk1Y98E779DsFPa0= +go.opentelemetry.io/collector/exporter/otlpexporter v0.68.0/go.mod h1:ht2Iup34EnVSPkSYqCjmulB+GcuV9y30wkb0FiDmUmw= +go.opentelemetry.io/collector/extension/zpagesextension v0.68.0 h1:Y/EDCLKJO6nggpvqs1uKu+jrZCL4UD4TjCpM3MRM0pM= +go.opentelemetry.io/collector/featuregate v0.68.0 h1:weK0hx7VTDChvIXO7/BUUiJvOlQpB8wMCeUc0XNYJ/Y= +go.opentelemetry.io/collector/featuregate v0.68.0/go.mod h1:tewuFKJYalWBU0bmNKg++MC1ipINXUr6szYzOw2p1GI= +go.opentelemetry.io/collector/pdata v1.0.0-rc2 h1:sNWuA5wlrT578sv+DhADQ3DCRFG+5+H0D2xCHtQmnis= +go.opentelemetry.io/collector/pdata v1.0.0-rc2/go.mod h1:3gknzI1BqPVbEprOIbtaPQgPAYvjRf8kdkpGMJjv14E= +go.opentelemetry.io/collector/processor/batchprocessor v0.68.0 h1:DWPFd83KRrLp1zO7j/SB3jRK+pma8XjAIZS+k6z/YqU= +go.opentelemetry.io/collector/processor/batchprocessor v0.68.0/go.mod h1:4hGQ8EB2zkEASePuyA84RtQvCDgqSVRDbavqMROv3KY= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.68.0 h1:E+MEOguE/oXwgcDL9WDE8hd1LOoWKWtHRENmUgfZpNU= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.68.0/go.mod h1:gWzZ44PCS/RoPlpvWoEIYZDYz3FpCLFdZ6uXTOIV4Dw= +go.opentelemetry.io/collector/semconv v0.68.0 h1:DUDowH6l4OFlecQg8zyffTmUrhu3N9qwr3wtS9Oy6pE= +go.opentelemetry.io/collector/semconv v0.68.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= go.opentelemetry.io/contrib v0.20.0 h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0= go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4 h1:PRXhsszxTt5bbPriTjmaweWUsAnJYeWBhUMLRetUgBU= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4/go.mod h1:05eWWy6ZWzmpeImD3UowLTB3VjDMU1yxQ+ENuVWDM3c= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0 h1:+uFejS4DCfNH6d3xODVIGsdhzgzhh45p9gpbHQMbdZI= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0/go.mod h1:HSmzQvagH8pS2/xrK7ScWsk0vAMtRTGbMFgInXCi8Tc= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.36.4 h1:aUEBEdCa6iamGzg6fuYxDA8ThxvOG240mAvWDU+XLio= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.36.4/go.mod h1:l2MdsbKTocpPS5nQZscqTR9jd8u96VYZdcpF8Sye7mA= -go.opentelemetry.io/contrib/propagators/b3 v1.11.1 h1:icQ6ttRV+r/2fnU46BIo/g/mPu6Rs5Ug8Rtohe3KqzI= -go.opentelemetry.io/contrib/propagators/b3 v1.11.1/go.mod h1:ECIveyMXgnl4gorxFcA7RYjJY/Ql9n20ubhbfDc3QfA= -go.opentelemetry.io/contrib/zpages v0.36.4 h1:Z2VK5WsDhWs9VwZ1p0TM5RyusTOgAQfdMMDDQPRnlmY= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0 h1:yt2NKzK7Vyo6h0+X8BA4FpreZQTlVEIarnsBP/H5mzs= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0/go.mod h1:+ARmXlUlc51J7sZeCBkBJNdHGySrdOzgzxp6VWRWM1U= +go.opentelemetry.io/contrib/propagators/b3 v1.12.0 h1:OtfTF8bneN8qTeo/j92kcvc0iDDm4bm/c3RzaUJfiu0= +go.opentelemetry.io/contrib/propagators/b3 v1.12.0/go.mod h1:0JDB4elfPUWGsCH/qhaMkDzP1l8nB0ANVx8zXuAYEwg= +go.opentelemetry.io/contrib/zpages v0.37.0 h1:lFEw7jgrW75kZ40gkXtywV0jTJt8q7w85oTLGc1IZBU= go.opentelemetry.io/otel v0.11.0/go.mod h1:G8UCk+KooF2HLkgo8RHX9epABH/aRGYET7gQOqBVdB0= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel v1.11.1 h1:4WLLAmcfkmDk2ukNXJyq3/kiz/3UzCaYq6PskJsaou4= -go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE= +go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= +go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= go.opentelemetry.io/otel/exporters/otlp v0.20.0 h1:PTNgq9MRmQqqJY0REVbZFvwkYOA85vbdQU/nVfxDyqg= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0 h1:7Yxsak1q4XrJ5y7XBnNwqWx9amMZvoidCctv62XOQ6Y= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.7.0 h1:cMDtmgJ5FpRvqx9x2Aq+Mm0O6K/zcUkH73SFz20TuBw= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.7.0 h1:MFAyzUPrTwLOwCi+cltN0ZVyy4phU41lwH+lyMyQTS4= -go.opentelemetry.io/otel/exporters/prometheus v0.33.0 h1:xXhPj7SLKWU5/Zd4Hxmd+X1C4jdmvc0Xy+kvjFx2z60= -go.opentelemetry.io/otel/exporters/prometheus v0.33.0/go.mod h1:ZSmYfKdYWEdSDBB4njLBIwTf4AU2JNsH3n2quVQDebI= +go.opentelemetry.io/otel/exporters/prometheus v0.34.0 h1:L5D+HxdaC/ORB47ribbTBbkXRZs9JzPjq0EoIOMWncM= +go.opentelemetry.io/otel/exporters/prometheus v0.34.0/go.mod h1:6gUoJyfhoWqF0tOLaY0ZmKgkQRcvEQx6p5rVlKHp3s4= go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/metric v0.33.0 h1:xQAyl7uGEYvrLAiV/09iTJlp1pZnQ9Wl793qbVvED1E= -go.opentelemetry.io/otel/metric v0.33.0/go.mod h1:QlTYc+EnYNq/M2mNk1qDDMRLpqCOj2f/r5c7Fd5FYaI= +go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= +go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZpKxs= -go.opentelemetry.io/otel/sdk v1.11.1/go.mod h1:/l3FE4SupHJ12TduVjUkZtlfFqDCQJlOlithYrdktys= +go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= +go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -go.opentelemetry.io/otel/sdk/metric v0.33.0 h1:oTqyWfksgKoJmbrs2q7O7ahkJzt+Ipekihf8vhpa9qo= -go.opentelemetry.io/otel/sdk/metric v0.33.0/go.mod h1:xdypMeA21JBOvjjzDUtD0kzIcHO/SPez+a8HOzJPGp0= +go.opentelemetry.io/otel/sdk/metric v0.34.0 h1:7ElxfQpXCFZlRTvVRTkcUvK8Gt5DC8QzmzsLsO2gdzo= +go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= -go.opentelemetry.io/otel/trace v1.11.1 h1:ofxdnzsNrGBYXbP7t7zpUK281+go5rF7dvdIZXF8gdQ= -go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk= +go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= +go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.16.0 h1:WHzDWdXUvbc5bG2ObdrGfaNpQz7ft7QN9HHmJlbiB1E= go.starlark.net v0.0.0-20220816155156-cfacd8902214/go.mod h1:VZcBMdr3cT3PnBoWunTabuSEXwVAH+ZJ5zxfs3AdASk= @@ -1879,8 +1900,8 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -1888,8 +1909,8 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d h1:ggxwEf5eu0l8v+87VhX1czFh8zJul3hK16Gmruxn7hw= go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d/go.mod h1:tgPU4N2u9RByaTN3NC2p9xOzyFpte4jYwsIIRF7XlSc= golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4 h1:QlVATYS7JBoZMVaf+cNjb90WD/beKVHnIxFKT4QaHVI= @@ -1936,6 +1957,7 @@ golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -2056,8 +2078,9 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220923203811-8be639271d50/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190130055435-99b60b757ec1/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2175,6 +2198,7 @@ golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2234,8 +2258,9 @@ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXR golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2247,8 +2272,9 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2342,8 +2368,8 @@ golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyj golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internal/tools/go.mod b/internal/tools/go.mod index 1251999de3251..2f4b1f48517d2 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -9,7 +9,7 @@ require ( github.com/goware/modvendor v0.5.0 github.com/mgechev/revive v1.2.4 github.com/stormcat24/protodep v0.0.0-20210106175019-c95189bc461b - github.com/vektra/mockery/v2 v2.15.0 + github.com/vektra/mockery/v2 v2.16.0 golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f golang.org/x/perf v0.0.0-20210220033136-40a54f11e909 gotest.tools/gotestsum v1.8.2 @@ -43,6 +43,7 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/charithe/durationcheck v0.0.9 // indirect github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 // indirect + github.com/chigopher/pathlib v0.12.0 // indirect github.com/daixiang0/gci v0.6.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/denis-tingaikin/go-header v0.4.3 // indirect diff --git a/internal/tools/go.sum b/internal/tools/go.sum index 4dddac8d32330..622218f609cb2 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -105,6 +105,8 @@ github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= +github.com/chigopher/pathlib v0.12.0 h1:1GM7fN/IwXXmOHbd1jkMqHD2wUhYqUvafgxTwmLT/q8= +github.com/chigopher/pathlib v0.12.0/go.mod h1:EJ5UtJ/sK8Nt6q3VWN+EwZLZ3g0afJiG8NegYiQQ/gQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -502,6 +504,7 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -586,6 +589,7 @@ github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4l github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.4.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= @@ -653,8 +657,8 @@ github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqz github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= -github.com/vektra/mockery/v2 v2.15.0 h1:5Egbxoancm1hhkJUoAF+cf0FBzC9oxS28LL/ZKbC980= -github.com/vektra/mockery/v2 v2.15.0/go.mod h1:RswGtsqDbCR9j4UcgBQuAZY7OFxI+TgtHevc0gR0kCY= +github.com/vektra/mockery/v2 v2.16.0 h1:NMfQMZ4dKAHxR0rTHCt47HyJlBgFdYmrLlHhZIj2yeo= +github.com/vektra/mockery/v2 v2.16.0/go.mod h1:OZL0JSpvEWEHgyNr150zNbP1ktxr6yPZ/W82RHaTHl0= github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -690,6 +694,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= diff --git a/omnibus/config/projects/agent-binaries.rb b/omnibus/config/projects/agent-binaries.rb index b1c9eeb4e4e78..d4e543538d3b2 100644 --- a/omnibus/config/projects/agent-binaries.rb +++ b/omnibus/config/projects/agent-binaries.rb @@ -56,7 +56,6 @@ additional_sign_files [ - "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\security-agent.exe", "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\process-agent.exe", "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\trace-agent.exe", "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\dogstatsd.exe", diff --git a/omnibus/config/projects/agent.rb b/omnibus/config/projects/agent.rb index 8d072b1e17538..38eb1b2bff132 100644 --- a/omnibus/config/projects/agent.rb +++ b/omnibus/config/projects/agent.rb @@ -16,6 +16,8 @@ license "Apache-2.0" license_file "../LICENSE" +third_party_licenses "../LICENSE-3rdparty.csv" + homepage 'http://www.datadoghq.com' if windows? @@ -153,7 +155,6 @@ # Always sign everything for binaries zip # noinspection RubyLiteralArrayInspection additional_sign_files [ - "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\security-agent.exe", "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\process-agent.exe", "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\trace-agent.exe", "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent.exe", @@ -184,7 +185,6 @@ # noinspection RubyLiteralArrayInspection additional_sign_files_list = [ - "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\security-agent.exe", "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\process-agent.exe", "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\trace-agent.exe", "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\agent.exe", @@ -363,11 +363,9 @@ def generate_embedded_archive(version) # # For Windows build, files need to be stripped must be specified here. # - windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\security-agent.exe" windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\process-agent.exe" windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent\\trace-agent.exe" windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\cf-root\\bin\\agent.exe" - windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\security-agent.exe" windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\process-agent.exe" windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\trace-agent.exe" windows_symbol_stripping_file "#{Omnibus::Config.source_dir()}\\datadog-agent\\src\\github.com\\DataDog\\datadog-agent\\bin\\agent\\agent.exe" diff --git a/omnibus/config/software/datadog-agent-integrations-py2.rb b/omnibus/config/software/datadog-agent-integrations-py2.rb index 2bca760a1b45b..9e449eda2f548 100644 --- a/omnibus/config/software/datadog-agent-integrations-py2.rb +++ b/omnibus/config/software/datadog-agent-integrations-py2.rb @@ -119,6 +119,13 @@ python = "#{install_dir}/embedded/bin/python2" end + # If a python_mirror was set, it's passed through a pip config file so that we're not leaking the API key in the CI Output + # Else the pip config file so pip will act casually + pip_config_file = ENV['PIP_CONFIG_FILE'] + pre_build_env = { + "PIP_CONFIG_FILE" => "#{pip_config_file}" + } + # Install the checks along with their dependencies block do if windows? @@ -133,14 +140,15 @@ # Prepare the build env, these dependencies are only needed to build and # install the core integrations. # - command "#{pip} download --dest #{build_deps_dir} hatchling==0.25.1" - command "#{pip} download --dest #{build_deps_dir} setuptools==40.9.0" # Version from ./setuptools2.rb - command "#{pip} install wheel==0.34.1" - command "#{pip} install setuptools-scm==5.0.2" # Pin to the last version that supports Python 2 - command "#{pip} install pip-tools==5.4.0" + command "#{pip} download --dest #{build_deps_dir} hatchling==0.25.1", :env => pre_build_env + command "#{pip} download --dest #{build_deps_dir} setuptools==40.9.0", :env => pre_build_env # Version from ./setuptools2.rb + command "#{pip} install wheel==0.37.1", :env => pre_build_env # Pin to the last version that supports Python 2 + command "#{pip} install setuptools-scm==5.0.2", :env => pre_build_env # Pin to the last version that supports Python 2 + command "#{pip} install pip-tools==5.4.0", :env => pre_build_env uninstall_buildtime_deps = ['rtloader', 'click', 'first', 'pip-tools'] nix_build_env = { "PIP_FIND_LINKS" => "#{build_deps_dir}", + "PIP_CONFIG_FILE" => "#{pip_config_file}", "CFLAGS" => "-I#{install_dir}/embedded/include -I/opt/mqm/inc", "CXXFLAGS" => "-I#{install_dir}/embedded/include -I/opt/mqm/inc", "LDFLAGS" => "-L#{install_dir}/embedded/lib -L/opt/mqm/lib64 -L/opt/mqm/lib", @@ -149,6 +157,7 @@ } win_build_env = { "PIP_FIND_LINKS" => "#{build_deps_dir}", + "PIP_CONFIG_FILE" => "#{pip_config_file}", } # Some libraries (looking at you, aerospike-client-python) need EXT_CFLAGS instead of CFLAGS. specific_build_env = { @@ -244,8 +253,6 @@ if windows? command "#{python} -m pip wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => win_build_env, :cwd => "#{windows_safe_path(project_dir)}\\datadog_checks_base" command "#{python} -m pip install datadog_checks_base --no-deps --no-index --find-links=#{wheel_build_dir}" - command "#{python} -m pip wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => win_build_env, :cwd => "#{windows_safe_path(project_dir)}\\datadog_checks_downloader" - command "#{python} -m pip install datadog_checks_downloader --no-deps --no-index --find-links=#{wheel_build_dir}" command "#{python} -m piptools compile --generate-hashes --output-file #{windows_safe_path(install_dir)}\\#{agent_requirements_file} #{static_reqs_out_file} " \ "--pip-args \"--retries #{pip_max_retries} --timeout #{pip_timeout}\"", :env => win_build_env # Pip-compiling seperately each lib that needs a custom build installation @@ -256,8 +263,6 @@ else command "#{pip} wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => nix_build_env, :cwd => "#{project_dir}/datadog_checks_base" command "#{pip} install datadog_checks_base --no-deps --no-index --find-links=#{wheel_build_dir}" - command "#{pip} wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => nix_build_env, :cwd => "#{project_dir}/datadog_checks_downloader" - command "#{pip} install datadog_checks_downloader --no-deps --no-index --find-links=#{wheel_build_dir}" command "#{python} -m piptools compile --generate-hashes --output-file #{install_dir}/#{agent_requirements_file} #{static_reqs_out_file} " \ "--pip-args \"--retries #{pip_max_retries} --timeout #{pip_timeout}\"", :env => nix_build_env # Pip-compiling seperately each lib that needs a custom build installation diff --git a/omnibus/config/software/datadog-agent-integrations-py3.rb b/omnibus/config/software/datadog-agent-integrations-py3.rb index 6f2e1075de691..fc2658dbb1a66 100644 --- a/omnibus/config/software/datadog-agent-integrations-py3.rb +++ b/omnibus/config/software/datadog-agent-integrations-py3.rb @@ -124,6 +124,12 @@ python = "#{install_dir}/embedded/bin/python3" end + # If a python_mirror is set, it is set in a pip config file so that we do not leak the token in the CI output + pip_config_file = ENV['PIP_CONFIG_FILE'] + pre_build_env = { + "PIP_CONFIG_FILE" => "#{pip_config_file}" + } + # Install the checks along with their dependencies block do if windows? @@ -138,13 +144,14 @@ # Prepare the build env, these dependencies are only needed to build and # install the core integrations. # - command "#{pip} download --dest #{build_deps_dir} hatchling==0.25.1" - command "#{pip} download --dest #{build_deps_dir} setuptools==40.9.0" # Version from ./setuptools3.rb - command "#{pip} install wheel==0.34.1" - command "#{pip} install pip-tools==6.4.0" + command "#{pip} download --dest #{build_deps_dir} hatchling==0.25.1", :env => pre_build_env + command "#{pip} download --dest #{build_deps_dir} setuptools==40.9.0", :env => pre_build_env # Version from ./setuptools3.rb + command "#{pip} install wheel==0.38.4", :env => pre_build_env + command "#{pip} install pip-tools==6.4.0", :env => pre_build_env uninstall_buildtime_deps = ['rtloader', 'click', 'first', 'pip-tools'] nix_build_env = { "PIP_FIND_LINKS" => "#{build_deps_dir}", + "PIP_CONFIG_FILE" => "#{pip_config_file}", # Specify C99 standard explicitly to avoid issues while building some # wheels (eg. ddtrace) "CFLAGS" => "-I#{install_dir}/embedded/include -I/opt/mqm/inc", @@ -155,6 +162,7 @@ } win_build_env = { "PIP_FIND_LINKS" => "#{build_deps_dir}", + "PIP_CONFIG_FILE" => "#{pip_config_file}", } # Some libraries (looking at you, aerospike-client-python) need EXT_CFLAGS instead of CFLAGS. specific_build_env = { diff --git a/omnibus/config/software/datadog-agent.rb b/omnibus/config/software/datadog-agent.rb index 62406563e08f3..9413ad936b20f 100644 --- a/omnibus/config/software/datadog-agent.rb +++ b/omnibus/config/software/datadog-agent.rb @@ -151,12 +151,7 @@ end # Security agent - if windows? - platform = windows_arch_i386? ? "x86" : "x64" - command "invoke -e security-agent.build --major-version #{major_version_arg} --arch #{platform}", :env => env - - copy 'bin/security-agent/security-agent.exe', "#{Omnibus::Config.source_dir()}/datadog-agent/src/github.com/DataDog/datadog-agent/bin/agent" - else + unless windows? command "invoke -e security-agent.build --major-version #{major_version_arg}", :env => env copy 'bin/security-agent/security-agent', "#{install_dir}/embedded/bin" move 'bin/agent/dist/security-agent.yaml', "#{conf_dir}/security-agent.yaml.example" diff --git a/omnibus/config/software/datadog-buildpack-finalize.rb b/omnibus/config/software/datadog-buildpack-finalize.rb index c53e1c7af800c..0e578bbba19a7 100644 --- a/omnibus/config/software/datadog-buildpack-finalize.rb +++ b/omnibus/config/software/datadog-buildpack-finalize.rb @@ -35,7 +35,6 @@ copy "#{dsd_source_root}/agent/dogstatsd.exe", "#{cf_bin_root_bin}/agent" copy "#{cf_source_root}/agent/process-agent.exe", "#{cf_bin_root_bin}/agent" copy "#{cf_source_root}/agent/trace-agent.exe", "#{cf_bin_root_bin}/agent" - copy "#{cf_source_root}/agent/security-agent.exe", "#{cf_bin_root_bin}/agent" delete "#{install_dir}/bin/agent/agent.exe" end diff --git a/omnibus/config/software/datadog-cf-finalize.rb b/omnibus/config/software/datadog-cf-finalize.rb index 608f88934fbb0..e207784c5bd61 100644 --- a/omnibus/config/software/datadog-cf-finalize.rb +++ b/omnibus/config/software/datadog-cf-finalize.rb @@ -38,7 +38,6 @@ copy "#{cf_source_root}/agent/process-agent.exe", "#{cf_bin_root_bin}/agent" copy "#{cf_source_root}/agent/trace-agent.exe", "#{cf_bin_root_bin}/agent" - copy "#{cf_source_root}/agent/security-agent.exe", "#{cf_bin_root_bin}/agent" end end end diff --git a/omnibus/config/software/datadog-iot-agent.rb b/omnibus/config/software/datadog-iot-agent.rb index 9c54bd61df1bb..b98f84f5b476c 100644 --- a/omnibus/config/software/datadog-iot-agent.rb +++ b/omnibus/config/software/datadog-iot-agent.rb @@ -118,17 +118,6 @@ copy 'bin/trace-agent/trace-agent.exe', "#{Omnibus::Config.source_dir()}/datadog-iot-agent/src/github.com/DataDog/datadog-agent/bin/agent" end end - block do - # defer compilation step in a block to allow getting the project's build version, which is populated - # only once the software that the project takes its version from (i.e. `datadog-agent`) has finished building - if windows? - platform = windows_arch_i386? ? "x86" : "x64" - # Build the security-agent with the correct go version for windows - command "invoke -e security-agent.build --major-version #{major_version_arg} --arch #{platform}", :env => env - - copy 'bin/security-agent/security-agent.exe', "#{Omnibus::Config.source_dir()}/datadog-iot-agent/src/github.com/DataDog/datadog-agent/bin/agent" - end - end # The file below is touched by software builds that don't put anything in the installation # directory (libgcc right now) so that the git_cache gets updated let's remove it from the diff --git a/omnibus/config/software/pylint2.rb b/omnibus/config/software/pylint2.rb index 59ba020a90049..564a5d992e939 100644 --- a/omnibus/config/software/pylint2.rb +++ b/omnibus/config/software/pylint2.rb @@ -17,14 +17,21 @@ python2 = "#{install_dir}/embedded/bin/python2" end + # If a python_mirror was set, it's passed through a pip config file so that we're not leaking the API key in the CI Output + # Else the pip config file so pip will act casually + pip_config_file = ENV['PIP_CONFIG_FILE'] + build_env = { + "PIP_CONFIG_FILE" => "#{pip_config_file}" + } + # pin 2 dependencies of pylint: # - configparser: later versions (up to v3.7.1) are broken # - lazy-object-proxy 1.7.0 broken on python 2 https://github.com/ionelmc/python-lazy-object-proxy/issues/61 if windows? - command "#{python2} -m pip install configparser==3.5.0 lazy-object-proxy==1.6.0" - command "#{python2} -m pip install pylint==#{version}" + command "#{python2} -m pip install configparser==3.5.0 lazy-object-proxy==1.6.0", :env => build_env + command "#{python2} -m pip install pylint==#{version}", :env => build_env else - command "#{pip2} install configparser==3.5.0 lazy-object-proxy==1.6.0" - command "#{pip2} install pylint==#{version}" + command "#{pip2} install configparser==3.5.0 lazy-object-proxy==1.6.0", :env => build_env + command "#{pip2} install pylint==#{version}", :env => build_env end end diff --git a/omnibus/config/software/python3.rb b/omnibus/config/software/python3.rb index 8e076b0aeaaee..a54967b3b3e76 100644 --- a/omnibus/config/software/python3.rb +++ b/omnibus/config/software/python3.rb @@ -1,7 +1,7 @@ name "python3" if ohai["platform"] != "windows" - default_version "3.8.14" + default_version "3.8.16" dependency "libxcrypt" dependency "libffi" @@ -15,7 +15,7 @@ dependency "libyaml" source :url => "https://python.org/ftp/python/#{version}/Python-#{version}.tgz", - :sha256 => "41f959c480c59211feb55d5a28851a56c7e22d02ef91035606ebb21011723c31" + :sha256 => "71ca9d935637ed2feb59e90a368361dc91eca472a90acb1d344a2e8178ccaf10" relative_path "Python-#{version}" @@ -66,19 +66,19 @@ end else - default_version "3.8.14-4e8b020" + default_version "3.8.16-2609a9b" dependency "vc_redist_14" if windows_arch_i386? dependency "vc_ucrt_redist" source :url => "https://dd-agent-omnibus.s3.amazonaws.com/python-windows-#{version}-x86.zip", - :sha256 => "5234E8506BCD00C99B044845298B8E8AE23078D9A69650D373053E9ADB006612".downcase + :sha256 => "07A1CD790D258AE925502E362701DED8B7362418766B89FE3CF53DB16D349A9C".downcase else # note that startring with 3.7.3 on Windows, the zip should be created without the built-in pip source :url => "https://dd-agent-omnibus.s3.amazonaws.com/python-windows-#{version}-x64.zip", - :sha256 => "ADE9A2CFD7EF66BB3488350A80C8EBFE1C322784CDC17E5A6783216F8EA89181".downcase + :sha256 => "E93C7A7290F422FDC09131B01DCE1F9FD94DC5273F26149FCDF8CC6B26454DE1".downcase end vcrt140_root = "#{Omnibus::Config.source_dir()}/vc_redist_140/expanded" diff --git a/omnibus/resources/agent/msi/localization-en-us.wxl.erb b/omnibus/resources/agent/msi/localization-en-us.wxl.erb index 2e96fa0c74061..cb512822e2d53 100644 --- a/omnibus/resources/agent/msi/localization-en-us.wxl.erb +++ b/omnibus/resources/agent/msi/localization-en-us.wxl.erb @@ -21,7 +21,7 @@ {\WixUI_Font_Normal_White}Select the way you want features to be installed. {\WixUI_Font_Title_White}Files in Use - WixUI_Font_Normal_White}Some files that need to be updated are currently in use. + {\WixUI_Font_Normal_White}Some files that need to be updated are currently in use. {\WixUI_Font_Title_White}Destination Folder {\WixUI_Font_Normal_White}Click Next to install to the default folder or click Change to choose another. diff --git a/pkg/aggregator/demultiplexer_agent.go b/pkg/aggregator/demultiplexer_agent.go index 8106e3bd9b6c4..be5427ce99f24 100644 --- a/pkg/aggregator/demultiplexer_agent.go +++ b/pkg/aggregator/demultiplexer_agent.go @@ -240,7 +240,7 @@ func initAgentDemultiplexer(options AgentDemultiplexerOptions, hostname string) orchestrator: orchestratorForwarder, eventPlatform: eventPlatformForwarder, containerLifecycle: containerLifecycleForwarder, - containerImage: containerImageForwarder, + containerImage: containerImageForwarder, }, sharedSerializer: sharedSerializer, diff --git a/pkg/autodiscovery/autoconfig.go b/pkg/autodiscovery/autoconfig.go index e491952728d89..e930bb4e66197 100644 --- a/pkg/autodiscovery/autoconfig.go +++ b/pkg/autodiscovery/autoconfig.go @@ -21,8 +21,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/status/health" "github.com/DataDog/datadog-agent/pkg/tagger" - "github.com/DataDog/datadog-agent/pkg/util" - "github.com/DataDog/datadog-agent/pkg/util/containers" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/retry" ) @@ -75,12 +73,7 @@ func NewAutoConfig(scheduler *scheduler.MetaScheduler) *AutoConfig { // NewAutoConfigNoStart creates an AutoConfig instance. func NewAutoConfigNoStart(scheduler *scheduler.MetaScheduler) *AutoConfig { - var cfgMgr configManager - if util.CcaInAD() { - cfgMgr = newReconcilingConfigManager() - } else { - cfgMgr = newSimpleConfigManager() - } + cfgMgr := newReconcilingConfigManager() ac := &AutoConfig{ configPollers: make([]*configPoller, 0, 9), listenerCandidates: make(map[string]*listenerCandidate), @@ -423,18 +416,6 @@ func (ac *AutoConfig) processNewService(ctx context.Context, svc listeners.Servi } changes := ac.cfgMgr.processNewService(ADIdentifiers, svc) - - if !util.CcaInAD() { - // schedule a "service config" for logs-agent's benefit - changes.ScheduleConfig(integration.Config{ - LogsConfig: integration.Data{}, - ServiceID: svc.GetServiceID(), - TaggerEntity: svc.GetTaggerEntity(), - MetricsExcluded: svc.HasFilter(containers.MetricsFilter), - LogsExcluded: svc.HasFilter(containers.LogsFilter), - }) - } - ac.applyChanges(changes) } @@ -443,18 +424,6 @@ func (ac *AutoConfig) processDelService(ctx context.Context, svc listeners.Servi ac.store.removeServiceForEntity(svc.GetServiceID()) changes := ac.cfgMgr.processDelService(ctx, svc) ac.store.removeTagsHashForService(svc.GetTaggerEntity()) - - if !util.CcaInAD() { - // unschedule the "service config" - changes.UnscheduleConfig(integration.Config{ - LogsConfig: integration.Data{}, - ServiceID: svc.GetServiceID(), - TaggerEntity: svc.GetTaggerEntity(), - MetricsExcluded: svc.HasFilter(containers.MetricsFilter), - LogsExcluded: svc.HasFilter(containers.LogsFilter), - }) - } - ac.applyChanges(changes) } diff --git a/pkg/autodiscovery/common/types/prometheus.go b/pkg/autodiscovery/common/types/prometheus.go index fbe48e34a807d..4dcaa213c241e 100644 --- a/pkg/autodiscovery/common/types/prometheus.go +++ b/pkg/autodiscovery/common/types/prometheus.go @@ -88,16 +88,18 @@ type OpenmetricsInstance struct { MinCollectInterval int `mapstructure:"min_collection_interval" yaml:"min_collection_interval,omitempty" json:"min_collection_interval,omitempty"` EmptyDefaultHost bool `mapstructure:"empty_default_hostname" yaml:"empty_default_hostname,omitempty" json:"empty_default_hostname,omitempty"` MaxReturnedMetrics int `mapstructure:"max_returned_metrics" yaml:"max_returned_metrics,omitempty" json:"max_returned_metrics,omitempty"` + TagByEndpoint *bool `mapstructure:"tag_by_endpoint" yaml:"tag_by_endpoint,omitempty" json:"tag_by_endpoint,omitempty"` // openmetrics v2 specific fields - OpenMetricsEndpoint string `mapstructure:"openmetrics_endpoint" yaml:"openmetrics_endpoint,omitempty" json:"openmetrics_endpoint,omitempty"` // Supersedes `prometheus_url` - ExcludeMetrics []string `mapstructure:"exclude_metrics" yaml:"exclude_metrics,omitempty" json:"exclude_metrics,omitempty"` // Supersedes `ignore_metrics` - RawPrefix string `mapstructure:"raw_metric_prefix" yaml:"raw_metric_prefix,omitempty" json:"raw_metric_prefix,omitempty"` // Supersedes `prometheus_metrics_prefix` - EnableHealthCheck *bool `mapstructure:"enable_health_service_check" yaml:"enable_health_service_check,omitempty" json:"enable_health_service_check,omitempty"` // Supersedes `health_service_check` - RenameLabels map[string]string `mapstructure:"rename_labels" yaml:"rename_labels,omitempty" json:"rename_labels,omitempty"` // Supersedes `labels_mapper` - ShareLabels map[string]ShareLabelsConfig `mapstructure:"share_labels" yaml:"share_labels,omitempty" json:"share_labels,omitempty"` // Supersedes `label_joins` - CollectHistogramBuckets *bool `mapstructure:"collect_histogram_buckets" yaml:"collect_histogram_buckets,omitempty" json:"collect_histogram_buckets,omitempty"` // Supersedes `send_histograms_buckets` - HistogramBucketsAsDistributions bool `mapstructure:"histogram_buckets_as_distributions" yaml:"histogram_buckets_as_distributions,omitempty" json:"histogram_buckets_as_distributions,omitempty"` // Supersedes `send_distribution_buckets` + OpenMetricsEndpoint string `mapstructure:"openmetrics_endpoint" yaml:"openmetrics_endpoint,omitempty" json:"openmetrics_endpoint,omitempty"` // Supersedes `prometheus_url` + ExcludeMetrics []string `mapstructure:"exclude_metrics" yaml:"exclude_metrics,omitempty" json:"exclude_metrics,omitempty"` // Supersedes `ignore_metrics` + RawPrefix string `mapstructure:"raw_metric_prefix" yaml:"raw_metric_prefix,omitempty" json:"raw_metric_prefix,omitempty"` // Supersedes `prometheus_metrics_prefix` + EnableHealthCheck *bool `mapstructure:"enable_health_service_check" yaml:"enable_health_service_check,omitempty" json:"enable_health_service_check,omitempty"` // Supersedes `health_service_check` + RenameLabels map[string]string `mapstructure:"rename_labels" yaml:"rename_labels,omitempty" json:"rename_labels,omitempty"` // Supersedes `labels_mapper` + ShareLabels map[string]ShareLabelsConfig `mapstructure:"share_labels" yaml:"share_labels,omitempty" json:"share_labels,omitempty"` // Supersedes `label_joins` + CollectHistogramBuckets *bool `mapstructure:"collect_histogram_buckets" yaml:"collect_histogram_buckets,omitempty" json:"collect_histogram_buckets,omitempty"` // Supersedes `send_histograms_buckets` + HistogramBucketsAsDistributions bool `mapstructure:"histogram_buckets_as_distributions" yaml:"histogram_buckets_as_distributions,omitempty" json:"histogram_buckets_as_distributions,omitempty"` // Supersedes `send_distribution_buckets` + CollectCountersWithDistributions bool `mapstructure:"collect_counters_with_distributions" yaml:"collect_counters_with_distributions,omitempty" json:"collect_counters_with_distributions,omitempty"` } // LabelJoinsConfig contains the label join configuration fields diff --git a/pkg/autodiscovery/configmgr_test.go b/pkg/autodiscovery/configmgr_test.go index bdbf138eb11ce..034cb45673200 100644 --- a/pkg/autodiscovery/configmgr_test.go +++ b/pkg/autodiscovery/configmgr_test.go @@ -414,10 +414,6 @@ func (suite *ConfigManagerSuite) TestFuzz() { }) } -func TestSimpleConfigManagement(t *testing.T) { - suite.Run(t, &ConfigManagerSuite{factory: newSimpleConfigManager}) -} - type ReconcilingConfigManagerSuite struct { ConfigManagerSuite // include all ConfigManager tests, and more.. } diff --git a/pkg/autodiscovery/configresolver/configresolver.go b/pkg/autodiscovery/configresolver/configresolver.go index f36c9c0a21be6..2977607e3f032 100644 --- a/pkg/autodiscovery/configresolver/configresolver.go +++ b/pkg/autodiscovery/configresolver/configresolver.go @@ -20,7 +20,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/autodiscovery/listeners" "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers/names" - "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/containers" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -84,30 +83,6 @@ func Resolve(tpl integration.Config, svc listeners.Service) (integration.Config, copy(resolvedConfig.InitConfig, tpl.InitConfig) copy(resolvedConfig.Instances, tpl.Instances) - // Ignore the config from file if it's overridden by an empty config or by - // a different config for the same check. If - // `logs_config.cca_in_ad` is set, this is not necessary as the - // relevant services will filter out these configs. - if !util.CcaInAD() { - if tpl.Provider == names.File && svc.GetCheckNames(ctx) != nil { - checkNames := svc.GetCheckNames(ctx) - lenCheckNames := len(checkNames) - if lenCheckNames == 0 || (lenCheckNames == 1 && checkNames[0] == "") { - // Empty check names on k8s annotations or container labels override the check config from file - // Used to deactivate unneeded OOTB autodiscovery checks defined in files - // The checkNames slice is considered empty also if it contains one single empty string - return resolvedConfig, fmt.Errorf("ignoring config from %s: another empty config is defined with the same AD identifier: %v", tpl.Source, tpl.ADIdentifiers) - } - for _, checkName := range checkNames { - if tpl.Name == checkName { - // Ignore config from file when the same check is activated on the same service via other config providers (k8s annotations or container labels) - return resolvedConfig, fmt.Errorf("ignoring config from %s: another config is defined for the check %s", tpl.Source, tpl.Name) - } - } - - } - } - if resolvedConfig.IsCheckConfig() && !svc.IsReady(ctx) { return resolvedConfig, errors.New("unable to resolve, service not ready") } diff --git a/pkg/autodiscovery/integration/config.go b/pkg/autodiscovery/integration/config.go index 6b606620ed736..718957e4c0e71 100644 --- a/pkg/autodiscovery/integration/config.go +++ b/pkg/autodiscovery/integration/config.go @@ -7,7 +7,6 @@ package integration import ( "fmt" - "hash/fnv" "sort" "strconv" "strings" @@ -20,6 +19,11 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/tmplvar" ) +const ( + // Used in unit tests + FakeConfigHash = 1 +) + // Data contains YAML code type Data []byte @@ -354,8 +358,12 @@ func (c *Data) SetField(key string, value interface{}) error { // The ClusterCheck field is intentionally left out to keep a stable digest // between the cluster-agent and the node-agents func (c *Config) Digest() string { - h := fnv.New64() - h.Write([]byte(c.Name)) //nolint:errcheck + return strconv.FormatUint(c.IntDigest(), 16) +} + +func (c *Config) IntDigest() uint64 { + h := murmur3.New64() + _, _ = h.Write([]byte(c.Name)) for _, i := range c.Instances { inst := RawMap{} err := yaml.Unmarshal(i, &inst) @@ -383,18 +391,18 @@ func (c *Config) Digest() string { log.Debugf("Error while calculating config digest for %s, skipping: %v", c.Name, err) continue } - h.Write(out) //nolint:errcheck + _, _ = h.Write(out) } - h.Write([]byte(c.InitConfig)) //nolint:errcheck + _, _ = h.Write([]byte(c.InitConfig)) for _, i := range c.ADIdentifiers { - h.Write([]byte(i)) //nolint:errcheck + _, _ = h.Write([]byte(i)) } - h.Write([]byte(c.NodeName)) //nolint:errcheck - h.Write([]byte(c.LogsConfig)) //nolint:errcheck - h.Write([]byte(c.ServiceID)) //nolint:errcheck - h.Write([]byte(strconv.FormatBool(c.IgnoreAutodiscoveryTags))) //nolint:errcheck + _, _ = h.Write([]byte(c.NodeName)) + _, _ = h.Write([]byte(c.LogsConfig)) + _, _ = h.Write([]byte(c.ServiceID)) + _, _ = h.Write([]byte(strconv.FormatBool(c.IgnoreAutodiscoveryTags))) - return strconv.FormatUint(h.Sum64(), 16) + return h.Sum64() } // FastDigest returns an hash value representing the data stored in this configuration. diff --git a/pkg/autodiscovery/integration/config_test.go b/pkg/autodiscovery/integration/config_test.go index a87d171fb2472..04981ec3ace68 100644 --- a/pkg/autodiscovery/integration/config_test.go +++ b/pkg/autodiscovery/integration/config_test.go @@ -158,43 +158,43 @@ func TestSetField(t *testing.T) { func TestDigest(t *testing.T) { emptyConfig := &Config{} - assert.Equal(t, "8cbd29bb83d5daa", emptyConfig.Digest()) + assert.Equal(t, "c4bf6d05e5b795e4", emptyConfig.Digest()) simpleConfig := &Config{ Name: "foo", InitConfig: Data(""), } - assert.Equal(t, "86fa755714dd0344", simpleConfig.Digest()) + assert.Equal(t, "6eba821f0cd8c6d0", simpleConfig.Digest()) simpleConfigWithLogs := &Config{ Name: "foo", InitConfig: Data(""), LogsConfig: Data("[{\"service\":\"any_service\",\"source\":\"any_source\"}]"), } - assert.Equal(t, "6221a1957297b66", simpleConfigWithLogs.Digest()) + assert.Equal(t, "68db1fd44ee9e556", simpleConfigWithLogs.Digest()) simpleConfigWithInstances := &Config{ Name: "foo", InitConfig: Data(""), Instances: []Data{Data("{foo:bar}")}, } - assert.Equal(t, "88e8dfc8b715052", simpleConfigWithInstances.Digest()) + assert.Equal(t, "bac28046698f8f94", simpleConfigWithInstances.Digest()) simpleConfigWithInstancesAndLogs := &Config{ Name: "foo", InitConfig: Data(""), Instances: []Data{Data("{foo:bar}")}, LogsConfig: Data("[{\"service\":\"any_service\",\"source\":\"any_source\"}]"), } - assert.Equal(t, "6692ced6b2ad5480", simpleConfigWithInstancesAndLogs.Digest()) + assert.Equal(t, "8ae67f131af76048", simpleConfigWithInstancesAndLogs.Digest()) simpleConfigWithTags := &Config{ Name: "foo", InitConfig: Data(""), Instances: []Data{Data("tags: [\"foo\", \"foo:bar\"]")}, } - assert.Equal(t, "4702b7464dedf680", simpleConfigWithTags.Digest()) + assert.Equal(t, "acf96a2e562b1adf", simpleConfigWithTags.Digest()) simpleConfigWithOtherTags := &Config{ Name: "foo", InitConfig: Data(""), Instances: []Data{Data("tags: [\"foo\", \"foo:baf\"]")}, } - assert.Equal(t, "c3fabecd59ae4584", simpleConfigWithOtherTags.Digest()) + assert.Equal(t, "3aa6edecf7fa8bcd", simpleConfigWithOtherTags.Digest()) // assert a character change in a tag produces different hash assert.NotEqual(t, simpleConfigWithTags.Digest(), simpleConfigWithOtherTags.Digest()) @@ -204,7 +204,7 @@ func TestDigest(t *testing.T) { InitConfig: Data(""), Instances: []Data{Data("tags: [\"foo:bar\", \"foo\"]")}, } - assert.Equal(t, "4702b7464dedf680", simpleConfigWithTagsDifferentOrder.Digest()) + assert.Equal(t, "acf96a2e562b1adf", simpleConfigWithTagsDifferentOrder.Digest()) // assert an order change in the tags list doesn't change the hash assert.Equal(t, simpleConfigWithTags.Digest(), simpleConfigWithTagsDifferentOrder.Digest()) @@ -214,7 +214,7 @@ func TestDigest(t *testing.T) { InitConfig: Data(""), ClusterCheck: true, } - assert.Equal(t, "86fa755714dd0344", simpleClusterCheckConfig.Digest()) + assert.Equal(t, "6eba821f0cd8c6d0", simpleClusterCheckConfig.Digest()) // assert the ClusterCheck field is not taken into account assert.Equal(t, simpleConfig.Digest(), simpleClusterCheckConfig.Digest()) @@ -224,14 +224,14 @@ func TestDigest(t *testing.T) { InitConfig: Data(""), ServiceID: "docker://f556178a47cf65fb70cd5772a9e80e661f71e021da49d3dc99565b861707041c", } - assert.Equal(t, "6f0d4b04bfbf4321", configWithEntity.Digest()) + assert.Equal(t, "87124897c6c72173", configWithEntity.Digest()) configWithAnotherEntity := &Config{ Name: "foo", InitConfig: Data(""), ServiceID: "docker://ddcd8a64616772f7ad4524f09fd75c9e3a265144050fc077563e63ea2eb46db0", } - assert.Equal(t, "22e040015f8c50b1", configWithAnotherEntity.Digest()) + assert.Equal(t, "3cbee6f3b98b9b98", configWithAnotherEntity.Digest()) // assert an entity change produces different hash assert.NotEqual(t, configWithEntity.Digest(), configWithAnotherEntity.Digest()) @@ -241,7 +241,7 @@ func TestDigest(t *testing.T) { InitConfig: Data(""), IgnoreAutodiscoveryTags: true, } - assert.Equal(t, "ef50ccb77f4cc8eb", simpleIngoreADTagsConfig.Digest()) + assert.Equal(t, "28242ab6104a4de1", simpleIngoreADTagsConfig.Digest()) // assert the ClusterCheck field is not taken into account assert.NotEqual(t, simpleConfig.Digest(), simpleIngoreADTagsConfig.Digest()) diff --git a/pkg/autodiscovery/listeners/service.go b/pkg/autodiscovery/listeners/service.go index e0d40ceb71c95..05e112636b99d 100644 --- a/pkg/autodiscovery/listeners/service.go +++ b/pkg/autodiscovery/listeners/service.go @@ -14,7 +14,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers/names" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/tagger" - "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/containers" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/kubelet" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -122,18 +121,10 @@ func (s *service) HasFilter(filter containers.FilterType) bool { // FilterTemplates implements Service#FilterTemplates. func (s *service) FilterTemplates(configs map[string]integration.Config) { - if !util.CcaInAD() { - // only applies when `logs_config.cca_in_ad` is set - return - } - // These two overrides are handled in - // pkg/autodiscovery/configresolver/configresolver.go when - // logs_config.cca_in_ad is false + // pkg/autodiscovery/configresolver/configresolver.go s.filterTemplatesEmptyOverrides(configs) s.filterTemplatesOverriddenChecks(configs) - - // this is handled in the logs agent when logs_config.cca_in_ad is false s.filterTemplatesContainerCollectAll(configs) } diff --git a/pkg/autodiscovery/listeners/types.go b/pkg/autodiscovery/listeners/types.go index 9010f5604c231..a91f075c81ef1 100644 --- a/pkg/autodiscovery/listeners/types.go +++ b/pkg/autodiscovery/listeners/types.go @@ -44,8 +44,6 @@ type Service interface { // with the full set of templates matching this service. It must not rely // on any non-static information except the given configs, and it must not // modify the configs in the map. - // - // This method is only called with `logs_config.cca_in_ad` is set. FilterTemplates(map[string]integration.Config) } diff --git a/pkg/autodiscovery/providers/clusterchecks.go b/pkg/autodiscovery/providers/clusterchecks.go index f1536163e1ccc..e7b99f98e6ae3 100644 --- a/pkg/autodiscovery/providers/clusterchecks.go +++ b/pkg/autodiscovery/providers/clusterchecks.go @@ -123,7 +123,7 @@ func (c *ClusterChecksConfigProvider) IsUpToDate(ctx context.Context) (bool, err if reply.IsUpToDate { log.Tracef("Up to date with change %d", c.lastChange) } else { - log.Tracef("Not up to date with change %d", c.lastChange) + log.Infof("Not up to date with change %d", c.lastChange) } return reply.IsUpToDate, nil } diff --git a/pkg/autodiscovery/providers/config_reader.go b/pkg/autodiscovery/providers/config_reader.go index f6db7a5f5c851..756324c94df78 100644 --- a/pkg/autodiscovery/providers/config_reader.go +++ b/pkg/autodiscovery/providers/config_reader.go @@ -6,7 +6,6 @@ package providers import ( - "context" "errors" "fmt" "os" @@ -381,10 +380,10 @@ func GetIntegrationConfigFromFile(name, fpath string) (integration.Config, error // at this point the Yaml was already parsed, no need to check the error rawConf, _ := yaml.Marshal(instance) dataConf := (integration.Data)(rawConf) - if fargate.IsFargateInstance(context.TODO()) { + if fargate.IsFargateInstance() { // In Fargate, since no host tags are applied in the backend, // add the configured DD_TAGS/DD_EXTRA_TAGS to the instance tags. - tags := config.GetConfiguredTags(false) + tags := config.GetGlobalConfiguredTags(false) err := dataConf.MergeAdditionalTags(tags) if err != nil { log.Debugf("Could not add agent-level tags to instance of %v: %v", fpath, err) diff --git a/pkg/autodiscovery/providers/container.go b/pkg/autodiscovery/providers/container.go index c3c262c6cb13b..903b8c8cd805c 100644 --- a/pkg/autodiscovery/providers/container.go +++ b/pkg/autodiscovery/providers/container.go @@ -10,201 +10,308 @@ package providers import ( "context" + "fmt" + "strings" "sync" - "time" "github.com/DataDog/datadog-agent/pkg/autodiscovery/common/utils" "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers/names" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/status/health" - "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/containers" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/workloadmeta" ) -const ( - delayDuration = 5 * time.Second -) - -// ContainerConfigProvider implements the ConfigProvider interface for container labels. +// ContainerConfigProvider implements the ConfigProvider interface for both pods and containers type ContainerConfigProvider struct { - sync.RWMutex workloadmetaStore workloadmeta.Store - upToDate bool - streaming bool - containerCache map[string]*workloadmeta.Container - containerFilter *containers.Filter - once sync.Once + configErrors map[string]ErrorMsgSet // map[entity name]ErrorMsgSet + configCache map[string]map[string]integration.Config // map[entity name]map[config digest]integration.Config + mu sync.RWMutex } -// NewContainerConfigProvider creates a new ContainerConfigProvider +// NewContainerConfigProvider returns a new ConfigProvider subscribed to both container +// and pods func NewContainerConfigProvider(*config.ConfigurationProviders) (ConfigProvider, error) { - containerFilter, err := containers.NewAutodiscoveryFilter(containers.GlobalFilter) - if err != nil { - log.Warnf("Can't get container include/exclude filter, no filtering will be applied: %v", err) - } - return &ContainerConfigProvider{ workloadmetaStore: workloadmeta.GetGlobalStore(), - containerCache: make(map[string]*workloadmeta.Container), - containerFilter: containerFilter, + configCache: make(map[string]map[string]integration.Config), + configErrors: make(map[string]ErrorMsgSet), }, nil } // String returns a string representation of the ContainerConfigProvider -func (d *ContainerConfigProvider) String() string { - return names.Container +func (k *ContainerConfigProvider) String() string { + return names.KubeContainer } -// Collect retrieves all running containers and extract AD templates from their labels. -func (d *ContainerConfigProvider) Collect(ctx context.Context) ([]integration.Config, error) { - d.once.Do(func() { - ch := make(chan struct{}) - go d.listen(ch) - <-ch - }) - - d.Lock() - d.upToDate = true - d.Unlock() - - d.RLock() - defer d.RUnlock() - return d.generateConfigs() -} - -// listen, closing the given channel after the initial set of events are received -func (d *ContainerConfigProvider) listen(ch chan struct{}) { - d.Lock() - d.streaming = true - health := health.RegisterLiveness("ad-containerprovider") - defer func() { - err := health.Deregister() - if err != nil { - log.Warnf("error de-registering health check: %s", err) - } - }() - d.Unlock() +// Stream starts listening to workloadmeta to generate configs as they come +// instead of relying on a periodic call to Collect. +func (k *ContainerConfigProvider) Stream(ctx context.Context) <-chan integration.ConfigChanges { + const name = "ad-kubecontainerprovider" - var ranOnce bool + // outCh must be unbuffered. processing of workloadmeta events must not + // proceed until the config is processed by autodiscovery, as configs + // need to be generated before any associated services. + outCh := make(chan integration.ConfigChanges) - workloadmetaEventsChannel := d.workloadmetaStore.Subscribe("ad-containerprovider", workloadmeta.NormalPriority, workloadmeta.NewFilter( - []workloadmeta.Kind{workloadmeta.KindContainer}, - workloadmeta.SourceRuntime, + inCh := k.workloadmetaStore.Subscribe(name, workloadmeta.ConfigProviderPriority, workloadmeta.NewFilter( + []workloadmeta.Kind{workloadmeta.KindKubernetesPod, workloadmeta.KindContainer}, + workloadmeta.SourceAll, workloadmeta.EventTypeAll, )) - for { - select { - case evBundle, ok := <-workloadmetaEventsChannel: - if !ok { - return - } + go func() { + for { + select { + case <-ctx.Done(): + k.workloadmetaStore.Unsubscribe(inCh) - d.processEvents(evBundle) - - if !ranOnce { - close(ch) - ranOnce = true - } + case evBundle, ok := <-inCh: + if !ok { + return + } - case <-health.C: + // send changes even when they're empty, as we + // need to signal that an event has been + // received, for flow control reasons + outCh <- k.processEvents(evBundle) + close(evBundle.Ch) + } } - } + }() + + return outCh } -func (d *ContainerConfigProvider) processEvents(eventBundle workloadmeta.EventBundle) { - close(eventBundle.Ch) +func (k *ContainerConfigProvider) processEvents(evBundle workloadmeta.EventBundle) integration.ConfigChanges { + k.mu.Lock() + defer k.mu.Unlock() - for _, event := range eventBundle.Events { - containerID := event.Entity.GetID().ID + changes := integration.ConfigChanges{} + + for _, event := range evBundle.Events { + entityName := buildEntityName(event.Entity) switch event.Type { case workloadmeta.EventTypeSet: - container := event.Entity.(*workloadmeta.Container) - - d.RLock() - _, containerSeen := d.containerCache[container.ID] - d.RUnlock() - if containerSeen { - // Container restarted with the same ID within 5 seconds. - // This delay is needed because of the delay introduced in the - // EventTypeUnset case. - time.AfterFunc(delayDuration, func() { - d.addContainer(containerID, container) - }) + configs, err := k.generateConfig(event.Entity) + + if err != nil { + k.configErrors[entityName] = err } else { - d.addContainer(containerID, container) + delete(k.configErrors, entityName) + } + + configCache, ok := k.configCache[entityName] + if !ok { + configCache = make(map[string]integration.Config) + k.configCache[entityName] = configCache + } + + configsToUnschedule := make(map[string]integration.Config) + for digest, config := range configCache { + configsToUnschedule[digest] = config + } + + for _, config := range configs { + digest := config.Digest() + if _, ok := configCache[digest]; ok { + delete(configsToUnschedule, digest) + } else { + configCache[digest] = config + changes.ScheduleConfig(config) + } + } + + for oldDigest, oldConfig := range configsToUnschedule { + delete(configCache, oldDigest) + changes.UnscheduleConfig(oldConfig) } case workloadmeta.EventTypeUnset: - // delay for short-lived detection - time.AfterFunc(delayDuration, func() { - d.deleteContainer(containerID) - }) + oldConfigs, found := k.configCache[entityName] + if !found { + log.Debugf("entity %q removed from workloadmeta store but not found in cache. skipping", entityName) + continue + } + + for _, oldConfig := range oldConfigs { + changes.UnscheduleConfig(oldConfig) + } + + delete(k.configCache, entityName) + delete(k.configErrors, entityName) default: log.Errorf("cannot handle event of type %d", event.Type) } } + return changes } -// IsUpToDate checks whether we have new containers to parse, based on events -// received by the listen goroutine. If listening fails, we fallback to -// collecting everytime. -func (d *ContainerConfigProvider) IsUpToDate(ctx context.Context) (bool, error) { - d.RLock() - defer d.RUnlock() - return d.streaming && d.upToDate, nil -} +func (k *ContainerConfigProvider) generateConfig(e workloadmeta.Entity) ([]integration.Config, ErrorMsgSet) { + var ( + errMsgSet ErrorMsgSet + errs []error + configs []integration.Config + ) + + switch entity := e.(type) { + case *workloadmeta.Container: + // kubernetes containers need to be handled together with their + // pod, so they generate a single []integration.Config. + // otherwise, it's possible for a container that belongs to an + // AD-annotated pod to briefly be scheduled without its + // annotations. + if !findKubernetesInLabels(entity.Labels) { + configs, errs = k.generateContainerConfig(entity) + + containerID := entity.ID + containerEntityName := containers.BuildEntityName(string(entity.Runtime), containerID) + configs = utils.AddContainerCollectAllConfigs(configs, containerEntityName) + + for idx := range configs { + configs[idx].Source = names.Container + ":" + containerEntityName + } + } -// addLabels updates the cache for a given container -func (d *ContainerConfigProvider) addContainer(containerID string, container *workloadmeta.Container) { - d.Lock() - defer d.Unlock() - d.containerCache[containerID] = container - d.upToDate = false -} + case *workloadmeta.KubernetesPod: + containerIdentifiers := map[string]struct{}{} + containerNames := map[string]struct{}{} + for _, podContainer := range entity.Containers { + container, err := k.workloadmetaStore.GetContainer(podContainer.ID) + if err != nil { + log.Debugf("Pod %q has reference to non-existing container %q", entity.Name, podContainer.ID) + continue + } -func (d *ContainerConfigProvider) deleteContainer(containerID string) { - d.Lock() - defer d.Unlock() - delete(d.containerCache, containerID) - d.upToDate = false -} + var ( + c []integration.Config + errors []error + ) -func (d *ContainerConfigProvider) generateConfigs() ([]integration.Config, error) { - var configs []integration.Config - for containerID, container := range d.containerCache { - containerEntityName := containers.BuildEntityName(string(container.Runtime), containerID) - c, errors := utils.ExtractTemplatesFromContainerLabels(containerEntityName, container.Labels) + c, errors = k.generateContainerConfig(container) + configs = append(configs, c...) + errs = append(errs, errors...) - for _, err := range errors { - log.Errorf("Can't parse template for container %s: %s", containerID, err) - } + adIdentifier := podContainer.Name + if customADID, found := utils.ExtractCheckIDFromPodAnnotations(entity.Annotations, podContainer.Name); found { + adIdentifier = customADID + } + + containerEntity := containers.BuildEntityName(string(container.Runtime), container.ID) + c, errors = utils.ExtractTemplatesFromPodAnnotations( + containerEntity, + entity.Annotations, + adIdentifier, + ) + + // container_collect_all configs must be added after + // configs generated from annotations, since services + // are reconciled against configs one-by-one instead of + // as a set, so if a container_collect_all config + // appears before an annotation one, it'll cause a logs + // config to be scheduled as container_collect_all, + // unscheduled, and then re-scheduled correctly. + c = utils.AddContainerCollectAllConfigs(c, containerEntity) + + if len(errors) > 0 { + errs = append(errs, errors...) + if len(c) == 0 { + // Only got errors, no valid configs so + // let's move on to the next container. + continue + } + } + + containerIdentifiers[adIdentifier] = struct{}{} + containerNames[podContainer.Name] = struct{}{} + + for idx := range c { + c[idx].Source = names.Container + ":" + containerEntity + } - if util.CcaInAD() { - c = utils.AddContainerCollectAllConfigs(c, containerEntityName) + configs = append(configs, c...) } - for idx := range c { - c[idx].Source = names.Container + ":" + containerEntityName + errs = append(errs, utils.ValidateAnnotationsMatching( + entity.Annotations, + containerIdentifiers, + containerNames)...) + + default: + log.Errorf("cannot handle entity of kind %s", e.GetID().Kind) + } + + if len(errs) > 0 { + errMsgSet = make(ErrorMsgSet) + for _, err := range errs { + errMsgSet[err.Error()] = struct{}{} } + } - configs = append(configs, c...) + return configs, errMsgSet +} + +func (k *ContainerConfigProvider) generateContainerConfig(container *workloadmeta.Container) ([]integration.Config, []error) { + var ( + errs []error + configs []integration.Config + ) + + containerID := container.ID + containerEntityName := containers.BuildEntityName(string(container.Runtime), containerID) + configs, errs = utils.ExtractTemplatesFromContainerLabels(containerEntityName, container.Labels) + + return configs, errs +} + +// GetConfigErrors returns a map of configuration errors for each namespace/pod +func (k *ContainerConfigProvider) GetConfigErrors() map[string]ErrorMsgSet { + k.mu.RLock() + defer k.mu.RUnlock() + + errors := make(map[string]ErrorMsgSet, len(k.configErrors)) + + for entity, errset := range k.configErrors { + errors[entity] = errset } - return configs, nil + + return errors } -func init() { - RegisterProvider(names.Container, NewContainerConfigProvider) +// buildEntityName is also used as display key in `agent status` "Configuration Errors" display. +// (for instance, incorrect annotation syntax or unknown container name). +// That's why it does not simply use Kind + ID. +// It needs to be unique over time. +// (for instance, namespace+name is not unique for a POD as it can be deleted/created with a different UID, see STS rollout) +func buildEntityName(e workloadmeta.Entity) string { + entityID := e.GetID() + switch entity := e.(type) { + case *workloadmeta.KubernetesPod: + return fmt.Sprintf("%s/%s (%s)", entity.Namespace, entity.Name, entity.ID) + case *workloadmeta.Container: + return containers.BuildEntityName(string(entity.Runtime), entityID.ID) + default: + return fmt.Sprintf("%s://%s", entityID.Kind, entityID.ID) + } +} + +// findKubernetesInLabels traverses a map of container labels and +// returns true if a kubernetes label is detected +func findKubernetesInLabels(labels map[string]string) bool { + for name := range labels { + if strings.HasPrefix(name, "io.kubernetes.") { + return true + } + } + return false } -// GetConfigErrors is not implemented for the ContainerConfigProvider -func (d *ContainerConfigProvider) GetConfigErrors() map[string]ErrorMsgSet { - return make(map[string]ErrorMsgSet) +func init() { + RegisterProvider(names.KubeContainer, NewContainerConfigProvider) } diff --git a/pkg/autodiscovery/providers/container_test.go b/pkg/autodiscovery/providers/container_test.go index 70de5fcafe9f4..3f16a9b3a0a26 100644 --- a/pkg/autodiscovery/providers/container_test.go +++ b/pkg/autodiscovery/providers/container_test.go @@ -13,46 +13,446 @@ import ( "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" + "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/workloadmeta" + workloadmetatesting "github.com/DataDog/datadog-agent/pkg/workloadmeta/testing" ) -// Only testing generateConfigs, lifecycle should be tested in end-to-end test +func TestProcessEvents(t *testing.T) { + store := workloadmetatesting.NewStore() -func TestGenerateConfigs_Container(t *testing.T) { - configProvider := ContainerConfigProvider{ - containerCache: map[string]*workloadmeta.Container{ - "nolabels": { - Runtime: workloadmeta.ContainerRuntimeContainerd, + cp := &ContainerConfigProvider{ + workloadmetaStore: store, + configCache: make(map[string]map[string]integration.Config), + configErrors: make(map[string]ErrorMsgSet), + } + + tests := []struct { + name string + events []workloadmeta.Event + changes integration.ConfigChanges + }{ + { + name: "create config", + events: []workloadmeta.Event{ + { + Type: workloadmeta.EventTypeSet, + Entity: basicDockerContainer(), + }, + }, + changes: integration.ConfigChanges{ + Schedule: basicDockerConfigs(), + }, + }, + { + name: "replace config", + events: []workloadmeta.Event{ + { + Type: workloadmeta.EventTypeSet, + Entity: basicDockerContainerSingleCheck(), + }, + }, + changes: integration.ConfigChanges{ + Unschedule: []integration.Config{ + basicDockerConfigs()[1], + }, + }, + }, + { + name: "delete config", + events: []workloadmeta.Event{ + { + Type: workloadmeta.EventTypeUnset, + Entity: basicDockerContainer(), + }, + }, + changes: integration.ConfigChanges{ + Unschedule: []integration.Config{ + basicDockerConfigs()[0], + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + changes := cp.processEvents(workloadmeta.EventBundle{ + Events: tt.events, + }) + + assert.Equal(t, tt.changes.Schedule, changes.Schedule) + assert.Equal(t, tt.changes.Unschedule, changes.Unschedule) + }) + } +} + +func TestGenerateConfig(t *testing.T) { + tests := []struct { + name string + entity workloadmeta.Entity + expectedConfigs []integration.Config + expectedErr ErrorMsgSet + containerCollectAll bool + }{ + { + name: "container check", + entity: basicDockerContainer(), + expectedConfigs: basicDockerConfigs(), + }, + { + name: "No annotations", + entity: &workloadmeta.KubernetesPod{ + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "testName", + ID: "testID", + }, + }, + }, + }, + { + name: "v2 annotations", + entity: &workloadmeta.KubernetesPod{ + EntityMeta: workloadmeta.EntityMeta{ + Annotations: map[string]string{ + "ad.datadoghq.com/apache.checks": `{ + "http_check": { + "instances": [ + { + "name": "My service", + "url": "http://%%host%%", + "timeout": 1 + } + ] + } + }`, + "ad.datadoghq.com/apache.check_names": "[\"invalid\"]", + "ad.datadoghq.com/apache.init_configs": "[{}]", + "ad.datadoghq.com/apache.instances": "[{}]", + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "apache", + ID: "3b8efe0c50e8", + }, + }, + }, + expectedConfigs: []integration.Config{ + { + Name: "http_check", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, + Source: "container:docker://3b8efe0c50e8", + }, }, - "3b8efe0c50e8": { + expectedErr: nil, + }, + { + name: "New + old, new takes over", + entity: &workloadmeta.KubernetesPod{ + EntityMeta: workloadmeta.EntityMeta{ + Annotations: map[string]string{ + "ad.datadoghq.com/apache.check_names": "[\"http_check\"]", + "ad.datadoghq.com/apache.init_configs": "[{}]", + "ad.datadoghq.com/apache.instances": "[{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", + "service-discovery.datadoghq.com/apache.check_names": "[\"invalid\"]", + "service-discovery.datadoghq.com/apache.init_configs": "[{}]", + "service-discovery.datadoghq.com/apache.instances": "[{}]", + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "apache", + ID: "3b8efe0c50e8", + }, + }, + }, + expectedConfigs: []integration.Config{ + { + Name: "http_check", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, + Source: "container:docker://3b8efe0c50e8", + }, + }, + expectedErr: nil, + }, + { + name: "New annotation prefix, two templates", + entity: &workloadmeta.KubernetesPod{ EntityMeta: workloadmeta.EntityMeta{ - Labels: map[string]string{ - "com.datadoghq.ad.check_names": "[\"apache\",\"http_check\"]", - "com.datadoghq.ad.init_configs": "[{}, {}]", - "com.datadoghq.ad.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"},{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", + Annotations: map[string]string{ + "ad.datadoghq.com/apache.check_names": "[\"http_check\"]", + "ad.datadoghq.com/apache.init_configs": "[{}]", + "ad.datadoghq.com/apache.instances": "[{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", + "ad.datadoghq.com/nginx.check_names": "[\"http_check\"]", + "ad.datadoghq.com/nginx.init_configs": "[{}]", + "ad.datadoghq.com/nginx.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", }, }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "apache", + ID: "3b8efe0c50e8", + }, + { + Name: "nginx", + ID: "4ac8352d70bf1", + }, + }, + }, + expectedConfigs: []integration.Config{ + { + Name: "http_check", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, + Source: "container:docker://3b8efe0c50e8", + }, + { + Name: "http_check", + ADIdentifiers: []string{"docker://4ac8352d70bf1"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"Other service\",\"timeout\":1,\"url\":\"http://%%host_external%%\"}")}, + Source: "container:docker://4ac8352d70bf1", + }, + }, + expectedErr: nil, + }, + { + name: "Legacy annotation prefix, two checks in one template", + entity: &workloadmeta.KubernetesPod{ + EntityMeta: workloadmeta.EntityMeta{ + Annotations: map[string]string{ + "service-discovery.datadoghq.com/apache.check_names": "[\"apache\",\"http_check\"]", + "service-discovery.datadoghq.com/apache.init_configs": "[{},{}]", + "service-discovery.datadoghq.com/apache.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"},{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "apache", + ID: "3b8efe0c50e8", + }, + }, + }, + expectedConfigs: []integration.Config{ + { + Name: "apache", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"apache_status_url\":\"http://%%host%%/server-status?auto\"}")}, + Source: "container:docker://3b8efe0c50e8", + }, + { + Name: "http_check", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, + Source: "container:docker://3b8efe0c50e8", + }, + }, + expectedErr: nil, + }, + { + name: "Custom check ID", + entity: &workloadmeta.KubernetesPod{ + EntityMeta: workloadmeta.EntityMeta{ + Annotations: map[string]string{ + "ad.datadoghq.com/nginx.check.id": "nginx-custom", + "ad.datadoghq.com/nginx-custom.check_names": "[\"http_check\"]", + "ad.datadoghq.com/nginx-custom.init_configs": "[{}]", + "ad.datadoghq.com/nginx-custom.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "nginx", + ID: "4ac8352d70bf1", + }, + }, + }, + expectedConfigs: []integration.Config{ + { + Name: "http_check", + ADIdentifiers: []string{"docker://4ac8352d70bf1"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"Other service\",\"timeout\":1,\"url\":\"http://%%host_external%%\"}")}, + Source: "container:docker://4ac8352d70bf1", + }, + }, + expectedErr: nil, + }, + { + name: "Non-duplicate errors", + entity: &workloadmeta.KubernetesPod{ + EntityMeta: workloadmeta.EntityMeta{ + Name: "nginx-1752f8c774-wtjql", + Namespace: "testNamespace", + Annotations: map[string]string{ + "ad.datadoghq.com/nonmatching.check_names": "[\"http_check\"]", + "ad.datadoghq.com/nonmatching.init_configs": "[{}]", + "ad.datadoghq.com/nonmatching.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "nginx", + ID: "4ac8352d70bf1", + }, + { + Name: "apache", + ID: "3b8efe0c50e8", + }, + }, + }, + expectedErr: ErrorMsgSet{ + "annotation ad.datadoghq.com/nonmatching.check_names is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, + "annotation ad.datadoghq.com/nonmatching.init_configs is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, + "annotation ad.datadoghq.com/nonmatching.instances is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, + }, + }, + { + name: "One invalid config, one valid config", + entity: &workloadmeta.KubernetesPod{ + EntityMeta: workloadmeta.EntityMeta{ + Annotations: map[string]string{ + "ad.datadoghq.com/nginx.check_names": "[\"http_check\"]", + "ad.datadoghq.com/nginx.init_configs": "[{}]", + "ad.datadoghq.com/nginx.instances": "[{\"name\": \"nginx\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", + "ad.datadoghq.com/nginx.logs": "[{\"source\": \"nginx\" \"service\": \"nginx\"}]", // invalid json + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "nginx", + ID: "4ac8352d70bf1", + }, + }, + }, + expectedConfigs: []integration.Config{ + { + Name: "http_check", + ADIdentifiers: []string{"docker://4ac8352d70bf1"}, + InitConfig: integration.Data("{}"), + Instances: []integration.Data{integration.Data("{\"name\":\"nginx\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, + Source: "container:docker://4ac8352d70bf1", + }, + }, + expectedErr: ErrorMsgSet{ + "could not extract logs config: in logs: invalid character '\"' after object key:value pair": {}, + }, + }, + { + name: "bare container, container collect all", + entity: &workloadmeta.Container{ + EntityID: workloadmeta.EntityID{ + ID: "3b8efe0c50e8", + }, Runtime: workloadmeta.ContainerRuntimeDocker, }, + expectedConfigs: []integration.Config{ + { + Name: "container_collect_all", + Source: "container:docker://3b8efe0c50e8", + LogsConfig: integration.Data("[{}]"), + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + }, + }, + containerCollectAll: true, }, } - checks, err := configProvider.generateConfigs() - assert.Nil(t, err) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + config.Datadog.Set("logs_config.container_collect_all", tt.containerCollectAll) + defer config.Datadog.Set("logs_config.container_collect_all", false) + + store := workloadmetatesting.NewStore() - assert.Len(t, checks, 2) + if pod, ok := tt.entity.(*workloadmeta.KubernetesPod); ok { + for _, c := range pod.Containers { + store.Set(&workloadmeta.Container{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainer, + ID: c.ID, + }, + Runtime: workloadmeta.ContainerRuntimeDocker, + }) + } + } + + cp := &ContainerConfigProvider{ + workloadmetaStore: store, + configCache: make(map[string]map[string]integration.Config), + configErrors: make(map[string]ErrorMsgSet), + } + + configs, err := cp.generateConfig(tt.entity) + + assert.Equal(t, tt.expectedConfigs, configs) + assert.Equal(t, tt.expectedErr, err) + }) + } +} + +func basicDockerContainer() *workloadmeta.Container { + return &workloadmeta.Container{ + EntityID: workloadmeta.EntityID{ + ID: "3b8efe0c50e8", + Kind: workloadmeta.KindContainer, + }, + EntityMeta: workloadmeta.EntityMeta{ + Labels: map[string]string{ + "com.datadoghq.ad.check_names": "[\"apache\",\"http_check\"]", + "com.datadoghq.ad.init_configs": "[{}, {}]", + "com.datadoghq.ad.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"},{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", + }, + }, + Runtime: workloadmeta.ContainerRuntimeDocker, + } +} - assert.Equal(t, []string{"docker://3b8efe0c50e8"}, checks[0].ADIdentifiers) - assert.Equal(t, "{}", string(checks[0].InitConfig)) - assert.Equal(t, "container:docker://3b8efe0c50e8", checks[0].Source) - assert.Len(t, checks[0].Instances, 1) - assert.Equal(t, "{\"apache_status_url\":\"http://%%host%%/server-status?auto\"}", string(checks[0].Instances[0])) - assert.Equal(t, "apache", checks[0].Name) +func basicDockerContainerSingleCheck() *workloadmeta.Container { + return &workloadmeta.Container{ + EntityID: workloadmeta.EntityID{ + ID: "3b8efe0c50e8", + Kind: workloadmeta.KindContainer, + }, + EntityMeta: workloadmeta.EntityMeta{ + Labels: map[string]string{ + "com.datadoghq.ad.check_names": "[\"apache\"]", + "com.datadoghq.ad.init_configs": "[{}]", + "com.datadoghq.ad.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"}]", + }, + }, + Runtime: workloadmeta.ContainerRuntimeDocker, + } +} - assert.Equal(t, []string{"docker://3b8efe0c50e8"}, checks[1].ADIdentifiers) - assert.Equal(t, "{}", string(checks[1].InitConfig)) - assert.Equal(t, "container:docker://3b8efe0c50e8", checks[1].Source) - assert.Len(t, checks[1].Instances, 1) - assert.Equal(t, "{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}", string(checks[1].Instances[0])) - assert.Equal(t, "http_check", checks[1].Name) +func basicDockerConfigs() []integration.Config { + return []integration.Config{ + { + Name: "apache", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Source: "container:docker://3b8efe0c50e8", + Instances: []integration.Data{ + integration.Data("{\"apache_status_url\":\"http://%%host%%/server-status?auto\"}"), + }, + }, + { + Name: "http_check", + ADIdentifiers: []string{"docker://3b8efe0c50e8"}, + InitConfig: integration.Data("{}"), + Source: "container:docker://3b8efe0c50e8", + Instances: []integration.Data{ + integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}"), + }, + }, + } } diff --git a/pkg/autodiscovery/providers/kubecontainer.go b/pkg/autodiscovery/providers/kubecontainer.go deleted file mode 100644 index aca93f7ac4cd9..0000000000000 --- a/pkg/autodiscovery/providers/kubecontainer.go +++ /dev/null @@ -1,321 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !serverless -// +build !serverless - -package providers - -import ( - "context" - "fmt" - "strings" - "sync" - - "github.com/DataDog/datadog-agent/pkg/autodiscovery/common/utils" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers/names" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/containers" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" -) - -// KubeContainerConfigProvider implements the ConfigProvider interface for both pods and containers -// This provider is meant to replace both the `ContainerConfigProvider` and the `KubeletConfigProvider` components. -// Once the rollout is complete, `pkg/autodiscovery/providers/container.go` and `pkg/autodiscovery/providers/kubelet.go` -// should be deleted and this provider should be renamed to something more generic such as -// `ContainerConfigProvider` -type KubeContainerConfigProvider struct { - workloadmetaStore workloadmeta.Store - configErrors map[string]ErrorMsgSet // map[entity name]ErrorMsgSet - configCache map[string]map[string]integration.Config // map[entity name]map[config digest]integration.Config - mu sync.RWMutex -} - -// NewKubeContainerConfigProvider returns a new ConfigProvider subscribed to both container -// and pods -func NewKubeContainerConfigProvider(*config.ConfigurationProviders) (ConfigProvider, error) { - return &KubeContainerConfigProvider{ - workloadmetaStore: workloadmeta.GetGlobalStore(), - configCache: make(map[string]map[string]integration.Config), - configErrors: make(map[string]ErrorMsgSet), - }, nil -} - -// String returns a string representation of the KubeContainerConfigProvider -func (k *KubeContainerConfigProvider) String() string { - return names.KubeContainer -} - -// Stream starts listening to workloadmeta to generate configs as they come -// instead of relying on a periodic call to Collect. -func (k *KubeContainerConfigProvider) Stream(ctx context.Context) <-chan integration.ConfigChanges { - const name = "ad-kubecontainerprovider" - - // outCh must be unbuffered. processing of workloadmeta events must not - // proceed until the config is processed by autodiscovery, as configs - // need to be generated before any associated services. - outCh := make(chan integration.ConfigChanges) - - inCh := k.workloadmetaStore.Subscribe(name, workloadmeta.ConfigProviderPriority, workloadmeta.NewFilter( - []workloadmeta.Kind{workloadmeta.KindKubernetesPod, workloadmeta.KindContainer}, - workloadmeta.SourceAll, - workloadmeta.EventTypeAll, - )) - - go func() { - for { - select { - case <-ctx.Done(): - k.workloadmetaStore.Unsubscribe(inCh) - - case evBundle, ok := <-inCh: - if !ok { - return - } - - // send changes even when they're empty, as we - // need to signal that an event has been - // received, for flow control reasons - outCh <- k.processEvents(evBundle) - - close(evBundle.Ch) - } - } - }() - - return outCh -} - -func (k *KubeContainerConfigProvider) processEvents(evBundle workloadmeta.EventBundle) integration.ConfigChanges { - k.mu.Lock() - defer k.mu.Unlock() - - changes := integration.ConfigChanges{} - - for _, event := range evBundle.Events { - entityName := buildEntityName(event.Entity) - - switch event.Type { - case workloadmeta.EventTypeSet: - configs, err := k.generateConfig(event.Entity) - - if err != nil { - k.configErrors[entityName] = err - } else { - delete(k.configErrors, entityName) - } - - configCache, ok := k.configCache[entityName] - if !ok { - configCache = make(map[string]integration.Config) - k.configCache[entityName] = configCache - } - - configsToUnschedule := make(map[string]integration.Config) - for digest, config := range configCache { - configsToUnschedule[digest] = config - } - - for _, config := range configs { - digest := config.Digest() - if _, ok := configCache[digest]; ok { - delete(configsToUnschedule, digest) - } else { - configCache[digest] = config - changes.ScheduleConfig(config) - } - } - - for oldDigest, oldConfig := range configsToUnschedule { - delete(configCache, oldDigest) - changes.UnscheduleConfig(oldConfig) - } - - case workloadmeta.EventTypeUnset: - oldConfigs, found := k.configCache[entityName] - if !found { - log.Debugf("entity %q removed from workloadmeta store but not found in cache. skipping", entityName) - continue - } - - for _, oldConfig := range oldConfigs { - changes.UnscheduleConfig(oldConfig) - } - - delete(k.configCache, entityName) - delete(k.configErrors, entityName) - - default: - log.Errorf("cannot handle event of type %d", event.Type) - } - } - - return changes -} - -func (k *KubeContainerConfigProvider) generateConfig(e workloadmeta.Entity) ([]integration.Config, ErrorMsgSet) { - var ( - errMsgSet ErrorMsgSet - errs []error - configs []integration.Config - ) - - switch entity := e.(type) { - case *workloadmeta.Container: - // kubernetes containers need to be handled together with their - // pod, so they generate a single []integration.Config. - // otherwise, it's possible for a container that belongs to an - // AD-annotated pod to briefly be scheduled without its - // annotations. - if !findKubernetesInLabels(entity.Labels) { - configs, errs = k.generateContainerConfig(entity) - - containerID := entity.ID - containerEntityName := containers.BuildEntityName(string(entity.Runtime), containerID) - configs = utils.AddContainerCollectAllConfigs(configs, containerEntityName) - - for idx := range configs { - configs[idx].Source = names.Container + ":" + containerEntityName - } - } - - case *workloadmeta.KubernetesPod: - containerIdentifiers := map[string]struct{}{} - containerNames := map[string]struct{}{} - for _, podContainer := range entity.Containers { - container, err := k.workloadmetaStore.GetContainer(podContainer.ID) - if err != nil { - log.Debugf("Pod %q has reference to non-existing container %q", entity.Name, podContainer.ID) - continue - } - - var ( - c []integration.Config - errors []error - ) - - c, errors = k.generateContainerConfig(container) - configs = append(configs, c...) - errs = append(errs, errors...) - - adIdentifier := podContainer.Name - if customADID, found := utils.ExtractCheckIDFromPodAnnotations(entity.Annotations, podContainer.Name); found { - adIdentifier = customADID - } - - containerEntity := containers.BuildEntityName(string(container.Runtime), container.ID) - c, errors = utils.ExtractTemplatesFromPodAnnotations( - containerEntity, - entity.Annotations, - adIdentifier, - ) - - // container_collect_all configs must be added after - // configs generated from annotations, since services - // are reconciled against configs one-by-one instead of - // as a set, so if a container_collect_all config - // appears before an annotation one, it'll cause a logs - // config to be scheduled as container_collect_all, - // unscheduled, and then re-scheduled correctly. - c = utils.AddContainerCollectAllConfigs(c, containerEntity) - - if len(errors) > 0 { - errs = append(errs, errors...) - if len(c) == 0 { - // Only got errors, no valid configs so - // let's move on to the next container. - continue - } - } - - containerIdentifiers[adIdentifier] = struct{}{} - containerNames[podContainer.Name] = struct{}{} - - for idx := range c { - c[idx].Source = names.Container + ":" + containerEntity - } - - configs = append(configs, c...) - } - - errs = append(errs, utils.ValidateAnnotationsMatching( - entity.Annotations, - containerIdentifiers, - containerNames)...) - - default: - log.Errorf("cannot handle entity of kind %s", e.GetID().Kind) - } - - if len(errs) > 0 { - errMsgSet = make(ErrorMsgSet) - for _, err := range errs { - errMsgSet[err.Error()] = struct{}{} - } - } - - return configs, errMsgSet -} - -func (k *KubeContainerConfigProvider) generateContainerConfig(container *workloadmeta.Container) ([]integration.Config, []error) { - var ( - errs []error - configs []integration.Config - ) - - containerID := container.ID - containerEntityName := containers.BuildEntityName(string(container.Runtime), containerID) - configs, errs = utils.ExtractTemplatesFromContainerLabels(containerEntityName, container.Labels) - - return configs, errs -} - -// GetConfigErrors returns a map of configuration errors for each namespace/pod -func (k *KubeContainerConfigProvider) GetConfigErrors() map[string]ErrorMsgSet { - k.mu.RLock() - defer k.mu.RUnlock() - - errors := make(map[string]ErrorMsgSet, len(k.configErrors)) - - for entity, errset := range k.configErrors { - errors[entity] = errset - } - - return errors -} - -// buildEntityName is also used as display key in `agent status` "Configuration Errors" display. -// (for instance, incorrect annotation syntax or unknown container name). -// That's why it does not simply use Kind + ID. -// It needs to be unique over time. -// (for instance, namespace+name is not unique for a POD as it can be deleted/created with a different UID, see STS rollout) -func buildEntityName(e workloadmeta.Entity) string { - entityID := e.GetID() - switch entity := e.(type) { - case *workloadmeta.KubernetesPod: - return fmt.Sprintf("%s/%s (%s)", entity.Namespace, entity.Name, entity.ID) - case *workloadmeta.Container: - return containers.BuildEntityName(string(entity.Runtime), entityID.ID) - default: - return fmt.Sprintf("%s://%s", entityID.Kind, entityID.ID) - } -} - -// findKubernetesInLabels traverses a map of container labels and -// returns true if a kubernetes label is detected -func findKubernetesInLabels(labels map[string]string) bool { - for name := range labels { - if strings.HasPrefix(name, "io.kubernetes.") { - return true - } - } - return false -} - -func init() { - RegisterProvider(names.KubeContainer, NewKubeContainerConfigProvider) -} diff --git a/pkg/autodiscovery/providers/kubecontainer_test.go b/pkg/autodiscovery/providers/kubecontainer_test.go deleted file mode 100644 index f084234ca7e88..0000000000000 --- a/pkg/autodiscovery/providers/kubecontainer_test.go +++ /dev/null @@ -1,458 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !serverless -// +build !serverless - -package providers - -import ( - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" - workloadmetatesting "github.com/DataDog/datadog-agent/pkg/workloadmeta/testing" -) - -func TestProcessEvents(t *testing.T) { - store := workloadmetatesting.NewStore() - - cp := &KubeContainerConfigProvider{ - workloadmetaStore: store, - configCache: make(map[string]map[string]integration.Config), - configErrors: make(map[string]ErrorMsgSet), - } - - tests := []struct { - name string - events []workloadmeta.Event - changes integration.ConfigChanges - }{ - { - name: "create config", - events: []workloadmeta.Event{ - { - Type: workloadmeta.EventTypeSet, - Entity: basicDockerContainer(), - }, - }, - changes: integration.ConfigChanges{ - Schedule: basicDockerConfigs(), - }, - }, - { - name: "replace config", - events: []workloadmeta.Event{ - { - Type: workloadmeta.EventTypeSet, - Entity: basicDockerContainerSingleCheck(), - }, - }, - changes: integration.ConfigChanges{ - Unschedule: []integration.Config{ - basicDockerConfigs()[1], - }, - }, - }, - { - name: "delete config", - events: []workloadmeta.Event{ - { - Type: workloadmeta.EventTypeUnset, - Entity: basicDockerContainer(), - }, - }, - changes: integration.ConfigChanges{ - Unschedule: []integration.Config{ - basicDockerConfigs()[0], - }, - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - changes := cp.processEvents(workloadmeta.EventBundle{ - Events: tt.events, - }) - - assert.Equal(t, tt.changes.Schedule, changes.Schedule) - assert.Equal(t, tt.changes.Unschedule, changes.Unschedule) - }) - } -} - -func TestGenerateConfig(t *testing.T) { - tests := []struct { - name string - entity workloadmeta.Entity - expectedConfigs []integration.Config - expectedErr ErrorMsgSet - containerCollectAll bool - }{ - { - name: "container check", - entity: basicDockerContainer(), - expectedConfigs: basicDockerConfigs(), - }, - { - name: "No annotations", - entity: &workloadmeta.KubernetesPod{ - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "testName", - ID: "testID", - }, - }, - }, - }, - { - name: "v2 annotations", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/apache.checks": `{ - "http_check": { - "instances": [ - { - "name": "My service", - "url": "http://%%host%%", - "timeout": 1 - } - ] - } - }`, - "ad.datadoghq.com/apache.check_names": "[\"invalid\"]", - "ad.datadoghq.com/apache.init_configs": "[{}]", - "ad.datadoghq.com/apache.instances": "[{}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedConfigs: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "container:docker://3b8efe0c50e8", - }, - }, - expectedErr: nil, - }, - { - name: "New + old, new takes over", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/apache.check_names": "[\"http_check\"]", - "ad.datadoghq.com/apache.init_configs": "[{}]", - "ad.datadoghq.com/apache.instances": "[{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - "service-discovery.datadoghq.com/apache.check_names": "[\"invalid\"]", - "service-discovery.datadoghq.com/apache.init_configs": "[{}]", - "service-discovery.datadoghq.com/apache.instances": "[{}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedConfigs: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "container:docker://3b8efe0c50e8", - }, - }, - expectedErr: nil, - }, - { - name: "New annotation prefix, two templates", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/apache.check_names": "[\"http_check\"]", - "ad.datadoghq.com/apache.init_configs": "[{}]", - "ad.datadoghq.com/apache.instances": "[{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - "ad.datadoghq.com/nginx.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nginx.init_configs": "[{}]", - "ad.datadoghq.com/nginx.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - }, - }, - expectedConfigs: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "container:docker://3b8efe0c50e8", - }, - { - Name: "http_check", - ADIdentifiers: []string{"docker://4ac8352d70bf1"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"Other service\",\"timeout\":1,\"url\":\"http://%%host_external%%\"}")}, - Source: "container:docker://4ac8352d70bf1", - }, - }, - expectedErr: nil, - }, - { - name: "Legacy annotation prefix, two checks in one template", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "service-discovery.datadoghq.com/apache.check_names": "[\"apache\",\"http_check\"]", - "service-discovery.datadoghq.com/apache.init_configs": "[{},{}]", - "service-discovery.datadoghq.com/apache.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"},{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedConfigs: []integration.Config{ - { - Name: "apache", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"apache_status_url\":\"http://%%host%%/server-status?auto\"}")}, - Source: "container:docker://3b8efe0c50e8", - }, - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "container:docker://3b8efe0c50e8", - }, - }, - expectedErr: nil, - }, - { - name: "Custom check ID", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/nginx.check.id": "nginx-custom", - "ad.datadoghq.com/nginx-custom.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nginx-custom.init_configs": "[{}]", - "ad.datadoghq.com/nginx-custom.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - }, - }, - expectedConfigs: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://4ac8352d70bf1"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"Other service\",\"timeout\":1,\"url\":\"http://%%host_external%%\"}")}, - Source: "container:docker://4ac8352d70bf1", - }, - }, - expectedErr: nil, - }, - { - name: "Non-duplicate errors", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Name: "nginx-1752f8c774-wtjql", - Namespace: "testNamespace", - Annotations: map[string]string{ - "ad.datadoghq.com/nonmatching.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nonmatching.init_configs": "[{}]", - "ad.datadoghq.com/nonmatching.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedErr: ErrorMsgSet{ - "annotation ad.datadoghq.com/nonmatching.check_names is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, - "annotation ad.datadoghq.com/nonmatching.init_configs is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, - "annotation ad.datadoghq.com/nonmatching.instances is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, - }, - }, - { - name: "One invalid config, one valid config", - entity: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/nginx.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nginx.init_configs": "[{}]", - "ad.datadoghq.com/nginx.instances": "[{\"name\": \"nginx\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - "ad.datadoghq.com/nginx.logs": "[{\"source\": \"nginx\" \"service\": \"nginx\"}]", // invalid json - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - }, - }, - expectedConfigs: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://4ac8352d70bf1"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"nginx\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "container:docker://4ac8352d70bf1", - }, - }, - expectedErr: ErrorMsgSet{ - "could not extract logs config: in logs: invalid character '\"' after object key:value pair": {}, - }, - }, - { - name: "bare container, container collect all", - entity: &workloadmeta.Container{ - EntityID: workloadmeta.EntityID{ - ID: "3b8efe0c50e8", - }, - Runtime: workloadmeta.ContainerRuntimeDocker, - }, - expectedConfigs: []integration.Config{ - { - Name: "container_collect_all", - Source: "container:docker://3b8efe0c50e8", - LogsConfig: integration.Data("[{}]"), - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - }, - }, - containerCollectAll: true, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - config.Datadog.Set("logs_config.container_collect_all", tt.containerCollectAll) - defer config.Datadog.Set("logs_config.container_collect_all", false) - - store := workloadmetatesting.NewStore() - - if pod, ok := tt.entity.(*workloadmeta.KubernetesPod); ok { - for _, c := range pod.Containers { - store.Set(&workloadmeta.Container{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindContainer, - ID: c.ID, - }, - Runtime: workloadmeta.ContainerRuntimeDocker, - }) - } - } - - cp := &KubeContainerConfigProvider{ - workloadmetaStore: store, - configCache: make(map[string]map[string]integration.Config), - configErrors: make(map[string]ErrorMsgSet), - } - - configs, err := cp.generateConfig(tt.entity) - - assert.Equal(t, tt.expectedConfigs, configs) - assert.Equal(t, tt.expectedErr, err) - }) - } -} - -func basicDockerContainer() *workloadmeta.Container { - return &workloadmeta.Container{ - EntityID: workloadmeta.EntityID{ - ID: "3b8efe0c50e8", - Kind: workloadmeta.KindContainer, - }, - EntityMeta: workloadmeta.EntityMeta{ - Labels: map[string]string{ - "com.datadoghq.ad.check_names": "[\"apache\",\"http_check\"]", - "com.datadoghq.ad.init_configs": "[{}, {}]", - "com.datadoghq.ad.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"},{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - }, - }, - Runtime: workloadmeta.ContainerRuntimeDocker, - } -} - -func basicDockerContainerSingleCheck() *workloadmeta.Container { - return &workloadmeta.Container{ - EntityID: workloadmeta.EntityID{ - ID: "3b8efe0c50e8", - Kind: workloadmeta.KindContainer, - }, - EntityMeta: workloadmeta.EntityMeta{ - Labels: map[string]string{ - "com.datadoghq.ad.check_names": "[\"apache\"]", - "com.datadoghq.ad.init_configs": "[{}]", - "com.datadoghq.ad.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"}]", - }, - }, - Runtime: workloadmeta.ContainerRuntimeDocker, - } -} - -func basicDockerConfigs() []integration.Config { - return []integration.Config{ - { - Name: "apache", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Source: "container:docker://3b8efe0c50e8", - Instances: []integration.Data{ - integration.Data("{\"apache_status_url\":\"http://%%host%%/server-status?auto\"}"), - }, - }, - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Source: "container:docker://3b8efe0c50e8", - Instances: []integration.Data{ - integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}"), - }, - }, - } -} diff --git a/pkg/autodiscovery/providers/kubelet.go b/pkg/autodiscovery/providers/kubelet.go deleted file mode 100644 index 80aca671470bc..0000000000000 --- a/pkg/autodiscovery/providers/kubelet.go +++ /dev/null @@ -1,236 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !serverless -// +build !serverless - -package providers - -import ( - "context" - "sync" - - "github.com/DataDog/datadog-agent/pkg/autodiscovery/common/utils" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers/names" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/telemetry" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/status/health" - "github.com/DataDog/datadog-agent/pkg/util" - "github.com/DataDog/datadog-agent/pkg/util/containers" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" -) - -// KubeletConfigProvider implements the ConfigProvider interface for the kubelet. -type KubeletConfigProvider struct { - workloadmetaStore workloadmeta.Store - podCache map[string]*workloadmeta.KubernetesPod - configErrors map[string]ErrorMsgSet - upToDate bool - streaming bool - once sync.Once - sync.RWMutex -} - -// NewKubeletConfigProvider returns a new ConfigProvider connected to kubelet. -// Connectivity is not checked at this stage to allow for retries, Collect will do it. -func NewKubeletConfigProvider(*config.ConfigurationProviders) (ConfigProvider, error) { - return &KubeletConfigProvider{ - workloadmetaStore: workloadmeta.GetGlobalStore(), - configErrors: make(map[string]ErrorMsgSet), - podCache: make(map[string]*workloadmeta.KubernetesPod), - }, nil -} - -// String returns a string representation of the KubeletConfigProvider -func (k *KubeletConfigProvider) String() string { - return names.Kubernetes -} - -// Collect retrieves all running pods and extract AD templates from their annotations. -func (k *KubeletConfigProvider) Collect(ctx context.Context) ([]integration.Config, error) { - k.once.Do(func() { - ch := make(chan struct{}) - go k.listen(ch) - <-ch - }) - - k.Lock() - k.upToDate = true - k.Unlock() - - return k.generateConfigs() -} - -// listen, closing the given channel after the initial set of events are received -func (k *KubeletConfigProvider) listen(ch chan struct{}) { - const name = "ad-kubeletprovider" - - k.Lock() - k.streaming = true - health := health.RegisterLiveness(name) - defer func() { - err := health.Deregister() - if err != nil { - log.Warnf("error de-registering health check: %s", err) - } - }() - k.Unlock() - - var ranOnce bool - - wlmetaCh := k.workloadmetaStore.Subscribe(name, workloadmeta.NormalPriority, workloadmeta.NewFilter( - []workloadmeta.Kind{workloadmeta.KindKubernetesPod}, - workloadmeta.SourceNodeOrchestrator, - workloadmeta.EventTypeAll, - )) - - for { - select { - case evBundle, ok := <-wlmetaCh: - if !ok { - return - } - - k.processEvents(evBundle) - - if !ranOnce { - close(ch) - ranOnce = true - } - - case <-health.C: - - } - } -} -func (k *KubeletConfigProvider) processEvents(evBundle workloadmeta.EventBundle) { - close(evBundle.Ch) - - for _, event := range evBundle.Events { - switch event.Type { - case workloadmeta.EventTypeSet: - k.addPod(event.Entity) - case workloadmeta.EventTypeUnset: - k.deletePod(event.Entity) - - default: - log.Errorf("cannot handle event of type %d", event.Type) - } - } - -} - -func (k *KubeletConfigProvider) addPod(entity workloadmeta.Entity) { - k.Lock() - defer k.Unlock() - pod := entity.(*workloadmeta.KubernetesPod) - k.podCache[pod.GetID().ID] = pod - k.upToDate = false -} - -func (k *KubeletConfigProvider) deletePod(entity workloadmeta.Entity) { - k.Lock() - defer k.Unlock() - delete(k.podCache, entity.GetID().ID) - k.upToDate = false -} - -func (k *KubeletConfigProvider) generateConfigs() ([]integration.Config, error) { - k.Lock() - defer k.Unlock() - - adErrors := make(map[string]ErrorMsgSet) - - var configs []integration.Config - for _, pod := range k.podCache { - var errs []error - containerIdentifiers := map[string]struct{}{} - containerNames := map[string]struct{}{} - for _, podContainer := range pod.Containers { - container, err := k.workloadmetaStore.GetContainer(podContainer.ID) - if err != nil { - log.Debugf("Pod %q has reference to non-existing container %q", pod.Name, podContainer.ID) - continue - } - - adIdentifier := podContainer.Name - if customADID, found := utils.ExtractCheckIDFromPodAnnotations(pod.Annotations, podContainer.Name); found { - adIdentifier = customADID - } - - containerEntity := containers.BuildEntityName(string(container.Runtime), container.ID) - c, errors := utils.ExtractTemplatesFromPodAnnotations( - containerEntity, - pod.Annotations, - adIdentifier, - ) - - if len(errors) > 0 { - for _, err := range errors { - log.Errorf("Can't parse template for pod %s: %s", pod.Name, err) - errs = append(errs, err) - } - if len(c) == 0 { - // Only got errors, no valid configs so let's move on to the next container. - continue - } - } - - if util.CcaInAD() { - c = utils.AddContainerCollectAllConfigs(c, containerEntity) - } - - containerIdentifiers[adIdentifier] = struct{}{} - containerNames[podContainer.Name] = struct{}{} - - for idx := range c { - c[idx].Source = "kubelet:" + containerEntity - } - - configs = append(configs, c...) - } - - errs = append(errs, utils.ValidateAnnotationsMatching( - pod.Annotations, - containerIdentifiers, - containerNames)...) - - namespacedName := pod.Namespace + "/" + pod.Name - for _, err := range errs { - if _, found := adErrors[namespacedName]; !found { - adErrors[namespacedName] = map[string]struct{}{err.Error(): {}} - } else { - adErrors[namespacedName][err.Error()] = struct{}{} - } - } - } - - k.configErrors = adErrors - telemetry.Errors.Set(float64(len(adErrors)), names.Kubernetes) - - return configs, nil -} - -// IsUpToDate checks whether we have new pods to parse, based on events -// received by the listen goroutine. If listening fails, we fallback to -// collecting everytime. -func (k *KubeletConfigProvider) IsUpToDate(ctx context.Context) (bool, error) { - k.RLock() - defer k.RUnlock() - return k.streaming && k.upToDate, nil -} - -func init() { - RegisterProvider(names.KubeletRegisterName, NewKubeletConfigProvider) -} - -// GetConfigErrors returns a map of configuration errors for each namespace/pod -func (k *KubeletConfigProvider) GetConfigErrors() map[string]ErrorMsgSet { - k.RLock() - defer k.RUnlock() - return k.configErrors -} diff --git a/pkg/autodiscovery/providers/kubelet_test.go b/pkg/autodiscovery/providers/kubelet_test.go deleted file mode 100644 index c4ef3db441dd9..0000000000000 --- a/pkg/autodiscovery/providers/kubelet_test.go +++ /dev/null @@ -1,312 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !serverless -// +build !serverless - -package providers - -import ( - "fmt" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" - workloadmetatesting "github.com/DataDog/datadog-agent/pkg/workloadmeta/testing" -) - -func TestParseKubeletPodlist(t *testing.T) { - for nb, tc := range []struct { - desc string - pod *workloadmeta.KubernetesPod - expectedCfg []integration.Config - expectedErr ErrorMsgSet - }{ - { - desc: "No annotations", - pod: &workloadmeta.KubernetesPod{ - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "testName", - ID: "testID", - }, - }, - }, - expectedCfg: nil, - expectedErr: nil, - }, - { - desc: "v2 annotations", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/apache.checks": `{ - "http_check": { - "instances": [ - { - "name": "My service", - "url": "http://%%host%%", - "timeout": 1 - } - ] - } - }`, - "ad.datadoghq.com/apache.check_names": "[\"invalid\"]", - "ad.datadoghq.com/apache.init_configs": "[{}]", - "ad.datadoghq.com/apache.instances": "[{}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedCfg: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "kubelet:docker://3b8efe0c50e8", - }, - }, - expectedErr: nil, - }, - { - desc: "New + old, new takes over", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/apache.check_names": "[\"http_check\"]", - "ad.datadoghq.com/apache.init_configs": "[{}]", - "ad.datadoghq.com/apache.instances": "[{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - "service-discovery.datadoghq.com/apache.check_names": "[\"invalid\"]", - "service-discovery.datadoghq.com/apache.init_configs": "[{}]", - "service-discovery.datadoghq.com/apache.instances": "[{}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedCfg: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "kubelet:docker://3b8efe0c50e8", - }, - }, - expectedErr: nil, - }, - { - desc: "New annotation prefix, two templates", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/apache.check_names": "[\"http_check\"]", - "ad.datadoghq.com/apache.init_configs": "[{}]", - "ad.datadoghq.com/apache.instances": "[{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - "ad.datadoghq.com/nginx.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nginx.init_configs": "[{}]", - "ad.datadoghq.com/nginx.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - }, - }, - expectedCfg: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "kubelet:docker://3b8efe0c50e8", - }, - { - Name: "http_check", - ADIdentifiers: []string{"docker://4ac8352d70bf1"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"Other service\",\"timeout\":1,\"url\":\"http://%%host_external%%\"}")}, - Source: "kubelet:docker://4ac8352d70bf1", - }, - }, - expectedErr: nil, - }, - { - desc: "Legacy annotation prefix, two checks in one template", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "service-discovery.datadoghq.com/apache.check_names": "[\"apache\",\"http_check\"]", - "service-discovery.datadoghq.com/apache.init_configs": "[{},{}]", - "service-discovery.datadoghq.com/apache.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"},{\"name\": \"My service\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedCfg: []integration.Config{ - { - Name: "apache", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"apache_status_url\":\"http://%%host%%/server-status?auto\"}")}, - Source: "kubelet:docker://3b8efe0c50e8", - }, - { - Name: "http_check", - ADIdentifiers: []string{"docker://3b8efe0c50e8"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"My service\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "kubelet:docker://3b8efe0c50e8", - }, - }, - expectedErr: nil, - }, - { - desc: "Custom check ID", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/nginx.check.id": "nginx-custom", - "ad.datadoghq.com/nginx-custom.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nginx-custom.init_configs": "[{}]", - "ad.datadoghq.com/nginx-custom.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - }, - }, - expectedCfg: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://4ac8352d70bf1"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"Other service\",\"timeout\":1,\"url\":\"http://%%host_external%%\"}")}, - Source: "kubelet:docker://4ac8352d70bf1", - }, - }, - expectedErr: nil, - }, - { - desc: "Non-duplicate errors", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Name: "nginx-1752f8c774-wtjql", - Namespace: "testNamespace", - Annotations: map[string]string{ - "ad.datadoghq.com/nonmatching.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nonmatching.init_configs": "[{}]", - "ad.datadoghq.com/nonmatching.instances": "[{\"name\": \"Other service\", \"url\": \"http://%%host_external%%\", \"timeout\": 1}]", - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - { - Name: "apache", - ID: "3b8efe0c50e8", - }, - }, - }, - expectedCfg: nil, - expectedErr: ErrorMsgSet{ - "annotation ad.datadoghq.com/nonmatching.check_names is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, - "annotation ad.datadoghq.com/nonmatching.init_configs is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, - "annotation ad.datadoghq.com/nonmatching.instances is invalid: nonmatching doesn't match a container identifier [apache nginx]": {}, - }, - }, - { - desc: "One invalid config, one valid config", - pod: &workloadmeta.KubernetesPod{ - EntityMeta: workloadmeta.EntityMeta{ - Annotations: map[string]string{ - "ad.datadoghq.com/nginx.check_names": "[\"http_check\"]", - "ad.datadoghq.com/nginx.init_configs": "[{}]", - "ad.datadoghq.com/nginx.instances": "[{\"name\": \"nginx\", \"url\": \"http://%%host%%\", \"timeout\": 1}]", - "ad.datadoghq.com/nginx.logs": "[{\"source\": \"nginx\" \"service\": \"nginx\"}]", // invalid json - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - Name: "nginx", - ID: "4ac8352d70bf1", - }, - }, - }, - expectedCfg: []integration.Config{ - { - Name: "http_check", - ADIdentifiers: []string{"docker://4ac8352d70bf1"}, - InitConfig: integration.Data("{}"), - Instances: []integration.Data{integration.Data("{\"name\":\"nginx\",\"timeout\":1,\"url\":\"http://%%host%%\"}")}, - Source: "kubelet:docker://4ac8352d70bf1", - }, - }, - expectedErr: ErrorMsgSet{ - "could not extract logs config: in logs: invalid character '\"' after object key:value pair": {}, - }, - }, - } { - t.Run(fmt.Sprintf("case %d: %s", nb, tc.desc), func(t *testing.T) { - store := workloadmetatesting.NewStore() - - for _, c := range tc.pod.Containers { - store.Set(&workloadmeta.Container{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindContainer, - ID: c.ID, - }, - Runtime: workloadmeta.ContainerRuntimeDocker, - }) - } - - m := &KubeletConfigProvider{ - workloadmetaStore: store, - configErrors: make(map[string]ErrorMsgSet), - podCache: map[string]*workloadmeta.KubernetesPod{ - tc.pod.GetID().ID: tc.pod, - }, - } - - checks, err := m.generateConfigs() - assert.NoError(t, err) - - assert.Equal(t, len(tc.expectedCfg), len(checks)) - assert.EqualValues(t, tc.expectedCfg, checks) - - namespacedName := tc.pod.Namespace + "/" + tc.pod.Name - assert.Equal(t, len(tc.expectedErr), len(m.configErrors[namespacedName])) - assert.EqualValues(t, tc.expectedErr, m.configErrors[namespacedName]) - }) - } -} diff --git a/pkg/autodiscovery/providers/prometheus_services.go b/pkg/autodiscovery/providers/prometheus_services.go index 8924d3e7b54c7..42644cf435854 100644 --- a/pkg/autodiscovery/providers/prometheus_services.go +++ b/pkg/autodiscovery/providers/prometheus_services.go @@ -139,36 +139,32 @@ func (p *PrometheusServicesConfigProvider) Collect(ctx context.Context) ([]integ var configs []integration.Config for _, svc := range services { for _, check := range p.checks { - serviceConfigs := utils.ConfigsForService(check, svc) - - if len(serviceConfigs) == 0 { - continue - } - - configs = append(configs, serviceConfigs...) - if !p.collectEndpoints { - continue - } - - ep, err := p.api.GetEndpoints(svc.GetNamespace(), svc.GetName()) - if err != nil { - return nil, err + // Only generates Service checks is Endpoints checks are not active + serviceConfigs := utils.ConfigsForService(check, svc) + + if len(serviceConfigs) != 0 { + configs = append(configs, serviceConfigs...) + } + } else { + ep, err := p.api.GetEndpoints(svc.GetNamespace(), svc.GetName()) + if err != nil { + return nil, err + } + + endpointConfigs := utils.ConfigsForServiceEndpoints(check, svc, ep) + + if len(endpointConfigs) == 0 { + continue + } + + configs = append(configs, endpointConfigs...) + + endpointsID := apiserver.EntityForEndpoints(ep.GetNamespace(), ep.GetName(), "") + p.Lock() + p.monitoredEndpoints[endpointsID] = true + p.Unlock() } - - endpointConfigs := utils.ConfigsForServiceEndpoints(check, svc, ep) - - if len(endpointConfigs) == 0 { - continue - } - - configs = append(configs, endpointConfigs...) - - endpointsID := apiserver.EntityForEndpoints(ep.GetNamespace(), ep.GetName(), "") - p.Lock() - p.monitoredEndpoints[endpointsID] = true - p.Unlock() - } } diff --git a/pkg/autodiscovery/providers/prometheus_services_test.go b/pkg/autodiscovery/providers/prometheus_services_test.go index 97747429d5ac9..c0e4c267d8f30 100644 --- a/pkg/autodiscovery/providers/prometheus_services_test.go +++ b/pkg/autodiscovery/providers/prometheus_services_test.go @@ -182,7 +182,7 @@ func TestPrometheusServicesCollect(t *testing.T) { }, }, { - name: "collect services and endpoints", + name: "collect only endpoints", checks: []*types.PrometheusCheck{types.DefaultPrometheusCheck}, services: []*v1.Service{ { @@ -230,17 +230,6 @@ func TestPrometheusServicesCollect(t *testing.T) { }, collectEndpoints: true, expectConfigs: []integration.Config{ - { - Name: "openmetrics", - InitConfig: integration.Data("{}"), - Instances: []integration.Data{ - integration.Data(`{"namespace":"","metrics":[".*"],"openmetrics_endpoint":"http://%%host%%:1234/mewtrix"}`), - }, - ADIdentifiers: []string{"kube_service://ns/svc"}, - Provider: "prometheus-services", - ClusterCheck: true, - Source: "prometheus_services:kube_service://ns/svc", - }, { Name: "openmetrics", ServiceID: "kube_endpoint_uid://ns/svc/10.0.0.1", diff --git a/pkg/autodiscovery/simple_configmgr.go b/pkg/autodiscovery/simple_configmgr.go deleted file mode 100644 index 75c26921de708..0000000000000 --- a/pkg/autodiscovery/simple_configmgr.go +++ /dev/null @@ -1,249 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2022-present Datadog, Inc. - -package autodiscovery - -import ( - "context" - "fmt" - "sync" - - "github.com/DataDog/datadog-agent/pkg/autodiscovery/configresolver" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/listeners" - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -// simpleConfigManager implements the "simple" config manager that reconciles -// services and templates without any priority, using a store as a backend. -// -// simpleConfigManager will be fully replaced by reconcilingConfigManager when -// the `logs_config.cca_in_ad` feature flag is removed. -type simpleConfigManager struct { - // m synchronizes all operations on this struct. - m sync.Mutex - - // store contains the data tracked by this manager. - store *store -} - -// newSimpleConfigManager creates a new, empty simpleConfigManager. -func newSimpleConfigManager() configManager { - return &simpleConfigManager{ - store: newStore(), - } -} - -// processNewService implements configManager#processNewService. -func (cm *simpleConfigManager) processNewService(adIdentifiers []string, svc listeners.Service) integration.ConfigChanges { - cm.m.Lock() - defer cm.m.Unlock() - - cm.store.setServiceForEntity(svc, svc.GetServiceID()) - - var templates []integration.Config - for _, adID := range adIdentifiers { - // map the AD identifier to this service for reverse lookup - cm.store.setADIDForServices(adID, svc.GetServiceID()) - tpls, err := cm.store.templateCache.get(adID) - if err != nil { - log.Debugf("Unable to fetch templates from the cache: %v", err) - } - templates = append(templates, tpls...) - } - - resolvedSet := map[string]integration.Config{} - for _, template := range templates { - // resolve the template - resolvedConfig, err := cm.resolveTemplateForService(template, svc) - if err != nil { - continue - } - - resolvedSet[resolvedConfig.Digest()] = resolvedConfig - } - - // build the config changes to return - changes := integration.ConfigChanges{} - for _, v := range resolvedSet { - changes.ScheduleConfig(v) - } - - return changes -} - -// processDelService implements configManager#processDelService. -func (cm *simpleConfigManager) processDelService(ctx context.Context, svc listeners.Service) integration.ConfigChanges { - cm.m.Lock() - defer cm.m.Unlock() - - cm.store.removeServiceForEntity(svc.GetServiceID()) - adIdentifiers, err := svc.GetADIdentifiers(ctx) - if err != nil { - log.Warnf("Couldn't get AD identifiers for service %q while removing it: %v", svc.GetServiceID(), err) - } else { - cm.store.removeServiceForADID(svc.GetServiceID(), adIdentifiers) - } - - removedConfigs := cm.store.removeConfigsForService(svc.GetServiceID()) - changes := integration.ConfigChanges{} - for _, c := range removedConfigs { - if cm.store.removeLoadedConfig(c) { - changes.UnscheduleConfig(c) - } - } - - return changes -} - -// processNewConfig implements configManager#processNewConfig. -func (cm *simpleConfigManager) processNewConfig(config integration.Config) integration.ConfigChanges { - cm.m.Lock() - defer cm.m.Unlock() - changes := integration.ConfigChanges{} - - if config.IsTemplate() { - // store the template in the cache in any case - if err := cm.store.templateCache.set(config); err != nil { - log.Errorf("Unable to store Check configuration in the cache: %s", err) - } - - // try to resolve the template - resolvedConfigs := cm.resolveTemplate(config) - if resolvedConfigs.IsEmpty() { - e := fmt.Sprintf("Can't resolve the template for %s at this moment.", config.Name) - errorStats.setResolveWarning(config.Name, e) - log.Debug(e) - return changes // empty result - } - - return resolvedConfigs - } - - // decrypt and store non-template config in AC as well - config, err := decryptConfig(config) - if err != nil { - log.Errorf("Dropping conf for '%s': %s", config.Name, err.Error()) - return changes // empty result - } - changes.ScheduleConfig(config) - cm.store.setLoadedConfig(config) - - return changes -} - -// processDelConfigs implements configManager#processDelConfigs. -func (cm *simpleConfigManager) processDelConfigs(configs []integration.Config) integration.ConfigChanges { - cm.m.Lock() - defer cm.m.Unlock() - changes := integration.ConfigChanges{} - - for _, c := range configs { - if c.IsTemplate() { - // Remove the resolved configurations - tplDigest := c.Digest() - removedConfigs := cm.store.removeConfigsForTemplate(tplDigest) - for _, rc := range removedConfigs { - if cm.store.removeLoadedConfig(rc) { - changes.UnscheduleConfig(rc) - } - } - - // Remove template from the cache - err := cm.store.templateCache.del(c) - if err != nil { - log.Debugf("Could not delete template: %v", err) - } - } else { - // Secrets need to be resolved before being unscheduled as otherwise - // the computed hashes can be different from the ones computed at schedule time. - c, err := decryptConfig(c) - if err != nil { - log.Errorf("Unable to resolve secrets for config '%s', check may not be unscheduled properly, err: %s", c.Name, err.Error()) - } - - cm.store.removeLoadedConfig(c) - changes.UnscheduleConfig(c) - } - } - - return changes -} - -// mapOverLoadedConfigs implements configManager#mapOverLoadedConfigs. -func (cm *simpleConfigManager) mapOverLoadedConfigs(f func(map[string]integration.Config)) { - cm.m.Lock() - defer cm.m.Unlock() - cm.store.mapOverLoadedConfigs(f) -} - -// resolveTemplateForService resolves a template config for the given service -func (cm *simpleConfigManager) resolveTemplateForService(tpl integration.Config, svc listeners.Service) (integration.Config, error) { - config, err := configresolver.Resolve(tpl, svc) - if err != nil { - newErr := fmt.Errorf("error resolving template %s for service %s: %v", tpl.Name, svc.GetServiceID(), err) - errorStats.setResolveWarning(tpl.Name, newErr.Error()) - return tpl, log.Warn(newErr) - } - resolvedConfig, err := decryptConfig(config) - if err != nil { - newErr := fmt.Errorf("error decrypting secrets in config %s for service %s: %v", config.Name, svc.GetServiceID(), err) - return config, log.Warn(newErr) - } - cm.store.setLoadedConfig(resolvedConfig) - cm.store.addConfigForService(svc.GetServiceID(), resolvedConfig) - cm.store.addConfigForTemplate(tpl.Digest(), resolvedConfig) - errorStats.removeResolveWarnings(tpl.Name) - return resolvedConfig, nil -} - -// resolveTemplate attempts to resolve a configuration template using the AD -// identifiers in the `integration.Config` struct to match a Service. -// -// The function might return more than one configuration for a single template, -// for example when the `ad_identifiers` section of a config.yaml file contains -// multiple entries, or when more than one Service has the same identifier, -// e.g. 'redis'. -// -// The function might return an empty list in the case the configuration has a -// list of Autodiscovery identifiers for services that are unknown to the -// resolver at this moment. -func (cm *simpleConfigManager) resolveTemplate(tpl integration.Config) integration.ConfigChanges { - // use a map to dedupe configurations - resolvedSet := map[string]integration.Config{} - - // go through the AD identifiers provided by the template - for _, id := range tpl.ADIdentifiers { - // check out whether any service we know has this identifier - serviceIds, found := cm.store.getServiceEntitiesForADID(id) - if !found { - s := fmt.Sprintf("No service found with this AD identifier: %s", id) - errorStats.setResolveWarning(tpl.Name, s) - log.Debugf(s) - continue - } - - for serviceID := range serviceIds { - svc := cm.store.getServiceForEntity(serviceID) - if svc == nil { - log.Warnf("Service %s was removed before we could resolve its config", serviceID) - continue - } - resolvedConfig, err := cm.resolveTemplateForService(tpl, svc) - if err != nil { - continue - } - resolvedSet[resolvedConfig.Digest()] = resolvedConfig - } - } - - // build the config changes to return - changes := integration.ConfigChanges{} - for _, v := range resolvedSet { - changes.ScheduleConfig(v) - } - - return changes -} diff --git a/pkg/autodiscovery/store.go b/pkg/autodiscovery/store.go index 5301379335443..17da45084851d 100644 --- a/pkg/autodiscovery/store.go +++ b/pkg/autodiscovery/store.go @@ -128,34 +128,6 @@ func (s *store) setTagsHashForService(serviceEntity string, hash string) { s.serviceToTagsHash[serviceEntity] = hash } -// setLoadedConfig stores a resolved config by its digest -func (s *store) setLoadedConfig(config integration.Config) { - s.m.Lock() - defer s.m.Unlock() - s.loadedConfigs[config.Digest()] = config -} - -// removeLoadedConfig removes a loaded config by its digest, returning true if it was found. -func (s *store) removeLoadedConfig(config integration.Config) bool { - s.m.Lock() - defer s.m.Unlock() - digest := config.Digest() - if _, found := s.loadedConfigs[digest]; found { - delete(s.loadedConfigs, digest) - return true - } - return false -} - -// mapOverLoadedConfigs calls the given function with the map of all -// loaded configs. This is done with the config store locked, so -// callers should perform minimal work within f. -func (s *store) mapOverLoadedConfigs(f func(map[string]integration.Config)) { - s.m.RLock() - defer s.m.RUnlock() - f(s.loadedConfigs) -} - // setJMXMetricsForConfigName stores the jmx metrics config for a config name func (s *store) setJMXMetricsForConfigName(config string, metrics integration.Data) { s.m.Lock() @@ -186,12 +158,6 @@ func (s *store) setServiceForEntity(svc listeners.Service, entity string) { s.entityToService[entity] = svc } -func (s *store) getServiceForEntity(entity string) listeners.Service { - s.m.Lock() - defer s.m.Unlock() - return s.entityToService[entity] -} - func (s *store) removeServiceForEntity(entity string) { s.m.Lock() defer s.m.Unlock() diff --git a/pkg/cli/standalone/jmx.go b/pkg/cli/standalone/jmx.go index 0fc9bcd870b75..2f9060b0da44c 100644 --- a/pkg/cli/standalone/jmx.go +++ b/pkg/cli/standalone/jmx.go @@ -55,7 +55,7 @@ func ExecJmxListWithRateMetricsJSON(selectedChecks []string, logLevel string, co // The common utils, including AutoConfig, must have already been initialized. func execJmxCommand(command string, selectedChecks []string, reporter jmxfetch.JMXReporter, output func(...interface{}), logLevel string, configs []integration.Config) error { // start the cmd HTTP server - if err := api.StartServer(nil); err != nil { + if err := api.StartServer(nil, nil); err != nil { return fmt.Errorf("Error while starting api server, exiting: %v", err) } diff --git a/pkg/cli/subcommands/check/command.go b/pkg/cli/subcommands/check/command.go index 40a30207009b3..ecdae2924c40d 100644 --- a/pkg/cli/subcommands/check/command.go +++ b/pkg/cli/subcommands/check/command.go @@ -105,8 +105,9 @@ func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { disableCmdPort() return fxutil.OneShot(run, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, true, core.WithConfigName(globalParams.ConfigName)). - LogForOneShot(globalParams.LoggerName, "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath, config.WithConfigName(globalParams.ConfigName)), + LogParams: log.LogForOneShot(globalParams.LoggerName, "off", true)}), core.Bundle, ) }, @@ -149,11 +150,14 @@ func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { func run(log log.Component, config config.Component, cliParams *cliParams) error { previousIntegrationTracing := false + previousIntegrationTracingExhaustive := false if cliParams.generateIntegrationTraces { if pkgconfig.Datadog.IsSet("integration_tracing") { previousIntegrationTracing = pkgconfig.Datadog.GetBool("integration_tracing") + previousIntegrationTracingExhaustive = pkgconfig.Datadog.GetBool("integration_tracing_exhaustive") } pkgconfig.Datadog.Set("integration_tracing", true) + pkgconfig.Datadog.Set("integration_tracing_exhaustive", true) } if len(cliParams.args) != 0 { @@ -476,6 +480,7 @@ func run(log log.Component, config config.Component, cliParams *cliParams) error if cliParams.generateIntegrationTraces { pkgconfig.Datadog.Set("integration_tracing", previousIntegrationTracing) + pkgconfig.Datadog.Set("integration_tracing_exhaustive", previousIntegrationTracingExhaustive) } return nil diff --git a/pkg/cli/subcommands/check/command_test.go b/pkg/cli/subcommands/check/command_test.go index 1fb825557acb3..6be7e7e86db24 100644 --- a/pkg/cli/subcommands/check/command_test.go +++ b/pkg/cli/subcommands/check/command_test.go @@ -31,6 +31,6 @@ func TestCommand(t *testing.T) { require.Equal(t, []string{"cleopatra"}, cliParams.args) require.Equal(t, 1, cliParams.checkDelay) require.True(t, cliParams.saveFlare) - require.Equal(t, true, coreParams.ConfigLoadSecrets) + require.Equal(t, true, coreParams.ConfigLoadSecrets()) }) } diff --git a/pkg/cli/subcommands/config/command.go b/pkg/cli/subcommands/config/command.go index 916f80ba601e0..d81323f83034b 100644 --- a/pkg/cli/subcommands/config/command.go +++ b/pkg/cli/subcommands/config/command.go @@ -50,8 +50,9 @@ func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { return fxutil.OneShot(callback, fx.Supply(cliParams), - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithConfigName(globalParams.ConfigName)). - LogForOneShot(globalParams.LoggerName, "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath, config.WithConfigName(globalParams.ConfigName)), + LogParams: log.LogForOneShot(globalParams.LoggerName, "off", true)}), core.Bundle, ) } diff --git a/pkg/cli/subcommands/config/command_test.go b/pkg/cli/subcommands/config/command_test.go index 7579061dd678a..1c8807e558338 100644 --- a/pkg/cli/subcommands/config/command_test.go +++ b/pkg/cli/subcommands/config/command_test.go @@ -28,7 +28,7 @@ func TestConfigCommand(t *testing.T) { showRuntimeConfiguration, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{}, cliParams.args) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } @@ -45,7 +45,7 @@ func TestConfigListRuntimeCommand(t *testing.T) { listRuntimeConfigurableValue, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{}, cliParams.args) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } @@ -62,7 +62,7 @@ func TestConfigSetCommand(t *testing.T) { setConfigValue, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"foo", "bar"}, cliParams.args) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } @@ -79,6 +79,6 @@ func TestConfigGetCommand(t *testing.T) { getConfigValue, func(cliParams *cliParams, coreParams core.BundleParams) { require.Equal(t, []string{"foo"}, cliParams.args) - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/pkg/cli/subcommands/health/command.go b/pkg/cli/subcommands/health/command.go index 3818d72f69e5a..a5bbe8510e2e1 100644 --- a/pkg/cli/subcommands/health/command.go +++ b/pkg/cli/subcommands/health/command.go @@ -44,8 +44,9 @@ func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { globalParams := globalParamsGetter() return fxutil.OneShot(requestHealth, - fx.Supply(core.CreateAgentBundleParams(globalParams.ConfFilePath, false, core.WithConfigName(globalParams.ConfigName)). - LogForOneShot(globalParams.LoggerName, "off", true)), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath, config.WithConfigName(globalParams.ConfigName)), + LogParams: log.LogForOneShot(globalParams.LoggerName, "off", true)}), core.Bundle, ) }, diff --git a/pkg/cli/subcommands/health/command_test.go b/pkg/cli/subcommands/health/command_test.go index 6e1d34a450904..b55c8d36858f5 100644 --- a/pkg/cli/subcommands/health/command_test.go +++ b/pkg/cli/subcommands/health/command_test.go @@ -27,6 +27,6 @@ func TestCommand(t *testing.T) { []string{"health"}, requestHealth, func(coreParams core.BundleParams) { - require.Equal(t, false, coreParams.ConfigLoadSecrets) + require.Equal(t, false, coreParams.ConfigLoadSecrets()) }) } diff --git a/pkg/cloudfoundry/containertagger/container_tagger.go b/pkg/cloudfoundry/containertagger/container_tagger.go index 9a263910ee35b..3fc0d8f0305a8 100644 --- a/pkg/cloudfoundry/containertagger/container_tagger.go +++ b/pkg/cloudfoundry/containertagger/container_tagger.go @@ -87,10 +87,13 @@ func (c *ContainerTagger) Start(ctx context.Context) { } func (c *ContainerTagger) processEvent(ctx context.Context, evt workloadmeta.Event) error { - containerID := evt.Entity.GetID().ID - + entity := evt.Entity + containerID := entity.GetID().ID if evt.Type == workloadmeta.EventTypeSet { - storeContainer := evt.Entity.(*workloadmeta.Container) + eventTimestamp := time.Now().UnixNano() + storeContainer := entity.(*workloadmeta.Container) + eventID := fmt.Sprintf("%s-%d", containerID, eventTimestamp) + log.Debugf("Processing Event (id %s): %+v", eventID, storeContainer) // extract tags hostTags := host.GetHostTags(ctx, true) @@ -121,13 +124,14 @@ func (c *ContainerTagger) processEvent(ctx context.Context, evt workloadmeta.Eve go func() { var exitCode int var err error - for retry := 0; retry < c.retryCount; retry++ { - log.Infof("Updating tags in container `%s` retry #%d", containerID, retry) + for attempt := 1; attempt <= c.retryCount; attempt++ { + log.Infof("Updating tags in container `%s` attempt #%d", containerID, attempt) + log.Debugf("Update attempt #%d for event %s", attempt, eventID) exitCode, err = updateTagsInContainer(container, tags) if err != nil { log.Warnf("Error running a process inside container `%s`: %v", containerID, err) } else if exitCode == 0 { - log.Debugf("Successfully updated tags in container `%s`", containerID) + log.Infof("Successfully updated tags in container `%s`", containerID) return } log.Debugf("Process for container '%s' exited with code: %d", containerID, exitCode) diff --git a/pkg/clusteragent/admission/common/const.go b/pkg/clusteragent/admission/common/const.go index 24feb5ac0edb9..4e6e8727da7c9 100644 --- a/pkg/clusteragent/admission/common/const.go +++ b/pkg/clusteragent/admission/common/const.go @@ -14,4 +14,10 @@ const ( // InjectionModeLabelKey pod label to chose the config injection at the pod level. InjectionModeLabelKey = "admission.datadoghq.com/config.mode" + + // LibVersionAnnotKeyFormat is the format of the library version annotation + LibVersionAnnotKeyFormat = "admission.datadoghq.com/%s-lib.version" + + // LibConfigV1AnnotKeyFormat is the format of the library config annotation + LibConfigV1AnnotKeyFormat = "admission.datadoghq.com/%s-lib.config.v1" ) diff --git a/pkg/clusteragent/admission/common/lib_config.go b/pkg/clusteragent/admission/common/lib_config.go new file mode 100644 index 0000000000000..bf1f56f0aaed3 --- /dev/null +++ b/pkg/clusteragent/admission/common/lib_config.go @@ -0,0 +1,92 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package common + +import ( + "fmt" + "strings" + + corev1 "k8s.io/api/core/v1" +) + +// LibConfig holds the APM library configuration +type LibConfig struct { + Version int `yaml:"version,omitempty" json:"version,omitempty"` // config schema version, not config version + ServiceLanguage string `yaml:"service_language,omitempty" json:"service_language,omitempty"` + + Tracing *bool `yaml:"tracing_enabled,omitempty" json:"tracing_enabled,omitempty"` + LogInjection *bool `yaml:"log_injection_enabled,omitempty" json:"log_injection_enabled,omitempty"` + HealthMetrics *bool `yaml:"health_metrics_enabled,omitempty" json:"health_metrics_enabled,omitempty"` + RuntimeMetrics *bool `yaml:"runtime_metrics_enabled,omitempty" json:"runtime_metrics_enabled,omitempty"` + TracingSamplingRate *float64 `yaml:"tracing_sampling_rate,omitempty" json:"tracing_sampling_rate,omitempty"` + TracingRateLimit *int `yaml:"tracing_rate_limit,omitempty" json:"tracing_rate_limit,omitempty"` + TracingTags []string `yaml:"tracing_tags,omitempty" json:"tracing_tags,omitempty"` +} + +// ToEnvs converts the config fields into environment variables +func (lc LibConfig) ToEnvs() []corev1.EnvVar { + var envs []corev1.EnvVar + if val, defined := checkFormatVal(lc.Tracing); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_ENABLED", + Value: val, + }) + } + if val, defined := checkFormatVal(lc.LogInjection); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_LOGS_INJECTION", + Value: val, + }) + } + if val, defined := checkFormatVal(lc.HealthMetrics); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_HEALTH_METRICS_ENABLED", + Value: val, + }) + } + if val, defined := checkFormatVal(lc.RuntimeMetrics); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_RUNTIME_METRICS_ENABLED", + Value: val, + }) + } + if val, defined := checkFormatFloat(lc.TracingSamplingRate); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_SAMPLE_RATE", + Value: val, + }) + } + if val, defined := checkFormatVal(lc.TracingRateLimit); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_RATE_LIMIT", + Value: val, + }) + } + if lc.TracingTags != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TAGS", + Value: strings.Join(lc.TracingTags, ","), + }) + } + return envs +} + +func checkFormatVal[T int | bool](val *T) (string, bool) { + if val == nil { + return "", false + } + return fmt.Sprintf("%v", *val), true +} + +func checkFormatFloat(val *float64) (string, bool) { + if val == nil { + return "", false + } + return fmt.Sprintf("%.2f", *val), true +} diff --git a/pkg/clusteragent/admission/mutate/auto_instrumentation.go b/pkg/clusteragent/admission/mutate/auto_instrumentation.go index 383a2ce31edde..1726b739b8110 100644 --- a/pkg/clusteragent/admission/mutate/auto_instrumentation.go +++ b/pkg/clusteragent/admission/mutate/auto_instrumentation.go @@ -9,11 +9,13 @@ package mutate import ( + "encoding/json" "errors" "fmt" "strconv" "strings" + "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/common" "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/metrics" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -50,9 +52,8 @@ const ( ) var ( - libVersionAnnotationKeyFormat = "admission.datadoghq.com/%s-lib.version" - customLibAnnotationKeyFormat = "admission.datadoghq.com/%s-lib.custom-image" - supportedLanguages = []language{java, js, python} + customLibAnnotationKeyFormat = "admission.datadoghq.com/%s-lib.custom-image" + supportedLanguages = []language{java, js, python} ) // InjectAutoInstrumentation injects APM libraries into pods @@ -90,7 +91,7 @@ func extractLibInfo(pod *corev1.Pod, containerRegistry string) (language, string return lang, image, true } - libVersionAnnotation := strings.ToLower(fmt.Sprintf(libVersionAnnotationKeyFormat, lang)) + libVersionAnnotation := strings.ToLower(fmt.Sprintf(common.LibVersionAnnotKeyFormat, lang)) if version, found := podAnnotations[libVersionAnnotation]; found { image := fmt.Sprintf("%s/dd-lib-%s-init:%s", containerRegistry, lang, version) return lang, image, true @@ -107,36 +108,33 @@ func injectAutoInstruConfig(pod *corev1.Pod, lang language, image string) error metrics.LibInjectionAttempts.Inc(langStr, strconv.FormatBool(injected)) }() + var langEnvKey string + var langEnvFunc envValFunc switch lang { case java: - injectLibInitContainer(pod, image) - err := injectLibConfig(pod, javaToolOptionsKey, javaEnvValFunc) - if err != nil { - metrics.LibInjectionErrors.Inc(langStr) - return err - } - + langEnvKey = javaToolOptionsKey + langEnvFunc = javaEnvValFunc case js: - injectLibInitContainer(pod, image) - err := injectLibConfig(pod, nodeOptionsKey, jsEnvValFunc) - if err != nil { - metrics.LibInjectionErrors.Inc(langStr) - return err - } - + langEnvKey = nodeOptionsKey + langEnvFunc = jsEnvValFunc case python: - injectLibInitContainer(pod, image) - err := injectLibConfig(pod, pythonPathKey, pythonEnvValFunc) - if err != nil { - metrics.LibInjectionErrors.Inc(langStr) - return err - } - + langEnvKey = pythonPathKey + langEnvFunc = pythonEnvValFunc default: metrics.LibInjectionErrors.Inc(langStr) return fmt.Errorf("language %q is not supported. Supported languages are %v", lang, supportedLanguages) } - + injectLibInitContainer(pod, image) + err := injectLibRequirements(pod, langEnvKey, langEnvFunc) + if err != nil { + metrics.LibInjectionErrors.Inc(langStr) + return err + } + err = injectLibConfig(pod, lang) + if err != nil { + metrics.LibInjectionErrors.Inc(langStr) + return err + } injectLibVolume(pod) injected = true @@ -160,7 +158,8 @@ func injectLibInitContainer(pod *corev1.Pod, image string) { }, pod.Spec.InitContainers...) } -func injectLibConfig(pod *corev1.Pod, envKey string, envVal envValFunc) error { +// injectLibRequirements injects the minimal config requirements to enable instrumentation +func injectLibRequirements(pod *corev1.Pod, envKey string, envVal envValFunc) error { for i, ctr := range pod.Spec.Containers { index := envIndex(ctr.Env, envKey) if index < 0 { @@ -182,6 +181,26 @@ func injectLibConfig(pod *corev1.Pod, envKey string, envVal envValFunc) error { return nil } +// injectLibConfig injects additional library configuration extracted from pod annotations +func injectLibConfig(pod *corev1.Pod, lang language) error { + configAnnotKey := fmt.Sprintf(common.LibConfigV1AnnotKeyFormat, lang) + confString, found := pod.GetAnnotations()[configAnnotKey] + if !found { + log.Debugf("Config annotation key %q not found on pod %s, skipping config injection", configAnnotKey, podString(pod)) + return nil + } + log.Infof("Config annotation key %q found on pod %s, config: %q", configAnnotKey, podString(pod), confString) + var libConfig common.LibConfig + err := json.Unmarshal([]byte(confString), &libConfig) + if err != nil { + return fmt.Errorf("invalid json config in annotation %s=%s: %w", configAnnotKey, confString, err) + } + for _, env := range libConfig.ToEnvs() { + _ = injectEnv(pod, env) + } + return nil +} + func injectLibVolume(pod *corev1.Pod) { pod.Spec.Volumes = append(pod.Spec.Volumes, corev1.Volume{ Name: volumeName, diff --git a/pkg/clusteragent/admission/mutate/auto_instrumentation_test.go b/pkg/clusteragent/admission/mutate/auto_instrumentation_test.go index 6ce2ca9443108..2cf3706e549c7 100644 --- a/pkg/clusteragent/admission/mutate/auto_instrumentation_test.go +++ b/pkg/clusteragent/admission/mutate/auto_instrumentation_test.go @@ -115,12 +115,12 @@ func TestInjectAutoInstruConfig(t *testing.T) { if err != nil { return } - assertLibConfig(t, tt.pod, tt.image, tt.expectedEnvKey, tt.expectedEnvVal) + assertLibReq(t, tt.pod, tt.image, tt.expectedEnvKey, tt.expectedEnvVal) }) } } -func assertLibConfig(t *testing.T, pod *corev1.Pod, image, envKey, envVal string) { +func assertLibReq(t *testing.T, pod *corev1.Pod, image, envKey, envVal string) { // Empty dir volume volumeFound := false for _, volume := range pod.Spec.Volumes { @@ -220,3 +220,58 @@ func TestExtractLibInfo(t *testing.T) { }) } } + +func TestInjectLibConfig(t *testing.T) { + tests := []struct { + name string + pod *corev1.Pod + lang language + wantErr bool + expectedEnvs []corev1.EnvVar + }{ + { + name: "nominal case", + pod: fakePodWithAnnotation("admission.datadoghq.com/java-lib.config.v1", `{"version":1,"service_language":"java","runtime_metrics_enabled":true,"tracing_rate_limit":50}`), + lang: java, + wantErr: false, + expectedEnvs: []corev1.EnvVar{ + { + Name: "DD_RUNTIME_METRICS_ENABLED", + Value: "true", + }, + { + Name: "DD_TRACE_RATE_LIMIT", + Value: "50", + }, + }, + }, + { + name: "invalid json", + pod: fakePodWithAnnotation("admission.datadoghq.com/java-lib.config.v1", "invalid"), + lang: java, + wantErr: true, + expectedEnvs: nil, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := injectLibConfig(tt.pod, tt.lang) + require.False(t, (err != nil) != tt.wantErr) + if err != nil { + return + } + container := tt.pod.Spec.Containers[0] + envCount := 0 + for _, expectEnv := range tt.expectedEnvs { + for _, contEnv := range container.Env { + if expectEnv.Name == contEnv.Name { + require.Equal(t, expectEnv.Value, contEnv.Value) + envCount++ + break + } + } + } + require.Equal(t, len(tt.expectedEnvs), envCount) + }) + } +} diff --git a/pkg/clusteragent/admission/mutate/test_utils.go b/pkg/clusteragent/admission/mutate/test_utils.go index f3f501dcd51ab..f609d06403f96 100644 --- a/pkg/clusteragent/admission/mutate/test_utils.go +++ b/pkg/clusteragent/admission/mutate/test_utils.go @@ -86,13 +86,15 @@ func fakePodWithLabel(k, v string) *corev1.Pod { } func fakePodWithAnnotation(k, v string) *corev1.Pod { - return &corev1.Pod{ + pod := &corev1.Pod{ ObjectMeta: metav1.ObjectMeta{ + Name: "pod", Annotations: map[string]string{ k: v, }, }, } + return withContainer(pod, "-container") } func fakePodWithEnv(name, env string) *corev1.Pod { diff --git a/pkg/clusteragent/admission/patch/patch_request.go b/pkg/clusteragent/admission/patch/patch_request.go new file mode 100644 index 0000000000000..5bc242c483594 --- /dev/null +++ b/pkg/clusteragent/admission/patch/patch_request.go @@ -0,0 +1,97 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "errors" + "fmt" + + "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/common" +) + +// TargetObjKind represents the supported k8s object kinds +type TargetObjKind string + +const ( + // KindDeployment refers to k8s deployment objects + KindDeployment TargetObjKind = "deployment" +) + +// Action is the action requested in the patch +type Action string + +const ( + // ApplyConfig instructs the patcher to apply the patch request + ApplyConfig Action = "apply" + // DisableInjection instructs the patcher to disable library injection + DisableInjection Action = "disable" +) + +// PatchRequest holds the required data to target a k8s object and apply library configuration +type PatchRequest struct { + Action Action `yaml:"action"` + K8sTarget K8sTarget `yaml:"k8s_target"` + LibID LibID `yaml:"lib_id"` + LibConfig common.LibConfig `yaml:"lib_config"` +} + +// Validate returns whether a patch request is applicable +func (pr PatchRequest) Validate(clusterName string) error { + if err := pr.K8sTarget.validate(clusterName); err != nil { + return err + } + return pr.LibID.validate() +} + +// K8sTarget represent the targetet k8s object +type K8sTarget struct { + ClusterName string `yaml:"cluster_name"` + Kind TargetObjKind `yaml:"kind"` + Name string `yaml:"name"` + Namespace string `yaml:"namespace"` +} + +// String returns a string representation of the targeted k8s object +func (k K8sTarget) String() string { + return fmt.Sprintf("Obj %s/%s of kind %s", k.Namespace, k.Name, k.Kind) +} + +func (k K8sTarget) validate(clusterName string) error { + if k.ClusterName != clusterName { + return fmt.Errorf("target cluster name %q is different from the local one %q", k.ClusterName, clusterName) + } + if k.Name == "" { + return errors.New("target object name is empty") + } + if k.Namespace == "" { + return errors.New("target object namespace is empty") + } + switch k.Kind { + case KindDeployment: + default: + return fmt.Errorf("target kind %q is not supported", k.Kind) + } + return nil +} + +// LibID hold the minimal information to inject a library +type LibID struct { + Language string `yaml:"language"` + Version string `yaml:"version"` +} + +func (li LibID) validate() error { + if li.Language == "" { + return errors.New("library language is empty") + } + if li.Version == "" { + return errors.New("library version is empty") + } + return nil +} diff --git a/pkg/clusteragent/admission/patch/patcher.go b/pkg/clusteragent/admission/patch/patcher.go new file mode 100644 index 0000000000000..d308b221ae776 --- /dev/null +++ b/pkg/clusteragent/admission/patch/patcher.go @@ -0,0 +1,104 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/common" + "github.com/DataDog/datadog-agent/pkg/util/log" + + jsonpatch "github.com/evanphx/json-patch" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/kubernetes" +) + +type patcher struct { + k8sClient kubernetes.Interface + isLeader func() bool + deploymentsQueue chan PatchRequest +} + +func newPatcher(k8sClient kubernetes.Interface, isLeaderFunc func() bool, pp patchProvider) *patcher { + return &patcher{ + k8sClient: k8sClient, + isLeader: isLeaderFunc, + deploymentsQueue: pp.subscribe(KindDeployment), + } +} + +func (p *patcher) start(stopCh <-chan struct{}) { + for { + select { + case req := <-p.deploymentsQueue: + if err := p.patchDeployment(req); err != nil { + log.Error(err.Error()) + } + case <-stopCh: + log.Info("Shutting down patcher") + return + } + } +} + +func (p *patcher) patchDeployment(req PatchRequest) error { + if !p.isLeader() { + log.Debug("Not leader, skipping") + return nil + } + deploy, err := p.k8sClient.AppsV1().Deployments(req.K8sTarget.Namespace).Get(context.TODO(), req.K8sTarget.Name, metav1.GetOptions{}) + if err != nil { + return err + } + oldObj, err := json.Marshal(deploy) + if err != nil { + return fmt.Errorf("failed to encode object: %v", err) + } + versionAnnotKey := fmt.Sprintf(common.LibVersionAnnotKeyFormat, req.LibID.Language) + configAnnotKey := fmt.Sprintf(common.LibConfigV1AnnotKeyFormat, req.LibID.Language) + switch req.Action { + case ApplyConfig: + if deploy.Spec.Template.Labels == nil { + deploy.Spec.Template.Labels = make(map[string]string) + } + deploy.Spec.Template.Labels[common.EnabledLabelKey] = "true" + if deploy.Spec.Template.Annotations == nil { + deploy.Spec.Template.Annotations = make(map[string]string) + } + deploy.Spec.Template.Annotations[versionAnnotKey] = req.LibID.Version + conf, err := json.Marshal(req.LibConfig) + if err != nil { + return fmt.Errorf("failed to encode library config: %v", err) + } + deploy.Spec.Template.Annotations[configAnnotKey] = string(conf) + case DisableInjection: + if deploy.Spec.Template.Labels == nil { + deploy.Spec.Template.Labels = make(map[string]string) + } + deploy.Spec.Template.Labels[common.EnabledLabelKey] = "false" + delete(deploy.Spec.Template.Annotations, versionAnnotKey) + delete(deploy.Spec.Template.Annotations, configAnnotKey) + default: + return fmt.Errorf("unknown action %q", req.Action) + } + newObj, err := json.Marshal(deploy) + if err != nil { + return fmt.Errorf("failed to encode object: %v", err) + } + patch, err := jsonpatch.CreateMergePatch(oldObj, newObj) + if err != nil { + return fmt.Errorf("failed to build the JSON patch: %v", err) + } + log.Infof("Patching %s with patch %s", req.K8sTarget, string(patch)) + _, err = p.k8sClient.AppsV1().Deployments(req.K8sTarget.Namespace).Patch(context.TODO(), req.K8sTarget.Name, types.StrategicMergePatchType, patch, metav1.PatchOptions{}) + return err +} diff --git a/pkg/clusteragent/admission/patch/patcher_test.go b/pkg/clusteragent/admission/patch/patcher_test.go new file mode 100644 index 0000000000000..2f7c643aa206a --- /dev/null +++ b/pkg/clusteragent/admission/patch/patcher_test.go @@ -0,0 +1,80 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "context" + "testing" + + "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/common" + + "github.com/stretchr/testify/require" + appsv1 "k8s.io/api/apps/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes/fake" +) + +func TestPatchDeployment(t *testing.T) { + client := fake.NewSimpleClientset() + name := "target-deploy" + ns := "default" + + // Create target deployment + deploy := appsv1.Deployment{} + deploy.ObjectMeta.Name = name + deploy.ObjectMeta.Namespace = ns + deploy.Spec.Template.Labels = make(map[string]string) + deploy.Spec.Template.Annotations = make(map[string]string) + client.AppsV1().Deployments(ns).Create(context.TODO(), &deploy, metav1.CreateOptions{}) + + // Create patcher + p := patcher{ + k8sClient: client, + isLeader: func() bool { return true }, + } + + // Apply first patch + req := PatchRequest{ + Action: ApplyConfig, + K8sTarget: K8sTarget{Kind: KindDeployment, Namespace: ns, Name: name}, + LibID: LibID{Language: "java", Version: "latest"}, + LibConfig: common.LibConfig{Version: 1, ServiceLanguage: "java"}, + } + require.NoError(t, p.patchDeployment(req)) + + // Check the patch + got, err := client.AppsV1().Deployments(ns).Get(context.TODO(), name, metav1.GetOptions{}) + require.NoError(t, err) + require.Equal(t, got.Spec.Template.Labels["admission.datadoghq.com/enabled"], "true") + require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.version"], "latest") + require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.config.v1"], `{"version":1,"service_language":"java"}`) + + // Patch again to disable lib injection (aka revert) + req.Action = DisableInjection + require.NoError(t, p.patchDeployment(req)) + + // Check the new patch + got, err = client.AppsV1().Deployments(ns).Get(context.TODO(), name, metav1.GetOptions{}) + require.NoError(t, err) + require.Equal(t, got.Spec.Template.Labels["admission.datadoghq.com/enabled"], "false") + require.NotContains(t, got.Spec.Template.Annotations, "admission.datadoghq.com/java-lib.version") + require.NotContains(t, got.Spec.Template.Annotations, "admission.datadoghq.com/java-lib.config.v1") + + // Apply a new patch with a new config + req.Action = ApplyConfig + req.LibConfig = common.LibConfig{Version: 1, ServiceLanguage: "java", TracingTags: []string{"k1:v1", "k2:v2"}} + require.NoError(t, p.patchDeployment(req)) + + // Check the new patch + got, err = client.AppsV1().Deployments(ns).Get(context.TODO(), name, metav1.GetOptions{}) + require.NoError(t, err) + require.Equal(t, got.Spec.Template.Labels["admission.datadoghq.com/enabled"], "true") + require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.version"], "latest") + require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.config.v1"], `{"version":1,"service_language":"java","tracing_tags":["k1:v1","k2:v2"]}`) +} diff --git a/pkg/clusteragent/admission/patch/provider.go b/pkg/clusteragent/admission/patch/provider.go new file mode 100644 index 0000000000000..3c2b2f58f5122 --- /dev/null +++ b/pkg/clusteragent/admission/patch/provider.go @@ -0,0 +1,115 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "os" + "time" + + "github.com/DataDog/datadog-agent/pkg/util/log" + + "gopkg.in/yaml.v3" +) + +type patchProvider interface { + start(stopCh <-chan struct{}) + subscribe(kind TargetObjKind) chan PatchRequest +} + +// filePatchProvider this is a stub and will be replaced by a RC patch provider +type filePatchProvider struct { + file string + pollInterval time.Duration + isLeader func() bool + subscribers map[TargetObjKind]chan PatchRequest + lastSuccessfulRefresh time.Time + clusterName string +} + +var _ patchProvider = &filePatchProvider{} + +func newPatchProvider(isLeaderFunc func() bool, clusterName string) patchProvider { + // Only the file-based implementation is available at the moment. + return newfileProvider(isLeaderFunc, clusterName) +} + +func newfileProvider(isLeaderFunc func() bool, clusterName string) *filePatchProvider { + return &filePatchProvider{ + file: "/etc/datadog-agent/auto-instru.yaml", + pollInterval: 15 * time.Second, + isLeader: isLeaderFunc, + subscribers: make(map[TargetObjKind]chan PatchRequest), + clusterName: clusterName, + } +} + +func (fpp *filePatchProvider) subscribe(kind TargetObjKind) chan PatchRequest { + ch := make(chan PatchRequest, 10) + fpp.subscribers[kind] = ch + return ch +} + +func (fpp *filePatchProvider) start(stopCh <-chan struct{}) { + ticker := time.NewTicker(fpp.pollInterval) + defer ticker.Stop() + for { + select { + case <-ticker.C: + if err := fpp.refresh(); err != nil { + log.Errorf(err.Error()) + } + case <-stopCh: + log.Info("Shutting down patch provider") + return + } + } +} + +func (fpp *filePatchProvider) refresh() error { + if !fpp.isLeader() { + log.Debug("Not leader, skipping") + return nil + } + requests, err := fpp.poll() + if err != nil { + return err + } + log.Debugf("Got %d new patch requests", len(requests)) + for _, req := range requests { + if err := req.Validate(fpp.clusterName); err != nil { + log.Errorf("Skipping invalid patch request: %s", err) + continue + } + if ch, found := fpp.subscribers[req.K8sTarget.Kind]; found { + log.Infof("Publishing patch requests for target %s", req.K8sTarget) + ch <- req + } + } + fpp.lastSuccessfulRefresh = time.Now() + return nil +} + +func (fpp *filePatchProvider) poll() ([]PatchRequest, error) { + info, err := os.Stat(fpp.file) + if err != nil { + return nil, err + } + modTime := info.ModTime() + if fpp.lastSuccessfulRefresh.After(modTime) { + log.Debugf("File %q hasn't changed since the last Successful refresh at %v", fpp.file, fpp.lastSuccessfulRefresh) + return []PatchRequest{}, nil + } + content, err := os.ReadFile(fpp.file) + if err != nil { + return nil, err + } + var requests []PatchRequest + err = yaml.Unmarshal(content, &requests) + return requests, err +} diff --git a/pkg/clusteragent/admission/patch/start.go b/pkg/clusteragent/admission/patch/start.go new file mode 100644 index 0000000000000..4c28c9ceb0851 --- /dev/null +++ b/pkg/clusteragent/admission/patch/start.go @@ -0,0 +1,31 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "github.com/DataDog/datadog-agent/pkg/util/log" + + "k8s.io/client-go/kubernetes" +) + +// ControllerContext holds necessary context for the patch controller +type ControllerContext struct { + IsLeaderFunc func() bool + Client kubernetes.Interface + StopCh chan struct{} +} + +// StartControllers starts the patch controllers +func StartControllers(ctx ControllerContext, clusterName string) { + log.Info("Starting patch controllers") + provider := newPatchProvider(ctx.IsLeaderFunc, clusterName) + patcher := newPatcher(ctx.Client, ctx.IsLeaderFunc, provider) + go provider.start(ctx.StopCh) + go patcher.start(ctx.StopCh) +} diff --git a/pkg/clusteragent/clusterchecks/dispatcher_configs.go b/pkg/clusteragent/clusterchecks/dispatcher_configs.go index 3959ac9487df0..09d9264a6618b 100644 --- a/pkg/clusteragent/clusterchecks/dispatcher_configs.go +++ b/pkg/clusteragent/clusterchecks/dispatcher_configs.go @@ -48,9 +48,10 @@ func (d *dispatcher) addConfig(config integration.Config, targetNodeName string) // Register config digest := config.Digest() + fastDigest := config.FastDigest() d.store.digestToConfig[digest] = config for _, instance := range config.Instances { - checkID := check.BuildID(config.Name, instance, config.InitConfig) + checkID := check.BuildID(config.Name, fastDigest, instance, config.InitConfig) d.store.idToDigest[checkID] = digest if targetNodeName != "" { configsInfo.Set(1.0, targetNodeName, string(checkID), le.JoinLeaderValue) diff --git a/pkg/clusteragent/clusterchecks/dispatcher_nodes.go b/pkg/clusteragent/clusterchecks/dispatcher_nodes.go index d91beadf01c36..16bb58dab50f6 100644 --- a/pkg/clusteragent/clusterchecks/dispatcher_nodes.go +++ b/pkg/clusteragent/clusterchecks/dispatcher_nodes.go @@ -33,7 +33,7 @@ func (d *dispatcher) getClusterCheckConfigs(nodeName string) ([]integration.Conf node.RLock() defer node.RUnlock() - return makeConfigArray(node.digestToConfig), node.configVersion.Load(), nil + return makeConfigArray(node.digestToConfig), node.lastConfigChange, nil } // processNodeStatus keeps the node's status in the store, and returns true @@ -53,7 +53,7 @@ func (d *dispatcher) processNodeStatus(nodeName, clientIP string, status types.N node.lastStatus = status node.heartbeat = timestampNow() - if node.configVersion.Load() == status.LastChange { + if node.lastConfigChange == status.LastChange { // Node-agent is up to date return true, nil } @@ -66,6 +66,7 @@ func (d *dispatcher) processNodeStatus(nodeName, clientIP string, status types.N } // Node-agent needs to pull updated configs + log.Infof("Node %s needs to poll config, cluster config version: %d, node config version: %d", nodeName, node.lastConfigChange, status.LastChange) return false, nil } diff --git a/pkg/clusteragent/clusterchecks/dispatcher_rebalance_test.go b/pkg/clusteragent/clusterchecks/dispatcher_rebalance_test.go index eaf389baa0cfa..ed4c069406eb3 100644 --- a/pkg/clusteragent/clusterchecks/dispatcher_rebalance_test.go +++ b/pkg/clusteragent/clusterchecks/dispatcher_rebalance_test.go @@ -371,7 +371,8 @@ func TestRebalance(t *testing.T) { }, }, }, - }, { + }, + { in: map[string]*nodeStore{ "A": { clcRunnerStats: types.CLCRunnersStats{ @@ -717,7 +718,8 @@ func TestRebalance(t *testing.T) { }, }, }, - }, { + }, + { in: map[string]*nodeStore{ "A": { clcRunnerStats: types.CLCRunnersStats{ @@ -746,7 +748,8 @@ func TestRebalance(t *testing.T) { clcRunnerStats: types.CLCRunnersStats{}, }, }, - }, { + }, + { in: map[string]*nodeStore{ "A": { clcRunnerStats: types.CLCRunnersStats{ @@ -787,7 +790,8 @@ func TestRebalance(t *testing.T) { }, }, }, - }, { + }, + { in: map[string]*nodeStore{ "A": { clcRunnerStats: types.CLCRunnersStats{}, @@ -832,7 +836,8 @@ func TestRebalance(t *testing.T) { }, }, }, - }, { + }, + { in: map[string]*nodeStore{ "A": { clcRunnerStats: types.CLCRunnersStats{}, @@ -976,7 +981,8 @@ func TestRebalance(t *testing.T) { }, }, }, - }, { + }, + { in: map[string]*nodeStore{ "A": { clcRunnerStats: types.CLCRunnersStats{}, @@ -1418,7 +1424,7 @@ func TestMoveCheck(t *testing.T) { dispatcher := newDispatcher() // setup check id - id := check.BuildID(tc.check.config.Name, tc.check.config.Instances[0], tc.check.config.InitConfig) + id := check.BuildID(tc.check.config.Name, tc.check.config.FastDigest(), tc.check.config.Instances[0], tc.check.config.InitConfig) // prepare store dispatcher.store.active = true diff --git a/pkg/clusteragent/clusterchecks/dispatcher_test.go b/pkg/clusteragent/clusterchecks/dispatcher_test.go index 2ff554aadbb71..8154c2c58bcd3 100644 --- a/pkg/clusteragent/clusterchecks/dispatcher_test.go +++ b/pkg/clusteragent/clusterchecks/dispatcher_test.go @@ -212,9 +212,9 @@ func TestProcessNodeStatus(t *testing.T) { assert.False(t, upToDate) // Give changes - node1.configVersion.Inc() + node1.lastConfigChange = timestampNowNano() node1.heartbeat = node1.heartbeat - 50 - status2 := types.NodeStatus{LastChange: node1.configVersion.Load() - 2} + status2 := types.NodeStatus{LastChange: node1.lastConfigChange - 2} upToDate, err = dispatcher.processNodeStatus("node1", "10.0.0.1", status2) assert.NoError(t, err) assert.False(t, upToDate) @@ -222,7 +222,7 @@ func TestProcessNodeStatus(t *testing.T) { assert.True(t, timestampNow() <= node1.heartbeat+1) // No change - status3 := types.NodeStatus{LastChange: node1.configVersion.Load()} + status3 := types.NodeStatus{LastChange: node1.lastConfigChange} upToDate, err = dispatcher.processNodeStatus("node1", "10.0.0.1", status3) assert.NoError(t, err) assert.True(t, upToDate) diff --git a/pkg/clusteragent/clusterchecks/helpers.go b/pkg/clusteragent/clusterchecks/helpers.go index 6340e66ae627a..aadac3f6a8bb3 100644 --- a/pkg/clusteragent/clusterchecks/helpers.go +++ b/pkg/clusteragent/clusterchecks/helpers.go @@ -32,6 +32,10 @@ func makeConfigArray(configMap map[string]integration.Config) []integration.Conf return configSlice } +func timestampNowNano() int64 { + return time.Now().UnixNano() +} + // timestampNow provides a consistent way to keep a seconds timestamp func timestampNow() int64 { return time.Now().Unix() diff --git a/pkg/clusteragent/clusterchecks/stores.go b/pkg/clusteragent/clusterchecks/stores.go index b7beb78bbc778..059ceb05668b0 100644 --- a/pkg/clusteragent/clusterchecks/stores.go +++ b/pkg/clusteragent/clusterchecks/stores.go @@ -17,8 +17,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/collector/check" le "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver/leaderelection/metrics" "github.com/DataDog/datadog-agent/pkg/util/log" - - "go.uber.org/atomic" ) // clusterStore holds the state of cluster-check management. @@ -84,20 +82,19 @@ func (s *clusterStore) clearDangling() { // Lock is to be held by the user (dispatcher) type nodeStore struct { sync.RWMutex - name string - heartbeat int64 - lastStatus types.NodeStatus - configVersion *atomic.Int64 - digestToConfig map[string]integration.Config - clientIP string - clcRunnerStats types.CLCRunnersStats - busyness int + name string + heartbeat int64 + lastStatus types.NodeStatus + lastConfigChange int64 + digestToConfig map[string]integration.Config + clientIP string + clcRunnerStats types.CLCRunnersStats + busyness int } func newNodeStore(name, clientIP string) *nodeStore { return &nodeStore{ name: name, - configVersion: atomic.NewInt64(0), clientIP: clientIP, digestToConfig: make(map[string]integration.Config), clcRunnerStats: types.CLCRunnersStats{}, @@ -106,8 +103,8 @@ func newNodeStore(name, clientIP string) *nodeStore { } func (s *nodeStore) addConfig(config integration.Config) { + s.lastConfigChange = timestampNowNano() s.digestToConfig[config.Digest()] = config - s.configVersion.Inc() dispatchedConfigs.Inc(s.name, le.JoinLeaderValue) } @@ -117,8 +114,8 @@ func (s *nodeStore) removeConfig(digest string) { log.Debugf("unknown digest %s, skipping", digest) return } + s.lastConfigChange = timestampNowNano() delete(s.digestToConfig, digest) - s.configVersion.Inc() dispatchedConfigs.Dec(s.name, le.JoinLeaderValue) } diff --git a/pkg/clusteragent/externalmetrics/provider.go b/pkg/clusteragent/externalmetrics/provider.go index e264669f4ae53..95af91f3b8de1 100644 --- a/pkg/clusteragent/externalmetrics/provider.go +++ b/pkg/clusteragent/externalmetrics/provider.go @@ -98,13 +98,13 @@ func NewDatadogMetricProvider(ctx context.Context, apiCl *apiserver.APIClient) ( go autoscalerWatcher.Run(ctx.Done()) // We shift controller refresh period from retrieverRefreshPeriod to maximize the probability to have new data from DD - controller, err := NewDatadogMetricController(apiCl.DDClient, apiCl.DDInformerFactory, le.IsLeader, &provider.store) + controller, err := NewDatadogMetricController(apiCl.DDClient, apiCl.DynamicInformerFactory, le.IsLeader, &provider.store) if err != nil { return nil, fmt.Errorf("Unable to create DatadogMetricProvider as DatadogMetric Controller failed with: %v", err) } // Start informers & controllers (informers can be started multiple times) - apiCl.DDInformerFactory.Start(ctx.Done()) + apiCl.DynamicInformerFactory.Start(ctx.Done()) go controller.Run(ctx) return provider, nil diff --git a/pkg/collector/check/check.go b/pkg/collector/check/check.go index 2cfffef86dc76..904d84a11ea38 100644 --- a/pkg/collector/check/check.go +++ b/pkg/collector/check/check.go @@ -24,7 +24,7 @@ type Check interface { // String provides a printable version of the check name String() string // Configure configures the check - Configure(config, initConfig integration.Data, source string) error + Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error // Interval returns the interval time for the check Interval() time.Duration // ID provides a unique identifier for every check instance diff --git a/pkg/collector/check/id.go b/pkg/collector/check/id.go index 57559a0eb2267..6d909289f8df2 100644 --- a/pkg/collector/check/id.go +++ b/pkg/collector/check/id.go @@ -6,6 +6,7 @@ package check import ( + "encoding/binary" "fmt" "hash/fnv" "strings" @@ -16,16 +17,16 @@ import ( // ID is the representation of the unique ID of a Check instance type ID string -// Identify returns an unique ID for a check and its configuration -func Identify(check Check, instance integration.Data, initConfig integration.Data) ID { - return BuildID(check.String(), instance, initConfig) -} - // BuildID returns an unique ID for a check name and its configuration -func BuildID(checkName string, instance, initConfig integration.Data) ID { +func BuildID(checkName string, integrationConfigDigest uint64, instance, initConfig integration.Data) ID { + // Hash is returned in BigEndian + digestBytes := make([]byte, 8) + binary.BigEndian.PutUint64(digestBytes, integrationConfigDigest) + h := fnv.New64() - h.Write([]byte(instance)) //nolint:errcheck - h.Write([]byte(initConfig)) //nolint:errcheck + _, _ = h.Write(digestBytes) + _, _ = h.Write([]byte(instance)) + _, _ = h.Write([]byte(initConfig)) name := instance.GetNameForInstance() if name != "" { diff --git a/pkg/collector/check/id_test.go b/pkg/collector/check/id_test.go index dd9d01ebae131..0dfd26231a9c6 100644 --- a/pkg/collector/check/id_test.go +++ b/pkg/collector/check/id_test.go @@ -14,18 +14,20 @@ import ( "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" ) -func TestIdentify(t *testing.T) { +func TestBuildID(t *testing.T) { testCheck := &StubCheck{} instance1 := integration.Data("key1:value1\nkey2:value2") initConfig1 := integration.Data("key:value") instance2 := instance1 initConfig2 := initConfig1 - assert.Equal(t, Identify(testCheck, instance1, initConfig1), Identify(testCheck, instance2, initConfig2)) + assert.Equal(t, BuildID(testCheck.String(), 1, instance1, initConfig1), BuildID(testCheck.String(), 1, instance2, initConfig2)) + // Different integration config digest + assert.NotEqual(t, BuildID(testCheck.String(), 1, instance1, initConfig1), BuildID(testCheck.String(), 2, instance2, initConfig2)) instance3 := integration.Data("key1:value1\nkey2:value3") initConfig3 := integration.Data("key:value") - assert.NotEqual(t, Identify(testCheck, instance1, initConfig1), Identify(testCheck, instance3, initConfig3)) + assert.NotEqual(t, BuildID(testCheck.String(), 1, instance1, initConfig1), BuildID(testCheck.String(), 1, instance3, initConfig3)) } func TestIDToCheckName(t *testing.T) { diff --git a/pkg/collector/check/stub.go b/pkg/collector/check/stub.go index 8196068be369d..19995a0a736d2 100644 --- a/pkg/collector/check/stub.go +++ b/pkg/collector/check/stub.go @@ -30,7 +30,7 @@ func (c *StubCheck) Stop() {} func (c *StubCheck) Cancel() {} // Configure is a noop -func (c *StubCheck) Configure(integration.Data, integration.Data, string) error { return nil } +func (c *StubCheck) Configure(uint64, integration.Data, integration.Data, string) error { return nil } // Interval returns a duration of one second func (c *StubCheck) Interval() time.Duration { return 1 * time.Second } diff --git a/pkg/collector/collector_demux_test.go b/pkg/collector/collector_demux_test.go index 9d63d34981460..5483f51830d81 100644 --- a/pkg/collector/collector_demux_test.go +++ b/pkg/collector/collector_demux_test.go @@ -6,7 +6,6 @@ //go:build test // +build test - package collector import ( diff --git a/pkg/collector/corechecks/checkbase.go b/pkg/collector/corechecks/checkbase.go index 2eeb112285cc0..d8f17bfc299ba 100644 --- a/pkg/collector/corechecks/checkbase.go +++ b/pkg/collector/corechecks/checkbase.go @@ -65,14 +65,14 @@ func NewCheckBaseWithInterval(name string, defaultInterval time.Duration) CheckB // BuildID is to be called by the check's Config() method to generate // the unique check ID. -func (c *CheckBase) BuildID(instance, initConfig integration.Data) { - c.checkID = check.BuildID(c.checkName, instance, initConfig) +func (c *CheckBase) BuildID(integrationConfigDigest uint64, instance, initConfig integration.Data) { + c.checkID = check.BuildID(c.checkName, integrationConfigDigest, instance, initConfig) } // Configure is provided for checks that require no config. If overridden, // the call to CommonConfigure must be preserved. -func (c *CheckBase) Configure(data integration.Data, initConfig integration.Data, source string) error { - err := c.CommonConfigure(initConfig, data, source) +func (c *CheckBase) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { + err := c.CommonConfigure(integrationConfigDigest, initConfig, data, source) if err != nil { return err } @@ -90,7 +90,7 @@ func (c *CheckBase) Configure(data integration.Data, initConfig integration.Data // CommonConfigure is called when checks implement their own Configure method, // in order to setup common options (run interval, empty hostname) -func (c *CheckBase) CommonConfigure(initConfig, instanceConfig integration.Data, source string) error { +func (c *CheckBase) CommonConfigure(integrationConfigDigest uint64, initConfig, instanceConfig integration.Data, source string) error { handleConf := func(conf integration.Data, c *CheckBase) error { commonOptions := integration.CommonInstanceConfig{} err := yaml.Unmarshal(conf, &commonOptions) diff --git a/pkg/collector/corechecks/checkbase_test.go b/pkg/collector/corechecks/checkbase_test.go index 1478c1e8d4eb7..b2818a14ba739 100644 --- a/pkg/collector/corechecks/checkbase_test.go +++ b/pkg/collector/corechecks/checkbase_test.go @@ -12,6 +12,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/collector/check/defaults" ) @@ -37,17 +38,17 @@ func TestCommonConfigure(t *testing.T) { } mockSender := mocksender.NewMockSender(mycheck.ID()) - err := mycheck.CommonConfigure(nil, []byte(defaultsInstance), "test") + err := mycheck.CommonConfigure(integration.FakeConfigHash, nil, []byte(defaultsInstance), "test") assert.NoError(t, err) assert.Equal(t, defaults.DefaultCheckInterval, mycheck.Interval()) mockSender.AssertNumberOfCalls(t, "DisableDefaultHostname", 0) mockSender.On("DisableDefaultHostname", true).Return().Once() - err = mycheck.CommonConfigure(nil, []byte(customInstance), "test") + err = mycheck.CommonConfigure(integration.FakeConfigHash, nil, []byte(customInstance), "test") assert.NoError(t, err) assert.Equal(t, 60*time.Second, mycheck.Interval()) - mycheck.BuildID([]byte(customInstance), []byte(initConfig)) - assert.Equal(t, string(mycheck.ID()), "test:foobar:bd63a7031add5db9") + mycheck.BuildID(1, []byte(customInstance), []byte(initConfig)) + assert.Equal(t, string(mycheck.ID()), "test:foobar:a934df33209f45f4") mockSender.AssertExpectations(t) } @@ -56,15 +57,15 @@ func TestCommonConfigureCustomID(t *testing.T) { mycheck := &dummyCheck{ CheckBase: NewCheckBase(checkName), } - mycheck.BuildID([]byte(customInstance), nil) + mycheck.BuildID(1, []byte(customInstance), nil) assert.NotEqual(t, checkName, string(mycheck.ID())) mockSender := mocksender.NewMockSender(mycheck.ID()) mockSender.On("DisableDefaultHostname", true).Return().Once() - err := mycheck.CommonConfigure(nil, []byte(customInstance), "test") + err := mycheck.CommonConfigure(integration.FakeConfigHash, nil, []byte(customInstance), "test") assert.NoError(t, err) assert.Equal(t, 60*time.Second, mycheck.Interval()) - mycheck.BuildID([]byte(customInstance), []byte(initConfig)) - assert.Equal(t, string(mycheck.ID()), "test:foobar:bd63a7031add5db9") + mycheck.BuildID(1, []byte(customInstance), []byte(initConfig)) + assert.Equal(t, string(mycheck.ID()), "test:foobar:a934df33209f45f4") mockSender.AssertExpectations(t) } diff --git a/pkg/collector/corechecks/cluster/helm/helm.go b/pkg/collector/corechecks/cluster/helm/helm.go index 1d3077e7fa0cc..76284747094b5 100644 --- a/pkg/collector/corechecks/cluster/helm/helm.go +++ b/pkg/collector/corechecks/cluster/helm/helm.go @@ -97,10 +97,10 @@ func factory() check.Check { } // Configure configures the Helm check -func (hc *HelmCheck) Configure(config, initConfig integration.Data, source string) error { - hc.BuildID(config, initConfig) +func (hc *HelmCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { + hc.BuildID(integrationConfigDigest, config, initConfig) - err := hc.CommonConfigure(initConfig, config, source) + err := hc.CommonConfigure(integrationConfigDigest, initConfig, config, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go b/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go index f8fc64eee518d..cf2e397c2ae47 100644 --- a/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go +++ b/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go @@ -89,6 +89,16 @@ type KSMConfig struct { // - "team_*" LabelsAsTags map[string]map[string]string `yaml:"labels_as_tags"` + // AnnotationsAsTags + // Example: + // annotations_as_tags: + // pod: + // - "app_*" + // node: + // - "zone" + // - "team_*" + AnnotationsAsTags map[string]map[string]string `yaml:"annotations_as_tags"` + // LabelsMapper can be used to translate kube-state-metrics labels to other tags. // Example: Adding kube_namespace tag instead of namespace. // labels_mapper: @@ -136,6 +146,7 @@ type KSMConfig struct { // KSMCheck wraps the config and the metric stores needed to run the check type KSMCheck struct { core.CheckBase + agentConfig config.Config instance *KSMConfig allStores [][]cache.Store telemetry *telemetryCache @@ -185,10 +196,11 @@ func init() { } // Configure prepares the configuration of the KSM check instance -func (k *KSMCheck) Configure(config, initConfig integration.Data, source string) error { - k.BuildID(config, initConfig) +func (k *KSMCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { + k.BuildID(integrationConfigDigest, config, initConfig) + k.agentConfig = ddconfig.Datadog - err := k.CommonConfigure(initConfig, config, source) + err := k.CommonConfigure(integrationConfigDigest, initConfig, config, source) if err != nil { return err } @@ -209,6 +221,7 @@ func (k *KSMCheck) Configure(config, initConfig integration.Data, source string) k.instance.labelsMapperByResourceKind = defaultLabelsMapperByResourceKind() k.processLabelsAsTags() + k.processAnnotationsAsTags() // Prepare labels mapper labelsMapper := defaultLabelsMapper() @@ -239,6 +252,16 @@ func (k *KSMCheck) Configure(config, initConfig integration.Data, source string) builder.WithAllowLabels(allowedLabels) + // Enable exposing resource annotations explicitly for kube__annotations metadata metrics. + // Equivalent to configuring --metric-annotations-allowlist. + allowedAnnotations := map[string][]string{} + for _, collector := range collectors { + // Any annotation can be used for label joins. + allowedAnnotations[collector] = []string{"*"} + } + + builder.WithAllowAnnotations(allowedAnnotations) + // Prepare watched namespaces namespaces := k.instance.Namespaces @@ -637,10 +660,18 @@ func (k *KSMCheck) mergeLabelJoins(extra map[string]*JoinsConfig) { } func (k *KSMCheck) processLabelsAsTags() { - for resourceKind, labelsMapper := range k.instance.LabelsAsTags { + k.processLabelsOrAnnotationsAsTags("label", k.instance.LabelsAsTags) +} + +func (k *KSMCheck) processAnnotationsAsTags() { + k.processLabelsOrAnnotationsAsTags("annotation", k.instance.AnnotationsAsTags) +} + +func (k *KSMCheck) processLabelsOrAnnotationsAsTags(what string, configStuffAsTags map[string]map[string]string) { + for resourceKind, labelsMapper := range configStuffAsTags { labels := make([]string, 0, len(labelsMapper)) for label, tag := range labelsMapper { - label = "label_" + labelRegexp.ReplaceAllString(label, "_") + label = what + "_" + labelRegexp.ReplaceAllString(label, "_") if _, ok := k.instance.labelsMapperByResourceKind[resourceKind]; !ok { k.instance.labelsMapperByResourceKind[resourceKind] = map[string]string{ label: tag, @@ -651,14 +682,14 @@ func (k *KSMCheck) processLabelsAsTags() { labels = append(labels, label) } - if joinsConfig, ok := k.instance.LabelJoins["kube_"+resourceKind+"_labels"]; ok { + if joinsConfig, ok := k.instance.LabelJoins["kube_"+resourceKind+"_"+what+"s"]; ok { joinsConfig.LabelsToGet = append(joinsConfig.LabelsToGet, labels...) } else { joinsConfig := &JoinsConfig{ LabelsToMatch: getLabelToMatchForKind(resourceKind), LabelsToGet: labels, } - k.instance.LabelJoins["kube_"+resourceKind+"_labels"] = joinsConfig + k.instance.LabelJoins["kube_"+resourceKind+"_"+what+"s"] = joinsConfig } } } @@ -684,7 +715,7 @@ func (k *KSMCheck) initTags() { } if !k.instance.DisableGlobalTags { - k.instance.Tags = append(k.instance.Tags, config.GetConfiguredTags(false)...) + k.instance.Tags = append(k.instance.Tags, config.GetConfiguredTags(k.agentConfig, false)...) } } @@ -784,9 +815,9 @@ func resourceNameFromMetric(name string) string { // isKnownMetric returns whether the KSM metric name is known by the check // A known metric should satisfy one of the conditions: -// - has a datadog metric name -// - has a metric transformer -// - has a metric aggregator +// - has a datadog metric name +// - has a metric transformer +// - has a metric aggregator func (k *KSMCheck) isKnownMetric(name string) bool { if _, found := k.metricNamesMapper[name]; found { return true diff --git a/pkg/collector/corechecks/cluster/ksm/kubernetes_state_test.go b/pkg/collector/corechecks/cluster/ksm/kubernetes_state_test.go index 851abd3cd184e..b517a0d373217 100644 --- a/pkg/collector/corechecks/cluster/ksm/kubernetes_state_test.go +++ b/pkg/collector/corechecks/cluster/ksm/kubernetes_state_test.go @@ -1359,22 +1359,21 @@ func lenMetrics(metricsToProcess map[string][]ksmstore.DDMetricsFam) int { } func TestKSMCheckInitTags(t *testing.T) { - mockConfig := config.Mock(t) type fields struct { instance *KSMConfig clusterName string } tests := []struct { name string - loadFunc func() - resetFunc func() + loadFunc func(*config.MockConfig) + resetFunc func(*config.MockConfig) fields fields expected []string }{ { name: "with check tags", - loadFunc: func() {}, - resetFunc: func() {}, + loadFunc: func(*config.MockConfig) {}, + resetFunc: func(*config.MockConfig) {}, fields: fields{ instance: &KSMConfig{Tags: []string{"check:tag1", "check:tag2"}}, }, @@ -1382,8 +1381,8 @@ func TestKSMCheckInitTags(t *testing.T) { }, { name: "with cluster name", - loadFunc: func() {}, - resetFunc: func() {}, + loadFunc: func(*config.MockConfig) {}, + resetFunc: func(*config.MockConfig) {}, fields: fields{ instance: &KSMConfig{}, clusterName: "clustername", @@ -1392,15 +1391,15 @@ func TestKSMCheckInitTags(t *testing.T) { }, { name: "with global tags", - loadFunc: func() { mockConfig.Set("tags", []string{"global:tag1", "global:tag2"}) }, - resetFunc: func() { mockConfig.Set("tags", []string{}) }, + loadFunc: func(mockConfig *config.MockConfig) { mockConfig.Set("tags", []string{"global:tag1", "global:tag2"}) }, + resetFunc: func(mockConfig *config.MockConfig) { mockConfig.Set("tags", []string{}) }, fields: fields{instance: &KSMConfig{}}, expected: []string{"global:tag1", "global:tag2"}, }, { name: "with everything", - loadFunc: func() { mockConfig.Set("tags", []string{"global:tag1", "global:tag2"}) }, - resetFunc: func() { mockConfig.Set("tags", []string{}) }, + loadFunc: func(mockConfig *config.MockConfig) { mockConfig.Set("tags", []string{"global:tag1", "global:tag2"}) }, + resetFunc: func(mockConfig *config.MockConfig) { mockConfig.Set("tags", []string{}) }, fields: fields{ instance: &KSMConfig{Tags: []string{"check:tag1", "check:tag2"}}, clusterName: "clustername", @@ -1409,8 +1408,8 @@ func TestKSMCheckInitTags(t *testing.T) { }, { name: "with disable_global_tags", - loadFunc: func() { mockConfig.Set("tags", []string{"global:tag1", "global:tag2"}) }, - resetFunc: func() { mockConfig.Set("tags", []string{}) }, + loadFunc: func(mockConfig *config.MockConfig) { mockConfig.Set("tags", []string{"global:tag1", "global:tag2"}) }, + resetFunc: func(mockConfig *config.MockConfig) { mockConfig.Set("tags", []string{}) }, fields: fields{ instance: &KSMConfig{Tags: []string{"check:tag1", "check:tag2"}, DisableGlobalTags: true}, clusterName: "clustername", @@ -1420,15 +1419,18 @@ func TestKSMCheckInitTags(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { + mockConfig := config.Mock(t) + k := &KSMCheck{ instance: tt.fields.instance, clusterName: tt.fields.clusterName, + agentConfig: mockConfig, } - tt.loadFunc() + tt.loadFunc(mockConfig) k.initTags() assert.ElementsMatch(t, tt.expected, k.instance.Tags) - tt.resetFunc() + tt.resetFunc(mockConfig) }) } } diff --git a/pkg/collector/corechecks/cluster/kubernetesapiserver/kubernetes_apiserver.go b/pkg/collector/corechecks/cluster/kubernetesapiserver/kubernetes_apiserver.go index 64ac85c160b80..5d7c9509cbe65 100644 --- a/pkg/collector/corechecks/cluster/kubernetesapiserver/kubernetes_apiserver.go +++ b/pkg/collector/corechecks/cluster/kubernetesapiserver/kubernetes_apiserver.go @@ -25,6 +25,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/metrics" + "github.com/DataDog/datadog-agent/pkg/tagger" "github.com/DataDog/datadog-agent/pkg/telemetry" "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver" @@ -133,8 +134,8 @@ func KubernetesASFactory() check.Check { } // Configure parses the check configuration and init the check. -func (k *KubeASCheck) Configure(config, initConfig integration.Data, source string) error { - err := k.CommonConfigure(initConfig, config, source) +func (k *KubeASCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { + err := k.CommonConfigure(integrationConfigDigest, initConfig, config, source) if err != nil { return err } @@ -157,7 +158,7 @@ func (k *KubeASCheck) Configure(config, initConfig integration.Data, source stri clusterName := clustername.GetRFC1123CompliantClusterName(context.TODO(), hostnameDetected) if k.instance.UnbundleEvents { - k.eventCollection.Transformer = newUnbundledTransformer(clusterName, k.instance.CollectedEventTypes) + k.eventCollection.Transformer = newUnbundledTransformer(clusterName, tagger.GetDefaultTagger(), k.instance.CollectedEventTypes) } else { k.eventCollection.Filter = convertFilters(k.instance.FilteredEventTypes) k.eventCollection.Transformer = newBundledTransformer(clusterName) diff --git a/pkg/collector/corechecks/cluster/kubernetesapiserver/kubernetes_openshift_test.go b/pkg/collector/corechecks/cluster/kubernetesapiserver/kubernetes_openshift_test.go index 7d8d7e28acbe9..f1cf6d5a18c6d 100644 --- a/pkg/collector/corechecks/cluster/kubernetesapiserver/kubernetes_openshift_test.go +++ b/pkg/collector/corechecks/cluster/kubernetesapiserver/kubernetes_openshift_test.go @@ -18,6 +18,7 @@ import ( "github.com/stretchr/testify/require" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/config" ) @@ -32,10 +33,10 @@ func TestReportClusterQuotas(t *testing.T) { config.Datadog.Set("cluster_name", "test-cluster-name") defer config.Datadog.Set("cluster_name", prevClusterName) - var instanceCfg = []byte("") - var initCfg = []byte("") + instanceCfg := []byte("") + initCfg := []byte("") kubeASCheck := KubernetesASFactory().(*KubeASCheck) - err = kubeASCheck.Configure(instanceCfg, initCfg, "test") + err = kubeASCheck.Configure(integration.FakeConfigHash, instanceCfg, initCfg, "test") require.NoError(t, err) mocked := mocksender.NewMockSender(kubeASCheck.ID()) diff --git a/pkg/collector/corechecks/cluster/kubernetesapiserver/unbundled_events.go b/pkg/collector/corechecks/cluster/kubernetesapiserver/unbundled_events.go index 6369f4f318541..fbd6046e650f9 100644 --- a/pkg/collector/corechecks/cluster/kubernetesapiserver/unbundled_events.go +++ b/pkg/collector/corechecks/cluster/kubernetesapiserver/unbundled_events.go @@ -14,10 +14,13 @@ import ( v1 "k8s.io/api/core/v1" "github.com/DataDog/datadog-agent/pkg/metrics" + "github.com/DataDog/datadog-agent/pkg/tagger" + "github.com/DataDog/datadog-agent/pkg/tagger/collectors" + "github.com/DataDog/datadog-agent/pkg/tagset" "github.com/DataDog/datadog-agent/pkg/util/log" ) -func newUnbundledTransformer(clusterName string, types []collectedEventType) eventTransformer { +func newUnbundledTransformer(clusterName string, taggerInstance tagger.Tagger, types []collectedEventType) eventTransformer { collectedTypes := make([]collectedEventType, 0, len(types)) for _, f := range types { if f.Kind == "" && f.Source == "" { @@ -31,12 +34,14 @@ func newUnbundledTransformer(clusterName string, types []collectedEventType) eve return &unbundledTransformer{ clusterName: clusterName, collectedTypes: collectedTypes, + taggerInstance: tagger.GetDefaultTagger(), } } type unbundledTransformer struct { clusterName string collectedTypes []collectedEventType + taggerInstance tagger.Tagger } func (c *unbundledTransformer) Transform(events []*v1.Event) ([]metrics.Event, []error) { @@ -60,16 +65,18 @@ func (c *unbundledTransformer) Transform(events []*v1.Event) ([]metrics.Event, [ involvedObject := ev.InvolvedObject hostInfo := getEventHostInfo(c.clusterName, ev) readableKey := buildReadableKey(involvedObject) + tagsAccumulator := tagset.NewHashlessTagsAccumulator() - tags := getInvolvedObjectTags(involvedObject) - tags = append(tags, + tagsAccumulator.Append(getInvolvedObjectTags(involvedObject)...) + tagsAccumulator.Append( fmt.Sprintf("source_component:%s", ev.Source.Component), - fmt.Sprintf("event_reason:%s", ev.Reason), - ) + fmt.Sprintf("event_reason:%s", ev.Reason)) if hostInfo.providerID != "" { - tags = append(tags, fmt.Sprintf("host_provider_id:%s", hostInfo.providerID)) + tagsAccumulator.Append(fmt.Sprintf("host_provider_id:%s", hostInfo.providerID)) } + c.getTagsFromTagger(involvedObject, tagsAccumulator) + tagsAccumulator.SortUniq() emittedEvents.Inc(involvedObject.Kind, ev.Type) @@ -80,7 +87,7 @@ func (c *unbundledTransformer) Transform(events []*v1.Event) ([]metrics.Event, [ SourceTypeName: "kubernetes", EventType: kubernetesAPIServerCheckName, Ts: int64(ev.LastTimestamp.Unix()), - Tags: tags, + Tags: tagsAccumulator.Get(), AggregationKey: fmt.Sprintf("kubernetes_apiserver:%s", involvedObject.UID), AlertType: getDDAlertType(ev.Type), Text: ev.Message, @@ -90,6 +97,26 @@ func (c *unbundledTransformer) Transform(events []*v1.Event) ([]metrics.Event, [ return datadogEvs, errors } +// getTagsFromTagger add to the TagsAccumulator associated object tags from the tagger. +// For now only Pod object kind is supported. +func (c *unbundledTransformer) getTagsFromTagger(obj v1.ObjectReference, tagsAcc tagset.TagsAccumulator) { + if c.taggerInstance == nil { + return + } + switch obj.Kind { + case podKind: + entityId := fmt.Sprintf("kubernetes_pod_uid://%s", obj.UID) + entity, err := c.taggerInstance.GetEntity(entityId) + if err != nil { + return + } + // we can get high Cardinality because tags on events is seemless. + tagsAcc.Append(entity.GetTags(collectors.HighCardinality)...) + default: + return + } +} + func (c *unbundledTransformer) shouldCollect(ev *v1.Event) bool { involvedObject := ev.InvolvedObject diff --git a/pkg/collector/corechecks/cluster/kubernetesapiserver/unbundled_events_test.go b/pkg/collector/corechecks/cluster/kubernetesapiserver/unbundled_events_test.go index ae9a816762427..781f969df005c 100644 --- a/pkg/collector/corechecks/cluster/kubernetesapiserver/unbundled_events_test.go +++ b/pkg/collector/corechecks/cluster/kubernetesapiserver/unbundled_events_test.go @@ -17,6 +17,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/DataDog/datadog-agent/pkg/metrics" + "github.com/DataDog/datadog-agent/pkg/tagger/local" ) func TestUnbundledEventsTransform(t *testing.T) { @@ -73,15 +74,15 @@ func TestUnbundledEventsTransform(t *testing.T) { Priority: metrics.EventPriorityNormal, Host: "test-host-test-cluster", Tags: []string{ + "event_reason:Failed", "kube_kind:Pod", "kube_name:redis", + "kube_namespace:default", "kubernetes_kind:Pod", "name:redis", - "kube_namespace:default", "namespace:default", "pod_name:redis", "source_component:kubelet", - "event_reason:Failed", }, AlertType: metrics.EventAlertTypeWarning, AggregationKey: "kubernetes_apiserver:foobar", @@ -97,7 +98,7 @@ func TestUnbundledEventsTransform(t *testing.T) { collectedTypes := []collectedEventType{ {Kind: "Pod", Reasons: []string{"Failed"}}, } - transformer := newUnbundledTransformer("test-cluster", collectedTypes) + transformer := newUnbundledTransformer("test-cluster", local.NewFakeTagger(), collectedTypes) events, errors := transformer.Transform([]*v1.Event{tt.event}) @@ -179,7 +180,7 @@ func TestUnbundledEventsShouldCollect(t *testing.T) { }, } - transformer := newUnbundledTransformer("test-cluster", collectedTypes) + transformer := newUnbundledTransformer("test-cluster", local.NewFakeTagger(), collectedTypes) got := transformer.(*unbundledTransformer).shouldCollect(tt.event) assert.Equal(t, tt.expected, got) }) diff --git a/pkg/collector/corechecks/cluster/orchestrator/collector_bundle.go b/pkg/collector/corechecks/cluster/orchestrator/collector_bundle.go index 353594a0c51f1..eacf140a8b1de 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collector_bundle.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collector_bundle.go @@ -15,6 +15,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/collectors" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/discovery" "github.com/DataDog/datadog-agent/pkg/orchestrator" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -29,14 +30,16 @@ const ( // CollectorBundle is a container for a group of collectors. It provides a way // to easily run them all. type CollectorBundle struct { - check *OrchestratorCheck - collectors []collectors.Collector - discoverCollectors bool - extraSyncTimeout time.Duration - inventory *inventory.CollectorInventory - stopCh chan struct{} - runCfg *collectors.CollectorRunConfig - manifestBuffer *ManifestBuffer + check *OrchestratorCheck + collectors []collectors.Collector + discoverCollectors bool + extraSyncTimeout time.Duration + inventory *inventory.CollectorInventory + stopCh chan struct{} + runCfg *collectors.CollectorRunConfig + manifestBuffer *ManifestBuffer + crdDiscovery *discovery.DiscoveryCollector + activatedCollectors map[string]struct{} } // NewCollectorBundle creates a new bundle from the check configuration. @@ -60,8 +63,10 @@ func NewCollectorBundle(chk *OrchestratorCheck) *CollectorBundle { Config: chk.orchestratorConfig, MsgGroupRef: chk.groupID, }, - stopCh: make(chan struct{}), - manifestBuffer: NewManifestBuffer(chk), + stopCh: make(chan struct{}), + manifestBuffer: NewManifestBuffer(chk), + crdDiscovery: discovery.NewDiscoveryCollectorForInventory(), + activatedCollectors: map[string]struct{}{}, } bundle.prepare() @@ -77,6 +82,13 @@ func (cb *CollectorBundle) prepare() { // prepareCollectors initializes the bundle collector list. func (cb *CollectorBundle) prepareCollectors() { + // we still need to collect non crd resources except if otherwise configured + if ok := cb.importCRDCollectorsFromCheckConfig(); ok { + if cb.skipImportingDefaultCollectors() { + return + } + } + if ok := cb.importCollectorsFromCheckConfig(); ok { return } @@ -89,25 +101,54 @@ func (cb *CollectorBundle) prepareCollectors() { return } +// skipImportingDefaultCollectors skips importing the default collectors if the collector list is explicitly set to an +// empty string. Example: +/* +init_config: +instances: + - collectors: [] + crd_collectors: + - datadoghq.com/v1alpha1/datadogmetrics +*/ +func (cb *CollectorBundle) skipImportingDefaultCollectors() bool { + return cb.check.instance.Collectors != nil && len(cb.check.instance.Collectors) == 0 +} + // addCollectorFromConfig appends a collector to the bundle based on the // collector name specified in the check configuration. // +// ## Normal Groups // The following configuration keys are accepted: // - (e.g "cronjobs") // - / (e.g. "batch/v1/cronjobs") // -// Note that in the versionless case the collector version that'll be used is -// the one declared as the default version in the inventory. -func (cb *CollectorBundle) addCollectorFromConfig(collectorName string) { +// ## CRDs +// The following configuration keys are accepted: +// - / (e.g. "batch/v1/cronjobs") +func (cb *CollectorBundle) addCollectorFromConfig(collectorName string, isCRD bool) { var ( collector collectors.Collector err error ) - if idx := strings.LastIndex(collectorName, "/"); idx != -1 { - version := collectorName[:idx] + if isCRD { + idx := strings.LastIndex(collectorName, "/") + if idx == -1 { + _ = cb.check.Warnf("Unsupported crd collector definition: %s. Definition needs to be of / (e.g. \"batch/v1/cronjobs\")", collectorName) + return + } + groupVersion := collectorName[:idx] + resource := collectorName[idx+1:] + if c, _ := cb.inventory.CollectorForVersion(resource, groupVersion); c != nil { + _ = cb.check.Warnf("Ignoring CRD collector %s: use builtin collection instead", collectorName) + + return + } + collector, err = cb.crdDiscovery.VerifyForInventory(resource, groupVersion) + } else if idx := strings.LastIndex(collectorName, "/"); idx != -1 { + groupVersion := collectorName[:idx] name := collectorName[idx+1:] - collector, err = cb.inventory.CollectorForVersion(name, version) + collector, err = cb.inventory.CollectorForVersion(name, groupVersion) } else { collector, err = cb.inventory.CollectorForDefaultVersion(collectorName) } @@ -117,10 +158,18 @@ func (cb *CollectorBundle) addCollectorFromConfig(collectorName string) { return } - if !collector.Metadata().IsStable { + // this is to stop multiple crds and/or people setting resources as custom resources which we already collect + // I am using the fullName for now on purpose in case we have the same resource across 2 different groups setup + if _, ok := cb.activatedCollectors[collector.Metadata().FullName()]; ok { + _ = cb.check.Warnf("collector %s has already been added", collectorName) // Before using unstable info + return + } + + if !collector.Metadata().IsStable && !isCRD { _ = cb.check.Warnf("Using unstable collector: %s", collector.Metadata().FullName()) } + cb.activatedCollectors[collector.Metadata().FullName()] = struct{}{} cb.collectors = append(cb.collectors, collector) } @@ -132,7 +181,20 @@ func (cb *CollectorBundle) importCollectorsFromCheckConfig() bool { return false } for _, c := range cb.check.instance.Collectors { - cb.addCollectorFromConfig(c) + cb.addCollectorFromConfig(c, false) + } + return true +} + +// importCRDCollectorsFromCheckConfig tries to fill the crd bundle with the list of +// collectors specified in the orchestrator crd check configuration. Returns true if +// at least one collector was set, false otherwise. +func (cb *CollectorBundle) importCRDCollectorsFromCheckConfig() bool { + if len(cb.check.instance.CRDCollectors) == 0 { + return false + } + for _, c := range cb.check.instance.CRDCollectors { + cb.addCollectorFromConfig(c, true) } return true } @@ -145,7 +207,7 @@ func (cb *CollectorBundle) importCollectorsFromDiscovery() bool { return false } - collectors, err := NewAPIServerDiscoveryProvider().Discover(cb.inventory) + collectors, err := discovery.NewAPIServerDiscoveryProvider().Discover(cb.inventory) if err != nil { _ = cb.check.Warnf("Collector discovery failed: %s", err) return false @@ -240,13 +302,17 @@ func (cb *CollectorBundle) Run(sender aggregator.Sender) { runDuration := time.Since(runStartTime) log.Debugf("Collector %s run stats: listed=%d processed=%d messages=%d duration=%s", collector.Metadata().FullName(), result.ResourcesListed, result.ResourcesProcessed, len(result.Result.MetadataMessages), runDuration) - orchestrator.SetCacheStats(result.ResourcesListed, len(result.Result.MetadataMessages), collector.Metadata().NodeType) - sender.OrchestratorMetadata(result.Result.MetadataMessages, cb.check.clusterID, int(collector.Metadata().NodeType)) + nt := collector.Metadata().NodeType + orchestrator.SetCacheStats(result.ResourcesListed, len(result.Result.MetadataMessages), nt) + + if collector.Metadata().IsMetadataProducer { // for CR and CRD we don't have metadata but only manifests + sender.OrchestratorMetadata(result.Result.MetadataMessages, cb.check.clusterID, int(nt)) + } + if cb.runCfg.Config.IsManifestCollectionEnabled { - if cb.manifestBuffer.Cfg.BufferedManifestEnabled { + if cb.manifestBuffer.Cfg.BufferedManifestEnabled && collector.Metadata().SupportsManifestBuffering { BufferManifestProcessResult(result.Result.ManifestMessages, cb.manifestBuffer) } else { - // We don't buffer manifests for the pod check sender.OrchestratorManifest(result.Result.ManifestMessages, cb.check.clusterID) } } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/collector.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/collector.go index 48b856b369d75..727e5e215f4ef 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/collector.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/collector.go @@ -72,11 +72,14 @@ func (cv *CollectorVersions) CollectorForVersion(version string) (Collector, boo // CollectorMetadata contains information about a collector. type CollectorMetadata struct { - IsDefaultVersion bool - IsStable bool - Name string - NodeType orchestrator.NodeType - Version string + IsDefaultVersion bool + IsMetadataProducer bool + IsManifestProducer bool + IsStable bool + SupportsManifestBuffering bool + Name string + NodeType orchestrator.NodeType + Version string } // FullName returns a string that contains the collector name and version. diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory/inventory.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory/inventory.go index c70a628c6f764..4f110e797d8b9 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory/inventory.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory/inventory.go @@ -28,6 +28,7 @@ func NewCollectorInventory() *CollectorInventory { k8sCollectors.NewClusterCollectorVersions(), k8sCollectors.NewClusterRoleCollectorVersions(), k8sCollectors.NewClusterRoleBindingCollectorVersions(), + k8sCollectors.NewCRDCollectorVersions(), k8sCollectors.NewCronJobCollectorVersions(), k8sCollectors.NewDaemonSetCollectorVersions(), k8sCollectors.NewDeploymentCollectorVersions(), @@ -44,6 +45,7 @@ func NewCollectorInventory() *CollectorInventory { k8sCollectors.NewServiceAccountCollectorVersions(), k8sCollectors.NewStatefulSetCollectorVersions(), k8sCollectors.NewUnassignedPodCollectorVersions(), + k8sCollectors.NewVerticalPodAutoscalerCollectorVersions(), }, } } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cluster.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cluster.go index aec403836a9c1..d1e5976ad731f 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cluster.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cluster.go @@ -39,10 +39,13 @@ type ClusterCollector struct { func NewClusterCollector() *ClusterCollector { return &ClusterCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "clusters", - NodeType: orchestrator.K8sCluster, + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "clusters", + NodeType: orchestrator.K8sCluster, }, processor: k8sProcessors.NewClusterProcessor(), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/clusterrole.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/clusterrole.go index d71a93d26ce27..4b9f65347ebb1 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/clusterrole.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/clusterrole.go @@ -40,11 +40,14 @@ type ClusterRoleCollector struct { func NewClusterRoleCollector() *ClusterRoleCollector { return &ClusterRoleCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "clusterroles", - NodeType: orchestrator.K8sClusterRole, - Version: "rbac.authorization.k8s.io/v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "clusterroles", + NodeType: orchestrator.K8sClusterRole, + Version: "rbac.authorization.k8s.io/v1", }, processor: processors.NewProcessor(new(k8sProcessors.ClusterRoleHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/clusterrolebinding.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/clusterrolebinding.go index 532a05988b56b..b3d0847ace5ba 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/clusterrolebinding.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/clusterrolebinding.go @@ -40,11 +40,14 @@ type ClusterRoleBindingCollector struct { func NewClusterRoleBindingCollector() *ClusterRoleBindingCollector { return &ClusterRoleBindingCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "clusterrolebindings", - NodeType: orchestrator.K8sClusterRoleBinding, - Version: "rbac.authorization.k8s.io/v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "clusterrolebindings", + NodeType: orchestrator.K8sClusterRoleBinding, + Version: "rbac.authorization.k8s.io/v1", }, processor: processors.NewProcessor(new(k8sProcessors.ClusterRoleBindingHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cr.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cr.go new file mode 100644 index 0000000000000..abaa2761bdd07 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cr.go @@ -0,0 +1,114 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver && orchestrator +// +build kubeapiserver,orchestrator + +package k8s + +import ( + "fmt" + + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/collectors" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" + k8sProcessors "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors/k8s" + "github.com/DataDog/datadog-agent/pkg/orchestrator" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/client-go/informers" + + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// NewCRCollectorVersion builds the group of collector versions. +func NewCRCollectorVersion(resource string, groupVersion string) (*CRCollector, error) { + return NewCRCollector(resource, groupVersion) +} + +// CRCollector is a collector for Kubernetes Custom Resources. +// See https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/ for more detail. +type CRCollector struct { + gvr schema.GroupVersionResource + informer informers.GenericInformer + lister cache.GenericLister + metadata *collectors.CollectorMetadata + processor *processors.Processor +} + +// NewCRCollector creates a new collector for Kubernetes CRs. +func NewCRCollector(name string, groupVersion string) (*CRCollector, error) { + gv, err := schema.ParseGroupVersion(groupVersion) + if err != nil { + return nil, err + } + return &CRCollector{ + metadata: &collectors.CollectorMetadata{ + IsDefaultVersion: true, + IsStable: false, + IsManifestProducer: true, + IsMetadataProducer: false, + SupportsManifestBuffering: false, + Name: fmt.Sprintf("%s", name), + NodeType: orchestrator.K8sCR, + Version: groupVersion, + }, + gvr: gv.WithResource(name), + processor: processors.NewProcessor(new(k8sProcessors.CRHandlers)), + }, nil +} + +// Informer returns the shared informer. +func (c *CRCollector) Informer() cache.SharedInformer { + return c.informer.Informer() +} + +func (c *CRCollector) getGRV() schema.GroupVersionResource { + return c.gvr +} + +// Init is used to initialize the collector. +func (c *CRCollector) Init(rcfg *collectors.CollectorRunConfig) { + grv := c.getGRV() + c.informer = rcfg.APIClient.DynamicInformerFactory.ForResource(grv) + c.lister = c.informer.Lister() +} + +// IsAvailable returns whether the collector is available. +func (c *CRCollector) IsAvailable() bool { return true } + +// Metadata is used to access information about the collector. +func (c *CRCollector) Metadata() *collectors.CollectorMetadata { + return c.metadata +} + +// Run triggers the collection process. +func (c *CRCollector) Run(rcfg *collectors.CollectorRunConfig) (*collectors.CollectorRunResult, error) { + list, err := c.lister.List(labels.Everything()) + if err != nil { + return nil, collectors.NewListingError(err) + } + + ctx := &processors.ProcessorContext{ + APIClient: rcfg.APIClient, + Cfg: rcfg.Config, + ClusterID: rcfg.ClusterID, + MsgGroupID: rcfg.MsgGroupRef.Inc(), + NodeType: c.metadata.NodeType, + } + + processResult, processed := c.processor.Process(ctx, list) + + if processed == -1 { + return nil, collectors.ErrProcessingPanic + } + + result := &collectors.CollectorRunResult{ + Result: processResult, + ResourcesListed: len(list), + ResourcesProcessed: processed, + } + + return result, nil +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/crd.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/crd.go new file mode 100644 index 0000000000000..c338a0ae20d0b --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/crd.go @@ -0,0 +1,108 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver && orchestrator +// +build kubeapiserver,orchestrator + +package k8s + +import ( + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/collectors" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" + k8sProcessors "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors/k8s" + "github.com/DataDog/datadog-agent/pkg/orchestrator" + "github.com/DataDog/datadog-agent/pkg/util/log" + v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/informers" + "k8s.io/client-go/tools/cache" +) + +// NewCRDCollectorVersions builds the group of collector versions. +func NewCRDCollectorVersions() collectors.CollectorVersions { + return collectors.NewCollectorVersions( + NewCRDCollector(), + ) +} + +// CRDCollector is a collector for Kubernetes CRDs. +type CRDCollector struct { + informer informers.GenericInformer + lister cache.GenericLister + metadata *collectors.CollectorMetadata + processor *processors.Processor +} + +// NewCRDCollector creates a new collector for the Kubernetes CRD +// resource. +func NewCRDCollector() *CRDCollector { + return &CRDCollector{ + metadata: &collectors.CollectorMetadata{ + IsDefaultVersion: true, + IsStable: false, + IsManifestProducer: true, + IsMetadataProducer: false, + SupportsManifestBuffering: false, + Name: "customresourcedefinitions", + NodeType: orchestrator.K8sCRD, + Version: "apiextensions.k8s.io/v1", + }, + processor: processors.NewProcessor(new(k8sProcessors.CRDHandlers)), + } +} + +// Informer returns the shared informer. +func (c *CRDCollector) Informer() cache.SharedInformer { + return c.informer.Informer() +} + +// Init is used to initialize the collector. +func (c *CRDCollector) Init(rcfg *collectors.CollectorRunConfig) { + groupVersionResource := v1.SchemeGroupVersion.WithResource("customresourcedefinitions") + var err error + c.informer, err = rcfg.APIClient.CRDInformerFactory.ForResource(groupVersionResource) + if err != nil { + log.Error(err) + } + c.lister = c.informer.Lister() // return that Lister +} + +// IsAvailable returns whether the collector is available. +func (c *CRDCollector) IsAvailable() bool { return true } + +// Metadata is used to access information about the collector. +func (c *CRDCollector) Metadata() *collectors.CollectorMetadata { + return c.metadata +} + +// Run triggers the collection process. +func (c *CRDCollector) Run(rcfg *collectors.CollectorRunConfig) (*collectors.CollectorRunResult, error) { + list, err := c.lister.List(labels.Everything()) + if err != nil { + return nil, collectors.NewListingError(err) + } + + ctx := &processors.ProcessorContext{ + APIClient: rcfg.APIClient, + Cfg: rcfg.Config, + ClusterID: rcfg.ClusterID, + MsgGroupID: rcfg.MsgGroupRef.Inc(), + NodeType: c.metadata.NodeType, + } + + processResult, processed := c.processor.Process(ctx, list) + + if processed == -1 { + return nil, collectors.ErrProcessingPanic + } + + result := &collectors.CollectorRunResult{ + Result: processResult, + ResourcesListed: len(list), + ResourcesProcessed: processed, + } + + return result, nil +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cronjob_v1.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cronjob_v1.go index 533b918a5ede1..24d67e028df0a 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cronjob_v1.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cronjob_v1.go @@ -32,11 +32,14 @@ type CronJobV1Collector struct { func NewCronJobV1Collector() *CronJobV1Collector { return &CronJobV1Collector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "cronjobs", - NodeType: orchestrator.K8sCronJob, - Version: "batch/v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "cronjobs", + NodeType: orchestrator.K8sCronJob, + Version: "batch/v1", }, processor: processors.NewProcessor(new(k8sProcessors.CronJobV1Handlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cronjob_v1beta1.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cronjob_v1beta1.go index fcc6a3d3c5d94..b18b7f508e14d 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cronjob_v1beta1.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/cronjob_v1beta1.go @@ -32,11 +32,14 @@ type CronJobV1Beta1Collector struct { func NewCronJobV1Beta1Collector() *CronJobV1Beta1Collector { return &CronJobV1Beta1Collector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: false, - IsStable: true, - Name: "cronjobs", - NodeType: orchestrator.K8sCronJob, - Version: "batch/v1beta1", + IsDefaultVersion: false, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "cronjobs", + NodeType: orchestrator.K8sCronJob, + Version: "batch/v1beta1", }, processor: processors.NewProcessor(new(k8sProcessors.CronJobV1Beta1Handlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/daemonset.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/daemonset.go index 3f4379fcac487..9f2a713410fb4 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/daemonset.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/daemonset.go @@ -40,11 +40,14 @@ type DaemonSetCollector struct { func NewDaemonSetCollector() *DaemonSetCollector { return &DaemonSetCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "daemonsets", - NodeType: orchestrator.K8sDaemonSet, - Version: "apps/v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "daemonsets", + NodeType: orchestrator.K8sDaemonSet, + Version: "apps/v1", }, processor: processors.NewProcessor(new(k8sProcessors.DaemonSetHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/deployment.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/deployment.go index e880a4693d321..082f1e04327fa 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/deployment.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/deployment.go @@ -40,11 +40,14 @@ type DeploymentCollector struct { func NewDeploymentCollector() *DeploymentCollector { return &DeploymentCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "deployments", - NodeType: orchestrator.K8sDeployment, - Version: "apps/v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "deployments", + NodeType: orchestrator.K8sDeployment, + Version: "apps/v1", }, processor: processors.NewProcessor(new(k8sProcessors.DeploymentHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/ingress.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/ingress.go index bfe498f43555d..134ebb9843acf 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/ingress.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/ingress.go @@ -48,11 +48,14 @@ type IngressCollector struct { func NewIngressCollector() *IngressCollector { return &IngressCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "ingresses", - NodeType: orchestrator.K8sIngress, - Version: "networking.k8s.io/v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "ingresses", + NodeType: orchestrator.K8sIngress, + Version: "networking.k8s.io/v1", }, processor: processors.NewProcessor(new(k8sProcessors.IngressHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/job.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/job.go index 4fef809d28f52..f901ca7325dcf 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/job.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/job.go @@ -39,11 +39,14 @@ type JobCollector struct { func NewJobCollector() *JobCollector { return &JobCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "jobs", - NodeType: orchestrator.K8sJob, - Version: "batch/v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "jobs", + NodeType: orchestrator.K8sJob, + Version: "batch/v1", }, processor: processors.NewProcessor(new(k8sProcessors.JobHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/namespace.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/namespace.go index 74847ed79a2ef..46f35cb1150c8 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/namespace.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/namespace.go @@ -40,11 +40,14 @@ type NamespaceCollector struct { func NewNamespaceCollector() *NamespaceCollector { return &NamespaceCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "namespaces", - NodeType: orchestrator.K8sNamespace, - Version: "v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "namespaces", + NodeType: orchestrator.K8sNamespace, + Version: "v1", }, processor: processors.NewProcessor(new(k8sProcessors.NamespaceHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/node.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/node.go index e285a2e741d0e..2d27069e101a9 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/node.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/node.go @@ -39,11 +39,14 @@ type NodeCollector struct { func NewNodeCollector() *NodeCollector { return &NodeCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "nodes", - NodeType: orchestrator.K8sNode, - Version: "v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "nodes", + NodeType: orchestrator.K8sNode, + Version: "v1", }, processor: processors.NewProcessor(new(k8sProcessors.NodeHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/persistentvolume.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/persistentvolume.go index 9e8ca03f31a57..6314c505827e1 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/persistentvolume.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/persistentvolume.go @@ -40,11 +40,14 @@ type PersistentVolumeCollector struct { func NewPersistentVolumeCollector() *PersistentVolumeCollector { return &PersistentVolumeCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "persistentvolumes", - NodeType: orchestrator.K8sPersistentVolume, - Version: "v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "persistentvolumes", + NodeType: orchestrator.K8sPersistentVolume, + Version: "v1", }, processor: processors.NewProcessor(new(k8sProcessors.PersistentVolumeHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/persistentvolumeclaim.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/persistentvolumeclaim.go index db48a12cf954f..d3a512489443d 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/persistentvolumeclaim.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/persistentvolumeclaim.go @@ -40,11 +40,14 @@ type PersistentVolumeClaimCollector struct { func NewPersistentVolumeClaimCollector() *PersistentVolumeClaimCollector { return &PersistentVolumeClaimCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "persistentvolumeclaims", - NodeType: orchestrator.K8sPersistentVolumeClaim, - Version: "v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "persistentvolumeclaims", + NodeType: orchestrator.K8sPersistentVolumeClaim, + Version: "v1", }, processor: processors.NewProcessor(new(k8sProcessors.PersistentVolumeClaimHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/pod_unassigned.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/pod_unassigned.go index aa44578170900..7ca1d1137c5dd 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/pod_unassigned.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/pod_unassigned.go @@ -41,11 +41,14 @@ type UnassignedPodCollector struct { func NewUnassignedPodCollector() *UnassignedPodCollector { return &UnassignedPodCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "pods", - NodeType: orchestrator.K8sPod, - Version: "v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "pods", + NodeType: orchestrator.K8sPod, + Version: "v1", }, processor: processors.NewProcessor(new(k8sProcessors.PodHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/replicaset.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/replicaset.go index 7e93b280514aa..40f1a9182e80b 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/replicaset.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/replicaset.go @@ -40,11 +40,14 @@ type ReplicaSetCollector struct { func NewReplicaSetCollector() *ReplicaSetCollector { return &ReplicaSetCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "replicasets", - NodeType: orchestrator.K8sReplicaSet, - Version: "apps/v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "replicasets", + NodeType: orchestrator.K8sReplicaSet, + Version: "apps/v1", }, processor: processors.NewProcessor(new(k8sProcessors.ReplicaSetHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/role.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/role.go index 4506bc8958359..833e4ae6b4916 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/role.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/role.go @@ -39,11 +39,14 @@ type RoleCollector struct { func NewRoleCollector() *RoleCollector { return &RoleCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "roles", - NodeType: orchestrator.K8sRole, - Version: "rbac.authorization.k8s.io/v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "roles", + NodeType: orchestrator.K8sRole, + Version: "rbac.authorization.k8s.io/v1", }, processor: processors.NewProcessor(new(k8sProcessors.RoleHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/rolebinding.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/rolebinding.go index 455ce99f7cdd2..76f468df797fb 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/rolebinding.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/rolebinding.go @@ -40,11 +40,14 @@ type RoleBindingCollector struct { func NewRoleBindingCollector() *RoleBindingCollector { return &RoleBindingCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "rolebindings", - NodeType: orchestrator.K8sRoleBinding, - Version: "rbac.authorization.k8s.io/v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "rolebindings", + NodeType: orchestrator.K8sRoleBinding, + Version: "rbac.authorization.k8s.io/v1", }, processor: processors.NewProcessor(new(k8sProcessors.RoleBindingHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/service.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/service.go index fea447f67b476..a4ffe00da9633 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/service.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/service.go @@ -40,11 +40,14 @@ type ServiceCollector struct { func NewServiceCollector() *ServiceCollector { return &ServiceCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "services", - NodeType: orchestrator.K8sService, - Version: "v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "services", + NodeType: orchestrator.K8sService, + Version: "v1", }, processor: processors.NewProcessor(new(k8sProcessors.ServiceHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/serviceaccount.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/serviceaccount.go index 1dd0deb1c2e01..95f25e8f9b277 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/serviceaccount.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/serviceaccount.go @@ -40,11 +40,14 @@ type ServiceAccountCollector struct { func NewServiceAccountCollector() *ServiceAccountCollector { return &ServiceAccountCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "serviceaccounts", - NodeType: orchestrator.K8sServiceAccount, - Version: "v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "serviceaccounts", + NodeType: orchestrator.K8sServiceAccount, + Version: "v1", }, processor: processors.NewProcessor(new(k8sProcessors.ServiceAccountHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/statefulset.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/statefulset.go index 75f74b8201379..38dcff786e661 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/statefulset.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/statefulset.go @@ -40,11 +40,14 @@ type StatefulSetCollector struct { func NewStatefulSetCollector() *StatefulSetCollector { return &StatefulSetCollector{ metadata: &collectors.CollectorMetadata{ - IsDefaultVersion: true, - IsStable: true, - Name: "statefulsets", - NodeType: orchestrator.K8sStatefulSet, - Version: "apps/v1", + IsDefaultVersion: true, + IsStable: true, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "statefulsets", + NodeType: orchestrator.K8sStatefulSet, + Version: "apps/v1", }, processor: processors.NewProcessor(new(k8sProcessors.StatefulSetHandlers)), } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/verticalpodautoscaler.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/verticalpodautoscaler.go new file mode 100644 index 0000000000000..e869b1835e703 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/verticalpodautoscaler.go @@ -0,0 +1,104 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver && orchestrator +// +build kubeapiserver,orchestrator + +package k8s + +import ( + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/collectors" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" + k8sProcessors "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors/k8s" + "github.com/DataDog/datadog-agent/pkg/orchestrator" + + v1Informers "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io/v1" + v1Listers "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1" + + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// NewVerticalPodAutoscalerCollectorVersions builds the group of collector versions. +func NewVerticalPodAutoscalerCollectorVersions() collectors.CollectorVersions { + return collectors.NewCollectorVersions( + NewVerticalPodAutoscalerCollector(), + ) +} + +// VerticalPodAutoscalerCollector is a collector for Kubernetes VPAs. +type VerticalPodAutoscalerCollector struct { + informer v1Informers.VerticalPodAutoscalerInformer + lister v1Listers.VerticalPodAutoscalerLister + metadata *collectors.CollectorMetadata + processor *processors.Processor +} + +// NewVerticalPodAutoscalerCollector creates a new collector for the Kubernetes +// VerticalPodAutoscaler resource. +func NewVerticalPodAutoscalerCollector() *VerticalPodAutoscalerCollector { + return &VerticalPodAutoscalerCollector{ + metadata: &collectors.CollectorMetadata{ + IsDefaultVersion: true, + IsStable: false, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "verticalpodautoscalers", + NodeType: orchestrator.K8sVerticalPodAutoscaler, + Version: "v1", + }, + processor: processors.NewProcessor(new(k8sProcessors.VerticalPodAutoscalerHandlers)), + } +} + +// Informer returns the shared informer. +func (c *VerticalPodAutoscalerCollector) Informer() cache.SharedInformer { + return c.informer.Informer() +} + +// Init is used to initialize the collector. +func (c *VerticalPodAutoscalerCollector) Init(rcfg *collectors.CollectorRunConfig) { + c.informer = rcfg.APIClient.VPAInformerFactory.Autoscaling().V1().VerticalPodAutoscalers() + c.lister = c.informer.Lister() +} + +// IsAvailable returns whether the collector is available. +func (c *VerticalPodAutoscalerCollector) IsAvailable() bool { return true } + +// Metadata is used to access information about the collector. +func (c *VerticalPodAutoscalerCollector) Metadata() *collectors.CollectorMetadata { + return c.metadata +} + +// Run triggers the collection process. +func (c *VerticalPodAutoscalerCollector) Run(rcfg *collectors.CollectorRunConfig) (*collectors.CollectorRunResult, error) { + list, err := c.lister.List(labels.Everything()) + if err != nil { + return nil, collectors.NewListingError(err) + } + + ctx := &processors.ProcessorContext{ + APIClient: rcfg.APIClient, + Cfg: rcfg.Config, + ClusterID: rcfg.ClusterID, + MsgGroupID: rcfg.MsgGroupRef.Inc(), + NodeType: c.metadata.NodeType, + } + + processResult, processed := c.processor.Process(ctx, list) + + if processed == -1 { + return nil, collectors.ErrProcessingPanic + } + + result := &collectors.CollectorRunResult{ + Result: processResult, + ResourcesListed: len(list), + ResourcesProcessed: processed, + } + + return result, nil +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/collector_discovery.go b/pkg/collector/corechecks/cluster/orchestrator/discovery/collector_discovery.go similarity index 90% rename from pkg/collector/corechecks/cluster/orchestrator/collector_discovery.go rename to pkg/collector/corechecks/cluster/orchestrator/discovery/collector_discovery.go index ec5e3fcddda41..3659491703c61 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collector_discovery.go +++ b/pkg/collector/corechecks/cluster/orchestrator/discovery/collector_discovery.go @@ -6,7 +6,7 @@ //go:build kubeapiserver && orchestrator // +build kubeapiserver,orchestrator -package orchestrator +package discovery import ( "context" @@ -44,18 +44,41 @@ func NewAPIServerDiscoveryProvider() *APIServerDiscoveryProvider { // Discover returns collectors to enable based on information exposed by the API server. func (p *APIServerDiscoveryProvider) Discover(inventory *inventory.CollectorInventory) ([]collectors.Collector, error) { + groups, resources, err := GetServerGroupsAndResources() + + if err != nil { + return nil, err + } + + if len(resources) == 0 { + return nil, fmt.Errorf("failed to discover resources from API groups") + } + + preferredResources, otherResources := identifyResources(groups, resources) + + // First pass to enable server-preferred resources + p.walkAPIResources(inventory, preferredResources) + + // Second pass to enable other resources + p.walkAPIResources(inventory, otherResources) + + return p.result, nil +} + +// GetServerGroupsAndResources accesses the api server to retrieve the registered groups and resources +func GetServerGroupsAndResources() ([]*v1.APIGroup, []*v1.APIResourceList, error) { ctx, cancel := context.WithTimeout(context.Background(), defaultAPIServerTimeout) defer cancel() client, err := apiserver.WaitForAPIClient(ctx) if err != nil { - return nil, err + return nil, nil, err } groups, resources, err := client.DiscoveryCl.ServerGroupsAndResources() if err != nil { if !discovery.IsGroupDiscoveryFailedError(err) { - return nil, err + return nil, nil, err } // We don't handle API group errors here because we assume API groups used // by collectors in the orchestrator check will always be part of the result @@ -65,20 +88,7 @@ func (p *APIServerDiscoveryProvider) Discover(inventory *inventory.CollectorInve log.Warnf("Resources for API group version %s could not be discovered: %s", group, apiGroupErr) } } - - if len(resources) == 0 { - return nil, fmt.Errorf("failed to discover resources from API groups") - } - - preferredResources, otherResources := identifyResources(groups, resources) - - // First pass to enable server-preferred resources - p.walkAPIResources(inventory, preferredResources) - - // Second pass to enable other resources - p.walkAPIResources(inventory, otherResources) - - return p.result, nil + return groups, resources, nil } func (p *APIServerDiscoveryProvider) addCollector(collector collectors.Collector) { @@ -100,6 +110,11 @@ func (p *APIServerDiscoveryProvider) walkAPIResources(inventory *inventory.Colle continue } + // Ignore unstable collectors. + if !collector.Metadata().IsStable { + continue + } + // Enable the cluster collector when the node resource is discovered. if collector.Metadata().NodeType == orchestrator.K8sNode { clusterCollector, _ := inventory.CollectorForDefaultVersion("clusters") diff --git a/pkg/collector/corechecks/cluster/orchestrator/discovery/collector_discovery_crd.go b/pkg/collector/corechecks/cluster/orchestrator/discovery/collector_discovery_crd.go new file mode 100644 index 0000000000000..52e8cc8e2f198 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/discovery/collector_discovery_crd.go @@ -0,0 +1,83 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver && orchestrator +// +build kubeapiserver,orchestrator + +package discovery + +import ( + "fmt" + + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/collectors" + k8sCollectors "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +type discoveryCache struct { + groups []*v1.APIGroup + resources []*v1.APIResourceList + filled bool + collectorForVersion map[collectorVersion]struct{} +} + +type collectorVersion struct { + version string + name string +} + +type DiscoveryCollector struct { + cache discoveryCache +} + +func NewDiscoveryCollectorForInventory() *DiscoveryCollector { + return &DiscoveryCollector{ + cache: discoveryCache{collectorForVersion: map[collectorVersion]struct{}{}}, + } +} + +func (d *DiscoveryCollector) VerifyForInventory(resource string, groupVersion string) (collectors.Collector, error) { + collector, err := d.DiscoverCRDResource(resource, groupVersion) + if err != nil { + return nil, err + } + return collector, nil +} + +func (d *DiscoveryCollector) DiscoverCRDResource(resource string, groupVersion string) (*k8sCollectors.CRCollector, error) { + if !d.cache.filled { + var err error + d.cache.groups, d.cache.resources, err = GetServerGroupsAndResources() + if err != nil { + return nil, err + } + + if len(d.cache.resources) == 0 { + return nil, fmt.Errorf("failed to discover resources from API groups") + } + for _, list := range d.cache.resources { + for _, resource := range list.APIResources { + cv := collectorVersion{ + version: list.GroupVersion, + name: resource.Name, + } + d.cache.collectorForVersion[cv] = struct{}{} + } + } + d.cache.filled = true + } + + collector, err := k8sCollectors.NewCRCollectorVersion(resource, groupVersion) + if err != nil { + return nil, err + } + if _, ok := d.cache.collectorForVersion[collectorVersion{ + version: collector.Metadata().Version, + name: collector.Metadata().Name, + }]; ok { + return collector, nil + } + return nil, fmt.Errorf("failed to discover resource %s", resource) +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/collector_discovery_test.go b/pkg/collector/corechecks/cluster/orchestrator/discovery/collector_discovery_test.go similarity index 99% rename from pkg/collector/corechecks/cluster/orchestrator/collector_discovery_test.go rename to pkg/collector/corechecks/cluster/orchestrator/discovery/collector_discovery_test.go index 110cd42f44778..d0f7eae778bb2 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collector_discovery_test.go +++ b/pkg/collector/corechecks/cluster/orchestrator/discovery/collector_discovery_test.go @@ -6,7 +6,7 @@ //go:build kubeapiserver && orchestrator // +build kubeapiserver,orchestrator -package orchestrator +package discovery import ( "testing" diff --git a/pkg/collector/corechecks/cluster/orchestrator/manifest_buffer.go b/pkg/collector/corechecks/cluster/orchestrator/manifest_buffer.go index f4e35e4a5210f..872da12f80deb 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/manifest_buffer.go +++ b/pkg/collector/corechecks/cluster/orchestrator/manifest_buffer.go @@ -12,6 +12,7 @@ import ( "sync" "time" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors/k8s" "go.uber.org/atomic" model "github.com/DataDog/agent-payload/v5/process" @@ -79,7 +80,7 @@ func (cb *ManifestBuffer) flushManifest(sender aggregator.Sender) { MaxWeightPerMessageBytes: cb.Cfg.MaxWeightPerMessageBytes, }, } - manifestMessages := processors.ChunkManifest(ctx, manifests) + manifestMessages := processors.ChunkManifest(ctx, k8s.BaseHandlers{}.BuildManifestMessageBody, manifests) sender.OrchestratorManifest(manifestMessages, cb.Cfg.ClusterID) cb.bufferedManifests = cb.bufferedManifests[:0] } diff --git a/pkg/collector/corechecks/cluster/orchestrator/orchestrator.go b/pkg/collector/corechecks/cluster/orchestrator/orchestrator.go index b47f98b8fb42c..af2662a216ca2 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/orchestrator.go +++ b/pkg/collector/corechecks/cluster/orchestrator/orchestrator.go @@ -47,7 +47,12 @@ type OrchestratorInstance struct { // collectors: // - nodes // - services - Collectors []string `yaml:"collectors"` + Collectors []string `yaml:"collectors"` + // CRDCollectors defines collectors for custom Kubernetes resource types. + // crd_collectors: + // - datadoghq.com/v1alpha1/datadogmetrics + // - stable.example.com/v1/crontabs + CRDCollectors []string `yaml:"crd_collectors"` ExtraSyncTimeoutSeconds int `yaml:"extra_sync_timeout_seconds"` } @@ -93,10 +98,10 @@ func (o *OrchestratorCheck) Interval() time.Duration { } // Configure configures the orchestrator check -func (o *OrchestratorCheck) Configure(config, initConfig integration.Data, source string) error { - o.BuildID(config, initConfig) +func (o *OrchestratorCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { + o.BuildID(integrationConfigDigest, config, initConfig) - err := o.CommonConfigure(initConfig, config, source) + err := o.CommonConfigure(integrationConfigDigest, initConfig, config, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/base.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/base.go index 7f5b5f5428038..62b1808f0d4d1 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/base.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/base.go @@ -9,6 +9,7 @@ package k8s import ( + model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" ) @@ -22,5 +23,26 @@ func (BaseHandlers) BeforeMarshalling(ctx *processors.ProcessorContext, resource return } -func (BaseHandlers) ScrubBeforeMarshalling(ctx *processors.ProcessorContext, resource interface{}) { +func (BaseHandlers) ScrubBeforeMarshalling(ctx *processors.ProcessorContext, resource interface{}) {} + +func (BaseHandlers) BuildManifestMessageBody(ctx *processors.ProcessorContext, resourceManifests []interface{}, groupSize int) model.MessageBody { + return ExtractModelManifests(ctx, resourceManifests, groupSize) +} + +// ExtractModelManifests creates the model manifest from the given manifests +func ExtractModelManifests(ctx *processors.ProcessorContext, resourceManifests []interface{}, groupSize int) *model.CollectorManifest { + manifests := make([]*model.Manifest, 0, len(resourceManifests)) + + for _, m := range resourceManifests { + manifests = append(manifests, m.(*model.Manifest)) + } + + cm := &model.CollectorManifest{ + ClusterName: ctx.Cfg.KubeClusterName, + ClusterId: ctx.ClusterID, + Manifests: manifests, + GroupId: ctx.MsgGroupID, + GroupSize: int32(groupSize), + } + return cm } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/clusterrole.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/clusterrole.go index ea37b815afed2..afe34b86fed23 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/clusterrole.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/clusterrole.go @@ -69,7 +69,7 @@ func (h *ClusterRoleHandlers) ResourceList(ctx *processors.ProcessorContext, lis } // ResourceUID is a handler called to retrieve the resource UID. -func (h *ClusterRoleHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *ClusterRoleHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*rbacv1.ClusterRole).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/clusterrolebinding.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/clusterrolebinding.go index d4269c9f52fd1..aea53302c673e 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/clusterrolebinding.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/clusterrolebinding.go @@ -70,7 +70,7 @@ func (h *ClusterRoleBindingHandlers) ResourceList(ctx *processors.ProcessorConte } // ResourceUID is a handler called to retrieve the resource UID. -func (h *ClusterRoleBindingHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *ClusterRoleBindingHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*rbacv1.ClusterRoleBinding).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/cr.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/cr.go new file mode 100644 index 0000000000000..381a543a15b80 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/cr.go @@ -0,0 +1,79 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build orchestrator +// +build orchestrator + +package k8s + +import ( + model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/orchestrator/redact" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" + "k8s.io/apimachinery/pkg/types" +) + +// CRHandlers implements the Handlers interface for Kubernetes CronJobs. +type CRHandlers struct { + BaseHandlers +} + +// AfterMarshalling is a handler called after resource marshalling. +func (cr *CRHandlers) AfterMarshalling(ctx *processors.ProcessorContext, resource, resourceModel interface{}, yaml []byte) (skip bool) { + return +} + +// BuildMessageBody is a handler called to build a message body out of a list of +// extracted resources. +func (cr *CRHandlers) BuildMessageBody(ctx *processors.ProcessorContext, resourceModels []interface{}, groupSize int) model.MessageBody { + return nil +} + +func (cr *CRHandlers) BuildManifestMessageBody(ctx *processors.ProcessorContext, resourceManifests []interface{}, groupSize int) model.MessageBody { + cm := ExtractModelManifests(ctx, resourceManifests, groupSize) + return &model.CollectorManifestCR{ + Manifest: cm, + } +} + +// ExtractResource is a handler called to extract the resource model out of a raw resource. +func (cr *CRHandlers) ExtractResource(ctx *processors.ProcessorContext, resource interface{}) (resourceModel interface{}) { + return nil +} + +// ResourceList is a handler called to convert a list passed as a generic +// interface to a list of generic interfaces. +func (cr *CRHandlers) ResourceList(ctx *processors.ProcessorContext, list interface{}) (resources []interface{}) { + resourceList := list.([]runtime.Object) + resources = make([]interface{}, 0, len(resourceList)) + + for _, resource := range resourceList { + resources = append(resources, resource) + } + + return resources +} + +// ResourceUID is a handler called to retrieve the resource UID. +func (cr *CRHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { + return resource.(*unstructured.Unstructured).GetUID() +} + +// ResourceVersion is a handler called to retrieve the resource version. +func (cr *CRHandlers) ResourceVersion(ctx *processors.ProcessorContext, resource, resourceModel interface{}) string { + return resource.(*unstructured.Unstructured).GetResourceVersion() +} + +// ScrubBeforeExtraction is a handler called to redact the raw resource before +// it is extracted as an internal resource model. +func (cr *CRHandlers) ScrubBeforeExtraction(ctx *processors.ProcessorContext, resource interface{}) { + r := resource.(*unstructured.Unstructured) + annotations := r.GetAnnotations() + redact.RemoveLastAppliedConfigurationAnnotation(annotations) + r.SetAnnotations(annotations) +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/crd.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/crd.go new file mode 100644 index 0000000000000..cbb76f7cfe193 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/crd.go @@ -0,0 +1,79 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build orchestrator +// +build orchestrator + +package k8s + +import ( + model "github.com/DataDog/agent-payload/v5/process" + v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + "k8s.io/apimachinery/pkg/runtime" + + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" + "github.com/DataDog/datadog-agent/pkg/orchestrator/redact" + + "k8s.io/apimachinery/pkg/types" +) + +// CRDHandlers implements the Handlers interface for Kubernetes CronJobs. +type CRDHandlers struct { + BaseHandlers +} + +// BuildManifestMessageBody builds the manifest payload body +func (crd *CRDHandlers) BuildManifestMessageBody(ctx *processors.ProcessorContext, resourceManifests []interface{}, groupSize int) model.MessageBody { + cm := ExtractModelManifests(ctx, resourceManifests, groupSize) + return &model.CollectorManifestCRD{ + Manifest: cm, + } +} + +// AfterMarshalling is a handler called after resource marshalling. +func (crd *CRDHandlers) AfterMarshalling(ctx *processors.ProcessorContext, resource, resourceModel interface{}, yaml []byte) (skip bool) { + return +} + +// BuildMessageBody is a handler called to build a message body out of a list of +// extracted resources. +func (crd *CRDHandlers) BuildMessageBody(ctx *processors.ProcessorContext, resourceModels []interface{}, groupSize int) model.MessageBody { + return nil +} + +// ExtractResource is a handler called to extract the resource model out of a raw resource. +func (crd *CRDHandlers) ExtractResource(ctx *processors.ProcessorContext, resource interface{}) (resourceModel interface{}) { + return +} + +// ResourceList is a handler called to convert a list passed as a generic +// interface to a list of generic interfaces. +func (crd *CRDHandlers) ResourceList(ctx *processors.ProcessorContext, list interface{}) (resources []interface{}) { + resourceList := list.([]runtime.Object) + resources = make([]interface{}, 0, len(resourceList)) + + for _, resource := range resourceList { + resources = append(resources, resource) + } + + return resources +} + +// ResourceUID is a handler called to retrieve the resource UID. +func (crd *CRDHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { + return resource.(*v1.CustomResourceDefinition).UID +} + +// ResourceVersion is a handler called to retrieve the resource version. +func (crd *CRDHandlers) ResourceVersion(ctx *processors.ProcessorContext, resource, resourceModel interface{}) string { + return resource.(*v1.CustomResourceDefinition).ResourceVersion +} + +// ScrubBeforeExtraction is a handler called to redact the raw resource before +// it is extracted as an internal resource model. +func (crd *CRDHandlers) ScrubBeforeExtraction(ctx *processors.ProcessorContext, resource interface{}) { + r := resource.(*v1.CustomResourceDefinition) + redact.RemoveLastAppliedConfigurationAnnotation(r.Annotations) +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/cronjob_v1.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/cronjob_v1.go index 1f5102d2a2b57..aacf3fb327222 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/cronjob_v1.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/cronjob_v1.go @@ -69,7 +69,7 @@ func (h *CronJobV1Handlers) ResourceList(ctx *processors.ProcessorContext, list } // ResourceUID is a handler called to retrieve the resource UID. -func (h *CronJobV1Handlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *CronJobV1Handlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*batchv1.CronJob).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/cronjob_v1beta1.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/cronjob_v1beta1.go index 128cfee33f1d5..54f0ea4e7aa5a 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/cronjob_v1beta1.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/cronjob_v1beta1.go @@ -70,7 +70,7 @@ func (h *CronJobV1Beta1Handlers) ResourceList(ctx *processors.ProcessorContext, } // ResourceUID is a handler called to retrieve the resource UID. -func (h *CronJobV1Beta1Handlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *CronJobV1Beta1Handlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*batchv1beta1.CronJob).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/daemonset.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/daemonset.go index 3c9c2fdd35006..c1f9279ae2569 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/daemonset.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/daemonset.go @@ -70,7 +70,7 @@ func (h *DaemonSetHandlers) ResourceList(ctx *processors.ProcessorContext, list } // ResourceUID is a handler called to retrieve the resource UID. -func (h *DaemonSetHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *DaemonSetHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*appsv1.DaemonSet).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/deployment.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/deployment.go index 3446f3bc65550..0fc0984ae600f 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/deployment.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/deployment.go @@ -70,7 +70,7 @@ func (h *DeploymentHandlers) ResourceList(ctx *processors.ProcessorContext, list } // ResourceUID is a handler called to retrieve the resource UID. -func (h *DeploymentHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *DeploymentHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*appsv1.Deployment).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/ingress.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/ingress.go index e629d2d63ef54..139818583a3cc 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/ingress.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/ingress.go @@ -70,7 +70,7 @@ func (h *IngressHandlers) ResourceList(ctx *processors.ProcessorContext, list in } // ResourceUID is a handler called to retrieve the resource UID. -func (h *IngressHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *IngressHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*netv1.Ingress).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/job.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/job.go index 56227bc14b921..7423c8087472a 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/job.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/job.go @@ -70,7 +70,7 @@ func (h *JobHandlers) ResourceList(ctx *processors.ProcessorContext, list interf } // ResourceUID is a handler called to retrieve the resource UID. -func (h *JobHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *JobHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*batchv1.Job).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/namespace.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/namespace.go index b60dc052b19ae..8021ec3656a8e 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/namespace.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/namespace.go @@ -20,7 +20,9 @@ import ( ) // NamespaceHandlers implements the Handlers interface for Kubernetes Namespace. -type NamespaceHandlers struct{} +type NamespaceHandlers struct { + BaseHandlers +} // AfterMarshalling is a handler called after resource marshalling. func (h *NamespaceHandlers) AfterMarshalling(ctx *processors.ProcessorContext, resource, resourceModel interface{}, yaml []byte) (skip bool) { @@ -29,16 +31,6 @@ func (h *NamespaceHandlers) AfterMarshalling(ctx *processors.ProcessorContext, r return } -// BeforeCacheCheck is a handler called before cache lookup. -func (h *NamespaceHandlers) BeforeCacheCheck(ctx *processors.ProcessorContext, resource, resourceModel interface{}) (skip bool) { - return -} - -// BeforeMarshalling is a handler called before resource marshalling. -func (h *NamespaceHandlers) BeforeMarshalling(ctx *processors.ProcessorContext, resource, resourceModel interface{}) (skip bool) { - return -} - // BuildMessageBody is a handler called to build a message body out of a list of // extracted resources. func (h *NamespaceHandlers) BuildMessageBody(ctx *processors.ProcessorContext, resourceModels []interface{}, groupSize int) model.MessageBody { @@ -78,7 +70,7 @@ func (h *NamespaceHandlers) ResourceList(ctx *processors.ProcessorContext, list } // ResourceUID is a handler called to retrieve the resource UID. -func (h *NamespaceHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *NamespaceHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*corev1.Namespace).UID } @@ -93,8 +85,3 @@ func (h *NamespaceHandlers) ScrubBeforeExtraction(ctx *processors.ProcessorConte r := resource.(*corev1.Namespace) redact.RemoveLastAppliedConfigurationAnnotation(r.Annotations) } - -// ScrubBeforeMarshalling is a handler called to redact the raw resource before -// it is marshalled to generate a manifest. -func (h *NamespaceHandlers) ScrubBeforeMarshalling(ctx *processors.ProcessorContext, resource interface{}) { -} diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/node.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/node.go index fcae6e6ff2bd7..abe91ef32fa60 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/node.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/node.go @@ -70,7 +70,7 @@ func (h *NodeHandlers) ResourceList(ctx *processors.ProcessorContext, list inter } // ResourceUID is a handler called to retrieve the resource UID. -func (h *NodeHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *NodeHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*corev1.Node).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/persistentvolume.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/persistentvolume.go index 6263c5a3a7524..d07f460754c44 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/persistentvolume.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/persistentvolume.go @@ -70,7 +70,7 @@ func (h *PersistentVolumeHandlers) ResourceList(ctx *processors.ProcessorContext } // ResourceUID is a handler called to retrieve the resource UID. -func (h *PersistentVolumeHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *PersistentVolumeHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*corev1.PersistentVolume).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/persistentvolumeclaim.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/persistentvolumeclaim.go index 1663e62cc1f89..4de66b18010a2 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/persistentvolumeclaim.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/persistentvolumeclaim.go @@ -70,7 +70,7 @@ func (h *PersistentVolumeClaimHandlers) ResourceList(ctx *processors.ProcessorCo } // ResourceUID is a handler called to retrieve the resource UID. -func (h *PersistentVolumeClaimHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *PersistentVolumeClaimHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*corev1.PersistentVolumeClaim).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/pod.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/pod.go index dfa786abe1467..3e0fae0d41bed 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/pod.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/pod.go @@ -126,7 +126,7 @@ func (h *PodHandlers) ResourceList(ctx *processors.ProcessorContext, list interf } // ResourceUID is a handler called to retrieve the resource UID. -func (h *PodHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *PodHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*corev1.Pod).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/replicaset.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/replicaset.go index 9f55005dbc50f..757f2209f8ccf 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/replicaset.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/replicaset.go @@ -70,7 +70,7 @@ func (h *ReplicaSetHandlers) ResourceList(ctx *processors.ProcessorContext, list } // ResourceUID is a handler called to retrieve the resource UID. -func (h *ReplicaSetHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *ReplicaSetHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*appsv1.ReplicaSet).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/role.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/role.go index 9091b4b094cc7..57d7b0aa07a95 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/role.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/role.go @@ -70,7 +70,7 @@ func (h *RoleHandlers) ResourceList(ctx *processors.ProcessorContext, list inter } // ResourceUID is a handler called to retrieve the resource UID. -func (h *RoleHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *RoleHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*rbacv1.Role).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/rolebinding.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/rolebinding.go index 5dfae6b46e403..3a3644b2e3517 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/rolebinding.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/rolebinding.go @@ -69,7 +69,7 @@ func (h *RoleBindingHandlers) ResourceList(ctx *processors.ProcessorContext, lis } // ResourceUID is a handler called to retrieve the resource UID. -func (h *RoleBindingHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *RoleBindingHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*rbacv1.RoleBinding).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/service.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/service.go index 75f7696babf60..73d706258829a 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/service.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/service.go @@ -70,7 +70,7 @@ func (h *ServiceHandlers) ResourceList(ctx *processors.ProcessorContext, list in } // ResourceUID is a handler called to retrieve the resource UID. -func (h *ServiceHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *ServiceHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*corev1.Service).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/serviceaccount.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/serviceaccount.go index 7b1e6b4996998..ae825a7d46063 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/serviceaccount.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/serviceaccount.go @@ -70,7 +70,7 @@ func (h *ServiceAccountHandlers) ResourceList(ctx *processors.ProcessorContext, } // ResourceUID is a handler called to retrieve the resource UID. -func (h *ServiceAccountHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *ServiceAccountHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*corev1.ServiceAccount).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/statefulset.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/statefulset.go index bedbc6fce249a..0ef817655e71e 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/statefulset.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/statefulset.go @@ -69,7 +69,7 @@ func (h *StatefulSetHandlers) ResourceList(ctx *processors.ProcessorContext, lis } // ResourceUID is a handler called to retrieve the resource UID. -func (h *StatefulSetHandlers) ResourceUID(ctx *processors.ProcessorContext, resource, resourceModel interface{}) types.UID { +func (h *StatefulSetHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { return resource.(*appsv1.StatefulSet).UID } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/verticalpodautoscaler.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/verticalpodautoscaler.go new file mode 100644 index 0000000000000..1df81328cb5e4 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/verticalpodautoscaler.go @@ -0,0 +1,85 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build orchestrator +// +build orchestrator + +package k8s + +import ( + model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" + k8sTransformers "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s" + "github.com/DataDog/datadog-agent/pkg/orchestrator/redact" + "k8s.io/apimachinery/pkg/types" + v1 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" +) + +// VerticalPodAutoscalerHandlers implements the Handlers interface for Kuberenetes VPAs +type VerticalPodAutoscalerHandlers struct { + BaseHandlers +} + +// AfterMarshalling is a handler called after resource marshalling. +func (h *VerticalPodAutoscalerHandlers) AfterMarshalling(ctx *processors.ProcessorContext, resource, resourceModel interface{}, yaml []byte) (skip bool) { + m := resourceModel.(*model.VerticalPodAutoscaler) + m.Yaml = yaml + return +} + +// BuildMessageBody is a handler called to build a message body out of a list of +// extracted resources. +func (h *VerticalPodAutoscalerHandlers) BuildMessageBody(ctx *processors.ProcessorContext, resourceModels []interface{}, groupSize int) model.MessageBody { + models := make([]*model.VerticalPodAutoscaler, 0, len(resourceModels)) + + for _, m := range resourceModels { + models = append(models, m.(*model.VerticalPodAutoscaler)) + } + + return &model.CollectorVerticalPodAutoscaler{ + ClusterName: ctx.Cfg.KubeClusterName, + ClusterId: ctx.ClusterID, + GroupId: ctx.MsgGroupID, + GroupSize: int32(groupSize), + VerticalPodAutoscalers: models, + Tags: ctx.Cfg.ExtraTags, + } +} + +// ExtractResource is a handler called to extract the resource model out of a raw resource. +func (h *VerticalPodAutoscalerHandlers) ExtractResource(ctx *processors.ProcessorContext, resource interface{}) (verticalPodAutoscalerModel interface{}) { + r := resource.(*v1.VerticalPodAutoscaler) + return k8sTransformers.ExtractVerticalPodAutoscaler(r) +} + +// ResourceList is a handler called to convert a list passed as a generic +// interface to a list of generic interfaces. +func (h *VerticalPodAutoscalerHandlers) ResourceList(ctx *processors.ProcessorContext, list interface{}) (resources []interface{}) { + resourceList := list.([]*v1.VerticalPodAutoscaler) + resources = make([]interface{}, 0, len(resourceList)) + + for _, resource := range resourceList { + resources = append(resources, resource) + } + + return resources +} + +// ResourceUID is a handler called to retrieve the resource UID. +func (h *VerticalPodAutoscalerHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { + return resource.(*v1.VerticalPodAutoscaler).UID +} + +// ResourceVersion is a handler called to retrieve the resource version. +func (h *VerticalPodAutoscalerHandlers) ResourceVersion(ctx *processors.ProcessorContext, resource, resourceModel interface{}) string { + return resource.(*v1.VerticalPodAutoscaler).ResourceVersion +} + +// ScrubBeforeExtraction is a handler called to redact the raw resource before +// it is extracted as an internal resource model. +func (h *VerticalPodAutoscalerHandlers) ScrubBeforeExtraction(ctx *processors.ProcessorContext, resource interface{}) { + r := resource.(*v1.VerticalPodAutoscaler) + redact.RemoveLastAppliedConfigurationAnnotation(r.Annotations) +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/processor.go b/pkg/collector/corechecks/cluster/orchestrator/processors/processor.go index 06aaa753e62b0..c8b715edf61db 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/processor.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/processor.go @@ -14,7 +14,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/orchestrator/config" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver" "github.com/DataDog/datadog-agent/pkg/util/log" - jsoniter "github.com/json-iterator/go" "k8s.io/apimachinery/pkg/types" ) @@ -59,7 +58,11 @@ type Handlers interface { // processing loop moves on to the next resource. BuildMessageBody(ctx *ProcessorContext, resourceModels []interface{}, groupSize int) model.MessageBody - // ExtractResource is used to build the a resource model from the raw + // BuildManifestMessageBody is used to build a message containing a chunk of + // resource manifests of a certain size. + BuildManifestMessageBody(ctx *ProcessorContext, resourceManifests []interface{}, groupSize int) model.MessageBody + + // ExtractResource is used to build a resource model from the raw // resource representation. ExtractResource(ctx *ProcessorContext, resource interface{}) (resourceModel interface{}) @@ -68,7 +71,7 @@ type Handlers interface { ResourceList(ctx *ProcessorContext, list interface{}) (resources []interface{}) // ResourceUID returns the resource UID. - ResourceUID(ctx *ProcessorContext, resource, resourceModel interface{}) types.UID + ResourceUID(ctx *ProcessorContext, resource interface{}) types.UID // ResourceVersion returns the resource Version. ResourceVersion(ctx *ProcessorContext, resource, resourceModel interface{}) string @@ -130,7 +133,7 @@ func (p *Processor) Process(ctx *ProcessorContext, list interface{}) (processRes } // Cache check - resourceUID := p.h.ResourceUID(ctx, resource, resourceMetadataModel) + resourceUID := p.h.ResourceUID(ctx, resource) resourceVersion := p.h.ResourceVersion(ctx, resource, resourceMetadataModel) if orchestrator.SkipKubernetesResource(resourceUID, resourceVersion, ctx.NodeType) { @@ -175,31 +178,14 @@ func (p *Processor) Process(ctx *ProcessorContext, list interface{}) (processRes processResult = ProcessResult{ MetadataMessages: ChunkMetadata(ctx, p, resourceMetadataModels, resourceManifestModels), - ManifestMessages: ChunkManifest(ctx, resourceManifestModels), + ManifestMessages: ChunkManifest(ctx, p.h.BuildManifestMessageBody, resourceManifestModels), } return processResult, len(resourceMetadataModels) } -// build orchestrator manifest message -func buildManifestMessageBody(ctx *ProcessorContext, resourceManifests []interface{}, groupSize int) model.MessageBody { - manifests := make([]*model.Manifest, 0, len(resourceManifests)) - - for _, m := range resourceManifests { - manifests = append(manifests, m.(*model.Manifest)) - } - - return &model.CollectorManifest{ - ClusterName: ctx.Cfg.KubeClusterName, - ClusterId: ctx.ClusterID, - Manifests: manifests, - GroupId: ctx.MsgGroupID, - GroupSize: int32(groupSize), - } -} - // ChunkManifest is to chunk Manifest payloads -func ChunkManifest(ctx *ProcessorContext, resourceManifestModels []interface{}) []model.MessageBody { +func ChunkManifest(ctx *ProcessorContext, buildManifestBody func(ctx *ProcessorContext, resourceManifests []interface{}, groupSize int) model.MessageBody, resourceManifestModels []interface{}) []model.MessageBody { // Chunking resources based on the serialized size of their manifest and maximum messages number // Chunk manifest messages and use itself as weight indicator manifestChunker := &collectorOrchestratorChunker{} @@ -209,7 +195,7 @@ func ChunkManifest(ctx *ProcessorContext, resourceManifestModels []interface{}) manifestMessages := make([]model.MessageBody, 0, len(manifestChunker.collectorOrchestratorList)) for i := 0; i < chunkCount; i++ { - manifestMessages = append(manifestMessages, buildManifestMessageBody(ctx, manifestChunker.collectorOrchestratorList[i], chunkCount)) + manifestMessages = append(manifestMessages, buildManifestBody(ctx, manifestChunker.collectorOrchestratorList[i], chunkCount)) } return manifestMessages diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler.go new file mode 100644 index 0000000000000..096c8649c6876 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler.go @@ -0,0 +1,137 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build orchestrator +// +build orchestrator + +package k8s + +import ( + model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/transformers" + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" +) + +// ExtractVerticalPodAutoscaler returns the protobuf model corresponding to a Kubernetes Vertical Pod Autoscaler resource. +func ExtractVerticalPodAutoscaler(v *v1.VerticalPodAutoscaler) *model.VerticalPodAutoscaler { + m := &model.VerticalPodAutoscaler{ + Metadata: extractMetadata(&v.ObjectMeta), + Spec: extractVerticalPodAutoscalerSpec(&v.Spec), + Status: extractVerticalPodAutoscalerStatus(&v.Status), + } + m.Tags = append(m.Tags, transformers.RetrieveUnifiedServiceTags(v.ObjectMeta.Labels)...) + return m +} + +// extractVerticalPodAutoscalerSpec converts the Kubernetes spec to our custom one +// https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L73 +func extractVerticalPodAutoscalerSpec(s *v1.VerticalPodAutoscalerSpec) *model.VerticalPodAutoscalerSpec { + spec := &model.VerticalPodAutoscalerSpec{ + Target: &model.VerticalPodAutoscalerTarget{ + Kind: s.TargetRef.Kind, + Name: s.TargetRef.Name, + }, + ResourcePolicies: extractContainerResourcePolicies(s.ResourcePolicy), + } + if s.UpdatePolicy != nil && s.UpdatePolicy.UpdateMode != nil { + spec.UpdateMode = string(*s.UpdatePolicy.UpdateMode) + } + return spec +} + +// extractContainerResourcePolicy pulls the ContainerResourcePolicy out of PodResourcePolicy +// and converts it to our protobuf model +// https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L149 +func extractContainerResourcePolicies(p *v1.PodResourcePolicy) []*model.ContainerResourcePolicy { + policies := []*model.ContainerResourcePolicy{} + + for _, policy := range p.ContainerPolicies { + m := model.ContainerResourcePolicy{ + ContainerName: policy.ContainerName, + MinAllowed: extractResourceList(&policy.MinAllowed), + MaxAllowed: extractResourceList(&policy.MaxAllowed), + ControlledResource: extractControlledResources(policy.ControlledResources), + } + if policy.Mode != nil { + m.Mode = string(*policy.Mode) + } + if policy.ControlledValues != nil { + m.ControlledValues = string(*policy.ControlledValues) + } + policies = append(policies, &m) + } + return policies +} + +// extractResourceList converts Kuberentes ResourceLists to our protobuf model +// https://github.com/kubernetes/api/blob/v0.23.8/core/v1/types.go#L5176 +func extractResourceList(rl *corev1.ResourceList) *model.ResourceList { + if rl == nil { + return &model.ResourceList{} + } + + mv := map[string]float64{} + for name, quantity := range *rl { + value, valid := quantity.AsInt64() + if valid { + mv[string(name)] = float64(value) + } else { + mv[string(name)] = quantity.ToDec().AsApproximateFloat64() + } + } + return &model.ResourceList{ + MetricValues: mv, + } +} + +// extractControlledResources converts typed Kuberentes ResourceNames to a slice of strings +// https://github.com/kubernetes/api/blob/v0.23.8/core/v1/types.go#L5147 +func extractControlledResources(rn *[]corev1.ResourceName) []string { + if rn == nil { + return []string{} + } + + names := []string{} + for _, name := range *rn { + names = append(names, string(name)) + } + return names +} + +// extractVerticalPodAutoscalerStatus converts Kubernetes PodAutoscalerStatus to our protobuf model +// https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L218 +func extractVerticalPodAutoscalerStatus(s *v1.VerticalPodAutoscalerStatus) *model.VerticalPodAutoscalerStatus { + if s == nil { + return &model.VerticalPodAutoscalerStatus{} + } + + status := model.VerticalPodAutoscalerStatus{} + for _, condition := range s.Conditions { + if condition.Type == v1.RecommendationProvided && + condition.Status == corev1.ConditionTrue { + status.LastRecommendedDate = condition.LastTransitionTime.Unix() + } + } + status.Recommendations = extractContainerRecommendations(s.Recommendation.ContainerRecommendations) + return &status +} + +// extractContainerRecommendations converts Kuberentes Recommendations to our protobuf model +// https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L245 +func extractContainerRecommendations(cr []v1.RecommendedContainerResources) []*model.ContainerRecommendations { + recs := []*model.ContainerRecommendations{} + for _, r := range cr { + rec := model.ContainerRecommendations{ + ContainerName: r.ContainerName, + Target: extractResourceList(&r.Target), + LowerBound: extractResourceList(&r.LowerBound), + UpperBound: extractResourceList(&r.UpperBound), + UncappedTarget: extractResourceList(&r.UncappedTarget), + } + recs = append(recs, &rec) + } + return recs +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler_test.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler_test.go new file mode 100644 index 0000000000000..5c18bf349cb46 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler_test.go @@ -0,0 +1,184 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build orchestrator +// +build orchestrator + +package k8s + +import ( + "testing" + "time" + + model "github.com/DataDog/agent-payload/v5/process" + "github.com/stretchr/testify/assert" + autoscaling "k8s.io/api/autoscaling/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v1 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" +) + +func TestExtractVerticalPodAutoscaler(t *testing.T) { + exampleTime := metav1.NewTime(time.Date(2021, time.April, 16, 14, 30, 0, 0, time.UTC)) + mode := v1.ContainerScalingModeAuto + updateMode := v1.UpdateModeOff + controlledValues := v1.ContainerControlledValuesRequestsAndLimits + + tests := map[string]struct { + input v1.VerticalPodAutoscaler + expected model.VerticalPodAutoscaler + }{ + "standard": { + input: v1.VerticalPodAutoscaler{ + TypeMeta: metav1.TypeMeta{}, + ObjectMeta: metav1.ObjectMeta{ + Name: "VPATest", + Namespace: "Namespace", + UID: "326331f4-77e2-11ed-a1eb-0242ac120002", + CreationTimestamp: exampleTime, + DeletionTimestamp: &exampleTime, + Labels: map[string]string{ + "app": "my-app", + }, + Annotations: map[string]string{ + "annotation": "my-annotation", + }, + Finalizers: []string{"final", "izers"}, + }, + Spec: v1.VerticalPodAutoscalerSpec{ + TargetRef: &autoscaling.CrossVersionObjectReference{ + Kind: "Deployment", + Name: "My Service", + }, + UpdatePolicy: &v1.PodUpdatePolicy{ + UpdateMode: &updateMode, + }, + ResourcePolicy: &v1.PodResourcePolicy{ + ContainerPolicies: []v1.ContainerResourcePolicy{ + { + ContainerName: "TestContainer", + Mode: &mode, + MinAllowed: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("12345"), + }, + MaxAllowed: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceMemory: resource.MustParse("6789"), + }, + ControlledResources: &[]corev1.ResourceName{ + corev1.ResourceCPU, + }, + ControlledValues: &controlledValues, + }, + }, + }, + Recommenders: []*v1.VerticalPodAutoscalerRecommenderSelector{ + { + Name: "Test", + }, + }, + }, + Status: v1.VerticalPodAutoscalerStatus{ + Recommendation: &v1.RecommendedPodResources{ + ContainerRecommendations: []v1.RecommendedContainerResources{ + { + ContainerName: "TestContainer", + Target: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("2"), + }, + LowerBound: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("1"), + }, + UpperBound: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("3"), + }, + UncappedTarget: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("4"), + }, + }, + }, + }, + Conditions: []v1.VerticalPodAutoscalerCondition{ + { + Type: v1.RecommendationProvided, + Status: corev1.ConditionTrue, + LastTransitionTime: exampleTime, + }, + }, + }, + }, + expected: model.VerticalPodAutoscaler{ + Metadata: &model.Metadata{ + Name: "VPATest", + Namespace: "Namespace", + Uid: "326331f4-77e2-11ed-a1eb-0242ac120002", + CreationTimestamp: exampleTime.Unix(), + DeletionTimestamp: exampleTime.Unix(), + Labels: []string{"app:my-app"}, + Annotations: []string{"annotation:my-annotation"}, + Finalizers: []string{"final", "izers"}, + }, + Spec: &model.VerticalPodAutoscalerSpec{ + Target: &model.VerticalPodAutoscalerTarget{ + Kind: "Deployment", + Name: "My Service", + }, + UpdateMode: string(updateMode), + ResourcePolicies: []*model.ContainerResourcePolicy{ + { + ContainerName: "TestContainer", + Mode: string(mode), + MinAllowed: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(12345), + }, + }, + MaxAllowed: &model.ResourceList{ + MetricValues: map[string]float64{ + "memory": float64(6789), + }, + }, + ControlledResource: []string{"cpu"}, + ControlledValues: string(controlledValues), + }, + }, + }, + Status: &model.VerticalPodAutoscalerStatus{ + LastRecommendedDate: exampleTime.Unix(), + Recommendations: []*model.ContainerRecommendations{ + { + ContainerName: "TestContainer", + Target: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(2), + }, + }, + LowerBound: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(1), + }, + }, + UpperBound: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(3), + }, + }, + UncappedTarget: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(4), + }, + }, + }, + }, + }, + }, + }, + } + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + assert.Equal(t, &tc.expected, ExtractVerticalPodAutoscaler(&tc.input)) + }) + } +} diff --git a/pkg/collector/corechecks/containerimage/check.go b/pkg/collector/corechecks/containerimage/check.go index 1bb283539db54..15f1fdcebf464 100644 --- a/pkg/collector/corechecks/containerimage/check.go +++ b/pkg/collector/corechecks/containerimage/check.go @@ -102,12 +102,12 @@ func CheckFactory() check.Check { } // Configure parses the check configuration and initializes the container_image check -func (c *Check) Configure(config, initConfig integration.Data, source string) error { +func (c *Check) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { if !ddConfig.Datadog.GetBool("container_image.enabled") { return errors.New("collection of container images is disabled") } - if err := c.CommonConfigure(initConfig, config, source); err != nil { + if err := c.CommonConfigure(integrationConfigDigest, initConfig, config, source); err != nil { return err } diff --git a/pkg/collector/corechecks/containerimage/processor.go b/pkg/collector/corechecks/containerimage/processor.go index 4458d4a91606e..a926acef4a003 100644 --- a/pkg/collector/corechecks/containerimage/processor.go +++ b/pkg/collector/corechecks/containerimage/processor.go @@ -23,12 +23,12 @@ type processor struct { func newProcessor(sender aggregator.Sender, maxNbItem int, maxRetentionTime time.Duration) *processor { return &processor{ queue: newQueue(maxNbItem, maxRetentionTime, func(images []*model.ContainerImage) { - payload := model.ContainerImagePayload{ - Version: "v1", - Images: images, - } - - sender.ContainerImage([]contimage.ContainerImagePayload{payload}) + sender.ContainerImage([]contimage.ContainerImagePayload{ + { + Version: "v1", + Images: images, + }, + }) }), } } @@ -57,7 +57,7 @@ func (p *processor) processImage(img *workloadmeta.ContainerImageMetadata) { Urls: layer.URLs, MediaType: layer.MediaType, Digest: layer.Digest, - Size_: layer.SizeBytes, + Size: layer.SizeBytes, }) } @@ -67,7 +67,7 @@ func (p *processor) processImage(img *workloadmeta.ContainerImageMetadata) { ShortName: img.ShortName, Tags: img.RepoTags, Digest: img.ID, - Size_: img.SizeBytes, + Size: img.SizeBytes, RepoDigests: img.RepoDigests, Os: &model.ContainerImage_OperatingSystem{ Name: img.OS, diff --git a/pkg/collector/corechecks/containerimage/processor_test.go b/pkg/collector/corechecks/containerimage/processor_test.go index 1cf4ba69cafe8..771956ed9f6a6 100644 --- a/pkg/collector/corechecks/containerimage/processor_test.go +++ b/pkg/collector/corechecks/containerimage/processor_test.go @@ -71,7 +71,7 @@ func TestProcessEvents(t *testing.T) { ShortName: "short_name_0", Tags: []string{"tag_1", "tag_2"}, Digest: "0", - Size_: 42, + Size: 42, RepoDigests: []string{"digest_0"}, Os: &model.ContainerImage_OperatingSystem{ Name: "DOS", @@ -83,13 +83,13 @@ func TestProcessEvents(t *testing.T) { Urls: []string{"url"}, MediaType: "media", Digest: "digest_layer_1_0", - Size_: 43, + Size: 43, }, { Urls: []string{"url"}, MediaType: "media", Digest: "digest_layer_2_0", - Size_: 44, + Size: 44, }, }, }, @@ -98,7 +98,7 @@ func TestProcessEvents(t *testing.T) { ShortName: "short_name_1", Tags: []string{"tag_1", "tag_2"}, Digest: "1", - Size_: 42, + Size: 42, RepoDigests: []string{"digest_1"}, Os: &model.ContainerImage_OperatingSystem{ Name: "DOS", @@ -110,13 +110,13 @@ func TestProcessEvents(t *testing.T) { Urls: []string{"url"}, MediaType: "media", Digest: "digest_layer_1_1", - Size_: 43, + Size: 43, }, { Urls: []string{"url"}, MediaType: "media", Digest: "digest_layer_2_1", - Size_: 44, + Size: 44, }, }, }, @@ -136,7 +136,7 @@ func TestProcessEvents(t *testing.T) { ShortName: "short_name_2", Tags: []string{"tag_1", "tag_2"}, Digest: "2", - Size_: 42, + Size: 42, RepoDigests: []string{"digest_2"}, Os: &model.ContainerImage_OperatingSystem{ Name: "DOS", @@ -148,13 +148,13 @@ func TestProcessEvents(t *testing.T) { Urls: []string{"url"}, MediaType: "media", Digest: "digest_layer_1_2", - Size_: 43, + Size: 43, }, { Urls: []string{"url"}, MediaType: "media", Digest: "digest_layer_2_2", - Size_: 44, + Size: 44, }, }, }, diff --git a/pkg/collector/corechecks/containerlifecycle/check.go b/pkg/collector/corechecks/containerlifecycle/check.go index 8573fc11ed66e..04af44960e236 100644 --- a/pkg/collector/corechecks/containerlifecycle/check.go +++ b/pkg/collector/corechecks/containerlifecycle/check.go @@ -51,14 +51,14 @@ type Check struct { } // Configure parses the check configuration and initializes the container_lifecycle check -func (c *Check) Configure(config, initConfig integration.Data, source string) error { +func (c *Check) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { if !ddConfig.Datadog.GetBool("container_lifecycle.enabled") { return errors.New("collection of container lifecycle events is disabled") } var err error - err = c.CommonConfigure(initConfig, config, source) + err = c.CommonConfigure(integrationConfigDigest, initConfig, config, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/containers/containerd/check.go b/pkg/collector/corechecks/containers/containerd/check.go index d47a2d5029e67..9d4a1f1d87da9 100644 --- a/pkg/collector/corechecks/containers/containerd/check.go +++ b/pkg/collector/corechecks/containers/containerd/check.go @@ -66,9 +66,9 @@ func (co *ContainerdConfig) Parse(data []byte) error { } // Configure parses the check configuration and init the check -func (c *ContainerdCheck) Configure(config, initConfig integration.Data, source string) error { +func (c *ContainerdCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { var err error - if err = c.CommonConfigure(initConfig, config, source); err != nil { + if err = c.CommonConfigure(integrationConfigDigest, initConfig, config, source); err != nil { return err } diff --git a/pkg/collector/corechecks/containers/cri/check.go b/pkg/collector/corechecks/containers/cri/check.go index 0d98a81850088..7f7c965a59600 100644 --- a/pkg/collector/corechecks/containers/cri/check.go +++ b/pkg/collector/corechecks/containers/cri/check.go @@ -64,9 +64,9 @@ func (c *CRIConfig) Parse(data []byte) error { } // Configure parses the check configuration and init the check -func (c *CRICheck) Configure(config, initConfig integration.Data, source string) error { +func (c *CRICheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { var err error - if err = c.CommonConfigure(initConfig, config, source); err != nil { + if err = c.CommonConfigure(integrationConfigDigest, initConfig, config, source); err != nil { return err } diff --git a/pkg/collector/corechecks/containers/docker/check.go b/pkg/collector/corechecks/containers/docker/check.go index 5eea2329822ae..94c2893395531 100644 --- a/pkg/collector/corechecks/containers/docker/check.go +++ b/pkg/collector/corechecks/containers/docker/check.go @@ -72,8 +72,8 @@ func DockerFactory() check.Check { } // Configure parses the check configuration and init the check -func (d *DockerCheck) Configure(config, initConfig integration.Data, source string) error { - err := d.CommonConfigure(initConfig, config, source) +func (d *DockerCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { + err := d.CommonConfigure(integrationConfigDigest, initConfig, config, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/containers/generic/check.go b/pkg/collector/corechecks/containers/generic/check.go index aedb99308745a..362b843a1b334 100644 --- a/pkg/collector/corechecks/containers/generic/check.go +++ b/pkg/collector/corechecks/containers/generic/check.go @@ -50,8 +50,8 @@ func ContainerCheckFactory() check.Check { } // Configure parses the check configuration and init the check -func (c *ContainerCheck) Configure(config, initConfig integration.Data, source string) error { - err := c.CommonConfigure(initConfig, config, source) +func (c *ContainerCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { + err := c.CommonConfigure(integrationConfigDigest, initConfig, config, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/ebpf/c/co-re/oom-kill-kern-user.h b/pkg/collector/corechecks/ebpf/c/co-re/oom-kill-kern-user.h deleted file mode 100644 index 74bc7de0a1a94..0000000000000 --- a/pkg/collector/corechecks/ebpf/c/co-re/oom-kill-kern-user.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef OOM_KILL_KERN_USER_H -#define OOM_KILL_KERN_USER_H - -#include "vmlinux.h" - -#ifndef TASK_COMM_LEN -#define TASK_COMM_LEN 16 -#endif - -struct oom_stats { - char cgroup_name[129]; - // Pid of triggering process - __u32 pid; - // Pid of killed process - __u32 tpid; - // Name of triggering process - char fcomm[TASK_COMM_LEN]; - // Name of killed process - char tcomm[TASK_COMM_LEN]; - // Total number of pages - __u64 pages; - // Tracks if the OOM kill was triggered by a cgroup - __u32 memcg_oom; -}; - -#endif /* defined(OOM_KILL_KERN_USER_H) */ diff --git a/pkg/collector/corechecks/ebpf/c/co-re/oom-kill.c b/pkg/collector/corechecks/ebpf/c/co-re/oom-kill.c deleted file mode 100644 index a751d4a87c34b..0000000000000 --- a/pkg/collector/corechecks/ebpf/c/co-re/oom-kill.c +++ /dev/null @@ -1,60 +0,0 @@ -#include "oom-kill-kern-user.h" -#include "bpf-common.h" -#include "bpf_helpers.h" -#include "bpf_tracing.h" -#include "bpf_core_read.h" -#include "map-defs.h" - -/* - * The `oom_stats` hash map is used to share with the userland program system-probe - * the statistics per pid - */ - -BPF_HASH_MAP(oom_stats, u32, struct oom_stats, 10240) - -SEC("kprobe/oom_kill_process") -int BPF_KPROBE(kprobe__oom_kill_process, struct oom_control *oc) { - struct oom_stats zero = {}; - u32 pid = bpf_get_current_pid_tgid() >> 32; - - bpf_map_update_elem(&oom_stats, &pid, &zero, BPF_NOEXIST); - struct oom_stats *s = bpf_map_lookup_elem(&oom_stats, &pid); - if (!s) { - return 0; - } - - s->pid = pid; - - struct task_struct *p; - bpf_probe_read(&p, sizeof(p), &oc->chosen); - bpf_probe_read(&s->tpid, sizeof(s->tpid), &p->pid); - - get_cgroup_name(s->cgroup_name, sizeof(s->cgroup_name)); - - BPF_CORE_READ_INTO(&s->tpid, oc, chosen, pid); - - if (bpf_core_enum_value_exists(enum bpf_func_id, BPF_FUNC_get_current_comm)) { - bpf_get_current_comm(&s->fcomm, sizeof(s->fcomm)); - } - - if (bpf_core_enum_value_exists(enum bpf_func_id, BPF_FUNC_probe_read_str)) { - BPF_CORE_READ_STR_INTO(&s->tcomm, oc, chosen, comm); - } else { - BPF_CORE_READ_INTO(&s->tcomm, oc, chosen, comm); - s->tcomm[TASK_COMM_LEN - 1] = 0; - } - - if (bpf_core_field_exists(oc->totalpages)) { - BPF_CORE_READ_INTO(&s->pages, oc, totalpages); - } - - if (bpf_core_field_exists(oc->memcg)) { - struct mem_cgroup *memcg = NULL; - memcg = BPF_CORE_READ(oc, memcg); - s->memcg_oom = memcg != NULL ? 1 : 0; - } - - return 0; -} - -char _license[] SEC("license") = "GPL"; // NOLINT(bugprone-reserved-identifier) diff --git a/pkg/collector/corechecks/ebpf/c/runtime/bpf-common.h b/pkg/collector/corechecks/ebpf/c/runtime/bpf-common.h deleted file mode 100644 index 6a6dce00ece45..0000000000000 --- a/pkg/collector/corechecks/ebpf/c/runtime/bpf-common.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef BPF_COMMON_H -#define BPF_COMMON_H - -#include -#include - -static __always_inline int get_cgroup_name(char *buf, size_t sz) { - memset(buf, 0, sz); - - struct task_struct *cur_tsk = (struct task_struct *)bpf_get_current_task(); - - struct css_set *css_set; - if (bpf_probe_read(&css_set, sizeof(css_set), &cur_tsk->cgroups) < 0) - return -1; - - struct cgroup_subsys_state *css; - if (bpf_probe_read(&css, sizeof(css), &css_set->subsys[memory_cgrp_id]) < 0) - return -1; - - struct cgroup *cgrp; - if (bpf_probe_read(&cgrp, sizeof(cgrp), &css->cgroup) < 0) - return -1; - - struct kernfs_node *kn; - if (bpf_probe_read(&kn, sizeof(kn), &cgrp->kn) < 0) - return -1; - - const char *name; - if (bpf_probe_read(&name, sizeof(name), &kn->name) < 0) - return -1; - - if (bpf_probe_read_str(buf, sz, (void *)name) < 0) - return -1; - - return 0; -} - -#endif /* defined(BPF_COMMON_H) */ diff --git a/pkg/collector/corechecks/ebpf/c/co-re/bpf-common.h b/pkg/collector/corechecks/ebpf/c/runtime/cgroup.h similarity index 57% rename from pkg/collector/corechecks/ebpf/c/co-re/bpf-common.h rename to pkg/collector/corechecks/ebpf/c/runtime/cgroup.h index 09c23604a8d7c..f3f225f553514 100644 --- a/pkg/collector/corechecks/ebpf/c/co-re/bpf-common.h +++ b/pkg/collector/corechecks/ebpf/c/runtime/cgroup.h @@ -1,24 +1,28 @@ -#ifndef BPF_COMMON_H -#define BPF_COMMON_H +#ifndef BPF_CGROUP_H +#define BPF_CGROUP_H -#include "vmlinux.h" -#include "bpf_core_read.h" -#include "bpf_helpers.h" +#ifdef COMPILE_RUNTIME +#include +#endif -enum cgroup_subsys_id___local { - memory_cgrp_id___local = 123, /* value doesn't matter */ -}; +#include "bpf_core_read.h" +#include "bpf_tracing.h" static __always_inline int get_cgroup_name(char *buf, size_t sz) { - __builtin_memset(buf, 0, sz); - - if (!bpf_core_enum_value_exists(enum bpf_func_id, BPF_FUNC_get_current_task)) { + if (!bpf_helper_exists(BPF_FUNC_get_current_task)) { return -1; } - + __builtin_memset(buf, 0, sz); struct task_struct *cur_tsk = (struct task_struct *)bpf_get_current_task(); +#ifdef COMPILE_CORE + enum cgroup_subsys_id___local { + memory_cgrp_id___local = 123, /* value doesn't matter */ + }; int cgrp_id = bpf_core_enum_value(enum cgroup_subsys_id___local, memory_cgrp_id___local); +#else + int cgrp_id = memory_cgrp_id; +#endif const char *name = BPF_CORE_READ(cur_tsk, cgroups, subsys[cgrp_id], cgroup, kn, name); if (bpf_probe_read_kernel_str(buf, sz, name) < 0) { return -1; @@ -27,4 +31,4 @@ static __always_inline int get_cgroup_name(char *buf, size_t sz) { return 0; } -#endif /* defined(BPF_COMMON_H) */ +#endif /* defined(BPF_CGROUP_H) */ diff --git a/pkg/collector/corechecks/ebpf/c/runtime/oom-kill-kern-user.h b/pkg/collector/corechecks/ebpf/c/runtime/oom-kill-kern-user.h index cf3c11ffae147..aeeb8df135ed2 100644 --- a/pkg/collector/corechecks/ebpf/c/runtime/oom-kill-kern-user.h +++ b/pkg/collector/corechecks/ebpf/c/runtime/oom-kill-kern-user.h @@ -1,7 +1,7 @@ #ifndef OOM_KILL_KERN_USER_H #define OOM_KILL_KERN_USER_H -#include +#include "ktypes.h" #ifndef TASK_COMM_LEN #define TASK_COMM_LEN 16 diff --git a/pkg/collector/corechecks/ebpf/c/runtime/oom-kill-kern.c b/pkg/collector/corechecks/ebpf/c/runtime/oom-kill-kern.c index 143061c0822c1..51437b963463a 100644 --- a/pkg/collector/corechecks/ebpf/c/runtime/oom-kill-kern.c +++ b/pkg/collector/corechecks/ebpf/c/runtime/oom-kill-kern.c @@ -1,19 +1,24 @@ +#include "ktypes.h" + +#ifdef COMPILE_RUNTIME #include "kconfig.h" -#include -#include #include -#include "bpf_helpers.h" -#include "bpf-common.h" -#include "oom-kill-kern-user.h" -#include "map-defs.h" - #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0) // 4.8 is the first version where `struct oom_control*` is the first argument of `oom_kill_process` // 4.9 is the first version where the field `totalpages` is available in `struct oom_control` #error Versions of Linux previous to 4.9.0 are not supported by this probe #endif +#endif + +#include "oom-kill-kern-user.h" +#include "cgroup.h" + +#include "bpf_tracing.h" +#include "bpf_core_read.h" +#include "map-defs.h" + /* * The `oom_stats` hash map is used to share with the userland program system-probe * the statistics per pid @@ -22,9 +27,7 @@ BPF_HASH_MAP(oom_stats, u32, struct oom_stats, 10240) SEC("kprobe/oom_kill_process") -int kprobe__oom_kill_process(struct pt_regs *ctx) { - struct oom_control *oc = (struct oom_control*)PT_REGS_PARM1(ctx); - +int BPF_KPROBE(kprobe__oom_kill_process, struct oom_control *oc) { struct oom_stats zero = {}; u32 pid = bpf_get_current_pid_tgid() >> 32; @@ -35,35 +38,40 @@ int kprobe__oom_kill_process(struct pt_regs *ctx) { } s->pid = pid; - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) - // From bpf-common.h get_cgroup_name(s->cgroup_name, sizeof(s->cgroup_name)); -#endif - struct task_struct *p; - bpf_probe_read(&p, sizeof(p), &oc->chosen); - bpf_probe_read(&s->tpid, sizeof(s->tpid), &p->pid); + struct task_struct *p = (struct task_struct *)BPF_CORE_READ(oc, chosen); + if (!p) { + return 0; + } + BPF_CORE_READ_INTO(&s->tpid, p, pid); + + if (bpf_helper_exists(BPF_FUNC_get_current_comm)) { + bpf_get_current_comm(&s->fcomm, sizeof(s->fcomm)); + } + if (bpf_helper_exists(BPF_FUNC_probe_read_str)) { + BPF_CORE_READ_STR_INTO(&s->tcomm, p, comm); + } else { + BPF_CORE_READ_INTO(&s->tcomm, p, comm); + s->tcomm[TASK_COMM_LEN - 1] = 0; + } - bpf_get_current_comm(&s->fcomm, sizeof(s->fcomm)); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) - bpf_probe_read_str(&s->tcomm, sizeof(s->tcomm), (void *)&p->comm); + struct mem_cgroup *memcg = NULL; +#ifdef COMPILE_CORE + if (bpf_core_field_exists(oc->totalpages)) { + BPF_CORE_READ_INTO(&s->pages, oc, totalpages); + } + if (bpf_core_field_exists(oc->memcg)) { + BPF_CORE_READ_INTO(&memcg, oc, memcg); + } #else - bpf_probe_read(&s->tcomm, sizeof(s->tcomm), (void *)&p->comm); - s->tcomm[TASK_COMM_LEN - 1] = 0; + bpf_probe_read_kernel(&s->pages, sizeof(s->pages), &oc->totalpages); + bpf_probe_read_kernel(&memcg, sizeof(memcg), &oc->memcg); #endif - bpf_probe_read(&s->pages, sizeof(s->pages), &oc->totalpages); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) - struct mem_cgroup *memcg; - bpf_probe_read(&memcg, sizeof(memcg), &oc->memcg); s->memcg_oom = memcg != NULL ? 1 : 0; -#endif - return 0; } -// This number will be interpreted by elf-loader to set the current running kernel version -__u32 _version SEC("version") = 0xFFFFFFFE; // NOLINT(bugprone-reserved-identifier) - -char _license[] SEC("license") = "GPL"; // NOLINT(bugprone-reserved-identifier) +__u32 _version SEC("version") = 0xFFFFFFFE; +char _license[] SEC("license") = "GPL"; diff --git a/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern.c b/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern.c index 028c1efb1b789..02c0267655d7e 100644 --- a/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern.c +++ b/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern.c @@ -1,18 +1,10 @@ #include "kconfig.h" -#include -#include +#include "ktypes.h" #include -#define bpf_printk(fmt, ...) \ - ({ \ - char ____fmt[] = fmt; \ - bpf_trace_printk(____fmt, sizeof(____fmt), \ - ##__VA_ARGS__); \ - }) - #include "bpf_helpers.h" #include "map-defs.h" -#include "bpf-common.h" +#include "cgroup.h" #include "tcp-queue-length-kern-user.h" #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0) @@ -31,9 +23,9 @@ BPF_PERCPU_HASH_MAP(tcp_queue_stats, struct stats_key, struct stats_value, 1024) * received as input parameter when we are in the kretprobe of tcp_recvmsg and tcp_sendmsg. */ BPF_HASH_MAP(who_recvmsg, u64, struct sock *, 100) - + BPF_HASH_MAP(who_sendmsg, u64, struct sock *, 100) - + // TODO: replace all `bpf_probe_read` by `bpf_probe_read_kernel` once we can assume that we have at least kernel 5.5 static __always_inline int check_sock(struct sock *sk) { struct stats_value zero = { diff --git a/pkg/collector/corechecks/ebpf/oom_kill.go b/pkg/collector/corechecks/ebpf/oom_kill.go index 679ee59b009af..b47be614b03fd 100644 --- a/pkg/collector/corechecks/ebpf/oom_kill.go +++ b/pkg/collector/corechecks/ebpf/oom_kill.go @@ -68,11 +68,11 @@ func (c *OOMKillConfig) Parse(data []byte) error { } // Configure parses the check configuration and init the check -func (m *OOMKillCheck) Configure(config, initConfig integration.Data, source string) error { +func (m *OOMKillCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { // TODO: Remove that hard-code and put it somewhere else process_net.SetSystemProbePath(dd_config.Datadog.GetString("system_probe_config.sysprobe_socket")) - err := m.CommonConfigure(initConfig, config, source) + err := m.CommonConfigure(integrationConfigDigest, initConfig, config, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/ebpf/probe/oom_kill.go b/pkg/collector/corechecks/ebpf/probe/oom_kill.go index 458da225fb759..46392b04ee14d 100644 --- a/pkg/collector/corechecks/ebpf/probe/oom_kill.go +++ b/pkg/collector/corechecks/ebpf/probe/oom_kill.go @@ -14,14 +14,12 @@ package probe import ( "fmt" "math" - "path/filepath" "unsafe" "golang.org/x/sys/unix" manager "github.com/DataDog/ebpf-manager" bpflib "github.com/cilium/ebpf" - "github.com/cilium/ebpf/btf" "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" @@ -34,6 +32,7 @@ import ( /* #include #include "../c/runtime/oom-kill-kern-user.h" +#cgo CFLAGS: -I "${SRCDIR}/../../../../ebpf/c" */ import "C" @@ -66,31 +65,15 @@ func loadCOREProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { return nil, fmt.Errorf("error detecting kernel version: %s", err) } if kv < kernel.VersionCode(4, 9, 0) { - return nil, fmt.Errorf("detected kernel version %s, but oom-kill probe requires a kernel version of at least 4.9.0.", kv) + return nil, fmt.Errorf("detected kernel version %s, but oom-kill probe requires a kernel version of at least 4.9.0", kv) } - var telemetry ebpf.COREResult - defer func() { - ebpf.StoreCORETelemetryForAsset("oomKill", telemetry) - }() - - var btfData *btf.Spec - btfData, telemetry = ebpf.GetBTF(cfg.BTFPath, cfg.BPFDir) - - if btfData == nil { - return nil, fmt.Errorf("could not find BTF data on host") - } - - buf, err := bytecode.GetReader(filepath.Join(cfg.BPFDir, "co-re"), "oom-kill.o") - if err != nil { - telemetry = ebpf.AssetReadError - return nil, fmt.Errorf("error reading oom-kill.o file: %s", err) - } - defer buf.Close() - - probe, err := startOOMKillProbe(buf, btfData) + var probe *OOMKillProbe + err = ebpf.LoadCOREAsset(cfg, "oom-kill.o", func(buf bytecode.AssetReader, opts manager.Options) error { + probe, err = startOOMKillProbe(buf, opts) + return err + }) if err != nil { - telemetry = ebpf.VerifierError return nil, err } @@ -99,43 +82,38 @@ func loadCOREProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { } func loadRuntimeCompiledProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { - buf, err := runtime.OomKill.Compile(cfg, []string{"-g"}, statsd.Client) + buf, err := runtime.OomKill.Compile(cfg, getCFlags(cfg), statsd.Client) if err != nil { return nil, err } defer buf.Close() - return startOOMKillProbe(buf, nil) + return startOOMKillProbe(buf, manager.Options{}) } -func startOOMKillProbe(buf bytecode.AssetReader, btfData *btf.Spec) (*OOMKillProbe, error) { - probes := []*manager.Probe{ - { - ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: "kprobe/oom_kill_process", EBPFFuncName: "kprobe__oom_kill_process", UID: "oom"}, - }, - } - - maps := []*manager.Map{ - {Name: "oom_stats"}, +func getCFlags(config *ebpf.Config) []string { + cflags := []string{"-g"} + if config.BPFDebug { + cflags = append(cflags, "-DDEBUG=1") } + return cflags +} +func startOOMKillProbe(buf bytecode.AssetReader, managerOptions manager.Options) (*OOMKillProbe, error) { m := &manager.Manager{ - Probes: probes, - Maps: maps, - } - - managerOptions := manager.Options{ - RLimit: &unix.Rlimit{ - Cur: math.MaxUint64, - Max: math.MaxUint64, + Probes: []*manager.Probe{ + {ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: "kprobe/oom_kill_process", EBPFFuncName: "kprobe__oom_kill_process", UID: "oom"}}, }, - VerifierOptions: bpflib.CollectionOptions{ - Programs: bpflib.ProgramOptions{ - KernelTypes: btfData, - }, + Maps: []*manager.Map{ + {Name: "oom_stats"}, }, } + managerOptions.RLimit = &unix.Rlimit{ + Cur: math.MaxUint64, + Max: math.MaxUint64, + } + if err := m.InitWithOptions(buf, managerOptions); err != nil { return nil, fmt.Errorf("failed to init manager: %w", err) } diff --git a/pkg/collector/corechecks/ebpf/probe/oom_kill_test.go b/pkg/collector/corechecks/ebpf/probe/oom_kill_test.go index f6225f2052509..ebf25ce74691c 100644 --- a/pkg/collector/corechecks/ebpf/probe/oom_kill_test.go +++ b/pkg/collector/corechecks/ebpf/probe/oom_kill_test.go @@ -127,12 +127,12 @@ func TestOOMKillProbe(t *testing.T) { if result.TPid == uint32(cmd.Process.Pid) { found = true - assert.Regexp(t, regexp.MustCompile("run-([0-9|a-z]*).scope"), result.CgroupName) - assert.Equal(t, result.TPid, result.Pid) - assert.Equal(t, "python3", result.FComm) - assert.Equal(t, "python3", result.TComm) - assert.NotZero(t, result.Pages) - assert.Equal(t, uint32(1), result.MemCgOOM) + assert.Regexp(t, regexp.MustCompile("run-([0-9|a-z]*).scope"), result.CgroupName, "cgroup name") + assert.Equal(t, result.TPid, result.Pid, "tpid == pid") + assert.Equal(t, "python3", result.FComm, "fcomm") + assert.Equal(t, "python3", result.TComm, "tcomm") + assert.NotZero(t, result.Pages, "pages") + assert.Equal(t, uint32(1), result.MemCgOOM, "memcg oom") break } } diff --git a/pkg/collector/corechecks/ebpf/tcp_queue_length.go b/pkg/collector/corechecks/ebpf/tcp_queue_length.go index eecc1a6e774d9..cb1c6853cb4c4 100644 --- a/pkg/collector/corechecks/ebpf/tcp_queue_length.go +++ b/pkg/collector/corechecks/ebpf/tcp_queue_length.go @@ -65,11 +65,11 @@ func (t *TCPQueueLengthConfig) Parse(data []byte) error { } // Configure parses the check configuration and init the check -func (t *TCPQueueLengthCheck) Configure(config, initConfig integration.Data, source string) error { +func (t *TCPQueueLengthCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { // TODO: Remove that hard-code and put it somewhere else process_net.SetSystemProbePath(dd_config.Datadog.GetString("system_probe_config.sysprobe_socket")) - err := t.CommonConfigure(initConfig, config, source) + err := t.CommonConfigure(integrationConfigDigest, initConfig, config, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/embed/apm.go b/pkg/collector/corechecks/embed/apm.go index e58fd8a263205..bf60b134dc045 100644 --- a/pkg/collector/corechecks/embed/apm.go +++ b/pkg/collector/corechecks/embed/apm.go @@ -142,7 +142,7 @@ func (c *APMCheck) run() error { } // Configure the APMCheck -func (c *APMCheck) Configure(data integration.Data, initConfig integration.Data, source string) error { +func (c *APMCheck) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { var checkConf apmCheckConf if err := yaml.Unmarshal(data, &checkConf); err != nil { return err diff --git a/pkg/collector/corechecks/embed/jmx/check.go b/pkg/collector/corechecks/embed/jmx/check.go index bff23abb86a40..3f15ca0ca31eb 100644 --- a/pkg/collector/corechecks/embed/jmx/check.go +++ b/pkg/collector/corechecks/embed/jmx/check.go @@ -18,7 +18,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -// JMXCheck TODO : IML-199 +// JMXCheck represents a JMXFetch check type JMXCheck struct { id check.ID name string @@ -31,20 +31,21 @@ type JMXCheck struct { } func newJMXCheck(config integration.Config, source string) *JMXCheck { + digest := config.IntDigest() check := &JMXCheck{ config: config, stop: make(chan struct{}), name: config.Name, - id: check.ID(fmt.Sprintf("%v_%v", config.Name, config.Digest())), + id: check.ID(fmt.Sprintf("%v_%x", config.Name, digest)), source: source, telemetry: telemetry_utils.IsCheckEnabled("jmx"), } - check.Configure(config.InitConfig, config.MetricConfig, source) //nolint:errcheck + check.Configure(digest, config.InitConfig, config.MetricConfig, source) //nolint:errcheck return check } -// Run TODO : IML-199 +// Run schedules this JMXCheck to run func (c *JMXCheck) Run() error { err := state.scheduleCheck(c) if err != nil { @@ -61,68 +62,69 @@ func (c *JMXCheck) Run() error { return nil } -// Stop TODO : IML-199 +// Stop forces the JMXCheck to stop and will unschedule it func (c *JMXCheck) Stop() { close(c.stop) state.unscheduleCheck(c) } -// Cancel TODO : IML-199 +// Cancel is a noop func (c *JMXCheck) Cancel() {} -// String TODO : IML-199 +// String provides a printable version of the JMXCheck func (c *JMXCheck) String() string { return c.name } -// Version TODO : IML-199 +// Version returns the version of the JMXCheck +// (note, returns an empty string) func (c *JMXCheck) Version() string { return "" } -// ConfigSource TODO : IML-199 +// ConfigSource returns the source of the configuration of the JMXCheck func (c *JMXCheck) ConfigSource() string { return c.source } -// InitConfig TODO : IML-199 +// InitConfig returns the init_config in YAML or JSON of the JMXCheck func (c *JMXCheck) InitConfig() string { return c.initConfig } -// InstanceConfig TODO : IML-199 +// InstanceConfig returns the metric config in YAML or JSON of the JMXCheck func (c *JMXCheck) InstanceConfig() string { return c.instanceConfig } -// Configure TODO : IML-199 -func (c *JMXCheck) Configure(config integration.Data, initConfig integration.Data, source string) error { +// Configure configures this JMXCheck, setting InitConfig and InstanceConfig +func (c *JMXCheck) Configure(integrationConfigDigest uint64, config integration.Data, initConfig integration.Data, source string) error { c.initConfig = string(config) c.instanceConfig = string(initConfig) return nil } -// Interval TODO : IML-199 +// Interval returns the scheduling time for the check (0 for JMXCheck) func (c *JMXCheck) Interval() time.Duration { return 0 } -// ID TODO : IML-199 +// ID provides a unique identifier for this JMXCheck instance func (c *JMXCheck) ID() check.ID { return c.id } -// IsTelemetryEnabled TODO : IML-199 +// IsTelemetryEnabled returns if telemetry is enabled for this JMXCheck func (c *JMXCheck) IsTelemetryEnabled() bool { return c.telemetry } -// GetWarnings TODO : IML-199 +// GetWarnings returns the last warning registered by this JMXCheck (currently an empty slice) func (c *JMXCheck) GetWarnings() []error { return []error{} } -// GetSenderStats TODO : IML-199 +// GetSenderStats returns the stats from the last run of this JMXCheck func (c *JMXCheck) GetSenderStats() (check.SenderStats, error) { return check.NewSenderStats(), nil } diff --git a/pkg/collector/corechecks/embed/process_agent.go b/pkg/collector/corechecks/embed/process_agent.go index 2a78c3999d4bf..cdb426be1ddd7 100644 --- a/pkg/collector/corechecks/embed/process_agent.go +++ b/pkg/collector/corechecks/embed/process_agent.go @@ -144,7 +144,7 @@ func (c *ProcessAgentCheck) run() error { } // Configure the ProcessAgentCheck -func (c *ProcessAgentCheck) Configure(data integration.Data, initConfig integration.Data, source string) error { +func (c *ProcessAgentCheck) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { // only log whether process check is enabled or not but don't return early, because we still need to initialize "binPath", "source" and // start up process-agent. Ultimately it's up to process-agent to decide whether to run or not based on the config if enabled := config.Datadog.GetBool("process_config.process_collection.enabled"); !enabled { diff --git a/pkg/collector/corechecks/loader.go b/pkg/collector/corechecks/loader.go index c9f0c4be138d1..e56ef8ef5bccd 100644 --- a/pkg/collector/corechecks/loader.go +++ b/pkg/collector/corechecks/loader.go @@ -68,7 +68,7 @@ func (gl *GoCheckLoader) Load(config integration.Config, instance integration.Da } c = factory() - if err := c.Configure(instance, config.InitConfig, config.Source); err != nil { + if err := c.Configure(config.FastDigest(), instance, config.InitConfig, config.Source); err != nil { log.Errorf("core.loader: could not configure check %s: %s", c, err) msg := fmt.Sprintf("Could not configure check %s: %s", c, err) return c, fmt.Errorf(msg) diff --git a/pkg/collector/corechecks/loader_test.go b/pkg/collector/corechecks/loader_test.go index e02d092d618bc..b75bb05f15c4c 100644 --- a/pkg/collector/corechecks/loader_test.go +++ b/pkg/collector/corechecks/loader_test.go @@ -18,7 +18,7 @@ type TestCheck struct { check.StubCheck } -func (c *TestCheck) Configure(data integration.Data, initData integration.Data, source string) error { +func (c *TestCheck) Configure(integrationConfigDigest uint64, data integration.Data, initData integration.Data, source string) error { if string(data) == "err" { return fmt.Errorf("testError") } @@ -54,7 +54,6 @@ func TestLoad(t *testing.T) { l, _ := NewGoCheckLoader() _, err := l.Load(cc, i[0]) - if err != nil { t.Fatalf("Expected nil error, found: %v", err) } diff --git a/pkg/collector/corechecks/net/network.go b/pkg/collector/corechecks/net/network.go index 944b95b649e29..4e68123d61de1 100644 --- a/pkg/collector/corechecks/net/network.go +++ b/pkg/collector/corechecks/net/network.go @@ -235,7 +235,6 @@ func submitConnectionsMetrics(sender aggregator.Sender, protocolName string, sta } func netstatTCPExtCounters() (map[string]int64, error) { - f, err := os.Open("/proc/net/netstat") if err != nil { return nil, err @@ -280,8 +279,8 @@ func netstatTCPExtCounters() (map[string]int64, error) { } // Configure configures the network checks -func (c *NetworkCheck) Configure(rawInstance integration.Data, rawInitConfig integration.Data, source string) error { - err := c.CommonConfigure(rawInitConfig, rawInstance, source) +func (c *NetworkCheck) Configure(integrationConfigDigest uint64, rawInstance integration.Data, rawInitConfig integration.Data, source string) error { + err := c.CommonConfigure(integrationConfigDigest, rawInitConfig, rawInstance, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/net/network_test.go b/pkg/collector/corechecks/net/network_test.go index f92fdbd368d28..724601c55326e 100644 --- a/pkg/collector/corechecks/net/network_test.go +++ b/pkg/collector/corechecks/net/network_test.go @@ -16,6 +16,7 @@ import ( "github.com/stretchr/testify/mock" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" ) type fakeNetworkStats struct { @@ -66,7 +67,7 @@ func (n *fakeNetworkStats) NetstatTCPExtCounters() (map[string]int64, error) { func TestDefaultConfiguration(t *testing.T) { check := NetworkCheck{} - check.Configure([]byte(``), []byte(``), "test") + check.Configure(integration.FakeConfigHash, []byte(``), []byte(``), "test") assert.Equal(t, false, check.config.instance.CollectConnectionState) assert.Equal(t, []string(nil), check.config.instance.ExcludedInterfaces) @@ -82,7 +83,7 @@ excluded_interfaces: - lo0 excluded_interface_re: "eth.*" `) - err := check.Configure(rawInstanceConfig, []byte(``), "test") + err := check.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) assert.Equal(t, true, check.config.instance.CollectConnectionState) @@ -91,7 +92,6 @@ excluded_interface_re: "eth.*" } func TestNetworkCheck(t *testing.T) { - net := &fakeNetworkStats{ counterStats: []net.IOCountersStat{ { @@ -272,7 +272,7 @@ func TestNetworkCheck(t *testing.T) { collect_connection_state: true `) - err := networkCheck.Configure(rawInstanceConfig, []byte(``), "test") + err := networkCheck.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) mockSender := mocksender.NewMockSender(networkCheck.ID()) @@ -392,7 +392,7 @@ excluded_interfaces: - lo0 `) - networkCheck.Configure(rawInstanceConfig, []byte(``), "test") + networkCheck.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") mockSender := mocksender.NewMockSender(networkCheck.ID()) @@ -472,7 +472,7 @@ func TestExcludedInterfacesRe(t *testing.T) { excluded_interface_re: "eth[0-9]" `) - err := networkCheck.Configure(rawInstanceConfig, []byte(``), "test") + err := networkCheck.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) mockSender := mocksender.NewMockSender(networkCheck.ID()) diff --git a/pkg/collector/corechecks/net/ntp.go b/pkg/collector/corechecks/net/ntp.go index 28e4b3a0df4b2..5a92768a07d9e 100644 --- a/pkg/collector/corechecks/net/ntp.go +++ b/pkg/collector/corechecks/net/ntp.go @@ -139,7 +139,7 @@ func (c *ntpConfig) parse(data []byte, initData []byte, getLocalServers func() ( } // Configure configure the data from the yaml -func (c *NTPCheck) Configure(data integration.Data, initConfig integration.Data, source string) error { +func (c *NTPCheck) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { cfg := new(ntpConfig) err := cfg.parse(data, initConfig, getLocalDefinedNTPServers) if err != nil { @@ -147,10 +147,10 @@ func (c *NTPCheck) Configure(data integration.Data, initConfig integration.Data, return err } - c.BuildID(data, initConfig) + c.BuildID(integrationConfigDigest, data, initConfig) c.cfg = cfg - err = c.CommonConfigure(initConfig, data, source) + err = c.CommonConfigure(integrationConfigDigest, initConfig, data, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/net/ntp_test.go b/pkg/collector/corechecks/net/ntp_test.go index 426d9b73fc83a..18461ff4a103b 100644 --- a/pkg/collector/corechecks/net/ntp_test.go +++ b/pkg/collector/corechecks/net/ntp_test.go @@ -17,6 +17,7 @@ import ( "github.com/stretchr/testify/mock" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/metrics" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders" @@ -51,15 +52,15 @@ func testNTPQuery(host string, opt ntp.QueryOptions) (*ntp.Response, error) { } func TestNTPOK(t *testing.T) { - var ntpCfg = []byte(ntpCfgString) - var ntpInitCfg = []byte("") + ntpCfg := []byte(ntpCfgString) + ntpInitCfg := []byte("") offset = 21 ntpQuery = testNTPQuery defer func() { ntpQuery = ntp.QueryWithOptions }() ntpCheck := new(NTPCheck) - ntpCheck.Configure(ntpCfg, ntpInitCfg, "test") + ntpCheck.Configure(integration.FakeConfigHash, ntpCfg, ntpInitCfg, "test") mockSender := mocksender.NewMockSender(ntpCheck.ID()) @@ -81,15 +82,15 @@ func TestNTPOK(t *testing.T) { } func TestNTPCritical(t *testing.T) { - var ntpCfg = []byte(ntpCfgString) - var ntpInitCfg = []byte("") + ntpCfg := []byte(ntpCfgString) + ntpInitCfg := []byte("") offset = 100 ntpQuery = testNTPQuery defer func() { ntpQuery = ntp.QueryWithOptions }() ntpCheck := new(NTPCheck) - ntpCheck.Configure(ntpCfg, ntpInitCfg, "test") + ntpCheck.Configure(integration.FakeConfigHash, ntpCfg, ntpInitCfg, "test") mockSender := mocksender.NewMockSender(ntpCheck.ID()) @@ -111,14 +112,14 @@ func TestNTPCritical(t *testing.T) { } func TestNTPError(t *testing.T) { - var ntpCfg = []byte(ntpCfgString) - var ntpInitCfg = []byte("") + ntpCfg := []byte(ntpCfgString) + ntpInitCfg := []byte("") ntpQuery = testNTPQueryError defer func() { ntpQuery = ntp.QueryWithOptions }() ntpCheck := new(NTPCheck) - ntpCheck.Configure(ntpCfg, ntpInitCfg, "test") + ntpCheck.Configure(integration.FakeConfigHash, ntpCfg, ntpInitCfg, "test") mockSender := mocksender.NewMockSender(ntpCheck.ID()) @@ -139,14 +140,14 @@ func TestNTPError(t *testing.T) { } func TestNTPInvalid(t *testing.T) { - var ntpCfg = []byte(ntpCfgString) - var ntpInitCfg = []byte("") + ntpCfg := []byte(ntpCfgString) + ntpInitCfg := []byte("") ntpQuery = testNTPQueryInvalid defer func() { ntpQuery = ntp.QueryWithOptions }() ntpCheck := new(NTPCheck) - ntpCheck.Configure(ntpCfg, ntpInitCfg, "test") + ntpCheck.Configure(integration.FakeConfigHash, ntpCfg, ntpInitCfg, "test") mockSender := mocksender.NewMockSender(ntpCheck.ID()) @@ -167,15 +168,15 @@ func TestNTPInvalid(t *testing.T) { } func TestNTPNegativeOffsetCritical(t *testing.T) { - var ntpCfg = []byte(ntpCfgString) - var ntpInitCfg = []byte("") + ntpCfg := []byte(ntpCfgString) + ntpInitCfg := []byte("") offset = -100 ntpQuery = testNTPQuery defer func() { ntpQuery = ntp.QueryWithOptions }() ntpCheck := new(NTPCheck) - ntpCheck.Configure(ntpCfg, ntpInitCfg, "test") + ntpCheck.Configure(integration.FakeConfigHash, ntpCfg, ntpInitCfg, "test") mockSender := mocksender.NewMockSender(ntpCheck.ID()) @@ -197,13 +198,13 @@ func TestNTPNegativeOffsetCritical(t *testing.T) { } func TestNTPResiliencyOK(t *testing.T) { - var ntpCfg = []byte(` + ntpCfg := []byte(` hosts: - 1 - 400 - 2 `) - var ntpInitCfg = []byte("") + ntpInitCfg := []byte("") offset = 1 ntpQuery = func(host string, opt ntp.QueryOptions) (*ntp.Response, error) { @@ -216,7 +217,7 @@ hosts: defer func() { ntpQuery = ntp.QueryWithOptions }() ntpCheck := new(NTPCheck) - ntpCheck.Configure(ntpCfg, ntpInitCfg, "test") + ntpCheck.Configure(integration.FakeConfigHash, ntpCfg, ntpInitCfg, "test") mockSender := mocksender.NewMockSender(ntpCheck.ID()) @@ -238,13 +239,13 @@ hosts: } func TestNTPResiliencyCritical(t *testing.T) { - var ntpCfg = []byte(` + ntpCfg := []byte(` hosts: - 1 - 400 - 400 `) - var ntpInitCfg = []byte("") + ntpInitCfg := []byte("") offset = 1 ntpQuery = func(host string, opt ntp.QueryOptions) (*ntp.Response, error) { @@ -257,7 +258,7 @@ hosts: defer func() { ntpQuery = ntp.QueryWithOptions }() ntpCheck := new(NTPCheck) - ntpCheck.Configure(ntpCfg, ntpInitCfg, "test") + ntpCheck.Configure(integration.FakeConfigHash, ntpCfg, ntpInitCfg, "test") mockSender := mocksender.NewMockSender(ntpCheck.ID()) @@ -279,7 +280,6 @@ hosts: } func TestHostConfigsMerge(t *testing.T) { - expectedHosts := []string{"0.time.dogo", "1.time.dogo", "2.time.dogo"} testedConfig := []byte(` host: 0.time.dogo @@ -289,13 +289,12 @@ hosts: `) ntpCheck := new(NTPCheck) - ntpCheck.Configure(testedConfig, []byte(""), "test") + ntpCheck.Configure(integration.FakeConfigHash, testedConfig, []byte(""), "test") assert.Equal(t, expectedHosts, ntpCheck.cfg.instance.Hosts) } func TestHostConfigsMergeNoDuplicate(t *testing.T) { - expectedHosts := []string{"0.time.dogo", "1.time.dogo", "2.time.dogo"} testedConfig := []byte(` host: 0.time.dogo @@ -306,7 +305,7 @@ hosts: `) ntpCheck := new(NTPCheck) - ntpCheck.Configure(testedConfig, []byte(""), "test") + ntpCheck.Configure(integration.FakeConfigHash, testedConfig, []byte(""), "test") assert.Equal(t, expectedHosts, ntpCheck.cfg.instance.Hosts) } @@ -318,7 +317,7 @@ host: time.dogo `) ntpCheck := new(NTPCheck) - ntpCheck.Configure(testedConfig, []byte(""), "test") + ntpCheck.Configure(integration.FakeConfigHash, testedConfig, []byte(""), "test") assert.Equal(t, expectedHosts, ntpCheck.cfg.instance.Hosts) } @@ -332,7 +331,7 @@ hosts: `) ntpCheck := new(NTPCheck) - ntpCheck.Configure(testedConfig, []byte(""), "test") + ntpCheck.Configure(integration.FakeConfigHash, testedConfig, []byte(""), "test") assert.Equal(t, expectedHosts, ntpCheck.cfg.instance.Hosts) } @@ -347,7 +346,7 @@ func TestDefaultHostConfig(t *testing.T) { config.Datadog.Set("cloud_provider_metadata", []string{}) ntpCheck := new(NTPCheck) - ntpCheck.Configure(testedConfig, []byte(""), "test") + ntpCheck.Configure(integration.FakeConfigHash, testedConfig, []byte(""), "test") assert.Equal(t, expectedHosts, ntpCheck.cfg.instance.Hosts) } @@ -367,7 +366,7 @@ func TestNTPPortConfig(t *testing.T) { offset_threshold: 60 port: %d `, expectedPort)) - err := ntpCheck.Configure(ntpCfg, []byte(""), "test") + err := ntpCheck.Configure(integration.FakeConfigHash, ntpCfg, []byte(""), "test") assert.Nil(t, err) mockSender := mocksender.NewMockSender(ntpCheck.ID()) @@ -386,7 +385,7 @@ func TestNTPPortNotInt(t *testing.T) { offset_threshold: 60 port: ntp`) - err := ntpCheck.Configure(ntpCfg, []byte(""), "test") + err := ntpCheck.Configure(integration.FakeConfigHash, ntpCfg, []byte(""), "test") assert.EqualError(t, err, "yaml: unmarshal errors:\n line 3: cannot unmarshal !!str `ntp` into int") } diff --git a/pkg/collector/corechecks/nvidia/jetson/jetson.go b/pkg/collector/corechecks/nvidia/jetson/jetson.go index 85e840613a844..ae03789da1228 100644 --- a/pkg/collector/corechecks/nvidia/jetson/jetson.go +++ b/pkg/collector/corechecks/nvidia/jetson/jetson.go @@ -153,8 +153,8 @@ func (c *JetsonCheck) Run() error { } // Configure the GPU check -func (c *JetsonCheck) Configure(data integration.Data, initConfig integration.Data, source string) error { - err := c.CommonConfigure(initConfig, data, source) +func (c *JetsonCheck) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { + err := c.CommonConfigure(integrationConfigDigest, initConfig, data, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/nvidia/jetson/jetson_test.go b/pkg/collector/corechecks/nvidia/jetson/jetson_test.go index 885c828180d22..4fae2b3e6a3de 100644 --- a/pkg/collector/corechecks/nvidia/jetson/jetson_test.go +++ b/pkg/collector/corechecks/nvidia/jetson/jetson_test.go @@ -14,6 +14,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" ) const ( @@ -25,9 +26,8 @@ const ( ) func TestNano(t *testing.T) { - tegraCheck := new(JetsonCheck) - tegraCheck.Configure(nil, nil, "test") + tegraCheck.Configure(integration.FakeConfigHash, nil, nil, "test") assert.Equal(t, tegraCheck.tegraStatsPath, "/usr/bin/tegrastats") @@ -80,9 +80,8 @@ func TestNano(t *testing.T) { } func TestTX1(t *testing.T) { - tegraCheck := new(JetsonCheck) - tegraCheck.Configure(nil, nil, "test") + tegraCheck.Configure(integration.FakeConfigHash, nil, nil, "test") assert.Equal(t, tegraCheck.tegraStatsPath, "/usr/bin/tegrastats") @@ -134,9 +133,8 @@ func TestTX1(t *testing.T) { } func TestTX2(t *testing.T) { - tegraCheck := new(JetsonCheck) - tegraCheck.Configure(nil, nil, "test") + tegraCheck.Configure(integration.FakeConfigHash, nil, nil, "test") assert.Equal(t, tegraCheck.tegraStatsPath, "/usr/bin/tegrastats") @@ -198,9 +196,8 @@ func TestTX2(t *testing.T) { } func TestAgxXavier(t *testing.T) { - tegraCheck := new(JetsonCheck) - tegraCheck.Configure(nil, nil, "test") + tegraCheck.Configure(integration.FakeConfigHash, nil, nil, "test") assert.Equal(t, tegraCheck.tegraStatsPath, "/usr/bin/tegrastats") mock := mocksender.NewMockSender(tegraCheck.ID()) @@ -266,9 +263,8 @@ func TestAgxXavier(t *testing.T) { } func TestXavierNx(t *testing.T) { - tegraCheck := new(JetsonCheck) - tegraCheck.Configure(nil, nil, "test") + tegraCheck.Configure(integration.FakeConfigHash, nil, nil, "test") assert.Equal(t, tegraCheck.tegraStatsPath, "/usr/bin/tegrastats") mock := mocksender.NewMockSender(tegraCheck.ID()) diff --git a/pkg/collector/corechecks/snmp/common/contants.go b/pkg/collector/corechecks/snmp/common/contants.go index 6d633643ec980..9a1ea9144a9d6 100644 --- a/pkg/collector/corechecks/snmp/common/contants.go +++ b/pkg/collector/corechecks/snmp/common/contants.go @@ -13,3 +13,32 @@ const SnmpIntegrationName = "snmp" // SnmpExternalTagsSourceType is the source id used for external tags const SnmpExternalTagsSourceType = "snmp" + +type IfAdminStatus int + +const ( + AdminStatus_Up IfAdminStatus = 1 + AdminStatus_Down IfAdminStatus = 2 + AdminStatus_Testing IfAdminStatus = 3 +) + +type IfOperStatus int + +const ( + OperStatus_Up IfOperStatus = 1 + OperStatus_Down IfOperStatus = 2 + OperStatus_Testing IfOperStatus = 3 + OperStatus_Unknown IfOperStatus = 4 + OperStatus_Dormant IfOperStatus = 5 + OperStatus_NotPresent IfOperStatus = 6 + OperStatus_LowerLayerDown IfOperStatus = 7 +) + +type InterfaceStatus string + +const ( + InterfaceStatus_Up InterfaceStatus = "up" + InterfaceStatus_Down InterfaceStatus = "down" + InterfaceStatus_Warning InterfaceStatus = "warning" + InterfaceStatus_Off InterfaceStatus = "off" +) diff --git a/pkg/collector/corechecks/snmp/common/utils.go b/pkg/collector/corechecks/snmp/common/utils.go index 29b53fbf141ad..3417dfb3687dc 100644 --- a/pkg/collector/corechecks/snmp/common/utils.go +++ b/pkg/collector/corechecks/snmp/common/utils.go @@ -42,3 +42,11 @@ func CopyStrings(tags []string) []string { func GetAgentVersionTag() string { return "agent_version:" + version.AgentVersion } + +// BoolToFloat64 converts a true/false boolean into a 1.0 or 0.0 float +func BoolToFloat64(val bool) float64 { + if val { + return 1. + } + return 0. +} diff --git a/pkg/collector/corechecks/snmp/common/utils_test.go b/pkg/collector/corechecks/snmp/common/utils_test.go index 8429946e557af..546daf6d3ef1e 100644 --- a/pkg/collector/corechecks/snmp/common/utils_test.go +++ b/pkg/collector/corechecks/snmp/common/utils_test.go @@ -106,3 +106,9 @@ func Test_CopyStrings(t *testing.T) { assert.NotEqual(t, fmt.Sprintf("%p", tags), fmt.Sprintf("%p", newTags)) assert.NotEqual(t, fmt.Sprintf("%p", &tags[0]), fmt.Sprintf("%p", &newTags[0])) } + +func Test_BoolToFloat64(t *testing.T) { + assert.Equal(t, BoolToFloat64(true), 1.0) + assert.Equal(t, BoolToFloat64(false), 0.0) + +} diff --git a/pkg/collector/corechecks/snmp/internal/checkconfig/config_metadata.go b/pkg/collector/corechecks/snmp/internal/checkconfig/config_metadata.go index cc4db1b27662a..5998b4089f75f 100644 --- a/pkg/collector/corechecks/snmp/internal/checkconfig/config_metadata.go +++ b/pkg/collector/corechecks/snmp/internal/checkconfig/config_metadata.go @@ -84,6 +84,22 @@ var LegacyMetadataConfig = MetadataConfig{ }, }, }, + "ip_addresses": { + Fields: map[string]MetadataField{ + "if_index": { + Symbol: SymbolConfig{ + OID: "1.3.6.1.2.1.4.20.1.2", + Name: "ipAdEntIfIndex", + }, + }, + "netmask": { + Symbol: SymbolConfig{ + OID: "1.3.6.1.2.1.4.20.1.3", + Name: "ipAdEntNetMask", + }, + }, + }, + }, } var TopologyMetadataConfig = MetadataConfig{ diff --git a/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go b/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go index 88b02cd9500b2..9ece5bafd9c72 100644 --- a/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go +++ b/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go @@ -975,6 +975,8 @@ func Test_snmpConfig_refreshWithProfile(t *testing.T) { "1.2.3.4.7", "1.3.6.1.2.1.2.2.1.99", "1.3.6.1.2.1.31.1.1.1.1", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, }, c.OidConfig) diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go index 4e969035014b1..94d0f84cf06d0 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go @@ -32,9 +32,11 @@ import ( ) const ( - snmpLoaderTag = "loader:core" - serviceCheckName = "snmp.can_check" - deviceHostnamePrefix = "device:" + snmpLoaderTag = "loader:core" + serviceCheckName = "snmp.can_check" + deviceReachableMetric = "snmp.device.reachable" + deviceUnreachableMetric = "snmp.device.unreachable" + deviceHostnamePrefix = "device:" ) // define timeNow as variable to make it possible to mock it during test @@ -114,6 +116,9 @@ func (d *DeviceCheck) Run(collectionTime time.Time) error { tags = append(tags, dynamicTags...) d.sender.ServiceCheck(serviceCheckName, metrics.ServiceCheckOK, tags, "") } + d.sender.Gauge(deviceReachableMetric, common.BoolToFloat64(deviceReachable), tags) + d.sender.Gauge(deviceUnreachableMetric, common.BoolToFloat64(!deviceReachable), tags) + if values != nil { d.sender.ReportMetrics(d.config.Metrics, values, tags) } @@ -144,7 +149,7 @@ func (d *DeviceCheck) setDeviceHostExternalTags() { if deviceHostname == "" || err != nil { return } - agentTags := config.GetConfiguredTags(false) + agentTags := config.GetGlobalConfiguredTags(false) log.Debugf("Set external tags for device host, host=`%s`, agentTags=`%v`", deviceHostname, agentTags) externalhost.SetExternalTags(deviceHostname, common.SnmpExternalTagsSourceType, agentTags) } @@ -249,17 +254,27 @@ func (d *DeviceCheck) detectAvailableMetrics() ([]checkconfig.MetricsConfig, []c var metricConfigs []checkconfig.MetricsConfig var metricTagConfigs []checkconfig.MetricTagConfig + // If a metric name has already been encountered, we won't try to add it again. + alreadySeenMetrics := make(map[string]bool) + // If a global tag has already been encountered, we won't try to add it again. + alreadyGlobalTags := make(map[string]bool) for _, profileDef := range d.config.Profiles { for _, metricConfig := range profileDef.Metrics { newMetricConfig := metricConfig if metricConfig.IsScalar() { - if root.LeafExist(metricConfig.Symbol.OID) { + metricName := metricConfig.Symbol.Name + if metricConfig.Options.MetricSuffix != "" { + metricName = metricName + "." + metricConfig.Options.MetricSuffix + } + if !alreadySeenMetrics[metricName] && root.LeafExist(metricConfig.Symbol.OID) { + alreadySeenMetrics[metricName] = true metricConfigs = append(metricConfigs, newMetricConfig) } } else if metricConfig.IsColumn() { newMetricConfig.Symbols = []checkconfig.SymbolConfig{} for _, symbol := range metricConfig.Symbols { - if root.NonLeafNodeExist(symbol.OID) { + if !alreadySeenMetrics[symbol.Name] && root.NonLeafNodeExist(symbol.OID) { + alreadySeenMetrics[symbol.Name] = true newMetricConfig.Symbols = append(newMetricConfig.Symbols, symbol) } } @@ -270,6 +285,27 @@ func (d *DeviceCheck) detectAvailableMetrics() ([]checkconfig.MetricsConfig, []c } for _, metricTag := range profileDef.MetricTags { if root.LeafExist(metricTag.OID) || root.LeafExist(metricTag.Column.OID) { + if metricTag.Tag != "" { + if alreadyGlobalTags[metricTag.Tag] { + continue + } + alreadyGlobalTags[metricTag.Tag] = true + } else { + // We don't add `metricTag` if any of the `metricTag.Tags` has already been encountered. + alreadyPresent := false + for tagKey := range metricTag.Tags { + if alreadyGlobalTags[tagKey] { + alreadyPresent = true + break + } + } + if alreadyPresent { + continue + } + for tagKey := range metricTag.Tags { + alreadyGlobalTags[tagKey] = true + } + } metricTagConfigs = append(metricTagConfigs, metricTag) } } diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go index 95634fff60016..d1bfc62a5798c 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go @@ -7,7 +7,7 @@ package devicecheck import ( "fmt" - "github.com/DataDog/datadog-agent/pkg/metrics" + "path/filepath" "strings" "testing" "time" @@ -17,6 +17,8 @@ import ( "github.com/stretchr/testify/mock" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/metrics" "github.com/DataDog/datadog-agent/pkg/version" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/common" @@ -206,7 +208,6 @@ profiles: }, { Variables: []gosnmp.SnmpPDU{ - { Name: "1.3.6.1.2.1.31.1.1.1.1.1", Type: gosnmp.OctetString, @@ -217,7 +218,16 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, - + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, { Name: "1.3.6.1.2.1.31.1.1.1.1.2", Type: gosnmp.OctetString, @@ -228,6 +238,21 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -265,7 +290,7 @@ profiles: "1.3.6.1.4.1.3375.2.1.3.3.3.0", }).Return(&packets[2], nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.13", "1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7", "1.3.6.1.2.1.2.2.1.8"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[0], nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", "1.3.6.1.2.1.4.20.1.2", "1.3.6.1.2.1.4.20.1.3"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) err = deviceCk.Run(time.Now()) assert.Nil(t, err) @@ -301,7 +326,9 @@ profiles: } func TestDetectMetricsToCollect(t *testing.T) { - checkconfig.SetConfdPathAndCleanProfiles() + profilesWithInvalidExtendConfdPath, _ := filepath.Abs(filepath.Join("..", "test", "detectmetr.d")) + config.Datadog.Set("confd_path", profilesWithInvalidExtendConfdPath) + sess := session.CreateMockSession() sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { return sess, nil @@ -314,11 +341,7 @@ community_string: public experimental_detect_metrics_enabled: true `) // language=yaml - rawInitConfig := []byte(` -profiles: - f5-big-ip: - definition_file: f5-big-ip.yaml -`) + rawInitConfig := []byte(``) config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) @@ -368,6 +391,15 @@ profiles: Type: gosnmp.OctetString, Value: []byte("foo_sys_name"), }, + { + Name: "1.3.6.1.4.1.318.1.1.1.11.1.1.0", + Type: gosnmp.OctetString, + Value: []byte("1010"), + }, + }, + }, + { + Variables: []gosnmp.SnmpPDU{ { Name: "1.3.6.1.4.1.3375.2.1.1.2.1.44.0", Type: gosnmp.Integer, @@ -491,6 +523,16 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, { Name: "1.3.6.1.2.1.2.2.1.8.2", @@ -507,6 +549,27 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -538,7 +601,8 @@ profiles: sess.On("GetNext", []string{"1.3.6.1.2.1.2.2.1.14"}).Return(session.CreateGetNextPacket("1.3.6.1.2.1.2.2.1.14.1", gosnmp.OctetString, []byte(`123`)), nil) sess.On("GetNext", []string{"1.3.6.1.2.1.2.2.1.15"}).Return(session.CreateGetNextPacket("1.3.6.1.2.1.31.1.1.1.1.1", gosnmp.OctetString, []byte(`123`)), nil) sess.On("GetNext", []string{"1.3.6.1.2.1.31.1.1.1.1.2"}).Return(session.CreateGetNextPacket("1.3.6.1.2.1.31.1.1.1.18.1", gosnmp.OctetString, []byte(`123`)), nil) - sess.On("GetNext", []string{"1.3.6.1.2.1.31.1.1.1.19"}).Return(session.CreateGetNextPacket("1.3.6.1.4.1.3375.2.1.1.2.1.44.0", gosnmp.OctetString, []byte(`123`)), nil) + sess.On("GetNext", []string{"1.3.6.1.2.1.31.1.1.1.19"}).Return(session.CreateGetNextPacket("1.3.6.1.4.1.318.1.1.1.11.1.1.0", gosnmp.OctetString, []byte(`1010`)), nil) + sess.On("GetNext", []string{"1.3.6.1.4.1.318.1.1.1.11.1.1.0"}).Return(session.CreateGetNextPacket("1.3.6.1.4.1.3375.2.1.1.2.1.44.0", gosnmp.OctetString, []byte(`123`)), nil) sess.On("GetNext", []string{"1.3.6.1.4.1.3375.2.1.1.2.1.44.0"}).Return(session.CreateGetNextPacket("1.3.6.1.4.1.3375.2.1.1.2.1.44.999.0", gosnmp.OctetString, []byte(`123`)), nil) sess.On("GetNext", []string{"1.3.6.1.4.1.3375.2.1.1.2.1.44.999.0"}).Return(session.CreateGetNextPacket("1.3.6.1.4.1.3375.2.1.3.3.3.0", gosnmp.OctetString, []byte(`123`)), nil) sess.On("GetNext", []string{"1.3.6.1.4.1.3375.2.1.3.3.3.0"}).Return(session.CreateGetNextPacket("1.3.6.1.4.1.3375.2.1.3.3.3.0", gosnmp.OctetString, []byte(`123`)), nil) @@ -549,16 +613,19 @@ profiles: "1.3.6.1.2.1.1.2.0", "1.3.6.1.2.1.1.3.0", "1.3.6.1.2.1.1.5.0", - "1.3.6.1.4.1.3375.2.1.1.2.1.44.0", + "1.3.6.1.4.1.318.1.1.1.11.1.1.0", }).Return(&packets[0], nil) sess.On("Get", []string{ - "1.2.3.4.5.0", + "1.3.6.1.4.1.3375.2.1.1.2.1.44.0", }).Return(&packets[1], nil) sess.On("Get", []string{ - "1.3.6.1.4.1.3375.2.1.1.2.1.44.999", + "1.2.3.4.5.0", }).Return(&packets[2], nil) + sess.On("Get", []string{ + "1.3.6.1.4.1.3375.2.1.1.2.1.44.999", + }).Return(&packets[3], nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.13", "1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.2", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[0], nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", "1.3.6.1.2.1.4.20.1.2", "1.3.6.1.2.1.4.20.1.3"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) savedAutodetectMetricsTime := deviceCk.nextAutodetectMetrics err = deviceCk.Run(time.Now()) @@ -590,6 +657,53 @@ profiles: err = deviceCk.Run(time.Now()) assert.Nil(t, err) + expectedMetrics := []checkconfig.MetricsConfig{ + {Symbol: checkconfig.SymbolConfig{OID: "1.3.6.1.2.1.1.3.0", Name: "sysUpTimeInstance"}}, + {Symbol: checkconfig.SymbolConfig{OID: "1.3.6.1.4.1.318.1.1.1.11.1.1.0", Name: "upsBasicStateOutputState"}, ForcedType: "flag_stream", Options: checkconfig.MetricsConfigOption{Placement: 1, MetricSuffix: "OnLine"}}, + {Symbol: checkconfig.SymbolConfig{OID: "1.3.6.1.4.1.318.1.1.1.11.1.1.0", Name: "upsBasicStateOutputState"}, ForcedType: "flag_stream", Options: checkconfig.MetricsConfigOption{Placement: 2, MetricSuffix: "ReplaceBattery"}}, + { + ForcedType: "monotonic_count", + Symbols: []checkconfig.SymbolConfig{ + {OID: "1.3.6.1.2.1.2.2.1.14", Name: "ifInErrors", ScaleFactor: 0.5}, + {OID: "1.3.6.1.2.1.2.2.1.13", Name: "ifInDiscards"}, + }, + MetricTags: []checkconfig.MetricTagConfig{ + {Tag: "interface", Column: checkconfig.SymbolConfig{OID: "1.3.6.1.2.1.31.1.1.1.1", Name: "ifName"}}, + {Tag: "interface_alias", Column: checkconfig.SymbolConfig{OID: "1.3.6.1.2.1.31.1.1.1.18", Name: "ifAlias"}}, + {Tag: "mac_address", Column: checkconfig.SymbolConfig{OID: "1.3.6.1.2.1.2.2.1.6", Name: "ifPhysAddress", Format: "mac_address"}}, + }, + StaticTags: []string{"table_static_tag:val"}, + }, + {Symbol: checkconfig.SymbolConfig{OID: "1.3.6.1.4.1.3375.2.1.1.2.1.44.0", Name: "sysStatMemoryTotal", ScaleFactor: 2}, ForcedType: "gauge"}, + } + + expectedMetricTags := []checkconfig.MetricTagConfig{ + {Tag: "snmp_host2", Column: checkconfig.SymbolConfig{OID: "1.3.6.1.2.1.1.5.0", Name: "sysName"}}, + { + OID: "1.3.6.1.2.1.1.5.0", + Name: "sysName", + Match: "(\\w)(\\w+)", + Tags: map[string]string{ + "prefix": "\\1", + "suffix": "\\2", + "some_tag": "some_tag_value", + }, + }, + {Tag: "snmp_host", OID: "1.3.6.1.2.1.1.5.0", Name: "sysName"}, + } + checkconfig.ValidateEnrichMetrics(expectedMetrics) + checkconfig.ValidateEnrichMetricTags(expectedMetricTags) + + fmt.Printf("Actual Metrics : %+v\n", deviceCk.config.Metrics) + fmt.Printf("Expected Metrics : %+v\n", expectedMetrics) + assert.ElementsMatch(t, deviceCk.config.Metrics, expectedMetrics) + + fmt.Printf("Actual MetricTags : %+v\n", deviceCk.config.MetricTags) + fmt.Printf("Expected MetricTags : %+v\n", expectedMetricTags) + assert.ElementsMatch(t, deviceCk.config.MetricTags, expectedMetricTags) + + assert.Equal(t, 5, len(deviceCk.config.Metrics)) + assert.Equal(t, 3, len(deviceCk.config.MetricTags)) assert.Len(t, deviceCk.config.Metrics, len(firstRunMetrics)) assert.Len(t, deviceCk.config.MetricTags, len(firstRunMetricsTags)) } @@ -934,6 +1048,16 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, { Name: "1.3.6.1.2.1.31.1.1.1.1.2", @@ -945,6 +1069,27 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -982,7 +1127,7 @@ profiles: "1.3.6.1.4.1.3375.2.1.3.3.3.0", }).Return(&packets[2], nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.13", "1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7", "1.3.6.1.2.1.2.2.1.8"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[0], nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", "1.3.6.1.2.1.4.20.1.2", "1.3.6.1.2.1.4.20.1.3"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) err = deviceCk.Run(time.Now()) assert.Nil(t, err) @@ -991,13 +1136,17 @@ profiles: "static_tag:from_profile_root", "some_tag:some_tag_value", "prefix:f", "suffix:oo_sys_name"} sender.AssertServiceCheck(t, "snmp.can_check", metrics.ServiceCheckOK, "", snmpTags, "") + sender.AssertMetric(t, "Gauge", deviceReachableMetric, 1., "", snmpTags) + sender.AssertMetric(t, "Gauge", deviceUnreachableMetric, 0., "", snmpTags) assert.Equal(t, false, deviceCk.config.AutodetectProfile) - + sender.ResetCalls() sess.ConnectErr = fmt.Errorf("some error") err = deviceCk.Run(time.Now()) assert.Error(t, err, "some error") sender.Mock.AssertCalled(t, "ServiceCheck", "snmp.can_check", metrics.ServiceCheckCritical, "", mocksender.MatchTagsContains(snmpTags), "snmp connection error: some error") + sender.AssertMetric(t, "Gauge", deviceUnreachableMetric, 1., "", snmpTags) + sender.AssertMetric(t, "Gauge", deviceReachableMetric, 0., "", snmpTags) } func TestRun_sessionCloseError(t *testing.T) { @@ -1105,7 +1254,7 @@ community_string: public StaticTags: []string{"table_static_tag:val"}, }, } - assert.Equal(t, expectedMetricsConfigs, metricsConfigs) + assert.ElementsMatch(t, expectedMetricsConfigs, metricsConfigs) expectedMetricsTagConfigs := []checkconfig.MetricTagConfig{ { diff --git a/pkg/collector/corechecks/snmp/internal/metadata/payload.go b/pkg/collector/corechecks/snmp/internal/metadata/payload.go index 6fb590c075acd..aee664517dc09 100644 --- a/pkg/collector/corechecks/snmp/internal/metadata/payload.go +++ b/pkg/collector/corechecks/snmp/internal/metadata/payload.go @@ -5,6 +5,8 @@ package metadata +import "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/common" + // PayloadMetadataBatchSize is the number of resources per event payload // Resources are devices, interfaces, etc const PayloadMetadataBatchSize = 100 @@ -37,6 +39,7 @@ type NetworkDevicesMetadata struct { Namespace string `json:"namespace"` Devices []DeviceMetadata `json:"devices,omitempty"` Interfaces []InterfaceMetadata `json:"interfaces,omitempty"` + IPAddresses []IPAddressMetadata `json:"ip_addresses,omitempty"` Links []TopologyLinkMetadata `json:"links,omitempty"` CollectTimestamp int64 `json:"collect_timestamp"` } @@ -66,15 +69,22 @@ type DeviceMetadata struct { // InterfaceMetadata contains interface metadata type InterfaceMetadata struct { - DeviceID string `json:"device_id"` - IDTags []string `json:"id_tags"` // used to correlate with interface metrics - Index int32 `json:"index"` // IF-MIB ifIndex type is InterfaceIndex (Integer32 (1..2147483647)) - Name string `json:"name,omitempty"` - Alias string `json:"alias,omitempty"` - Description string `json:"description,omitempty"` - MacAddress string `json:"mac_address,omitempty"` - AdminStatus int32 `json:"admin_status,omitempty"` // IF-MIB ifAdminStatus type is INTEGER - OperStatus int32 `json:"oper_status,omitempty"` // IF-MIB ifOperStatus type is INTEGER + DeviceID string `json:"device_id"` + IDTags []string `json:"id_tags"` // used to correlate with interface metrics + Index int32 `json:"index"` // IF-MIB ifIndex type is InterfaceIndex (Integer32 (1..2147483647)) + Name string `json:"name,omitempty"` + Alias string `json:"alias,omitempty"` + Description string `json:"description,omitempty"` + MacAddress string `json:"mac_address,omitempty"` + AdminStatus common.IfAdminStatus `json:"admin_status,omitempty"` // IF-MIB ifAdminStatus type is INTEGER + OperStatus common.IfOperStatus `json:"oper_status,omitempty"` // IF-MIB ifOperStatus type is INTEGER +} + +// IPAddressMetadata contains ip address metadata +type IPAddressMetadata struct { + InterfaceID string `json:"interface_id"` + IPAddress string `json:"ip_address"` + Prefixlen int32 `json:"prefixlen,omitempty"` } // TopologyLinkDevice contain device link data diff --git a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go index 84f2ebc8b9e26..fd27ceb9414a8 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go @@ -7,12 +7,13 @@ package report import ( json "encoding/json" - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/lldp" "sort" "strconv" "strings" "time" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/lldp" + "github.com/DataDog/datadog-agent/pkg/epforwarder" "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -23,6 +24,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/valuestore" ) +const interfaceStatusMetric = "snmp.interface.status" + // ReportNetworkDeviceMetadata reports device metadata func (ms *MetricSender) ReportNetworkDeviceMetadata(config *checkconfig.CheckConfig, store *valuestore.ResultValueStore, origTags []string, collectTime time.Time, deviceStatus metadata.DeviceStatus) { tags := common.CopyStrings(origTags) @@ -33,9 +36,10 @@ func (ms *MetricSender) ReportNetworkDeviceMetadata(config *checkconfig.CheckCon device := buildNetworkDeviceMetadata(config.DeviceID, config.DeviceIDTags, config, metadataStore, tags, deviceStatus) interfaces := buildNetworkInterfacesMetadata(config.DeviceID, metadataStore) + ipAddresses := buildNetworkIPAddressesMetadata(config.DeviceID, metadataStore) topologyLinks := buildNetworkTopologyMetadata(config.DeviceID, metadataStore) - metadataPayloads := batchPayloads(config.Namespace, config.ResolvedSubnetName, collectTime, metadata.PayloadMetadataBatchSize, device, interfaces, topologyLinks) + metadataPayloads := batchPayloads(config.Namespace, config.ResolvedSubnetName, collectTime, metadata.PayloadMetadataBatchSize, device, interfaces, ipAddresses, topologyLinks) for _, payload := range metadataPayloads { payloadBytes, err := json.Marshal(payload) @@ -45,6 +49,42 @@ func (ms *MetricSender) ReportNetworkDeviceMetadata(config *checkconfig.CheckCon } ms.sender.EventPlatformEvent(string(payloadBytes), epforwarder.EventTypeNetworkDevicesMetadata) } + + // Telemetry + for _, interfaceStatus := range interfaces { + status := string(computeInterfaceStatus(interfaceStatus.AdminStatus, interfaceStatus.OperStatus)) + interfaceTags := []string{"status:" + status, "interface:" + interfaceStatus.Name, "interface_alias:" + interfaceStatus.Alias, "interface_index:" + strconv.Itoa(int(interfaceStatus.Index))} + interfaceTags = append(interfaceTags, tags...) + ms.sender.Gauge(interfaceStatusMetric, 1, "", interfaceTags) + } +} + +func computeInterfaceStatus(adminStatus common.IfAdminStatus, operStatus common.IfOperStatus) common.InterfaceStatus { + if adminStatus == common.AdminStatus_Up { + switch { + case operStatus == common.OperStatus_Up: + return common.InterfaceStatus_Up + case operStatus == common.OperStatus_Down: + return common.InterfaceStatus_Down + } + return common.InterfaceStatus_Warning + } + if adminStatus == common.AdminStatus_Down { + switch { + case operStatus == common.OperStatus_Up: + return common.InterfaceStatus_Down + case operStatus == common.OperStatus_Down: + return common.InterfaceStatus_Off + } + return common.InterfaceStatus_Warning + } + if adminStatus == common.AdminStatus_Testing { + switch { + case operStatus != common.OperStatus_Down: + return common.InterfaceStatus_Warning + } + } + return common.InterfaceStatus_Down } func buildMetadataStore(metadataConfigs checkconfig.MetadataConfig, values *valuestore.ResultValueStore) *metadata.Store { @@ -182,8 +222,8 @@ func buildNetworkInterfacesMetadata(deviceID string, store *metadata.Store) []me Alias: store.GetColumnAsString("interface.alias", strIndex), Description: store.GetColumnAsString("interface.description", strIndex), MacAddress: store.GetColumnAsString("interface.mac_address", strIndex), - AdminStatus: int32(store.GetColumnAsFloat("interface.admin_status", strIndex)), - OperStatus: int32(store.GetColumnAsFloat("interface.oper_status", strIndex)), + AdminStatus: common.IfAdminStatus((store.GetColumnAsFloat("interface.admin_status", strIndex))), + OperStatus: common.IfOperStatus((store.GetColumnAsFloat("interface.oper_status", strIndex))), IDTags: ifIDTags, } interfaces = append(interfaces, networkInterface) @@ -191,6 +231,32 @@ func buildNetworkInterfacesMetadata(deviceID string, store *metadata.Store) []me return interfaces } +func buildNetworkIPAddressesMetadata(deviceID string, store *metadata.Store) []metadata.IPAddressMetadata { + if store == nil { + // it's expected that the value store is nil if we can't reach the device + // in that case, we just return a nil slice. + return nil + } + indexes := store.GetColumnIndexes("ip_addresses.if_index") + if len(indexes) == 0 { + log.Debugf("Unable to build ip addresses metadata: no ip_addresses.if_index found") + return nil + } + sort.Strings(indexes) + var ipAddresses []metadata.IPAddressMetadata + for _, strIndex := range indexes { + index := store.GetColumnAsString("ip_addresses.if_index", strIndex) + Netmask := store.GetColumnAsString("ip_addresses.netmask", strIndex) + ipAddress := metadata.IPAddressMetadata{ + InterfaceID: deviceID + ":" + index, + IPAddress: strIndex, + Prefixlen: int32(netmaskToPrefixlen(Netmask)), + } + ipAddresses = append(ipAddresses, ipAddress) + } + return ipAddresses +} + func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store) []metadata.TopologyLinkMetadata { if store == nil { // it's expected that the value store is nil if we can't reach the device @@ -267,7 +333,7 @@ func formatID(idType string, store *metadata.Store, field string, strIndex strin return remoteDeviceID } -func batchPayloads(namespace string, subnet string, collectTime time.Time, batchSize int, device metadata.DeviceMetadata, interfaces []metadata.InterfaceMetadata, topologyLinks []metadata.TopologyLinkMetadata) []metadata.NetworkDevicesMetadata { +func batchPayloads(namespace string, subnet string, collectTime time.Time, batchSize int, device metadata.DeviceMetadata, interfaces []metadata.InterfaceMetadata, ipAddresses []metadata.IPAddressMetadata, topologyLinks []metadata.TopologyLinkMetadata) []metadata.NetworkDevicesMetadata { var payloads []metadata.NetworkDevicesMetadata var resourceCount int payload := metadata.NetworkDevicesMetadata{ @@ -294,6 +360,20 @@ func batchPayloads(namespace string, subnet string, collectTime time.Time, batch payload.Interfaces = append(payload.Interfaces, interfaceMetadata) } + for _, ipAddress := range ipAddresses { + if resourceCount == batchSize { + payloads = append(payloads, payload) + payload = metadata.NetworkDevicesMetadata{ + Subnet: subnet, + Namespace: namespace, + CollectTimestamp: collectTime.Unix(), + } + resourceCount = 0 + } + resourceCount++ + payload.IPAddresses = append(payload.IPAddresses, ipAddress) + } + for _, linkMetadata := range topologyLinks { if resourceCount == batchSize { payloads = append(payloads, payload) diff --git a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go index fa52141ee4978..5c63918341d53 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go @@ -237,10 +237,15 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) "1": valuestore.ResultValue{Value: float64(21)}, "2": valuestore.ResultValue{Value: float64(22)}, }, + "1.3.6.1.2.1.31.1.1.1.18": { + "1": valuestore.ResultValue{Value: "ifAlias1"}, + "2": valuestore.ResultValue{Value: "ifAlias2"}, + }, }, } sender := mocksender.NewMockSender("testID") // required to initiate aggregator sender.On("EventPlatformEvent", mock.Anything, mock.Anything).Return() + sender.On("Gauge", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return() ms := &MetricSender{ sender: sender, } @@ -260,6 +265,12 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) Name: "ifName", }, }, + "alias": { + Symbol: checkconfig.SymbolConfig{ + OID: "1.3.6.1.2.1.31.1.1.1.18", + Name: "ifAlias", + }, + }, }, IDTags: checkconfig.MetricTagConfigList{ checkconfig.MetricTagConfig{ @@ -280,6 +291,11 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) assert.NoError(t, err) ms.ReportNetworkDeviceMetadata(config, storeWithIfName, []string{"tag1", "tag2"}, collectTime, metadata.DeviceStatusReachable) + ifTags1 := []string{"tag1", "tag2", "status:down", "interface:21", "interface_alias:ifAlias1", "interface_index:1"} + ifTags2 := []string{"tag1", "tag2", "status:down", "interface:22", "interface_alias:ifAlias2", "interface_index:2"} + + sender.AssertMetric(t, "Gauge", interfaceStatusMetric, 1., "", ifTags1) + sender.AssertMetric(t, "Gauge", interfaceStatusMetric, 1., "", ifTags2) // language=json event := []byte(` { @@ -307,7 +323,8 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) "interface:21" ], "index": 1, - "name": "21" + "name": "21", + "alias": "ifAlias1" }, { "device_id": "1234", @@ -315,7 +332,8 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) "interface:22" ], "index": 2, - "name": "22" + "name": "22", + "alias": "ifAlias2" } ], "collect_timestamp":1415792726 @@ -406,6 +424,10 @@ func Test_batchPayloads(t *testing.T) { for i := 0; i < 350; i++ { interfaces = append(interfaces, metadata.InterfaceMetadata{DeviceID: deviceID, Index: int32(i)}) } + var ipAddresses []metadata.IPAddressMetadata + for i := 0; i < 100; i++ { + ipAddresses = append(ipAddresses, metadata.IPAddressMetadata{InterfaceID: deviceID + ":1", IPAddress: "1.2.3.4", Prefixlen: 24}) + } var topologyLinks []metadata.TopologyLinkMetadata for i := 0; i < 100; i++ { topologyLinks = append(topologyLinks, metadata.TopologyLinkMetadata{ @@ -413,9 +435,9 @@ func Test_batchPayloads(t *testing.T) { Remote: &metadata.TopologyLinkSide{Interface: &metadata.TopologyLinkInterface{ID: "b"}}, }) } - payloads := batchPayloads("my-ns", "127.0.0.0/30", collectTime, 100, device, interfaces, topologyLinks) + payloads := batchPayloads("my-ns", "127.0.0.0/30", collectTime, 100, device, interfaces, ipAddresses, topologyLinks) - assert.Equal(t, 5, len(payloads)) + assert.Equal(t, 6, len(payloads)) assert.Equal(t, "my-ns", payloads[0].Namespace) assert.Equal(t, "127.0.0.0/30", payloads[0].Subnet) @@ -436,12 +458,77 @@ func Test_batchPayloads(t *testing.T) { assert.Equal(t, 0, len(payloads[3].Devices)) assert.Equal(t, 51, len(payloads[3].Interfaces)) - assert.Equal(t, 49, len(payloads[3].Links)) + assert.Equal(t, 49, len(payloads[3].IPAddresses)) assert.Equal(t, interfaces[299:350], payloads[3].Interfaces) - assert.Equal(t, topologyLinks[:49], payloads[3].Links) + assert.Equal(t, ipAddresses[:49], payloads[3].IPAddresses) assert.Equal(t, 0, len(payloads[4].Devices)) - assert.Equal(t, 0, len(payloads[4].Interfaces)) - assert.Equal(t, 51, len(payloads[4].Links)) - assert.Equal(t, topologyLinks[49:100], payloads[4].Links) + assert.Equal(t, 51, len(payloads[4].IPAddresses)) + assert.Equal(t, 49, len(payloads[4].Links)) + assert.Equal(t, ipAddresses[49:], payloads[4].IPAddresses) + assert.Equal(t, topologyLinks[:49], payloads[4].Links) + + assert.Equal(t, 0, len(payloads[5].Devices)) + assert.Equal(t, 0, len(payloads[5].Interfaces)) + assert.Equal(t, 51, len(payloads[5].Links)) + assert.Equal(t, topologyLinks[49:100], payloads[5].Links) +} + +func TestComputeInterfaceStatus(t *testing.T) { + type testCase struct { + ifAdminStatus common.IfAdminStatus + ifOperStatus common.IfOperStatus + status common.InterfaceStatus + } + + // Test the method with only valid input for ifAdminStatus and ifOperStatus + allTests := []testCase{ + // Valid test cases + {common.AdminStatus_Up, common.OperStatus_Up, common.InterfaceStatus_Up}, + {common.AdminStatus_Up, common.OperStatus_Down, common.InterfaceStatus_Down}, + {common.AdminStatus_Up, common.OperStatus_Testing, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, common.OperStatus_Unknown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, common.OperStatus_Dormant, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, common.OperStatus_NotPresent, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, common.OperStatus_LowerLayerDown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_Up, common.InterfaceStatus_Down}, + {common.AdminStatus_Down, common.OperStatus_Down, common.InterfaceStatus_Off}, + {common.AdminStatus_Down, common.OperStatus_Testing, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_Unknown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_Dormant, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_NotPresent, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_LowerLayerDown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_Up, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_Down, common.InterfaceStatus_Down}, + {common.AdminStatus_Testing, common.OperStatus_Testing, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_Unknown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_Dormant, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_NotPresent, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_LowerLayerDown, common.InterfaceStatus_Warning}, + + // Invalid ifOperStatus + {common.AdminStatus_Up, 0, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, 8, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, 100, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, 0, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, 8, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, 100, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, 0, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, 8, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, 100, common.InterfaceStatus_Warning}, + + // Invalid ifAdminStatus + {0, common.OperStatus_Unknown, common.InterfaceStatus_Down}, + {0, common.OperStatus_Down, common.InterfaceStatus_Down}, + {0, common.OperStatus_Up, common.InterfaceStatus_Down}, + {4, common.OperStatus_Up, common.InterfaceStatus_Down}, + {4, common.OperStatus_Down, common.InterfaceStatus_Down}, + {4, common.OperStatus_Testing, common.InterfaceStatus_Down}, + {100, common.OperStatus_Up, common.InterfaceStatus_Down}, + {100, common.OperStatus_Down, common.InterfaceStatus_Down}, + {100, common.OperStatus_Testing, common.InterfaceStatus_Down}, + } + for _, test := range allTests { + assert.Equal(t, test.status, computeInterfaceStatus(test.ifAdminStatus, test.ifOperStatus)) + } } diff --git a/pkg/collector/corechecks/snmp/internal/report/report_utils.go b/pkg/collector/corechecks/snmp/internal/report/report_utils.go index e9160d75eb323..c2fba033d2797 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_utils.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_utils.go @@ -7,6 +7,7 @@ package report import ( "fmt" + "net" "strings" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/checkconfig" @@ -147,3 +148,9 @@ func transformIndex(indexes []string, transformRules []checkconfig.MetricIndexTr } return newIndex } + +func netmaskToPrefixlen(netmask string) int { + stringMask := net.IPMask(net.ParseIP(netmask).To4()) + length, _ := stringMask.Size() + return length +} diff --git a/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go b/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go index 0072dab3f7cd0..2af2bd865639f 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go @@ -689,3 +689,41 @@ metric_tags: }) } } + +func Test_netmaskToPrefixlen(t *testing.T) { + assert.Equal(t, 0, netmaskToPrefixlen("")) + assert.Equal(t, 0, netmaskToPrefixlen("invalid")) + assert.Equal(t, 32, netmaskToPrefixlen("255.255.255.255")) + assert.Equal(t, 31, netmaskToPrefixlen("255.255.255.254")) + assert.Equal(t, 30, netmaskToPrefixlen("255.255.255.252")) + assert.Equal(t, 29, netmaskToPrefixlen("255.255.255.248")) + assert.Equal(t, 28, netmaskToPrefixlen("255.255.255.240")) + assert.Equal(t, 27, netmaskToPrefixlen("255.255.255.224")) + assert.Equal(t, 26, netmaskToPrefixlen("255.255.255.192")) + assert.Equal(t, 25, netmaskToPrefixlen("255.255.255.128")) + assert.Equal(t, 24, netmaskToPrefixlen("255.255.255.0")) + assert.Equal(t, 23, netmaskToPrefixlen("255.255.254.0")) + assert.Equal(t, 22, netmaskToPrefixlen("255.255.252.0")) + assert.Equal(t, 21, netmaskToPrefixlen("255.255.248.0")) + assert.Equal(t, 20, netmaskToPrefixlen("255.255.240.0")) + assert.Equal(t, 19, netmaskToPrefixlen("255.255.224.0")) + assert.Equal(t, 18, netmaskToPrefixlen("255.255.192.0")) + assert.Equal(t, 17, netmaskToPrefixlen("255.255.128.0")) + assert.Equal(t, 16, netmaskToPrefixlen("255.255.0.0")) + assert.Equal(t, 15, netmaskToPrefixlen("255.254.0.0")) + assert.Equal(t, 14, netmaskToPrefixlen("255.252.0.0")) + assert.Equal(t, 13, netmaskToPrefixlen("255.248.0.0")) + assert.Equal(t, 12, netmaskToPrefixlen("255.240.0.0")) + assert.Equal(t, 11, netmaskToPrefixlen("255.224.0.0")) + assert.Equal(t, 10, netmaskToPrefixlen("255.192.0.0")) + assert.Equal(t, 9, netmaskToPrefixlen("255.128.0.0")) + assert.Equal(t, 8, netmaskToPrefixlen("255.0.0.0")) + assert.Equal(t, 7, netmaskToPrefixlen("254.0.0.0")) + assert.Equal(t, 6, netmaskToPrefixlen("252.0.0.0")) + assert.Equal(t, 5, netmaskToPrefixlen("248.0.0.0")) + assert.Equal(t, 4, netmaskToPrefixlen("240.0.0.0")) + assert.Equal(t, 3, netmaskToPrefixlen("224.0.0.0")) + assert.Equal(t, 2, netmaskToPrefixlen("192.0.0.0")) + assert.Equal(t, 1, netmaskToPrefixlen("128.0.0.0")) + assert.Equal(t, 0, netmaskToPrefixlen("0.0.0.0")) +} diff --git a/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/_abstract.yaml b/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/_abstract.yaml new file mode 100644 index 0000000000000..26bc0c9269b88 --- /dev/null +++ b/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/_abstract.yaml @@ -0,0 +1,8 @@ +# Generic network interfaces metrics. +# + +metrics: +- MIB: SOME-MIB + symbol: + OID: 1.2.3.4.5 + name: someMetric diff --git a/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/_base.yaml b/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/_base.yaml new file mode 100644 index 0000000000000..9d1dfc65fab64 --- /dev/null +++ b/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/_base.yaml @@ -0,0 +1,25 @@ +# Base profile that should only contain any items we want to provide for all profiles. + +metric_tags: + - OID: 1.3.6.1.2.1.1.5.0 + symbol: sysName + tag: snmp_host + +static_tags: + - 'static_tag:from_base_profile' + +metadata: + device: + fields: + name: + symbol: + OID: 1.3.6.1.2.1.1.5.0 + name: sysName + description: + symbol: + OID: 1.3.6.1.2.1.1.1.0 + name: sysDescr + sys_object_id: + symbol: + OID: 1.3.6.1.2.1.1.2.0 + name: sysObjectID diff --git a/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/_generic-if.yaml b/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/_generic-if.yaml new file mode 100644 index 0000000000000..02042ed1d1c3d --- /dev/null +++ b/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/_generic-if.yaml @@ -0,0 +1,70 @@ +# Generic network interfaces metrics. +# +extends: + - _abstract.yaml + +metadata: + interface: + fields: + name: + symbol: + OID: 1.3.6.1.2.1.31.1.1.1.1 + name: ifName + description: + symbol: + OID: 1.3.6.1.2.1.2.2.1.2 + name: ifDescr + mac_address: + symbol: + OID: 1.3.6.1.2.1.2.2.1.6 + name: ifPhysAddress + format: "mac_address" + admin_status: + symbol: + OID: 1.3.6.1.2.1.2.2.1.7 + name: ifAdminStatus + oper_status: + symbol: + OID: 1.3.6.1.2.1.2.2.1.8 + name: ifOperStatus + # TODO: Impl ip_address + alias: # from another table + symbol: + OID: 1.3.6.1.2.1.31.1.1.1.18 + name: ifAlias + id_tags: # id_tags/tags are special fields + - column: + OID: 1.3.6.1.2.1.31.1.1.1.1 + name: ifName + tag: interface + +metrics: +- MIB: IF-MIB + table: + OID: 1.3.6.1.2.1.2.2 + name: ifTable + forced_type: monotonic_count + symbols: + - OID: 1.3.6.1.2.1.2.2.1.14 + name: ifInErrors + scale_factor: 0.5 + - OID: 1.3.6.1.2.1.2.2.1.13 + name: ifInDiscards + metric_tags: + - column: + OID: 1.3.6.1.2.1.31.1.1.1.1 + name: ifName + table: ifXTable + tag: interface + - column: + OID: 1.3.6.1.2.1.31.1.1.1.18 + name: ifAlias + table: ifXTable + tag: interface_alias + - column: + OID: 1.3.6.1.2.1.2.2.1.6 + name: ifPhysAddress + format: mac_address + table: ifTable + tag: mac_address + static_tags: ['table_static_tag:val'] diff --git a/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/another_profile.yaml b/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/another_profile.yaml new file mode 100644 index 0000000000000..c416b995de47d --- /dev/null +++ b/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/another_profile.yaml @@ -0,0 +1,39 @@ +# Another profile +# +extends: + - _base.yaml + - _generic-if.yaml + +metrics: + - symbol: + OID: 1.3.6.1.2.1.1.999.0 + name: someMetric + - symbol: + OID: 1.3.6.1.4.1.318.1.1.1.11.1.1.0 + name: upsBasicStateOutputState + forced_type: flag_stream + options: + placement: 1 + metric_suffix: OnLine + - symbol: + OID: 1.3.6.1.4.1.318.1.1.1.11.1.1.0 + name: upsBasicStateOutputState + forced_type: flag_stream + options: + placement: 2 + metric_suffix: ReplaceBattery +metric_tags: + - column: # column syntax + OID: 1.3.6.1.2.1.1.5.0 + name: sysName + tag: snmp_host2 + - OID: 1.3.6.1.2.1.1.999.0 + symbol: unknownSymbol + tag: unknown_symbol + - OID: 1.3.6.1.2.1.1.5.0 + symbol: sysName + match: '(\w)(\w+)' + tags: + some_tag: some_tag_value + prefix: \1 + suffix: \2 diff --git a/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/f5-big-ip.yaml b/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/f5-big-ip.yaml new file mode 100644 index 0000000000000..a8843eaf5d301 --- /dev/null +++ b/pkg/collector/corechecks/snmp/internal/test/detectmetr.d/snmp.d/profiles/f5-big-ip.yaml @@ -0,0 +1,63 @@ +# Profile for F5 BIG-IP devices +# +extends: + - _base.yaml + - _generic-if.yaml + +device: + vendor: "f5" + + +sysobjectid: 1.3.6.1.4.1.3375.2.1.3.4.* + +metric_tags: + - OID: 1.3.6.1.2.1.1.5.0 + symbol: sysName + match: '(\w)(\w+)' + tags: + some_tag: some_tag_value + prefix: \1 + suffix: \2 + +static_tags: + - 'static_tag:from_profile_root' + +metadata: + device: + fields: + vendor: + value: "f5" # static value + serial_number: # value from OID. + symbol: + MIB: F5-BIGIP-SYSTEM-MIB # optional + OID: 1.3.6.1.4.1.3375.2.1.3.3.3.0 + name: sysGeneralChassisSerialNum # The system serial number. 26ff4a4d-190e-12ac-d4257ed36ba6 + + interface: + fields: + # example override to use ifName as description + description: + symbol: + OID: 1.3.6.1.2.1.31.1.1.1.1 + name: ifName + extract_value: '(Row\d)' + id_tags: + # add ifAlias to id_tags + - column: + OID: 1.3.6.1.2.1.31.1.1.1.1 + name: ifAlias + tag: custom-tag + +metrics: + - MIB: F5-BIGIP-SYSTEM-MIB + forced_type: gauge + symbol: + OID: 1.3.6.1.4.1.3375.2.1.1.2.1.44.0 + name: sysStatMemoryTotal + scale_factor: 2 + + # old syntax + - MIB: F5-BIGIP-SYSTEM-MIB + OID: 1.3.6.1.4.1.3375.2.1.1.2.1.44.999 + name: oldSyntax + diff --git a/pkg/collector/corechecks/snmp/profile_test.go b/pkg/collector/corechecks/snmp/profile_test.go index 047f37730366d..cc98e7f574cf0 100644 --- a/pkg/collector/corechecks/snmp/profile_test.go +++ b/pkg/collector/corechecks/snmp/profile_test.go @@ -19,6 +19,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/version" @@ -55,7 +56,7 @@ profiles: definition_file: f5-big-ip.yaml `) - err := chk.Configure(rawInstanceConfig, rawInitConfig, "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, rawInitConfig, "test") assert.NoError(t, err) sender := mocksender.NewMockSender(chk.ID()) // required to initiate aggregator @@ -221,6 +222,17 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.0.8802.1.1.2.1.3.7.1.2.102", Type: gosnmp.Integer, @@ -306,6 +318,27 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -433,6 +466,8 @@ profiles: "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) err = chk.Run() @@ -499,6 +534,18 @@ profiles: "oper_status": 1 } ], + "ip_addresses": [ + { + "interface_id": "profile-metadata:1.2.3.4:1", + "ip_address": "10.0.0.1", + "prefixlen": 24 + }, + { + "interface_id": "profile-metadata:1.2.3.4:1", + "ip_address": "10.0.0.2", + "prefixlen": 24 + } + ], "links": [ { "local": { diff --git a/pkg/collector/corechecks/snmp/snmp.go b/pkg/collector/corechecks/snmp/snmp.go index ae874b06f44fa..ab4efafc17c82 100644 --- a/pkg/collector/corechecks/snmp/snmp.go +++ b/pkg/collector/corechecks/snmp/snmp.go @@ -111,7 +111,7 @@ func (c *Check) runCheckDevice(deviceCk *devicecheck.DeviceCheck) error { } // Configure configures the snmp checks -func (c *Check) Configure(rawInstance integration.Data, rawInitConfig integration.Data, source string) error { +func (c *Check) Configure(integrationConfigDigest uint64, rawInstance integration.Data, rawInitConfig integration.Data, source string) error { var err error c.config, err = checkconfig.NewCheckConfig(rawInstance, rawInitConfig) @@ -137,9 +137,9 @@ func (c *Check) Configure(rawInstance integration.Data, rawInitConfig integratio } // Must be called before c.CommonConfigure - c.BuildID(rawInstance, rawInitConfig) + c.BuildID(integrationConfigDigest, rawInstance, rawInitConfig) - err = c.CommonConfigure(rawInitConfig, rawInstance, source) + err = c.CommonConfigure(integrationConfigDigest, rawInitConfig, rawInstance, source) if err != nil { return fmt.Errorf("common configure failed: %s", err) } diff --git a/pkg/collector/corechecks/snmp/snmp_test.go b/pkg/collector/corechecks/snmp/snmp_test.go index f4af8248e4d02..7da2129093b84 100644 --- a/pkg/collector/corechecks/snmp/snmp_test.go +++ b/pkg/collector/corechecks/snmp/snmp_test.go @@ -19,6 +19,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/collector/check" coreconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/metadata/externalhost" @@ -88,7 +89,7 @@ tags: - "mytag:foo" `) - err := chk.Configure(rawInstanceConfig, []byte(``), "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) sender := mocksender.NewMockSender(chk.ID()) // required to initiate aggregator @@ -144,7 +145,7 @@ tags: { Name: "1.3.6.1.2.1.2.2.1.6.1", Type: gosnmp.OctetString, - Value: []byte{00, 00, 00, 00, 00, 01}, + Value: []byte{0o0, 0o0, 0o0, 0o0, 0o0, 0o1}, }, { Name: "1.3.6.1.2.1.2.2.1.7.1", @@ -169,7 +170,7 @@ tags: { Name: "1.3.6.1.2.1.2.2.1.6.2", Type: gosnmp.OctetString, - Value: []byte{00, 00, 00, 00, 00, 02}, + Value: []byte{0o0, 0o0, 0o0, 0o0, 0o0, 0o2}, }, { Name: "1.3.6.1.2.1.2.2.1.7.2", @@ -217,6 +218,17 @@ tags: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.3.6.1.2.1.2.2.1.8.2", Type: gosnmp.Integer, @@ -232,6 +244,16 @@ tags: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, }, } @@ -250,6 +272,14 @@ tags: Name: "999", Type: gosnmp.NoSuchObject, }, + { + Name: "999", + Type: gosnmp.NoSuchObject, + }, + { + Name: "999", + Type: gosnmp.NoSuchObject, + }, }, } @@ -258,8 +288,8 @@ tags: sess.On("Get", mock.Anything).Return(&packet, nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.2", "1.3.6.1.2.1.2.2.1.20", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch1Packet1, nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.14.2", "1.3.6.1.2.1.2.2.1.2.2", "1.3.6.1.2.1.2.2.1.20.2", "1.3.6.1.2.1.2.2.1.6.2", "1.3.6.1.2.1.2.2.1.7.2"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch1Packet2, nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch2Packet1, nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8.2", "1.3.6.1.2.1.31.1.1.1.1.2", "1.3.6.1.2.1.31.1.1.1.18.2"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch2Packe2, nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", "1.3.6.1.2.1.4.20.1.2", "1.3.6.1.2.1.4.20.1.3"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch2Packet1, nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8.2", "1.3.6.1.2.1.31.1.1.1.1.2", "1.3.6.1.2.1.31.1.1.1.18.2", "1.3.6.1.2.1.4.20.1.2.10.0.0.2", "1.3.6.1.2.1.4.20.1.3.10.0.0.2"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch2Packe2, nil) err = chk.Run() assert.Nil(t, err) @@ -312,7 +342,7 @@ metrics: name: SomeCounter64Metric `) - err := chk.Configure(rawInstanceConfig, []byte(``), "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) sender := mocksender.NewMockSender(chk.ID()) // required to initiate aggregator @@ -392,7 +422,7 @@ profiles: definition_file: f5-big-ip.yaml `) - err := chk.Configure(rawInstanceConfig, rawInitConfig, "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, rawInitConfig, "test") assert.NoError(t, err) sender := mocksender.NewMockSender(chk.ID()) // required to initiate aggregator @@ -474,7 +504,7 @@ profiles: { Name: "1.3.6.1.2.1.2.2.1.6.1", Type: gosnmp.OctetString, - Value: []byte{00, 00, 00, 00, 00, 01}, + Value: []byte{0o0, 0o0, 0o0, 0o0, 0o0, 0o1}, }, { Name: "1.3.6.1.2.1.2.2.1.7.1", @@ -496,6 +526,17 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.3.6.1.2.1.2.2.1.13.2", Type: gosnmp.Integer, @@ -509,7 +550,7 @@ profiles: { Name: "1.3.6.1.2.1.2.2.1.6.2", Type: gosnmp.OctetString, - Value: []byte{00, 00, 00, 00, 00, 02}, + Value: []byte{0o0, 0o0, 0o0, 0o0, 0o0, 0o2}, }, { Name: "1.3.6.1.2.1.2.2.1.7.2", @@ -531,6 +572,27 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -597,6 +659,8 @@ profiles: "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) err = chk.Run() @@ -684,6 +748,18 @@ profiles: "oper_status": 1 } ], + "ip_addresses": [ + { + "interface_id": "default:1.2.3.4:1", + "ip_address": "10.0.0.1", + "prefixlen": 24 + }, + { + "interface_id": "default:1.2.3.4:1", + "ip_address": "10.0.0.2", + "prefixlen": 24 + } + ], "collect_timestamp":946684800 } `, version.AgentVersion)) @@ -712,7 +788,7 @@ ip_address: 1.2.3.4 community_string: public `) - err := chk.Configure(rawInstanceConfig, []byte(``), "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) sender := mocksender.NewMockSender(chk.ID()) // required to initiate aggregator @@ -761,19 +837,19 @@ community_string: abc namespace: nsSubnet `) - err := check1.Configure(rawInstanceConfig1, []byte(``), "test") + err := check1.Configure(integration.FakeConfigHash, rawInstanceConfig1, []byte(``), "test") assert.Nil(t, err) - err = check2.Configure(rawInstanceConfig2, []byte(``), "test") + err = check2.Configure(integration.FakeConfigHash, rawInstanceConfig2, []byte(``), "test") assert.Nil(t, err) - err = check3.Configure(rawInstanceConfig3, []byte(``), "test") + err = check3.Configure(integration.FakeConfigHash, rawInstanceConfig3, []byte(``), "test") assert.Nil(t, err) - err = checkSubnet.Configure(rawInstanceConfigSubnet, []byte(``), "test") + err = checkSubnet.Configure(integration.FakeConfigHash, rawInstanceConfigSubnet, []byte(``), "test") assert.Nil(t, err) - assert.Equal(t, check.ID("snmp:default:1.1.1.1:a3ec59dfb03e4457"), check1.ID()) - assert.Equal(t, check.ID("snmp:default:2.2.2.2:3979cd473e4beb3f"), check2.ID()) - assert.Equal(t, check.ID("snmp:ns3:3.3.3.3:819516f4c3986cc6"), check3.ID()) - assert.Equal(t, check.ID("snmp:nsSubnet:10.10.10.0/24:be3c32b7c5c1c696"), checkSubnet.ID()) + assert.Equal(t, check.ID("snmp:default:1.1.1.1:d03f28dacffc6886"), check1.ID()) + assert.Equal(t, check.ID("snmp:default:2.2.2.2:b757d26210a16a9e"), check2.ID()) + assert.Equal(t, check.ID("snmp:ns3:3.3.3.3:cc7fb36641d79afd"), check3.ID()) + assert.Equal(t, check.ID("snmp:nsSubnet:10.10.10.0/24:6b68b30a87454899"), checkSubnet.ID()) assert.NotEqual(t, check1.ID(), check2.ID()) } @@ -961,14 +1037,13 @@ community_string: public namespace: '%s' `, tt.name)) - err := chk.Configure(rawInstanceConfig, []byte(``), "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) sender := new(mocksender.MockSender) if !tt.disableAggregator { aggregator.InitAndStartAgentDemultiplexer(demuxOpts(), "") - } mocksender.SetSender(sender, chk.ID()) @@ -1019,7 +1094,7 @@ metrics: name: myMetric `) - err := chk.Configure(rawInstanceConfig, []byte(``), "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) sender := mocksender.NewMockSender(chk.ID()) // required to initiate aggregator @@ -1068,7 +1143,7 @@ tags: // language=yaml rawInitConfig := []byte(``) - err := chk.Configure(rawInstanceConfig, rawInitConfig, "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, rawInitConfig, "test") assert.Nil(t, err) sender := mocksender.NewMockSender(chk.ID()) // required to initiate aggregator @@ -1113,7 +1188,7 @@ tags: { Name: "1.3.6.1.2.1.2.2.1.6.1", Type: gosnmp.OctetString, - Value: []byte{00, 00, 00, 00, 00, 01}, + Value: []byte{0o0, 0o0, 0o0, 0o0, 0o0, 0o1}, }, { Name: "1.3.6.1.2.1.2.2.1.7.1", @@ -1135,6 +1210,17 @@ tags: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.3.6.1.2.1.2.2.1.2.2", Type: gosnmp.OctetString, @@ -1143,7 +1229,7 @@ tags: { Name: "1.3.6.1.2.1.2.2.1.6.2", Type: gosnmp.OctetString, - Value: []byte{00, 00, 00, 00, 00, 02}, + Value: []byte{0o0, 0o0, 0o0, 0o0, 0o0, 0o2}, }, { Name: "1.3.6.1.2.1.2.2.1.7.2", @@ -1165,6 +1251,27 @@ tags: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -1216,6 +1323,8 @@ tags: "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) err = chk.Run() @@ -1277,6 +1386,18 @@ tags: "oper_status": 1 } ], + "ip_addresses": [ + { + "interface_id": "default:1.2.3.4:1", + "ip_address": "10.0.0.1", + "prefixlen": 24 + }, + { + "interface_id": "default:1.2.3.4:1", + "ip_address": "10.0.0.2", + "prefixlen": 24 + } + ], "collect_timestamp":946684800 } `, version.AgentVersion)) @@ -1312,7 +1433,7 @@ tags: // language=yaml rawInitConfig := []byte(``) - err := chk.Configure(rawInstanceConfig, rawInitConfig, "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, rawInitConfig, "test") assert.Nil(t, err) sender := mocksender.NewMockSender(chk.ID()) // required to initiate aggregator @@ -1420,7 +1541,7 @@ metric_tags: sess.On("GetNext", []string{"1.0"}).Return(&gosnmplib.MockValidReachableGetNextPacket, nil) sess.On("Get", []string{"1.3.6.1.2.1.1.2.0"}).Return(&discoveryPacket, nil) - err := chk.Configure(rawInstanceConfig, []byte(``), "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) time.Sleep(100 * time.Millisecond) @@ -1466,7 +1587,7 @@ metric_tags: { Name: "1.3.6.1.2.1.2.2.1.6.1", Type: gosnmp.OctetString, - Value: []byte{00, 00, 00, 00, 00, 01}, + Value: []byte{0o0, 0o0, 0o0, 0o0, 0o0, 0o1}, }, { Name: "1.3.6.1.2.1.2.2.1.7.1", @@ -1488,6 +1609,17 @@ metric_tags: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.3.6.1.2.1.2.2.1.2.2", Type: gosnmp.OctetString, @@ -1496,7 +1628,7 @@ metric_tags: { Name: "1.3.6.1.2.1.2.2.1.6.2", Type: gosnmp.OctetString, - Value: []byte{00, 00, 00, 00, 00, 02}, + Value: []byte{0o0, 0o0, 0o0, 0o0, 0o0, 0o2}, }, { Name: "1.3.6.1.2.1.2.2.1.7.2", @@ -1518,6 +1650,27 @@ metric_tags: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -1569,6 +1722,8 @@ metric_tags: "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) deviceMap := []struct { @@ -1647,9 +1802,21 @@ metric_tags: "oper_status": 1 } ], + "ip_addresses": [ + { + "interface_id": "%s:1", + "ip_address": "10.0.0.1", + "prefixlen": 24 + }, + { + "interface_id": "%s:1", + "ip_address": "10.0.0.2", + "prefixlen": 24 + } + ], "collect_timestamp":946684800 } -`, deviceData.deviceID, deviceData.ipAddress, version.AgentVersion, deviceData.ipAddress, deviceData.ipAddress, deviceData.deviceID, deviceData.deviceID)) +`, deviceData.deviceID, deviceData.ipAddress, version.AgentVersion, deviceData.ipAddress, deviceData.ipAddress, deviceData.deviceID, deviceData.deviceID, deviceData.deviceID, deviceData.deviceID)) compactEvent := new(bytes.Buffer) err = json.Compact(compactEvent, event) assert.NoError(t, err) @@ -1704,7 +1871,7 @@ metric_tags: sess.On("GetNext", []string{"1.0"}).Return(&gosnmplib.MockValidReachableGetNextPacket, nil) sess.On("Get", []string{"1.3.6.1.2.1.1.2.0"}).Return(&discoveryPacket, nil) - err := chk.Configure(rawInstanceConfig, []byte(``), "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) time.Sleep(100 * time.Millisecond) @@ -1763,7 +1930,7 @@ metrics: use_device_id_as_hostname: true `) - err := chk.Configure(rawInstanceConfig, []byte(``), "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) sender := mocksender.NewMockSender(chk.ID()) // required to initiate aggregator @@ -1803,7 +1970,7 @@ use_device_id_as_hostname: true { Name: "1.3.6.1.2.1.2.2.1.6.1", Type: gosnmp.OctetString, - Value: []byte{00, 00, 00, 00, 00, 01}, + Value: []byte{0o0, 0o0, 0o0, 0o0, 0o0, 0o1}, }, { Name: "1.3.6.1.2.1.2.2.1.7.1", @@ -1853,6 +2020,27 @@ use_device_id_as_hostname: true Type: gosnmp.OctetString, Value: []byte("ifDescRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -1866,6 +2054,8 @@ use_device_id_as_hostname: true }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[0], nil) sess.On("GetBulk", []string{ "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) err = chk.Run() @@ -1943,7 +2133,7 @@ metrics: } sess.On("Get", []string{"1.3.6.1.2.1.1.2.0"}).Return(&discoveryPacket, nil) - err := chk.Configure(rawInstanceConfig, []byte(``), "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) time.Sleep(100 * time.Millisecond) @@ -1988,7 +2178,7 @@ metrics: { Name: "1.3.6.1.2.1.2.2.1.6.1", Type: gosnmp.OctetString, - Value: []byte{00, 00, 00, 00, 00, 01}, + Value: []byte{0o0, 0o0, 0o0, 0o0, 0o0, 0o1}, }, { Name: "1.3.6.1.2.1.2.2.1.7.1", @@ -2010,6 +2200,27 @@ metrics: Type: gosnmp.OctetString, Value: []byte("ifDescRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -2043,7 +2254,14 @@ metrics: }, } sess.On("GetBulk", []string{ - "1.3.6.1.2.1.2.2.1.2", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7", "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.2.2.1.2", + "1.3.6.1.2.1.2.2.1.6", + "1.3.6.1.2.1.2.2.1.7", + "1.3.6.1.2.1.2.2.1.8", + "1.3.6.1.2.1.31.1.1.1.1", + "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) deviceMap := []struct { @@ -2094,7 +2312,7 @@ ip_address: 1.2.3.4 community_string: public `) - err := chk.Configure(rawInstanceConfig, []byte(``), "test") + err := chk.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) // check Cancel does not panic when called with single check diff --git a/pkg/collector/corechecks/system/cpu/cpu.go b/pkg/collector/corechecks/system/cpu/cpu.go index 0a0d8c280f728..331bdf55351c0 100644 --- a/pkg/collector/corechecks/system/cpu/cpu.go +++ b/pkg/collector/corechecks/system/cpu/cpu.go @@ -89,8 +89,8 @@ func (c *Check) Run() error { } // Configure the CPU check -func (c *Check) Configure(data integration.Data, initConfig integration.Data, source string) error { - err := c.CommonConfigure(initConfig, data, source) +func (c *Check) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { + err := c.CommonConfigure(integrationConfigDigest, initConfig, data, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/system/cpu/cpu_test.go b/pkg/collector/corechecks/system/cpu/cpu_test.go index e57059c409685..fb5d0fc5250a9 100644 --- a/pkg/collector/corechecks/system/cpu/cpu_test.go +++ b/pkg/collector/corechecks/system/cpu/cpu_test.go @@ -11,12 +11,12 @@ import ( "runtime" "testing" + "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/metrics" "github.com/shirou/gopsutil/v3/cpu" "github.com/stretchr/testify/mock" - - "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" ) var ( @@ -81,7 +81,7 @@ func TestCPUCheckLinux(t *testing.T) { times = CPUTimes cpuInfo = CPUInfo cpuCheck := new(Check) - cpuCheck.Configure(nil, nil, "test") + cpuCheck.Configure(integration.FakeConfigHash, nil, nil, "test") m := mocksender.NewMockSender(cpuCheck.ID()) m.On(metrics.GaugeType.String(), "system.cpu.num_cores", 1.0, "", []string(nil)).Return().Times(1) diff --git a/pkg/collector/corechecks/system/cpu/cpu_windows.go b/pkg/collector/corechecks/system/cpu/cpu_windows.go index f41f09406bc9a..3d76a0b8fedbc 100644 --- a/pkg/collector/corechecks/system/cpu/cpu_windows.go +++ b/pkg/collector/corechecks/system/cpu/cpu_windows.go @@ -21,6 +21,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/collector/check" core "github.com/DataDog/datadog-agent/pkg/collector/corechecks" + "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/winutil/pdhutil" ) @@ -32,11 +33,10 @@ var cpuInfo = cpu.GetCpuInfo // Check doesn't need additional fields type Check struct { core.CheckBase - nbCPU float64 - interruptsCounter *pdhutil.PdhSingleInstanceCounterSet - idleCounter *pdhutil.PdhSingleInstanceCounterSet - userCounter *pdhutil.PdhSingleInstanceCounterSet - privilegedCounter *pdhutil.PdhSingleInstanceCounterSet + nbCPU float64 + pdhQuery *pdhutil.PdhQuery + // maps metric to counter object + counters map[string]pdhutil.PdhSingleInstanceCounter } // Run executes the check @@ -48,58 +48,21 @@ func (c *Check) Run() error { sender.Gauge("system.cpu.num_cores", c.nbCPU, "", nil) - var val float64 - - // counter ("Processor Information", "% Interrupt Time") - if c.interruptsCounter == nil { - c.interruptsCounter, err = getProcessorPDHCounter("% Interrupt Time", "_Total") - } - if c.interruptsCounter != nil { - val, err = c.interruptsCounter.GetValue() - } - if err != nil { - c.Warnf("cpu.Check: could not establish interrupt time counter: %v", err) - } else { - sender.Gauge("system.cpu.interrupt", float64(val), "", nil) - } - - // counter ("Processor Information", "% Idle Time") - if c.idleCounter == nil { - c.idleCounter, err = getProcessorPDHCounter("% Idle Time", "_Total") - } - if c.idleCounter != nil { - val, err = c.idleCounter.GetValue() - } - if err != nil { - c.Warnf("cpu.Check: could not establish idle time counter: %v", err) - } else { - sender.Gauge("system.cpu.idle", float64(val), "", nil) - } - - // counter ("Processor Information", "% User Time") - if c.userCounter == nil { - c.userCounter, err = getProcessorPDHCounter("% User Time", "_Total") - } - if c.userCounter != nil { - val, err = c.userCounter.GetValue() - } - if err != nil { - c.Warnf("cpu.Check: could not establish user time counter: %v", err) - } else { - sender.Gauge("system.cpu.user", float64(val), "", nil) - } - - // counter ("Processor Information", "% Privileged Time") - if c.privilegedCounter == nil { - c.privilegedCounter, err = getProcessorPDHCounter("% Privileged Time", "_Total") - } - if c.privilegedCounter != nil { - val, err = c.privilegedCounter.GetValue() - } - if err != nil { - c.Warnf("cpu.Check: could not establish system time counter: %v", err) + // Fetch PDH query values + err = c.pdhQuery.CollectQueryData() + if err == nil { + // Get values for PDH counters + for metricname, counter := range c.counters { + var val float64 + val, err = counter.GetValue() + if err == nil { + sender.Gauge(metricname, val, "", nil) + } else { + c.Warnf("cpu.Check: Could not retrieve value for %v: %v", metricname, err) + } + } } else { - sender.Gauge("system.cpu.system", float64(val), "", nil) + c.Warnf("cpu.Check: Could not collect performance counter data: %v", err) } sender.Gauge("system.cpu.iowait", 0.0, "", nil) @@ -110,22 +73,79 @@ func (c *Check) Run() error { return nil } -// Configure the PDH counter according to the running environment. -// On machines with more than 1 NUMA node, it uses "Processor Information", -// otherwise it uses "Processor" (e.g. in containers). -// Note we use "processor information" instead of "processor" because on multi-processor machines the later only gives -// you visibility about other applications running on the same processor as you -func getProcessorPDHCounter(counterName, instance string) (*pdhutil.PdhSingleInstanceCounterSet, error) { - counter, err := pdhutil.GetEnglishCounterInstance("Processor Information", counterName, instance) +// Overriding AddToQuery, see that function for details +type processorPDHCounter struct { + pdhutil.PdhEnglishSingleInstanceCounter +} + +func (counter *processorPDHCounter) addToQueryWithExtraChecks(query *pdhutil.PdhQuery, objectName string) (err error) { + // addToQueryWithExtraChecks wraps the base counter's AddToQuery to add additional error checks + // to work around a possible Microsoft PDH issue. + // + // The "Processor Information" counterset does not work in Windows containers. + // The counterset exists but has no instances and always returns "PDH_NO_DATA" error. + // So we have to fallback to the old "Processor" counterset. + // see https://github.com/DataDog/datadog-agent/pull/8881 + // Unfortunately, since the counterset exists checking the PdhAddEnglishCounter result + // alone is insufficient. We must perform additional checks to ensure the counterset + // is functioning properly. + + // Add counter to the Query + var origObjectName = counter.ObjectName + counter.ObjectName = objectName + err = counter.PdhEnglishSingleInstanceCounter.AddToQuery(query) if err != nil { - counter, err = pdhutil.GetEnglishCounterInstance("Processor", counterName, instance) + // PdhAddEnglishCounter failed, restore original object name and return + counter.ObjectName = origObjectName + return err } - return counter, err + defer func() { + if err != nil { + // failed, restore original object name + counter.ObjectName = origObjectName + // Remove the counter from the query + tmpErr := counter.Remove() + if tmpErr != nil { + log.Warnf("cpu.Check: Failed to remove counter \\%s(%s)\\%s from query. %v", objectName, counter.InstanceName, counter.CounterName, tmpErr) + } + } + }() + + // Add succeeded, check if the counter is working (see above comment) + // Must call PdhCollectQueryData() twice before GetValue() will succeed. + // Ignoring PdhCollectQueryData() return value because its success is determined by the query + // and not specifically this counter, additionally if either call fails then GetValue() will too. + _ = pdhutil.PdhCollectQueryData(query.Handle) + _ = pdhutil.PdhCollectQueryData(query.Handle) + _, err = counter.GetValue() + return err +} + +func (counter *processorPDHCounter) AddToQuery(query *pdhutil.PdhQuery) error { + // Configure the PDH counter according to the running environment. + // This check defaults to using the "Processor Information" counterset when it is available, + // as it is the newer version of the "Processor" counterset and has support for more features. + // https://techcommunity.microsoft.com/t5/running-sap-applications-on-the/windows-2008-r2-performance-monitor-8211-processor-information/ba-p/367007 + // See addToQueryWithExtraChecks for more details. + err := counter.addToQueryWithExtraChecks(query, "Processor Information") + if err != nil { + log.Warnf("cpu.Check: Error initializing counter \\%s(%s)\\%s: %v. This error is expected in Windows containers. Trying Processor counterset as a fallback.", counter.ObjectName, counter.InstanceName, counter.CounterName, err) + err = counter.addToQueryWithExtraChecks(query, "Processor") + } + + return err +} + +func addProcessorPdhCounter(query *pdhutil.PdhQuery, counterName string) pdhutil.PdhSingleInstanceCounter { + var counter processorPDHCounter + counter.Initialize("Processor Information", counterName, "_Total") + query.AddCounter(&counter) + return &counter } // Configure the CPU check doesn't need configuration -func (c *Check) Configure(data integration.Data, initConfig integration.Data, source string) error { - if err := c.CommonConfigure(initConfig, data, source); err != nil { +func (c *Check) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { + if err := c.CommonConfigure(integrationConfigDigest, initConfig, data, source); err != nil { return err } @@ -137,6 +157,19 @@ func (c *Check) Configure(data integration.Data, initConfig integration.Data, so cpucount, _ := strconv.ParseFloat(info["cpu_logical_processors"], 64) c.nbCPU = cpucount + // Create PDH query + c.pdhQuery, err = pdhutil.CreatePdhQuery() + if err != nil { + return err + } + + c.counters = map[string]pdhutil.PdhSingleInstanceCounter{ + "system.cpu.interrupt": addProcessorPdhCounter(c.pdhQuery, "% Interrupt Time"), + "system.cpu.idle": addProcessorPdhCounter(c.pdhQuery, "% Idle Time"), + "system.cpu.user": addProcessorPdhCounter(c.pdhQuery, "% User Time"), + "system.cpu.system": addProcessorPdhCounter(c.pdhQuery, "% Privileged Time"), + } + return nil } diff --git a/pkg/collector/corechecks/system/cpu/cpu_windows_test.go b/pkg/collector/corechecks/system/cpu/cpu_windows_test.go index 08a39dadede3e..cae11db2914d3 100644 --- a/pkg/collector/corechecks/system/cpu/cpu_windows_test.go +++ b/pkg/collector/corechecks/system/cpu/cpu_windows_test.go @@ -14,6 +14,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/metrics" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" pdhtest "github.com/DataDog/datadog-agent/pkg/util/winutil/pdhutil" ) @@ -26,13 +27,17 @@ func CPUInfo() (map[string]string, error) { func TestCPUCheckWindows(t *testing.T) { cpuInfo = CPUInfo pdhtest.SetupTesting("..\\testfiles\\counter_indexes_en-us.txt", "..\\testfiles\\allcounters_en-us.txt") - pdhtest.SetQueryReturnValue("\\\\.\\Processor Information(_Total)\\% Interrupt Time", 0.1) - pdhtest.SetQueryReturnValue("\\\\.\\Processor Information(_Total)\\% Idle Time", 80.1) - pdhtest.SetQueryReturnValue("\\\\.\\Processor Information(_Total)\\% User Time", 11.3) - pdhtest.SetQueryReturnValue("\\\\.\\Processor Information(_Total)\\% Privileged Time", 8.5) + // The counters will have GetValue called twice because of the "Processor Information" issue workaround + // see AddToQuery() in cpu_windows.go + for i := 0; i < 2; i++ { + pdhtest.SetQueryReturnValue("\\\\.\\Processor Information(_Total)\\% Interrupt Time", 0.1) + pdhtest.SetQueryReturnValue("\\\\.\\Processor Information(_Total)\\% Idle Time", 80.1) + pdhtest.SetQueryReturnValue("\\\\.\\Processor Information(_Total)\\% User Time", 11.3) + pdhtest.SetQueryReturnValue("\\\\.\\Processor Information(_Total)\\% Privileged Time", 8.5) + } cpuCheck := new(Check) - cpuCheck.Configure(nil, nil, "test") + cpuCheck.Configure(integration.FakeConfigHash, nil, nil, "test") m := mocksender.NewMockSender(cpuCheck.ID()) m.On(metrics.GaugeType.String(), "system.cpu.num_cores", 1.0, "", []string(nil)).Return().Times(1) diff --git a/pkg/collector/corechecks/system/cpu/load.go b/pkg/collector/corechecks/system/cpu/load.go index 95b4484691a09..32178f05a76d5 100644 --- a/pkg/collector/corechecks/system/cpu/load.go +++ b/pkg/collector/corechecks/system/cpu/load.go @@ -55,8 +55,8 @@ func (c *LoadCheck) Run() error { } // Configure the CPU check -func (c *LoadCheck) Configure(data integration.Data, initConfig integration.Data, source string) error { - err := c.CommonConfigure(initConfig, data, source) +func (c *LoadCheck) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { + err := c.CommonConfigure(integrationConfigDigest, initConfig, data, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/system/cpu/load_test.go b/pkg/collector/corechecks/system/cpu/load_test.go index e69f7940f0fbb..3f792a220d14d 100644 --- a/pkg/collector/corechecks/system/cpu/load_test.go +++ b/pkg/collector/corechecks/system/cpu/load_test.go @@ -13,15 +13,14 @@ import ( "github.com/shirou/gopsutil/v3/load" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" ) -var ( - avgSample = load.AvgStat{ - Load1: 0.83, - Load5: 0.96, - Load15: 1.15, - } -) +var avgSample = load.AvgStat{ + Load1: 0.83, + Load5: 0.96, + Load15: 1.15, +} func Avg() (*load.AvgStat, error) { return &avgSample, nil @@ -31,7 +30,7 @@ func TestLoadCheckLinux(t *testing.T) { loadAvg = Avg cpuInfo = CPUInfo loadCheck := new(LoadCheck) - loadCheck.Configure(nil, nil, "test") + loadCheck.Configure(integration.FakeConfigHash, nil, nil, "test") mock := mocksender.NewMockSender(loadCheck.ID()) diff --git a/pkg/collector/corechecks/system/disk/disk_nix.go b/pkg/collector/corechecks/system/disk/disk_nix.go index 99664a1f27f1e..ecb464793316f 100644 --- a/pkg/collector/corechecks/system/disk/disk_nix.go +++ b/pkg/collector/corechecks/system/disk/disk_nix.go @@ -131,7 +131,6 @@ func (c *Check) sendPartitionMetrics(sender aggregator.Sender, usage *disk.Usage sender.Gauge(fmt.Sprintf(inodeMetric, "free"), float64(usage.InodesFree), "", tags) // FIXME(8.x): use percent, a lot more logical than in_use sender.Gauge(fmt.Sprintf(inodeMetric, "in_use"), usage.InodesUsedPercent/100, "", tags) - } func (c *Check) sendDiskMetrics(sender aggregator.Sender, ioCounter disk.IOCountersStat, tags []string) { @@ -143,8 +142,8 @@ func (c *Check) sendDiskMetrics(sender aggregator.Sender, ioCounter disk.IOCount } // Configure the disk check -func (c *Check) Configure(data integration.Data, initConfig integration.Data, source string) error { - err := c.CommonConfigure(initConfig, data, source) +func (c *Check) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { + err := c.CommonConfigure(integrationConfigDigest, initConfig, data, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/system/disk/disk_test.go b/pkg/collector/corechecks/system/disk/disk_test.go index 02f20819d956c..8ea5b551f26a9 100644 --- a/pkg/collector/corechecks/system/disk/disk_test.go +++ b/pkg/collector/corechecks/system/disk/disk_test.go @@ -19,7 +19,6 @@ import ( var ( diskSamples = []disk.PartitionStat{ - { Device: "/dev/sda2", Mountpoint: "/", @@ -46,7 +45,8 @@ var ( InodesFree: 0, InodesUsedPercent: 0, }, - "/": {Path: "/", + "/": { + Path: "/", Fstype: "ext2/ext3", Total: 52045545472, Free: 39085445120, @@ -94,7 +94,7 @@ func TestDiskCheck(t *testing.T) { diskUsage = diskUsageSampler ioCounters = diskIoSampler diskCheck := new(Check) - diskCheck.Configure(nil, nil, "test") + diskCheck.Configure(integration.FakeConfigHash, nil, nil, "test") mock := mocksender.NewMockSender(diskCheck.ID()) @@ -141,7 +141,7 @@ func TestDiskCheckExcludedDiskFilsystem(t *testing.T) { diskUsage = diskUsageSampler ioCounters = diskIoSampler diskCheck := new(Check) - diskCheck.Configure(nil, nil, "test") + diskCheck.Configure(integration.FakeConfigHash, nil, nil, "test") diskCheck.cfg.excludedFilesystems = []string{"vfat"} diskCheck.cfg.excludedDisks = []string{"/dev/sda2"} @@ -173,7 +173,7 @@ func TestDiskCheckExcludedRe(t *testing.T) { diskUsage = diskUsageSampler ioCounters = diskIoSampler diskCheck := new(Check) - diskCheck.Configure(nil, nil, "test") + diskCheck.Configure(integration.FakeConfigHash, nil, nil, "test") diskCheck.cfg.excludedMountpointRe = regexp.MustCompile("/boot/efi") diskCheck.cfg.excludedDiskRe = regexp.MustCompile("/dev/sda2") @@ -208,7 +208,7 @@ func TestDiskCheckTags(t *testing.T) { config := integration.Data([]byte("use_mount: true\ntag_by_filesystem: true\nall_partitions: true\ndevice_tag_re:\n /boot/efi: role:esp\n /dev/sda2: device_type:sata,disk_size:large")) - diskCheck.Configure(config, nil, "test") + diskCheck.Configure(integration.FakeConfigHash, config, nil, "test") mock := mocksender.NewMockSender(diskCheck.ID()) diff --git a/pkg/collector/corechecks/system/disk/iostats.go b/pkg/collector/corechecks/system/disk/iostats.go index ba950226276ce..725fc3aed6972 100644 --- a/pkg/collector/corechecks/system/disk/iostats.go +++ b/pkg/collector/corechecks/system/disk/iostats.go @@ -24,8 +24,8 @@ const ( ) // Configure the IOstats check -func (c *IOCheck) commonConfigure(data integration.Data, initConfig integration.Data, source string) error { - if err := c.CommonConfigure(initConfig, data, source); err != nil { +func (c *IOCheck) commonConfigure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { + if err := c.CommonConfigure(integrationConfigDigest, initConfig, data, source); err != nil { return err } diff --git a/pkg/collector/corechecks/system/disk/iostats_nix.go b/pkg/collector/corechecks/system/disk/iostats_nix.go index a9af32ee2a050..303232a3389f4 100644 --- a/pkg/collector/corechecks/system/disk/iostats_nix.go +++ b/pkg/collector/corechecks/system/disk/iostats_nix.go @@ -41,8 +41,8 @@ type IOCheck struct { } // Configure the IOstats check -func (c *IOCheck) Configure(data integration.Data, initConfig integration.Data, source string) error { - err := c.commonConfigure(data, initConfig, source) +func (c *IOCheck) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { + err := c.commonConfigure(integrationConfigDigest, data, initConfig, source) return err } @@ -130,11 +130,11 @@ func (c *IOCheck) nixIO() error { diffNRIO := float64(incrementWithOverflow(ioStats.ReadCount, lastIOStats.ReadCount)) diffNWIO := float64(incrementWithOverflow(ioStats.WriteCount, lastIOStats.WriteCount)) if diffNRIO != 0 { - //Note we use math.MaxUint32 because this value is always 32-bit, even on 64 bit machines + // Note we use math.MaxUint32 because this value is always 32-bit, even on 64 bit machines rAwait = float64(incrementWithOverflow(ioStats.ReadTime, lastIOStats.ReadTime)) / diffNRIO } if diffNWIO != 0 { - //Note we use math.MaxUint32 because this value is always 32-bit, even on 64 bit machines + // Note we use math.MaxUint32 because this value is always 32-bit, even on 64 bit machines wAwait = float64(incrementWithOverflow(ioStats.WriteTime, lastIOStats.WriteTime)) / diffNWIO } @@ -144,7 +144,7 @@ func (c *IOCheck) nixIO() error { if diffNIO != 0 { avgrqsz = float64((incrementWithOverflow(ioStats.ReadBytes, lastIOStats.ReadBytes)+ incrementWithOverflow(ioStats.WriteBytes, lastIOStats.WriteBytes))/SectorSize) / diffNIO - //Note we use math.MaxUint32 because these values are always 32-bit, even on 64 bit machines + // Note we use math.MaxUint32 because these values are always 32-bit, even on 64 bit machines aWait = float64( incrementWithOverflow(ioStats.ReadTime, lastIOStats.ReadTime)+ incrementWithOverflow(ioStats.WriteTime, lastIOStats.WriteTime)) / diffNIO diff --git a/pkg/collector/corechecks/system/disk/iostats_nix_test.go b/pkg/collector/corechecks/system/disk/iostats_nix_test.go index c0ec0a3fef89f..dcd7caccba867 100644 --- a/pkg/collector/corechecks/system/disk/iostats_nix_test.go +++ b/pkg/collector/corechecks/system/disk/iostats_nix_test.go @@ -17,6 +17,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" ) var currentStats = map[string]disk.IOCountersStat{ @@ -83,9 +84,8 @@ func TestIncrementWithOverflow(t *testing.T) { } func TestIoStatsOverflow(t *testing.T) { - ioCheck := new(IOCheck) - ioCheck.Configure(nil, nil, "test") + ioCheck.Configure(integration.FakeConfigHash, nil, nil, "test") ioCheck.stats = lastStats ioCheck.ts = 1000 ioCounters = func(names ...string) (map[string]disk.IOCountersStat, error) { diff --git a/pkg/collector/corechecks/system/disk/iostats_pdh_windows.go b/pkg/collector/corechecks/system/disk/iostats_pdh_windows.go index 2a58bc25640a0..93199f4237449 100644 --- a/pkg/collector/corechecks/system/disk/iostats_pdh_windows.go +++ b/pkg/collector/corechecks/system/disk/iostats_pdh_windows.go @@ -43,8 +43,10 @@ type IOCheck struct { core.CheckBase blacklist *regexp.Regexp lowercaseDeviceTag bool - counters map[string]*pdhutil.PdhMultiInstanceCounterSet - counternames map[string]string + pdhQuery *pdhutil.PdhQuery + // maps metric to counter object + counters map[string]pdhutil.PdhMultiInstanceCounter + counternames map[string]string } var pfnGetDriveType = getDriveType @@ -70,8 +72,14 @@ func isDrive(instance string) bool { } // Configure the IOstats check -func (c *IOCheck) Configure(data integration.Data, initConfig integration.Data, source string) error { - err := c.commonConfigure(data, initConfig, source) +func (c *IOCheck) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { + err := c.commonConfigure(integrationConfigDigest, data, initConfig, source) + if err != nil { + return err + } + + // Create PDH query + c.pdhQuery, err = pdhutil.CreatePdhQuery() if err != nil { return err } @@ -86,9 +94,9 @@ func (c *IOCheck) Configure(data integration.Data, initConfig integration.Data, "Avg. Disk sec/Write": "system.io.w_await", } - c.counters = make(map[string]*pdhutil.PdhMultiInstanceCounterSet) + c.counters = make(map[string]pdhutil.PdhMultiInstanceCounter) for name := range c.counternames { - c.counters[name] = nil + c.counters[name] = c.pdhQuery.AddEnglishMultiInstanceCounter("LogicalDisk", name, isDrive) } return nil @@ -100,56 +108,55 @@ func (c *IOCheck) Run() error { if err != nil { return err } - // Try to initialize any nil counters - for name := range c.counternames { - if c.counters[name] == nil { - c.counters[name], err = pdhutil.GetEnglishMultiInstanceCounter("LogicalDisk", name, isDrive) - if err != nil { - c.Warnf("io.Check: could not establish LogicalDisk '%v' counter: %v", name, err) - } - } - } - var tagbuff bytes.Buffer - for cname, cset := range c.counters { - if cset == nil { - // counter is not yet initialized - continue - } - // get counter values - vals, err := cset.GetAllValues() - if err != nil { - c.Warnf("io.Check: Error getting values for %v: %v", cname, err) - continue - } - for inst, val := range vals { - if c.blacklist != nil && c.blacklist.MatchString(inst) { - log.Debugf("matched drive %s against blacklist; skipping", inst) - continue - } - tagbuff.Reset() - tagbuff.WriteString("device:") - if c.lowercaseDeviceTag { - inst = strings.ToLower(inst) - } - tagbuff.WriteString(inst) - tags := []string{tagbuff.String()} - if !driveLetterPattern.MatchString(inst) { - // if this is not a drive letter, add device_name to tags - tags = append(tags, "device_name:"+inst) + // Fetch PDH query values + err = c.pdhQuery.CollectQueryData() + if err == nil { + // Get values for PDH counters + var tagbuff bytes.Buffer + for cname, counter := range c.counters { + if counter == nil { + // counter is not yet initialized + continue } - - if cname == "Disk Write Bytes/sec" || cname == "Disk Read Bytes/sec" { - val /= kB + // get counter values + vals, err := counter.GetAllValues() + if err != nil { + c.Warnf("io.Check: Error getting values for %v: %v", cname, err) + continue } - if cname == "Avg. Disk sec/Read" || cname == "Avg. Disk sec/Write" { - // r_await/w_await are in milliseconds, but the performance counter - // is (obviously) in seconds. Normalize: - val *= 1000 + for inst, val := range vals { + if c.blacklist != nil && c.blacklist.MatchString(inst) { + log.Debugf("matched drive %s against blacklist; skipping", inst) + continue + } + tagbuff.Reset() + tagbuff.WriteString("device:") + if c.lowercaseDeviceTag { + inst = strings.ToLower(inst) + } + tagbuff.WriteString(inst) + tags := []string{tagbuff.String()} + + if !driveLetterPattern.MatchString(inst) { + // if this is not a drive letter, add device_name to tags + tags = append(tags, "device_name:"+inst) + } + + if cname == "Disk Write Bytes/sec" || cname == "Disk Read Bytes/sec" { + val /= kB + } + if cname == "Avg. Disk sec/Read" || cname == "Avg. Disk sec/Write" { + // r_await/w_await are in milliseconds, but the performance counter + // is (obviously) in seconds. Normalize: + val *= 1000 + } + + sender.Gauge(c.counternames[cname], val, "", tags) } - - sender.Gauge(c.counternames[cname], val, "", tags) } + } else { + c.Warnf("file_handle.Check: Could not collect performance counter data: %v", err) } sender.Commit() diff --git a/pkg/collector/corechecks/system/disk/iostats_pdh_windows_test.go b/pkg/collector/corechecks/system/disk/iostats_pdh_windows_test.go index f3f05c42068f1..035de63d8afa8 100644 --- a/pkg/collector/corechecks/system/disk/iostats_pdh_windows_test.go +++ b/pkg/collector/corechecks/system/disk/iostats_pdh_windows_test.go @@ -13,12 +13,14 @@ import ( "github.com/stretchr/testify/require" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" pdhtest "github.com/DataDog/datadog-agent/pkg/util/winutil/pdhutil" ) func testGetDriveType(drive string) uintptr { return DRIVE_FIXED } + func addDefaultQueryReturnValues() { pdhtest.SetQueryReturnValue("\\\\.\\LogicalDisk(_Total)\\Disk Write Bytes/sec", 1.111) pdhtest.SetQueryReturnValue("\\\\.\\LogicalDisk(C:)\\Disk Write Bytes/sec", 1.222) @@ -57,18 +59,16 @@ func addDriveDReturnValues() { pdhtest.SetQueryReturnValue("\\\\.\\LogicalDisk(Y:)\\Current Disk Queue Length", 5.444) pdhtest.SetQueryReturnValue("\\\\.\\LogicalDisk(HarddiskVolume2)\\Current Disk Queue Length", 5.555) - } func TestIoCheckWindows(t *testing.T) { - pfnGetDriveType = testGetDriveType pdhtest.SetupTesting("..\\testfiles\\counter_indexes_en-us.txt", "..\\testfiles\\allcounters_en-us.txt") addDefaultQueryReturnValues() ioCheck := new(IOCheck) - ioCheck.Configure(nil, nil, "test") + ioCheck.Configure(integration.FakeConfigHash, nil, nil, "test") mock := mocksender.NewMockSender(ioCheck.ID()) @@ -93,11 +93,9 @@ func TestIoCheckWindows(t *testing.T) { mock.AssertExpectations(t) mock.AssertNumberOfCalls(t, "Gauge", 10) mock.AssertNumberOfCalls(t, "Commit", 1) - } func TestIoCheckLowercaseDeviceTag(t *testing.T) { - pfnGetDriveType = testGetDriveType pdhtest.SetupTesting("..\\testfiles\\counter_indexes_en-us.txt", "..\\testfiles\\allcounters_en-us.txt") @@ -107,7 +105,7 @@ func TestIoCheckLowercaseDeviceTag(t *testing.T) { rawInitConfigYaml := []byte(` lowercase_device_tag: true `) - err := ioCheck.Configure(nil, rawInitConfigYaml, "test") + err := ioCheck.Configure(integration.FakeConfigHash, nil, rawInitConfigYaml, "test") require.NoError(t, err) mock := mocksender.NewMockSender(ioCheck.ID()) @@ -133,7 +131,6 @@ lowercase_device_tag: true mock.AssertExpectations(t) mock.AssertNumberOfCalls(t, "Gauge", 10) mock.AssertNumberOfCalls(t, "Commit", 1) - } func TestIoCheckInstanceAdded(t *testing.T) { @@ -147,7 +144,7 @@ func TestIoCheckInstanceAdded(t *testing.T) { addDriveDReturnValues() ioCheck := new(IOCheck) - ioCheck.Configure(nil, nil, "test") + ioCheck.Configure(integration.FakeConfigHash, nil, nil, "test") pdhtest.AddCounterInstance("LogicalDisk", "Y:") pdhtest.AddCounterInstance("LogicalDisk", "HarddiskVolume2") @@ -191,7 +188,6 @@ func TestIoCheckInstanceAdded(t *testing.T) { mock.AssertExpectations(t) mock.AssertNumberOfCalls(t, "Gauge", 30) mock.AssertNumberOfCalls(t, "Commit", 2) - } func TestIoCheckInstanceRemoved(t *testing.T) { @@ -209,7 +205,7 @@ func TestIoCheckInstanceRemoved(t *testing.T) { addDriveDReturnValues() ioCheck := new(IOCheck) - ioCheck.Configure(nil, nil, "test") + ioCheck.Configure(integration.FakeConfigHash, nil, nil, "test") mock := mocksender.NewMockSender(ioCheck.ID()) @@ -254,5 +250,4 @@ func TestIoCheckInstanceRemoved(t *testing.T) { mock.AssertExpectations(t) mock.AssertNumberOfCalls(t, "Gauge", 40) mock.AssertNumberOfCalls(t, "Commit", 3) - } diff --git a/pkg/collector/corechecks/system/disk/iostats_test.go b/pkg/collector/corechecks/system/disk/iostats_test.go index 32311ad7bcafd..93effefaeea8b 100644 --- a/pkg/collector/corechecks/system/disk/iostats_test.go +++ b/pkg/collector/corechecks/system/disk/iostats_test.go @@ -17,6 +17,7 @@ import ( "github.com/shirou/gopsutil/v3/mem" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" ) var ( @@ -79,8 +80,10 @@ var ( var sampleIdx = 0 -var ioSampler = func(names ...string) (map[string]disk.IOCountersStat, error) { return sampler(ioSamples, names...) } -var ioSamplerDM = func(names ...string) (map[string]disk.IOCountersStat, error) { return sampler(ioSamplesDM, names...) } +var ( + ioSampler = func(names ...string) (map[string]disk.IOCountersStat, error) { return sampler(ioSamples, names...) } + ioSamplerDM = func(names ...string) (map[string]disk.IOCountersStat, error) { return sampler(ioSamplesDM, names...) } +) func SwapMemory() (*mem.SwapMemoryStat, error) { return &mem.SwapMemoryStat{ @@ -106,7 +109,7 @@ func TestIOCheckDM(t *testing.T) { ioCounters = ioSamplerDM swapMemory = SwapMemory ioCheck := new(IOCheck) - ioCheck.Configure(nil, nil, "test") + ioCheck.Configure(integration.FakeConfigHash, nil, nil, "test") mock := mocksender.NewMockSender(ioCheck.ID()) @@ -132,7 +135,7 @@ func TestIOCheck(t *testing.T) { ioCounters = ioSampler swapMemory = SwapMemory ioCheck := new(IOCheck) - ioCheck.Configure(nil, nil, "test") + ioCheck.Configure(integration.FakeConfigHash, nil, nil, "test") mock := mocksender.NewMockSender(ioCheck.ID()) @@ -200,14 +203,14 @@ func TestIOCheckBlacklist(t *testing.T) { ioCounters = ioSampler swapMemory = SwapMemory ioCheck := new(IOCheck) - ioCheck.Configure(nil, nil, "test") + ioCheck.Configure(integration.FakeConfigHash, nil, nil, "test") mock := mocksender.NewMockSender(ioCheck.ID()) expectedRates := 0 expectedGauges := 0 - //set blacklist + // set blacklist bl, err := regexp.Compile("sd.*") if err != nil { t.FailNow() diff --git a/pkg/collector/corechecks/system/filehandles/file_handles_freebsd.go b/pkg/collector/corechecks/system/filehandles/file_handles_freebsd.go index 067aa6da66cda..aefb5bb3a2d56 100644 --- a/pkg/collector/corechecks/system/filehandles/file_handles_freebsd.go +++ b/pkg/collector/corechecks/system/filehandles/file_handles_freebsd.go @@ -52,8 +52,8 @@ func (c *fhCheck) Run() error { } // The check doesn't need configuration -func (c *fhCheck) Configure(data integration.Data, initConfig integration.Data, source string) (err error) { - if err := c.CommonConfigure(initConfig, data, source); err != nil { +func (c *fhCheck) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) (err error) { + if err := c.CommonConfigure(integrationConfigDigest, initConfig, data, source); err != nil { return err } diff --git a/pkg/collector/corechecks/system/filehandles/file_handles_freebsd_test.go b/pkg/collector/corechecks/system/filehandles/file_handles_freebsd_test.go index 32de30208c621..d951ec853caa4 100644 --- a/pkg/collector/corechecks/system/filehandles/file_handles_freebsd_test.go +++ b/pkg/collector/corechecks/system/filehandles/file_handles_freebsd_test.go @@ -11,6 +11,7 @@ import ( "testing" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" ) func GetInt64(name string) (value int64, err error) { @@ -23,7 +24,7 @@ func TestFhCheckFreeBSD(t *testing.T) { getInt64 = GetInt64 fileHandleCheck := new(fhCheck) - fileHandleCheck.Configure(nil, nil, "test") + fileHandleCheck.Configure(integration.FakeConfigHash, nil, nil, "test") mock := mocksender.NewMockSender(fileHandleCheck.ID()) @@ -35,5 +36,4 @@ func TestFhCheckFreeBSD(t *testing.T) { mock.AssertExpectations(t) mock.AssertNumberOfCalls(t, "Gauge", 2) mock.AssertNumberOfCalls(t, "Commit", 1) - } diff --git a/pkg/collector/corechecks/system/filehandles/file_handles_test.go b/pkg/collector/corechecks/system/filehandles/file_handles_test.go index 9f051c3ff839e..5bf4161f24f9c 100644 --- a/pkg/collector/corechecks/system/filehandles/file_handles_test.go +++ b/pkg/collector/corechecks/system/filehandles/file_handles_test.go @@ -12,6 +12,7 @@ import ( "testing" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -35,7 +36,6 @@ func getFileNr() (f *os.File, err error) { } func TestFhCheckLinux(t *testing.T) { - tmpFile, err := getFileNr() if err != nil { t.Fatalf("unable to create temporary file-nr file: %v", err) @@ -45,7 +45,7 @@ func TestFhCheckLinux(t *testing.T) { fileNrHandle = writeSampleFile(tmpFile, samplecontent1) t.Logf("Testing from file %s", fileNrHandle) // To pass circle ci tests - // we have to init the mocked sender here before fileHandleCheck.Configure(...) + // we have to init the mocked sender here before fileHandleCheck.Configure(integration.FakeConfigHash, ...) // (and append it to the aggregator, which is automatically done in NewMockSender) // because the FinalizeCheckServiceTag is called in Configure. // Hopefully, the check ID is an empty string while running unit tests; @@ -53,7 +53,7 @@ func TestFhCheckLinux(t *testing.T) { mock.On("FinalizeCheckServiceTag").Return() fileHandleCheck := new(fhCheck) - fileHandleCheck.Configure(nil, nil, "test") + fileHandleCheck.Configure(integration.FakeConfigHash, nil, nil, "test") // reset the check ID for the sake of correctness mocksender.SetSender(mock, fileHandleCheck.ID()) diff --git a/pkg/collector/corechecks/system/filehandles/file_handles_windows.go b/pkg/collector/corechecks/system/filehandles/file_handles_windows.go index dcfdc2b6be6ac..7e0b1174e67d5 100644 --- a/pkg/collector/corechecks/system/filehandles/file_handles_windows.go +++ b/pkg/collector/corechecks/system/filehandles/file_handles_windows.go @@ -11,7 +11,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/collector/check" core "github.com/DataDog/datadog-agent/pkg/collector/corechecks" - "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/winutil/pdhutil" ) @@ -19,7 +18,9 @@ const fileHandlesCheckName = "file_handle" type fhCheck struct { core.CheckBase - counter *pdhutil.PdhSingleInstanceCounterSet + pdhQuery *pdhutil.PdhQuery + // maps metric to counter object + counters map[string]pdhutil.PdhSingleInstanceCounter } // Run executes the check @@ -30,20 +31,21 @@ func (c *fhCheck) Run() error { return err } - var val float64 - - // counter ("Process", "Handle count") - if c.counter == nil { - c.counter, err = pdhutil.GetEnglishCounterInstance("Process", "Handle Count", "_Total") - } - if c.counter != nil { - val, err = c.counter.GetValue() - } - if err != nil { - c.Warnf("file_handle.Check: Error getting process handle count: %v", err) + // Fetch PDH query values + err = c.pdhQuery.CollectQueryData() + if err == nil { + // Get values for PDH counters + for metricname, counter := range c.counters { + var val float64 + val, err = counter.GetValue() + if err == nil { + sender.Gauge(metricname, val, "", nil) + } else { + c.Warnf("file_handle.Check: Error getting process handle count: %v", err) + } + } } else { - log.Debugf("Submitting system.fs.file_handles_in_use %v", val) - sender.Gauge("system.fs.file_handles.in_use", float64(val), "", nil) + c.Warnf("file_handle.Check: Could not collect performance counter data: %v", err) } sender.Commit() @@ -51,11 +53,21 @@ func (c *fhCheck) Run() error { } // The check doesn't need configuration -func (c *fhCheck) Configure(data integration.Data, initConfig integration.Data, source string) (err error) { - if err := c.CommonConfigure(initConfig, data, source); err != nil { +func (c *fhCheck) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) (err error) { + if err := c.CommonConfigure(integrationConfigDigest, initConfig, data, source); err != nil { + return err + } + + // Create PDH query + c.pdhQuery, err = pdhutil.CreatePdhQuery() + if err != nil { return err } + c.counters = map[string]pdhutil.PdhSingleInstanceCounter{ + "system.fs.file_handles.in_use": c.pdhQuery.AddEnglishCounterInstance("Process", "Handle Count", "_Total"), + } + return err } diff --git a/pkg/collector/corechecks/system/filehandles/file_handles_windows_test.go b/pkg/collector/corechecks/system/filehandles/file_handles_windows_test.go index 9731bedc562cd..23751171abb21 100644 --- a/pkg/collector/corechecks/system/filehandles/file_handles_windows_test.go +++ b/pkg/collector/corechecks/system/filehandles/file_handles_windows_test.go @@ -11,16 +11,16 @@ import ( "testing" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" pdhtest "github.com/DataDog/datadog-agent/pkg/util/winutil/pdhutil" ) func TestFhCheckWindows(t *testing.T) { - pdhtest.SetupTesting("..\\testfiles\\counter_indexes_en-us.txt", "..\\testfiles\\allcounters_en-us.txt") pdhtest.SetQueryReturnValue("\\\\.\\Process(_Total)\\Handle Count", 0.006848775103963421) fileHandleCheck := new(fhCheck) - fileHandleCheck.Configure(nil, nil, "test") + fileHandleCheck.Configure(integration.FakeConfigHash, nil, nil, "test") mock := mocksender.NewMockSender(fileHandleCheck.ID()) @@ -31,5 +31,4 @@ func TestFhCheckWindows(t *testing.T) { mock.AssertExpectations(t) mock.AssertNumberOfCalls(t, "Gauge", 1) mock.AssertNumberOfCalls(t, "Commit", 1) - } diff --git a/pkg/collector/corechecks/system/memory/memory_windows.go b/pkg/collector/corechecks/system/memory/memory_windows.go index 52d5fb4ebf831..d3fdd83cea656 100644 --- a/pkg/collector/corechecks/system/memory/memory_windows.go +++ b/pkg/collector/corechecks/system/memory/memory_windows.go @@ -17,26 +17,41 @@ import ( // For testing purpose var virtualMemory = winutil.VirtualMemory -var swapMemory = winutil.SwapMemory -var pageMemory = winutil.PagefileMemory + +var ( + swapMemory = winutil.SwapMemory + pageMemory = winutil.PagefileMemory +) // Check doesn't need additional fields type Check struct { core.CheckBase - cacheBytes *pdhutil.PdhSingleInstanceCounterSet - committedBytes *pdhutil.PdhSingleInstanceCounterSet - pagedBytes *pdhutil.PdhSingleInstanceCounterSet - nonpagedBytes *pdhutil.PdhSingleInstanceCounterSet + pdhQuery *pdhutil.PdhQuery + // maps metric to counter object + counters map[string]pdhutil.PdhSingleInstanceCounter } const mbSize float64 = 1024 * 1024 // Configure handles initial configuration/initialization of the check -func (c *Check) Configure(data integration.Data, initConfig integration.Data, source string) (err error) { - if err := c.CommonConfigure(initConfig, data, source); err != nil { +func (c *Check) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) (err error) { + if err := c.CommonConfigure(integrationConfigDigest, initConfig, data, source); err != nil { + return err + } + + // Create PDH query + c.pdhQuery, err = pdhutil.CreatePdhQuery() + if err != nil { return err } + c.counters = map[string]pdhutil.PdhSingleInstanceCounter{ + "system.mem.cached": c.pdhQuery.AddEnglishSingleInstanceCounter("Memory", "Cache Bytes"), + "system.mem.committed": c.pdhQuery.AddEnglishSingleInstanceCounter("Memory", "Committed Bytes"), + "system.mem.paged": c.pdhQuery.AddEnglishSingleInstanceCounter("Memory", "Pool Paged Bytes"), + "system.mem.nonpaged": c.pdhQuery.AddEnglishSingleInstanceCounter("Memory", "Pool Nonpaged Bytes"), + } + return err } @@ -47,58 +62,21 @@ func (c *Check) Run() error { return err } - var val float64 - - // counter ("Memory", "Cache Bytes") - if c.cacheBytes == nil { - c.cacheBytes, err = pdhutil.GetEnglishSingleInstanceCounter("Memory", "Cache Bytes") - } - if c.cacheBytes != nil { - val, err = c.cacheBytes.GetValue() - } - if err == nil { - sender.Gauge("system.mem.cached", float64(val)/mbSize, "", nil) - } else { - c.Warnf("memory.Check: Could not retrieve value for system.mem.cached: %v", err) - } - - // counter ("Memory", "Committed Bytes") - if c.committedBytes == nil { - c.committedBytes, err = pdhutil.GetEnglishSingleInstanceCounter("Memory", "Committed Bytes") - } - if c.committedBytes != nil { - val, err = c.committedBytes.GetValue() - } - if err == nil { - sender.Gauge("system.mem.committed", float64(val)/mbSize, "", nil) - } else { - c.Warnf("memory.Check: Could not retrieve value for system.mem.committed: %v", err) - } - - // counter ("Memory", "Pool Paged Bytes") - if c.pagedBytes == nil { - c.pagedBytes, err = pdhutil.GetEnglishSingleInstanceCounter("Memory", "Pool Paged Bytes") - } - if c.pagedBytes != nil { - val, err = c.pagedBytes.GetValue() - } - if err == nil { - sender.Gauge("system.mem.paged", float64(val)/mbSize, "", nil) - } else { - c.Warnf("memory.Check: Could not retrieve value for system.mem.paged: %v", err) - } - - // counter ("Memory", "Pool Nonpaged Bytes") - if c.nonpagedBytes == nil { - c.nonpagedBytes, err = pdhutil.GetEnglishSingleInstanceCounter("Memory", "Pool Nonpaged Bytes") - } - if c.nonpagedBytes != nil { - val, err = c.nonpagedBytes.GetValue() - } + // Fetch PDH query values + err = c.pdhQuery.CollectQueryData() if err == nil { - sender.Gauge("system.mem.nonpaged", float64(val)/mbSize, "", nil) + // Get values for PDH counters + for metricname, counter := range c.counters { + var val float64 + val, err = counter.GetValue() + if err == nil { + sender.Gauge(metricname, val/mbSize, "", nil) + } else { + c.Warnf("memory.Check: Could not retrieve value for %v: %v", metricname, err) + } + } } else { - c.Warnf("memory.Check: Could not retrieve value for system.mem.nonpaged: %v", err) + c.Warnf("memory.Check: Could not collect performance counter data: %v", err) } v, errVirt := virtualMemory() diff --git a/pkg/collector/corechecks/system/memory/memory_windows_test.go b/pkg/collector/corechecks/system/memory/memory_windows_test.go index cc3d7f3c822fe..894110ee1d41f 100644 --- a/pkg/collector/corechecks/system/memory/memory_windows_test.go +++ b/pkg/collector/corechecks/system/memory/memory_windows_test.go @@ -14,6 +14,7 @@ import ( "github.com/stretchr/testify/require" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/util/winutil" pdhtest "github.com/DataDog/datadog-agent/pkg/util/winutil/pdhutil" ) @@ -61,7 +62,7 @@ func TestMemoryCheckWindows(t *testing.T) { addDefaultQueryReturnValues() memCheck := new(Check) - memCheck.Configure(nil, nil, "test") + memCheck.Configure(integration.FakeConfigHash, nil, nil, "test") mock := mocksender.NewMockSender(memCheck.ID()) diff --git a/pkg/collector/corechecks/system/uptime/uptime_test.go b/pkg/collector/corechecks/system/uptime/uptime_test.go index e2b9e3dd1833e..1bec32248ffc0 100644 --- a/pkg/collector/corechecks/system/uptime/uptime_test.go +++ b/pkg/collector/corechecks/system/uptime/uptime_test.go @@ -9,6 +9,7 @@ import ( "testing" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" ) func uptimeSampler() (uint64, error) { @@ -25,7 +26,7 @@ func TestUptimeCheckLinux(t *testing.T) { uptime = uptimeSampler uptimeCheck := new(Check) - uptimeCheck.Configure(nil, nil, "test") + uptimeCheck.Configure(integration.FakeConfigHash, nil, nil, "test") // reset the check ID for the sake of correctness mocksender.SetSender(mock, uptimeCheck.ID()) diff --git a/pkg/collector/corechecks/system/winkmem/winkmem.go b/pkg/collector/corechecks/system/winkmem/winkmem.go index 28e76e9849fb1..721d753b32ab6 100644 --- a/pkg/collector/corechecks/system/winkmem/winkmem.go +++ b/pkg/collector/corechecks/system/winkmem/winkmem.go @@ -79,8 +79,7 @@ init_config: */ // Configure is called to configure the object prior to the first run -func (w *KMemCheck) Configure(data integration.Data, initConfig integration.Data, source string) error { - +func (w *KMemCheck) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { // check to make sure the function is actually there, so we can fail gracefully // if it's not if err := modntdll.Load(); err != nil { @@ -90,7 +89,7 @@ func (w *KMemCheck) Configure(data integration.Data, initConfig integration.Data return err } - if err := w.CommonConfigure(initConfig, data, source); err != nil { + if err := w.CommonConfigure(integrationConfigDigest, initConfig, data, source); err != nil { return err } cf := Config{ @@ -145,7 +144,7 @@ func (w *KMemCheck) Run() error { for k, v := range tagmap { // double sanity check, but should always be true if v { - var tags = []string{} + tags := []string{} pti := spi.spti.poolTags[k] tags = append(tags, "kmemtag:"+string(pti.tag[:])) @@ -160,7 +159,6 @@ func (w *KMemCheck) Run() error { sender.Commit() log.Debugf("Logged %v entries", len(tagmap)) return nil - } type systemPooltag struct { diff --git a/pkg/collector/corechecks/system/winkmem/winkmem_test.go b/pkg/collector/corechecks/system/winkmem/winkmem_test.go index eef1e4ca51d88..59430dfce2a31 100644 --- a/pkg/collector/corechecks/system/winkmem/winkmem_test.go +++ b/pkg/collector/corechecks/system/winkmem/winkmem_test.go @@ -13,12 +13,12 @@ import ( "github.com/stretchr/testify/mock" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" ) func TestWinKMem(t *testing.T) { - kcheck := new(KMemCheck) - kcheck.Configure(nil, nil, "test") + kcheck.Configure(integration.FakeConfigHash, nil, nil, "test") m := mocksender.NewMockSender(kcheck.ID()) diff --git a/pkg/collector/corechecks/system/winproc/winproc_windows.go b/pkg/collector/corechecks/system/winproc/winproc_windows.go index 4c4bac3080d0c..c3b37820a6942 100644 --- a/pkg/collector/corechecks/system/winproc/winproc_windows.go +++ b/pkg/collector/corechecks/system/winproc/winproc_windows.go @@ -18,8 +18,9 @@ const winprocCheckName = "winproc" type processChk struct { core.CheckBase - numprocs *pdhutil.PdhSingleInstanceCounterSet - pql *pdhutil.PdhSingleInstanceCounterSet + pdhQuery *pdhutil.PdhQuery + // maps metric to counter object + counters map[string]pdhutil.PdhSingleInstanceCounter } // Run executes the check @@ -29,44 +30,44 @@ func (c *processChk) Run() error { return err } - var val float64 - - // counter ("System", "Processes") - if c.numprocs == nil { - c.numprocs, err = pdhutil.GetEnglishSingleInstanceCounter("System", "Processes") - } - if c.numprocs != nil { - val, err = c.numprocs.GetValue() - } + // Fetch PDH query values + err = c.pdhQuery.CollectQueryData() if err == nil { - sender.Gauge("system.proc.count", val, "", nil) + // Get values for PDH counters + for metricname, counter := range c.counters { + var val float64 + val, err = counter.GetValue() + if err == nil { + sender.Gauge(metricname, val, "", nil) + } else { + c.Warnf("winproc.Check: Could not retrieve value for %v: %v", metricname, err) + } + } } else { - c.Warnf("winproc.Check: Error getting number of processes: %v", err) - } - - // counter ("System", "Processor Queue Length") - if c.pql == nil { - c.pql, err = pdhutil.GetEnglishSingleInstanceCounter("System", "Processor Queue Length") - } - if c.pql != nil { - val, err = c.pql.GetValue() - } - if err == nil { - sender.Gauge("system.proc.queue_length", val, "", nil) - } else { - c.Warnf("winproc.Check: Error getting processor queue length: %v", err) + c.Warnf("winproc.Check: Could not collect performance counter data: %v", err) } sender.Commit() return nil } -func (c *processChk) Configure(data integration.Data, initConfig integration.Data, source string) error { - err := c.CommonConfigure(initConfig, data, source) +func (c *processChk) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { + err := c.CommonConfigure(integrationConfigDigest, initConfig, data, source) if err != nil { return err } + // Create PDH query + c.pdhQuery, err = pdhutil.CreatePdhQuery() + if err != nil { + return err + } + + c.counters = map[string]pdhutil.PdhSingleInstanceCounter{ + "system.proc.count": c.pdhQuery.AddEnglishSingleInstanceCounter("System", "Processes"), + "system.proc.queue_length": c.pdhQuery.AddEnglishSingleInstanceCounter("System", "Processor Queue Length"), + } + return err } diff --git a/pkg/collector/corechecks/system/winproc/winproc_windows_test.go b/pkg/collector/corechecks/system/winproc/winproc_windows_test.go index 3bb554a30e246..2a426979fb703 100644 --- a/pkg/collector/corechecks/system/winproc/winproc_windows_test.go +++ b/pkg/collector/corechecks/system/winproc/winproc_windows_test.go @@ -11,17 +11,17 @@ import ( "testing" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" pdhtest "github.com/DataDog/datadog-agent/pkg/util/winutil/pdhutil" ) func TestWinprocCheckWindows(t *testing.T) { - pdhtest.SetupTesting("..\\testfiles\\counter_indexes_en-us.txt", "..\\testfiles\\allcounters_en-us.txt") pdhtest.SetQueryReturnValue("\\\\.\\System\\Processor Queue Length", 2.0) pdhtest.SetQueryReturnValue("\\\\.\\System\\Processes", 32.0) winprocCheck := new(processChk) - winprocCheck.Configure(nil, nil, "test") + winprocCheck.Configure(integration.FakeConfigHash, nil, nil, "test") mock := mocksender.NewMockSender(winprocCheck.ID()) @@ -33,5 +33,4 @@ func TestWinprocCheckWindows(t *testing.T) { mock.AssertExpectations(t) mock.AssertNumberOfCalls(t, "Gauge", 2) mock.AssertNumberOfCalls(t, "Commit", 1) - } diff --git a/pkg/collector/corechecks/systemd/systemd.go b/pkg/collector/corechecks/systemd/systemd.go index fc3a28df3617e..d94085442f93e 100644 --- a/pkg/collector/corechecks/systemd/systemd.go +++ b/pkg/collector/corechecks/systemd/systemd.go @@ -364,7 +364,7 @@ func (c *SystemdCheck) submitBasicUnitMetrics(sender aggregator.Sender, conn *db unitProperties, err := c.stats.GetUnitTypeProperties(conn, unit.Name, dbusTypeMap[typeUnit]) if err != nil { - log.Warnf("Error getting unit unitProperties: %s", unit.Name) + log.Warnf("Error getting unit unitProperties: %s: %v", unit.Name, err) return } activeEnterTimestamp, err := getPropertyUint64(unitProperties, "ActiveEnterTimestamp") @@ -520,12 +520,12 @@ func isValidServiceCheckStatus(serviceCheckStatus string) bool { } // Configure configures the systemd checks -func (c *SystemdCheck) Configure(rawInstance integration.Data, rawInitConfig integration.Data, source string) error { +func (c *SystemdCheck) Configure(integrationConfigDigest uint64, rawInstance integration.Data, rawInitConfig integration.Data, source string) error { // Make sure check id is different for each different config // Must be called before CommonConfigure that uses checkID - c.BuildID(rawInstance, rawInitConfig) + c.BuildID(integrationConfigDigest, rawInstance, rawInitConfig) - err := c.CommonConfigure(rawInitConfig, rawInstance, source) + err := c.CommonConfigure(integrationConfigDigest, rawInitConfig, rawInstance, source) if err != nil { return err } diff --git a/pkg/collector/corechecks/systemd/systemd_test.go b/pkg/collector/corechecks/systemd/systemd_test.go index f6de431911d6e..f38380521d014 100644 --- a/pkg/collector/corechecks/systemd/systemd_test.go +++ b/pkg/collector/corechecks/systemd/systemd_test.go @@ -14,18 +14,17 @@ import ( "testing" "time" - "github.com/DataDog/datadog-agent/pkg/aggregator" - - "github.com/DataDog/datadog-agent/pkg/collector/check" - core "github.com/DataDog/datadog-agent/pkg/collector/corechecks" - "github.com/DataDog/datadog-agent/pkg/metadata/inventories" - "github.com/coreos/go-systemd/dbus" godbus "github.com/godbus/dbus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" + "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" + "github.com/DataDog/datadog-agent/pkg/collector/check" + core "github.com/DataDog/datadog-agent/pkg/collector/corechecks" + "github.com/DataDog/datadog-agent/pkg/metadata/inventories" "github.com/DataDog/datadog-agent/pkg/metrics" ) @@ -100,7 +99,7 @@ unit_names: - ssh.service - syslog.socket `) - err := check.Configure(rawInstanceConfig, []byte(``), "test") + err := check.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) assert.ElementsMatch(t, []string{"ssh.service", "syslog.socket"}, check.config.instance.UnitNames) @@ -108,7 +107,7 @@ unit_names: func TestMissingUnitNamesShouldRaiseError(t *testing.T) { check := SystemdCheck{} - err := check.Configure([]byte(``), []byte(``), "test") + err := check.Configure(integration.FakeConfigHash, []byte(``), []byte(``), "test") expectedErrorMsg := "instance config `unit_names` must not be empty" assert.EqualError(t, err, expectedErrorMsg) @@ -124,7 +123,7 @@ substate_status_mapping: exited: critical running: ok `) - err := check.Configure(rawInstanceConfig, []byte(``), "test") + err := check.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") expectedErrorMsg := "instance config specifies a custom substate mapping for unit 'bar' but this unit is not monitored. Please add 'bar' to 'unit_names'" assert.EqualError(t, err, expectedErrorMsg) @@ -140,7 +139,7 @@ substate_status_mapping: running: ok exited: Critical `) - err := check.Configure(rawInstanceConfig, []byte(``), "test") + err := check.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") expectedErrorMsg := "Status 'Critical' for unit 'foo' in 'substate_status_mapping' is invalid. It should be one of 'ok, warning, critical, unknown'" assert.EqualError(t, err, expectedErrorMsg) @@ -163,7 +162,7 @@ substate_status_mapping: plugged: ok running: ok `) - err := check.Configure(rawInstanceConfig, []byte(``), "test") + err := check.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") assert.Nil(t, err) } @@ -177,7 +176,7 @@ unit_names: private_socket: /tmp/foo/private_socket `) check := SystemdCheck{stats: stats} - check.Configure(rawInstanceConfig, []byte(``), "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") conn, err := check.getDbusConnection() assert.Nil(t, err) @@ -196,7 +195,7 @@ unit_names: private_socket: /tmp/foo/private_socket `) check := SystemdCheck{stats: stats} - check.Configure(rawInstanceConfig, []byte(``), "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") conn, err := check.getDbusConnection() assert.EqualError(t, err, "some error") @@ -215,7 +214,7 @@ unit_names: - ssh.service `) check := SystemdCheck{stats: stats} - check.Configure(rawInstanceConfig, []byte(``), "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") conn, err := check.getDbusConnection() assert.Nil(t, err) @@ -233,7 +232,7 @@ unit_names: - ssh.service `) check := SystemdCheck{stats: stats} - check.Configure(rawInstanceConfig, []byte(``), "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") conn, err := check.getDbusConnection() assert.Nil(t, err) @@ -253,7 +252,7 @@ unit_names: - ssh.service `) check := SystemdCheck{stats: stats} - check.Configure(rawInstanceConfig, []byte(``), "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") conn, err := check.getDbusConnection() assert.Nil(t, err) @@ -273,7 +272,7 @@ unit_names: - ssh.service `) check := SystemdCheck{stats: stats} - check.Configure(rawInstanceConfig, []byte(``), "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, []byte(``), "test") conn, err := check.getDbusConnection() assert.NotNil(t, err) @@ -288,7 +287,7 @@ func TestDbusConnectionErr(t *testing.T) { stats.On("SystemBusSocketConnection").Return((*dbus.Conn)(nil), fmt.Errorf("some error")) check := SystemdCheck{stats: stats} - check.Configure([]byte(``), []byte(``), "test") + check.Configure(integration.FakeConfigHash, []byte(``), []byte(``), "test") mockSender := mocksender.NewMockSender(check.ID()) // required to initiate aggregator mockSender.On("ServiceCheck", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return() @@ -298,7 +297,6 @@ func TestDbusConnectionErr(t *testing.T) { expectedErrorMsg := "cannot create a connection: some error" assert.EqualError(t, err, expectedErrorMsg) mockSender.AssertCalled(t, "ServiceCheck", canConnectServiceCheck, metrics.ServiceCheckCritical, "", []string(nil), expectedErrorMsg) - } func TestSystemStateCallFailGracefully(t *testing.T) { @@ -309,7 +307,7 @@ func TestSystemStateCallFailGracefully(t *testing.T) { stats.On("GetVersion", mock.Anything).Return(systemdVersion) check := SystemdCheck{stats: stats} - check.Configure([]byte(``), []byte(``), "test") + check.Configure(integration.FakeConfigHash, []byte(``), []byte(``), "test") mockSender := mocksender.NewMockSender(check.ID()) // required to initiate aggregator mockSender.On("Gauge", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return() @@ -328,7 +326,7 @@ func TestListUnitErr(t *testing.T) { stats.On("GetVersion", mock.Anything).Return(systemdVersion) check := SystemdCheck{stats: stats} - check.Configure([]byte(``), []byte(``), "test") + check.Configure(integration.FakeConfigHash, []byte(``), []byte(``), "test") mockSender := mocksender.NewMockSender(check.ID()) // required to initiate aggregator mockSender.On("ServiceCheck", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return() @@ -363,7 +361,7 @@ unit_names: - unit2.service `) check := SystemdCheck{stats: stats} - check.Configure(rawInstanceConfig, nil, "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, nil, "test") // setup expectations stats.On("GetUnitTypeProperties", mock.Anything, mock.Anything, mock.Anything).Return(map[string]interface{}{}, nil) @@ -424,7 +422,7 @@ unit_names: stats.On("GetVersion", mock.Anything).Return(systemdVersion) check := SystemdCheck{stats: stats} - check.Configure(rawInstanceConfig, nil, "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, nil, "test") // setup expectation mockSender := mocksender.NewMockSender(check.ID()) @@ -491,7 +489,7 @@ unit_names: stats.On("GetVersion", mock.Anything).Return(systemdVersion) check := SystemdCheck{stats: stats} - check.Configure(rawInstanceConfig, nil, "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, nil, "test") // setup expectation mockSender := mocksender.NewMockSender(check.ID()) @@ -566,7 +564,7 @@ unit_names: stats.On("GetVersion", mock.Anything).Return(systemdVersion) check := SystemdCheck{stats: stats} - check.Configure(rawInstanceConfig, nil, "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, nil, "test") // setup expectation mockSender := mocksender.NewMockSender(check.ID()) @@ -615,7 +613,7 @@ func TestServiceCheckSystemStateAndCanConnect(t *testing.T) { stats.On("GetVersion", mock.Anything).Return(systemdVersion) check := SystemdCheck{stats: stats} - check.Configure([]byte(``), []byte(``), "test") + check.Configure(integration.FakeConfigHash, []byte(``), []byte(``), "test") mockSender := mocksender.NewMockSender(check.ID()) // required to initiate aggregator mockSender.On("ServiceCheck", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return() @@ -662,7 +660,7 @@ unit_names: stats.On("GetVersion", mock.Anything).Return(systemdVersion) check := SystemdCheck{stats: stats} - check.Configure(rawInstanceConfig, nil, "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, nil, "test") // setup expectation mockSender := mocksender.NewMockSender(check.ID()) @@ -727,7 +725,7 @@ substate_status_mapping: stats.On("GetVersion", mock.Anything).Return(systemdVersion) check := SystemdCheck{stats: stats} - check.Configure(rawInstanceConfig, nil, "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, nil, "test") // setup expectation mockSender := mocksender.NewMockSender(check.ID()) @@ -830,7 +828,7 @@ unit_names: `) check := SystemdCheck{} - check.Configure(rawInstanceConfig, nil, "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, nil, "test") data := []struct { unitName string @@ -850,7 +848,7 @@ unit_names: func TestIsMonitoredEmptyConfigShouldNone(t *testing.T) { rawInstanceConfig := []byte(``) check := SystemdCheck{} - check.Configure(rawInstanceConfig, nil, "test") + check.Configure(integration.FakeConfigHash, rawInstanceConfig, nil, "test") data := []struct { unitName string @@ -974,7 +972,6 @@ func (m mockCollector) MapOverChecks(fn func([]check.Info)) { } func TestGetVersion(t *testing.T) { - rawInstanceConfig := []byte(` unit_names: - ssh.service @@ -993,7 +990,7 @@ unit_names: mockSender.On("ServiceCheck", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return() mockSender.On("Commit").Return() - systemdCheck.Configure(rawInstanceConfig, nil, "test") + systemdCheck.Configure(integration.FakeConfigHash, rawInstanceConfig, nil, "test") // run systemdCheck.Run() @@ -1006,7 +1003,8 @@ unit_names: InitConf: "", InstanceConf: "{}", }, - }} + }, + } p := inventories.GetPayload(context.Background(), "testHostname", coll, false) checkMetadata := *p.CheckMetadata @@ -1032,13 +1030,13 @@ unit_names: - ssh.service2 `) - err := check1.Configure(rawInstanceConfig1, []byte(``), "test") + err := check1.Configure(integration.FakeConfigHash, rawInstanceConfig1, []byte(``), "test") assert.Nil(t, err) - err = check2.Configure(rawInstanceConfig2, []byte(``), "test") + err = check2.Configure(integration.FakeConfigHash, rawInstanceConfig2, []byte(``), "test") assert.Nil(t, err) - assert.Equal(t, check.ID("systemd:29388db26b0a8c38"), check1.ID()) - assert.Equal(t, check.ID("systemd:31a0335c91ba9ae6"), check2.ID()) + assert.Equal(t, check.ID("systemd:71ee0a4fef872b6d"), check1.ID()) + assert.Equal(t, check.ID("systemd:b1fb7cdd591e17a1"), check2.ID()) assert.NotEqual(t, check1.ID(), check2.ID()) } diff --git a/pkg/collector/internal/middleware/check_wrapper.go b/pkg/collector/internal/middleware/check_wrapper.go index ad0ab7b90725f..640821429d404 100644 --- a/pkg/collector/internal/middleware/check_wrapper.go +++ b/pkg/collector/internal/middleware/check_wrapper.go @@ -58,8 +58,8 @@ func (c *CheckWrapper) String() string { } // Configure implements Check#Configure -func (c *CheckWrapper) Configure(config, initConfig integration.Data, source string) error { - return c.inner.Configure(config, initConfig, source) +func (c *CheckWrapper) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { + return c.inner.Configure(integrationConfigDigest, config, initConfig, source) } // Interval implements Check#Interval diff --git a/pkg/collector/python/check.go b/pkg/collector/python/check.go index cb61531ac1385..2cd6e68f5b8d2 100644 --- a/pkg/collector/python/check.go +++ b/pkg/collector/python/check.go @@ -207,9 +207,9 @@ func (c *PythonCheck) getPythonWarnings(gstate *stickyLock) []error { } // Configure the Python check from YAML data -func (c *PythonCheck) Configure(data integration.Data, initConfig integration.Data, source string) error { +func (c *PythonCheck) Configure(integrationConfigDigest uint64, data integration.Data, initConfig integration.Data, source string) error { // Generate check ID - c.id = check.Identify(c, data, initConfig) + c.id = check.BuildID(c.String(), integrationConfigDigest, data, initConfig) commonGlobalOptions := integration.CommonGlobalConfig{} if err := yaml.Unmarshal(initConfig, &commonGlobalOptions); err != nil { diff --git a/pkg/collector/python/loader.go b/pkg/collector/python/loader.go index 2e8231a7002d4..ca69a02fa92e4 100644 --- a/pkg/collector/python/loader.go +++ b/pkg/collector/python/loader.go @@ -53,7 +53,7 @@ const ( a7TagReady = "ready" a7TagNotReady = "not_ready" a7TagUnknown = "unknown" - a7TagPython3 = "python3" //Already running on python3, linting is disabled + a7TagPython3 = "python3" // Already running on python3, linting is disabled ) func init() { @@ -108,6 +108,8 @@ func (cl *PythonCheckLoader) Load(config integration.Config, instance integratio } moduleName := config.Name + // FastDigest is used as check id calculation does not account for tags order + configDigest := config.FastDigest() // Lock the GIL glock, err := newStickyLock() @@ -200,7 +202,7 @@ func (cl *PythonCheckLoader) Load(config integration.Config, instance integratio } // The GIL should be unlocked at this point, `check.Configure` uses its own stickyLock and stickyLocks must not be nested - if err := c.Configure(instance, config.InitConfig, config.Source); err != nil { + if err := c.Configure(configDigest, instance, config.InitConfig, config.Source); err != nil { C.rtloader_decref(rtloader, checkClass) C.rtloader_decref(rtloader, checkModule) @@ -268,7 +270,6 @@ func expvarPy3Warnings() interface{} { // reportPy3Warnings runs the a7 linter and exports the result in both expvar // and the aggregator (as extra series) func reportPy3Warnings(checkName string, checkFilePath string) { - // check if the check has already been linted py3LintedLock.Lock() _, found := py3Linted[checkName] diff --git a/pkg/collector/python/test_check.go b/pkg/collector/python/test_check.go index 15c2c6cb8c360..2ee84edbab861 100644 --- a/pkg/collector/python/test_check.go +++ b/pkg/collector/python/test_check.go @@ -562,7 +562,7 @@ func testConfigure(t *testing.T) { C.get_check_return = 1 C.get_check_check = newMockPyObjectPtr() - err = c.Configure(integration.Data("{\"val\": 21}"), integration.Data("{\"val\": 21}"), "test") + err = c.Configure(integration.FakeConfigHash, integration.Data("{\"val\": 21}"), integration.Data("{\"val\": 21}"), "test") assert.Nil(t, err) assert.Equal(t, c.class, C.get_check_py_class) @@ -597,7 +597,7 @@ func testConfigureDeprecated(t *testing.T) { C.get_check_return = 0 C.get_check_deprecated_check = newMockPyObjectPtr() C.get_check_deprecated_return = 1 - err = c.Configure(integration.Data("{\"val\": 21}"), integration.Data("{\"val\": 21}"), "test") + err = c.Configure(integration.FakeConfigHash, integration.Data("{\"val\": 21}"), integration.Data("{\"val\": 21}"), "test") assert.Nil(t, err) assert.Equal(t, c.class, C.get_check_py_class) diff --git a/pkg/collector/scheduler/scheduler.go b/pkg/collector/scheduler/scheduler.go index 37520af9f5ae1..111930217f93a 100644 --- a/pkg/collector/scheduler/scheduler.go +++ b/pkg/collector/scheduler/scheduler.go @@ -86,10 +86,10 @@ func (s *Scheduler) Enter(check check.Check) error { } if check.Interval() < minAllowedInterval { - return fmt.Errorf("Schedule interval must be greater than %v or 0", minAllowedInterval) + return fmt.Errorf("schedule interval must be greater than %v or 0", minAllowedInterval) } - log.Infof("Scheduling check %v with an interval of %v", check, check.Interval()) + log.Infof("Scheduling check %s with an interval of %v", check.ID(), check.Interval()) // sync when accessing `jobQueues` and `check2queue` s.mu.Lock() diff --git a/pkg/compliance/agent/agent_test.go b/pkg/compliance/agent/agent_test.go index b17d788b343ca..9416de1640c0e 100644 --- a/pkg/compliance/agent/agent_test.go +++ b/pkg/compliance/agent/agent_test.go @@ -137,10 +137,6 @@ func TestRunK8s(t *testing.T) { kubeClient := &mocks.KubeClient{} kubeClient.On("Resource", mock.Anything).Return(nil) - nodeLabels := map[string]string{ - "node-role.kubernetes.io/worker": "", - } - agent, err := New( reporter, scheduler, @@ -148,7 +144,6 @@ func TestRunK8s(t *testing.T) { &config.Endpoints{}, checks.WithHostname("the-host"), checks.WithHostRootMount(e.dir), - checks.WithNodeLabels(nodeLabels), checks.WithKubernetesClient(kubeClient, "kube_system_uuid"), ) assert.NoError(err) @@ -345,17 +340,12 @@ func TestRunChecksFromFile(t *testing.T) { kubeClient := &mocks.KubeClient{} - nodeLabels := map[string]string{ - "node-role.kubernetes.io/worker": "", - } - err := RunChecksFromFile( reporter, filepath.Join(e.dir, "cis-kubernetes.yaml"), checks.WithHostname("the-host"), checks.WithHostRootMount(e.dir), checks.WithDockerClient(dockerClient), - checks.WithNodeLabels(nodeLabels), checks.WithKubernetesClient(kubeClient, "kube_system_uuid"), ) assert.NoError(err) diff --git a/pkg/compliance/agent/node_labels.go b/pkg/compliance/agent/node_labels.go deleted file mode 100644 index 2474356a593f5..0000000000000 --- a/pkg/compliance/agent/node_labels.go +++ /dev/null @@ -1,63 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package agent - -import ( - "context" - "fmt" - "math" - "time" - - "github.com/DataDog/datadog-agent/pkg/util/kubernetes/hostinfo" - "github.com/DataDog/datadog-agent/pkg/util/log" - - "github.com/cenkalti/backoff/v4" -) - -const ( - nodeLabelsCheckInitialInterval = time.Second - nodeLabelsCheckMaxInterval = 10 * time.Second - nodeLabelsCheckMultiplier = 2.0 - nodeLabelsCheckMaxElapsedTime = 1 * time.Minute -) - -// WaitGetNodeLabels waits for node labels to become available using a backoff retrier -func WaitGetNodeLabels() (map[string]string, error) { - fetcher := &labelsFetcher{} - exp := backoff.NewExponentialBackOff() - exp.InitialInterval = nodeLabelsCheckInitialInterval - exp.RandomizationFactor = 0 - exp.Multiplier = nodeLabelsCheckMultiplier - exp.MaxInterval = nodeLabelsCheckMaxInterval - exp.MaxElapsedTime = nodeLabelsCheckMaxElapsedTime - exp.Reset() - - err := backoff.RetryNotify(fetcher.fetch, exp, notifyFetchNodeLabels()) - return fetcher.nodeLabels, err -} - -type labelsFetcher struct { - nodeLabels map[string]string -} - -func (f *labelsFetcher) fetch() error { - nodeInfo, err := hostinfo.NewNodeInfo() - if err != nil { - return fmt.Errorf("unable to instantiate NodeInfo, err: %w", err) - } - f.nodeLabels, err = nodeInfo.GetNodeLabels(context.TODO()) - return err -} - -func notifyFetchNodeLabels() backoff.Notify { - attempt := 0 - return func(err error, delay time.Duration) { - attempt++ - mins := int(delay.Minutes()) - secs := int(math.Mod(delay.Seconds(), 60)) - log.Warnf("Failed to get node labels (attempt=%d): will retry in %dm%ds: %v", attempt, mins, secs, err) - } -} diff --git a/pkg/compliance/agent/testdata/configs/cis-kubernetes.yaml b/pkg/compliance/agent/testdata/configs/cis-kubernetes.yaml index 68313a77664fb..4c097eacc71b4 100644 --- a/pkg/compliance/agent/testdata/configs/cis-kubernetes.yaml +++ b/pkg/compliance/agent/testdata/configs/cis-kubernetes.yaml @@ -7,7 +7,6 @@ rules: - id: cis-kubernetes-1 scope: - kubernetesNode - hostSelector: node.label("kubernetes.io/role") in ["worker"] input: - file: path: /files/kube-apiserver.yaml diff --git a/pkg/compliance/checks/builder.go b/pkg/compliance/checks/builder.go index e1857235bdc01..74b2c6a8740bc 100644 --- a/pkg/compliance/checks/builder.go +++ b/pkg/compliance/checks/builder.go @@ -35,7 +35,6 @@ import ( fileutils "github.com/DataDog/datadog-agent/pkg/compliance/utils/file" processutils "github.com/DataDog/datadog-agent/pkg/compliance/utils/process" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/kubernetes/hostinfo" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-go/v5/statsd" ) @@ -229,18 +228,6 @@ func MayFail(o BuilderOption) BuilderOption { } } -// WithNodeLabels configures a builder to use specified Kubernetes node labels -func WithNodeLabels(nodeLabels map[string]string) BuilderOption { - return func(b *builder) error { - b.nodeLabels = map[string]string{} - for k, v := range nodeLabels { - k, v := hostinfo.LabelPreprocessor(k, v) - b.nodeLabels[k] = v - } - return nil - } -} - // WithRegoInput configures a builder to provide rego input based on the content // of a file instead of the current environment func WithRegoInput(regoInputPath string) BuilderOption { @@ -318,7 +305,6 @@ type builder struct { hostname string pathMapper *fileutils.PathMapper etcGroupPath string - nodeLabels map[string]string suiteMatcher SuiteMatcher ruleMatcher RuleMatcher @@ -448,153 +434,39 @@ func (b *builder) checkFromRegoRule(meta *compliance.SuiteMeta, rule *compliance return nil, err } - // skip host match check if rego input is overridden + // skip the scope checks if rego inputs were provided via CLI if b.regoInputOverride == nil { - eligible, err := b.hostMatcher(ruleScope, rule.ID, rule.HostSelector, rule.SkipOnK8s) - if err != nil { - return nil, err - } - - if !eligible { - log.Debugf("rule %s/%s discarded by hostMatcher", meta.Framework, rule.ID) - return nil, ErrRuleDoesNotApply - } - } - - return b.newRegoCheck(meta, ruleScope, rule, fallthroughReporter) -} - -func fallthroughReporter(report *compliance.Report) compliance.ReportResource { - return report.Resource -} - -func getRuleScope(meta *compliance.SuiteMeta, scopeList compliance.RuleScopeList) (compliance.RuleScope, error) { - switch { - case scopeList.Includes(compliance.DockerScope): - return compliance.DockerScope, nil - case scopeList.Includes(compliance.KubernetesNodeScope): - return compliance.KubernetesNodeScope, nil - case scopeList.Includes(compliance.KubernetesClusterScope): - return compliance.KubernetesClusterScope, nil - case scopeList.Includes(compliance.Unscoped): - return compliance.Unscoped, nil - default: - return "", ErrRuleScopeNotSupported - } -} - -func (b *builder) hostMatcher(scope compliance.RuleScope, ruleID string, hostSelector string, skipOnK8s bool) (bool, error) { - switch scope { - case compliance.DockerScope: - if skipOnK8s && config.IsKubernetes() { - log.Infof("rule %s skipped - running on a Kubernetes environment", ruleID) - return false, nil - } + switch ruleScope { + case compliance.DockerScope: + if rule.SkipOnK8s && config.IsKubernetes() { + log.Infof("rule %s skipped - running on a Kubernetes environment", rule.ID) + return nil, ErrRuleDoesNotApply + } - if b.dockerClient == nil { - log.Infof("rule %s skipped - not running in a docker environment", ruleID) - return false, nil - } - case compliance.KubernetesClusterScope: - if b.kubeClient == nil { - log.Infof("rule %s skipped - not running as Cluster Agent", ruleID) - return false, nil - } - case compliance.KubernetesNodeScope: - if config.IsKubernetes() { - ignoreHostSelectors := config.Datadog.GetBool("compliance_config.ignore_host_selectors") - if ignoreHostSelectors { - return true, nil + if b.dockerClient == nil { + log.Infof("rule %s skipped - not running in a docker environment", rule.ID) + return nil, ErrRuleDoesNotApply + } + case compliance.KubernetesClusterScope: + if b.kubeClient == nil { + log.Infof("rule %s skipped - not running as Cluster Agent", rule.ID) + return nil, ErrRuleDoesNotApply + } + case compliance.KubernetesNodeScope: + if !config.IsKubernetes() { + log.Infof("rule %s skipped - not running on a Kubernetes node", rule.ID) + return nil, ErrRuleDoesNotApply } - return b.isKubernetesNodeEligible(hostSelector) } - log.Infof("rule %s skipped - not running on a Kubernetes node", ruleID) - return false, nil - } - - return true, nil -} - -func (b *builder) isKubernetesNodeEligible(hostSelector string) (bool, error) { - if hostSelector == "" { - return true, nil - } - - expr, err := eval.ParseExpression(hostSelector) - if err != nil { - return false, err - } - - labelKeys := b.nodeLabelKeys() - nodeInstance := eval.NewInstance( - eval.VarMap{ - "node.labels": labelKeys, - }, - eval.FunctionMap{ - "node.hasLabel": b.nodeHasLabel, - "node.label": b.nodeLabel, - }, - eval.RegoInputMap{ - "labels": labelKeys, - }, - ) - - result, err := expr.Evaluate(nodeInstance) - if err != nil { - return false, err } - eligible, ok := result.(bool) - if !ok { - return false, fmt.Errorf("hostSelector %q does not evaluate to a boolean value", hostSelector) - } - - return eligible, nil -} - -func (b *builder) getNodeLabel(args ...interface{}) (string, bool, error) { - if len(args) == 0 { - return "", false, errors.New(`expecting one argument for label`) - } - label, ok := args[0].(string) - if !ok { - return "", false, fmt.Errorf(`expecting string value for label argument`) - } - if b.nodeLabels == nil { - return "", false, nil - } - v, ok := b.nodeLabels[label] - return v, ok, nil -} - -func (b *builder) nodeHasLabel(_ eval.Instance, args ...interface{}) (interface{}, error) { - _, ok, err := b.getNodeLabel(args...) - return ok, err -} - -func (b *builder) nodeLabel(_ eval.Instance, args ...interface{}) (interface{}, error) { - v, _, err := b.getNodeLabel(args...) - return v, err -} - -func (b *builder) nodeLabelKeys() []string { - var keys []string - for k := range b.nodeLabels { - keys = append(keys, k) - } - return keys -} - -func (b *builder) newRegoCheck(meta *compliance.SuiteMeta, ruleScope compliance.RuleScope, rule *compliance.RegoRule, handler resourceReporter) (compliance.Check, error) { var m metrics.Metrics - m = newRegoTelemetry() if config.Datadog.GetBool("compliance_config.opa.metrics.enabled") { m = newRegoMetrics(m, b.statsdClient) } regoCheck := rego.NewCheck(rule) - if err := regoCheck.CompileRule(rule, ruleScope, meta, m); err != nil { return nil, err } @@ -614,7 +486,7 @@ func (b *builder) newRegoCheck(meta *compliance.SuiteMeta, ruleScope compliance. suiteMeta: meta, - resourceHandler: handler, + resourceHandler: fallthroughReporter, scope: ruleScope, checkable: regoCheck, @@ -622,6 +494,25 @@ func (b *builder) newRegoCheck(meta *compliance.SuiteMeta, ruleScope compliance. }, nil } +func fallthroughReporter(report *compliance.Report) compliance.ReportResource { + return report.Resource +} + +func getRuleScope(meta *compliance.SuiteMeta, scopeList compliance.RuleScopeList) (compliance.RuleScope, error) { + switch { + case scopeList.Includes(compliance.DockerScope): + return compliance.DockerScope, nil + case scopeList.Includes(compliance.KubernetesNodeScope): + return compliance.KubernetesNodeScope, nil + case scopeList.Includes(compliance.KubernetesClusterScope): + return compliance.KubernetesClusterScope, nil + case scopeList.Includes(compliance.Unscoped): + return compliance.Unscoped, nil + default: + return "", ErrRuleScopeNotSupported + } +} + func (b *builder) Reporter() event.Reporter { return b.reporter } @@ -683,10 +574,6 @@ func (b *builder) IsLeader() bool { return true } -func (b *builder) NodeLabels() map[string]string { - return b.nodeLabels -} - func (b *builder) EvaluateFromCache(ev eval.Evaluatable) (interface{}, error) { instance := eval.NewInstance( nil, diff --git a/pkg/compliance/checks/builder_test.go b/pkg/compliance/checks/builder_test.go index 76b479b6d85b5..319f7c2311146 100644 --- a/pkg/compliance/checks/builder_test.go +++ b/pkg/compliance/checks/builder_test.go @@ -20,95 +20,6 @@ import ( assert "github.com/stretchr/testify/require" ) -func TestKubernetesNodeEligible(t *testing.T) { - tests := []struct { - name string - selector string - labels map[string]string - expectEligible bool - expectError error - }{ - { - name: "empty selector", - selector: "", - expectEligible: true, - }, - { - name: "role only", - selector: `node.label("kubernetes.io/role") in ["master"]`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bar", - }, - expectEligible: true, - }, - { - name: "role and another label", - selector: `node.label("kubernetes.io/role") == "master" && node.label("foo") == "bar"`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bar", - }, - expectEligible: true, - }, - { - name: "role and missing label", - selector: `node.label("kubernetes.io/role") == "master" && node.label("foo") == "bar"`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bazbar", - }, - expectEligible: false, - }, - { - name: "role and label name", - selector: `node.label("kubernetes.io/role") == "master" && "foo" in node.labels`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bazbar", - }, - expectEligible: true, - }, - { - name: "not boolean", - selector: `node.label("kubernetes.io/role")`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bazbar", - }, - expectEligible: false, - expectError: errors.New(`hostSelector "node.label(\"kubernetes.io/role\")" does not evaluate to a boolean value`), - }, - { - name: "bad expression", - selector: `¯\_(ツ)_/¯`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bazbar", - }, - expectEligible: false, - expectError: errors.New(`1:1: no match found for ¯`), - }, - { - name: "nil labels", - selector: `node.label("kubernetes.io/role") != "master" && "foo" in node.labels`, - expectEligible: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - builder := &builder{} - WithNodeLabels(tt.labels)(builder) - eligible, err := builder.isKubernetesNodeEligible(tt.selector) - assert.Equal(t, tt.expectEligible, eligible) - if tt.expectError != nil { - assert.EqualError(t, err, tt.expectError.Error()) - } - }) - } -} - func TestResolveValueFrom(t *testing.T) { assert := assert.New(t) diff --git a/pkg/compliance/checks/check.go b/pkg/compliance/checks/check.go index 1974c5e6cc430..c274f935cf08f 100644 --- a/pkg/compliance/checks/check.go +++ b/pkg/compliance/checks/check.go @@ -60,7 +60,7 @@ func (c *complianceCheck) String() string { return compliance.CheckName(c.ruleID, c.description) } -func (c *complianceCheck) Configure(config, initConfig integration.Data, source string) error { +func (c *complianceCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { return nil } diff --git a/pkg/compliance/checks/env/env.go b/pkg/compliance/checks/env/env.go index 005a516e50a9e..69f0b9f7a0d4b 100644 --- a/pkg/compliance/checks/env/env.go +++ b/pkg/compliance/checks/env/env.go @@ -41,5 +41,4 @@ type Configuration interface { RelativeToHostRoot(path string) string EvaluateFromCache(e eval.Evaluatable) (interface{}, error) IsLeader() bool - NodeLabels() map[string]string } diff --git a/pkg/compliance/mocks/audit_client.go b/pkg/compliance/mocks/audit_client.go index 98c279bdf55c4..6d16a1de05b57 100644 --- a/pkg/compliance/mocks/audit_client.go +++ b/pkg/compliance/mocks/audit_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/builder.go b/pkg/compliance/mocks/builder.go index 34b0dbdddb4f9..9118ed23681cf 100644 --- a/pkg/compliance/mocks/builder.go +++ b/pkg/compliance/mocks/builder.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/clients.go b/pkg/compliance/mocks/clients.go index 47a349921ef8b..a6b2070bae258 100644 --- a/pkg/compliance/mocks/clients.go +++ b/pkg/compliance/mocks/clients.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/configuration.go b/pkg/compliance/mocks/configuration.go index 4ccc49903f3ed..5fb622d5eae4c 100644 --- a/pkg/compliance/mocks/configuration.go +++ b/pkg/compliance/mocks/configuration.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks @@ -91,22 +91,6 @@ func (_m *Configuration) MaxEventsPerRun() int { return r0 } -// NodeLabels provides a mock function with given fields: -func (_m *Configuration) NodeLabels() map[string]string { - ret := _m.Called() - - var r0 map[string]string - if rf, ok := ret.Get(0).(func() map[string]string); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(map[string]string) - } - } - - return r0 -} - // NormalizeToHostRoot provides a mock function with given fields: path func (_m *Configuration) NormalizeToHostRoot(path string) string { ret := _m.Called(path) diff --git a/pkg/compliance/mocks/docker_client.go b/pkg/compliance/mocks/docker_client.go index 673e31d4881d1..720800694e156 100644 --- a/pkg/compliance/mocks/docker_client.go +++ b/pkg/compliance/mocks/docker_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/env.go b/pkg/compliance/mocks/env.go index 3bd38b2a4b7a4..051c887817d7f 100644 --- a/pkg/compliance/mocks/env.go +++ b/pkg/compliance/mocks/env.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks @@ -157,22 +157,6 @@ func (_m *Env) MaxEventsPerRun() int { return r0 } -// NodeLabels provides a mock function with given fields: -func (_m *Env) NodeLabels() map[string]string { - ret := _m.Called() - - var r0 map[string]string - if rf, ok := ret.Get(0).(func() map[string]string); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(map[string]string) - } - } - - return r0 -} - // NormalizeToHostRoot provides a mock function with given fields: path func (_m *Env) NormalizeToHostRoot(path string) string { ret := _m.Called(path) diff --git a/pkg/compliance/mocks/evaluatable.go b/pkg/compliance/mocks/evaluatable.go index 03921d992e512..d08e7fae32625 100644 --- a/pkg/compliance/mocks/evaluatable.go +++ b/pkg/compliance/mocks/evaluatable.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/iterator.go b/pkg/compliance/mocks/iterator.go index 21146f405ee9c..78b9085e796c4 100644 --- a/pkg/compliance/mocks/iterator.go +++ b/pkg/compliance/mocks/iterator.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/kube_client.go b/pkg/compliance/mocks/kube_client.go index 930dbf709f14d..bbd81265a1136 100644 --- a/pkg/compliance/mocks/kube_client.go +++ b/pkg/compliance/mocks/kube_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/rego_configuration.go b/pkg/compliance/mocks/rego_configuration.go index d361332686c31..8d45a868b972b 100644 --- a/pkg/compliance/mocks/rego_configuration.go +++ b/pkg/compliance/mocks/rego_configuration.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/reporter.go b/pkg/compliance/mocks/reporter.go index ce6418c49ec58..0b9c4fc2d36ab 100644 --- a/pkg/compliance/mocks/reporter.go +++ b/pkg/compliance/mocks/reporter.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/scheduler.go b/pkg/compliance/mocks/scheduler.go index ab0ba281388af..5166e5e20b049 100644 --- a/pkg/compliance/mocks/scheduler.go +++ b/pkg/compliance/mocks/scheduler.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/rego/rego_check.go b/pkg/compliance/rego/rego_check.go index a3911cd08b444..a3f31f69bca43 100644 --- a/pkg/compliance/rego/rego_check.go +++ b/pkg/compliance/rego/rego_check.go @@ -33,7 +33,6 @@ import ( ) const regoEvaluator = "rego" -const regoParseTimeout = 20 * time.Second const regoEvalTimeout = 20 * time.Second var ( @@ -46,17 +45,16 @@ var ( type regoInput struct { compliance.RegoInput - preparedTransformQuery rego.PreparedEvalQuery + regoModuleArgs []func(*rego.Rego) } type regoCheck struct { evalLock sync.Mutex - ruleID string - ruleScope compliance.RuleScope - inputs []regoInput - regoModuleArgs []func(*rego.Rego) - preparedEvalQuery rego.PreparedEvalQuery + ruleID string + ruleScope compliance.RuleScope + inputs []regoInput + regoModuleArgs []func(*rego.Rego) } // NewCheck returns a new rego based check @@ -194,7 +192,7 @@ func computeRuleTransform(rule *compliance.RegoRule, res compliance.RegoInput, m return append(options, ruleModules...), query, nil } -func (r *regoCheck) prepareQuery(moduleArgs []func(*rego.Rego), query string) (rego.PreparedEvalQuery, []func(*rego.Rego), error) { +func (r *regoCheck) createQuery(moduleArgs []func(*rego.Rego), query string) []func(*rego.Rego) { log.Debugf("rego query: %v", query) moduleArgs = append(moduleArgs, rego.Query(query)) @@ -207,14 +205,7 @@ func (r *regoCheck) prepareQuery(moduleArgs []func(*rego.Rego), query string) (r rego.PrintHook(®oPrintHook{}), ) - ctx, cancel := context.WithTimeout(context.Background(), regoParseTimeout) - defer cancel() - - preparedEvalQuery, err := rego.New( - moduleArgs..., - ).PrepareForEval(ctx) - - return preparedEvalQuery, moduleArgs, err + return moduleArgs } func (r *regoCheck) CompileRule(rule *compliance.RegoRule, ruleScope compliance.RuleScope, meta *compliance.SuiteMeta, metrics metrics.Metrics) error { @@ -232,14 +223,8 @@ func (r *regoCheck) CompileRule(rule *compliance.RegoRule, ruleScope compliance. moduleArgs = append(moduleArgs, ruleModules...) - preparedEvalQuery, moduleArgs, err := r.prepareQuery(moduleArgs, query) - if err != nil { - return err - } - - r.preparedEvalQuery = preparedEvalQuery + r.regoModuleArgs = r.createQuery(moduleArgs, query) r.ruleScope = ruleScope - r.regoModuleArgs = moduleArgs // resource transformers for i, input := range r.inputs { @@ -255,12 +240,7 @@ func (r *regoCheck) CompileRule(rule *compliance.RegoRule, ruleScope compliance. } moduleArgs = append(moduleArgs, ruleModules...) - preparedTransformQuery, _, err := r.prepareQuery(moduleArgs, query) - if err != nil { - return err - } - - r.inputs[i].preparedTransformQuery = preparedTransformQuery + r.inputs[i].regoModuleArgs = r.createQuery(moduleArgs, query) } return nil @@ -307,7 +287,8 @@ func (r *regoCheck) buildNormalInput(env env.Env) (eval.RegoInputMap, error) { ctx, cancel := context.WithTimeout(context.Background(), regoEvalTimeout) defer cancel() - results, err := regoInput.preparedTransformQuery.Eval(ctx, rego.EvalInput(input)) + regoMod := rego.New(append(regoInput.regoModuleArgs, rego.Input(input))...) + results, err := regoMod.Eval(ctx) if err != nil { return nil, err } @@ -451,9 +432,6 @@ func (r *regoCheck) buildContextInput(env env.Env) eval.RegoInputMap { if r.ruleScope == compliance.KubernetesClusterScope { context["kubernetes_cluster"], _ = env.KubeClient().ClusterID() } - if r.ruleScope == compliance.KubernetesNodeScope { - context["kubernetes_node_labels"] = env.NodeLabels() - } mappedInputs := buildMappedInputs(r.inputs) if mappedInputs != nil { diff --git a/pkg/compliance/rule.go b/pkg/compliance/rule.go index e1d85f468e2a9..80ee795f74776 100644 --- a/pkg/compliance/rule.go +++ b/pkg/compliance/rule.go @@ -16,11 +16,10 @@ type Rule interface { // RuleCommon defines the base fields of a rule in a compliance config type RuleCommon struct { - ID string `yaml:"id"` - Description string `yaml:"description,omitempty"` - Scope RuleScopeList `yaml:"scope,omitempty"` - HostSelector string `yaml:"hostSelector,omitempty"` - SkipOnK8s bool `yaml:"skipOnKubernetes,omitempty"` + ID string `yaml:"id"` + Description string `yaml:"description,omitempty"` + Scope RuleScopeList `yaml:"scope,omitempty"` + SkipOnK8s bool `yaml:"skipOnKubernetes,omitempty"` } // RegoRule defines a rule in a compliance config diff --git a/pkg/compliance/suite_test.go b/pkg/compliance/suite_test.go index 7a0646be43afd..335facfd512cf 100644 --- a/pkg/compliance/suite_test.go +++ b/pkg/compliance/suite_test.go @@ -34,9 +34,8 @@ func TestParseSuite(t *testing.T) { RegoRules: []RegoRule{ { RuleCommon: RuleCommon{ - ID: "cis-docker-1", - Scope: RuleScopeList{DockerScope}, - HostSelector: `"foo" in node.labels`, + ID: "cis-docker-1", + Scope: RuleScopeList{DockerScope}, }, Inputs: []RegoInput{ { diff --git a/pkg/compliance/testdata/cis-docker.yaml b/pkg/compliance/testdata/cis-docker.yaml index 0f328cfdc7365..9a54ba7a01d07 100644 --- a/pkg/compliance/testdata/cis-docker.yaml +++ b/pkg/compliance/testdata/cis-docker.yaml @@ -7,7 +7,6 @@ rules: - id: cis-docker-1 scope: - docker - hostSelector: '"foo" in node.labels' input: - file: path: /etc/docker/daemon.json diff --git a/pkg/config/autodiscovery/autodiscovery.go b/pkg/config/autodiscovery/autodiscovery.go index 1aac28c2bd55f..73eba8449bfeb 100644 --- a/pkg/config/autodiscovery/autodiscovery.go +++ b/pkg/config/autodiscovery/autodiscovery.go @@ -9,7 +9,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers" "github.com/DataDog/datadog-agent/pkg/autodiscovery/providers/names" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -82,37 +81,23 @@ func DiscoverComponentsFromEnv() ([]config.ConfigurationProviders, []config.List return detectedProviders, detectedListeners } - // Upon retiring this flag, see comment in `KubeContainerConfigProvider` - kubeContainerOn := util.CcaInAD() isContainerEnv := config.IsFeaturePresent(config.Docker) || config.IsFeaturePresent(config.Containerd) || config.IsFeaturePresent(config.Podman) || config.IsFeaturePresent(config.ECSFargate) isKubeEnv := config.IsFeaturePresent(config.Kubernetes) - if kubeContainerOn && (isContainerEnv || isKubeEnv) { + if isContainerEnv || isKubeEnv { detectedProviders = append(detectedProviders, config.ConfigurationProviders{Name: names.KubeContainer}) log.Info("Adding KubeContainer provider from environment") } - if isContainerEnv { - if !kubeContainerOn { - detectedProviders = append(detectedProviders, config.ConfigurationProviders{Name: names.Container, Polling: true, PollInterval: "1s"}) - log.Info("Adding Container provider from environment") - } - - if !isKubeEnv { - detectedListeners = append(detectedListeners, config.Listeners{Name: names.Container}) - log.Info("Adding Container listener from environment") - } + if isContainerEnv && !isKubeEnv { + detectedListeners = append(detectedListeners, config.Listeners{Name: names.Container}) + log.Info("Adding Container listener from environment") } if isKubeEnv { - if !kubeContainerOn { - detectedProviders = append(detectedProviders, config.ConfigurationProviders{Name: "kubelet", Polling: true}) - log.Info("Adding Kubelet provider from environment") - } - detectedListeners = append(detectedListeners, config.Listeners{Name: "kubelet"}) log.Info("Adding Kubelet listener from environment") } diff --git a/pkg/config/config.go b/pkg/config/config.go index 009ddb777c704..87e289fff0328 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -264,6 +264,8 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("cmd_port", 5001) config.BindEnvAndSetDefault("default_integration_http_timeout", 9) config.BindEnvAndSetDefault("integration_tracing", false) + config.BindEnvAndSetDefault("integration_tracing_exhaustive", false) + config.BindEnvAndSetDefault("integration_profiling", false) config.BindEnvAndSetDefault("enable_metadata_collection", true) config.BindEnvAndSetDefault("enable_gohai", true) config.BindEnvAndSetDefault("check_runners", int64(4)) @@ -818,6 +820,7 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("internal_profiling.block_profile_rate", 0) config.BindEnvAndSetDefault("internal_profiling.mutex_profile_fraction", 0) config.BindEnvAndSetDefault("internal_profiling.enable_goroutine_stacktraces", false) + config.BindEnvAndSetDefault("internal_profiling.delta_profiles", true) config.BindEnvAndSetDefault("internal_profiling.capture_all_allocations", false) @@ -932,9 +935,6 @@ func InitConfig(config Config) { // more disk I/O at the wildcard log paths config.BindEnvAndSetDefault("logs_config.file_wildcard_selection_mode", "by_name") - // temporary feature flag until this becomes the only option - config.BindEnvAndSetDefault("logs_config.cca_in_ad", true) - // The cardinality of tags to send for checks and dogstatsd respectively. // Choices are: low, orchestrator, high. // WARNING: sending orchestrator, or high tags for dogstatsd metrics may create more metrics @@ -987,6 +987,8 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("clc_runner_port", 5005) config.BindEnvAndSetDefault("clc_runner_server_write_timeout", 15) config.BindEnvAndSetDefault("clc_runner_server_readheader_timeout", 10) + config.BindEnvAndSetDefault("clc_runner_remote_tagger_enabled", false) + // Admission controller config.BindEnvAndSetDefault("admission_controller.enabled", false) config.BindEnvAndSetDefault("admission_controller.mutate_unlabelled", false) @@ -1013,6 +1015,7 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.enabled", true) config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.endpoint", "/injectlib") config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.container_registry", "gcr.io/datadoghq") + config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.patcher.enabled", false) // Telemetry // Enable telemetry metrics on the internals of the Agent. @@ -1048,8 +1051,8 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("orchestrator_explorer.collector_discovery.enabled", true) config.BindEnv("orchestrator_explorer.max_per_message") config.BindEnv("orchestrator_explorer.max_message_bytes") - config.BindEnv("orchestrator_explorer.orchestrator_dd_url") - config.BindEnv("orchestrator_explorer.orchestrator_additional_endpoints") + config.BindEnv("orchestrator_explorer.orchestrator_dd_url", "DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_DD_URL", "DD_ORCHESTRATOR_URL") + config.BindEnv("orchestrator_explorer.orchestrator_additional_endpoints", "DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_ADDITIONAL_ENDPOINTS", "DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS") config.BindEnv("orchestrator_explorer.use_legacy_endpoint") config.BindEnvAndSetDefault("orchestrator_explorer.manifest_collection.enabled", false) config.BindEnvAndSetDefault("orchestrator_explorer.manifest_collection.buffer_manifest", true) @@ -1084,11 +1087,15 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("inventories_max_interval", DefaultInventoriesMaxInterval) // integer seconds config.BindEnvAndSetDefault("inventories_min_interval", DefaultInventoriesMinInterval) // integer seconds + // workloadmeta + config.BindEnvAndSetDefault("workloadmeta.image_metadata_collection.enabled", false) + // Datadog security agent (common) config.BindEnvAndSetDefault("security_agent.cmd_port", 5010) config.BindEnvAndSetDefault("security_agent.expvar_port", 5011) config.BindEnvAndSetDefault("security_agent.log_file", defaultSecurityAgentLogFile) config.BindEnvAndSetDefault("security_agent.remote_tagger", true) + config.BindEnvAndSetDefault("security_agent.remote_workloadmeta", false) // TODO: switch this to true when ready config.BindEnvAndSetDefault("security_agent.internal_profiling.enabled", false, "DD_SECURITY_AGENT_INTERNAL_PROFILING_ENABLED") config.BindEnvAndSetDefault("security_agent.internal_profiling.site", DefaultSite, "DD_SECURITY_AGENT_INTERNAL_PROFILING_SITE", "DD_SITE") @@ -1109,7 +1116,6 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("compliance_config.run_path", defaultRunPath) config.BindEnv("compliance_config.run_commands_as") bindEnvAndSetLogsConfigKeys(config, "compliance_config.endpoints.") - config.BindEnvAndSetDefault("compliance_config.ignore_host_selectors", true) config.BindEnvAndSetDefault("compliance_config.opa.metrics.enabled", false) // Datadog security agent (runtime) @@ -1195,10 +1201,32 @@ func InitConfig(config Config) { // command line options config.SetKnown("cmd.check.fullsketches") - // Windows Performance Counter refresh interval - // Controls if and how often Performance Counters need to be refreshed by the agent. This is mainly used in integrations that rely on Performance Counters. + // Windows Performance Counter refresh interval in seconds (introduced in 7.40, narrowed down + // in 7.42). Additional information can be found where it is used (refreshPdhObjectCache()) + // The refresh can be disabled by setting the interval to 0. config.BindEnvAndSetDefault("windows_counter_refresh_interval", 60) + // Added in Agent version 7.42 + // Limits the number of times a check will attempt to initialize a performance counter before ceasing + // attempts to initialize the counter. This allows the Agent to stop incurring the overhead of trying + // to initialize a counter that will probably never succeed. For example, when the performance counter + // database needs to be rebuilt or the counter is disabled. + // https://learn.microsoft.com/en-us/troubleshoot/windows-server/performance/manually-rebuild-performance-counters + // + // The value of this option should be chosen in consideration with the windows_counter_refresh_interval option. + // The performance counter cache is refreshed during subsequent attempts to intiialize a counter that failed + // the first time (with consideration of the windows_counter_refresh_interval value). + // It is unknown if it is possible for a counter that failed to initialize to later succeed without a refresh + // in between the attempts. Consequently, if windows_counter_refresh_interval is 0 (disabled), then this option should + // be 1. If this option is too small compared to the windows_counter_refresh_interval, it is possible to reach the limit + // before a refresh occurs. Typically there is one attempt per check run, and check runs are 15 seconds apart by default. + // + // Increasing this value may help in the rare instance where counters are not available for some time after host boot. + // + // Setting this option to 0 disables the limit and the Agent will attempt to initialize the counter forever. + // The default value of 20 means the Agent will retry counter intialization for roughly 5 minutes. + config.BindEnvAndSetDefault("windows_counter_init_failure_limit", 20) + // Vector integration bindVectorOptions(config, Metrics) bindVectorOptions(config, Logs) @@ -1208,7 +1236,9 @@ func InitConfig(config Config) { setupProcesses(config) } -var ddURLRegexp = regexp.MustCompile(`^app(\.(us|eu)\d)?\.(datad(oghq|0g)\.(com|eu)|ddog-gov\.com)$`) +// ddURLRegexp determines if an URL belongs to Datadog or not. If the URL belongs to Datadog it's prefixed with the Agent +// version (see AddAgentVersionToDomain). +var ddURLRegexp = regexp.MustCompile(`^app(\.[a-z]{2}\d)?\.(datad(oghq|0g)\.(com|eu)|ddog-gov\.com)$`) // GetProxies returns the proxy settings from the configuration func GetProxies() *Proxy { @@ -1577,7 +1607,8 @@ func setupFipsEndpoints(config Config) error { // APM config.Set("apm_config.apm_dd_url", protocol+urlFor(traces)) - config.Set("apm_config.profiling_dd_url", protocol+urlFor(profiles)) + // Adding "/api/v2/profile" because it's not added to the 'apm_config.profiling_dd_url' value by the Agent + config.Set("apm_config.profiling_dd_url", protocol+urlFor(profiles)+"/api/v2/profile") config.Set("apm_config.telemetry.dd_url", protocol+urlFor(instrumentationTelemetry)) // Processes @@ -2008,17 +2039,16 @@ func getValidHostAliasesWithConfig(config Config) []string { return aliases } -// GetConfiguredTags returns complete list of user configured tags. -// -// This is composed of DD_TAGS and DD_EXTRA_TAGS, with DD_DOGSTATSD_TAGS included -// if includeDogstatsd is true. -func GetConfiguredTags(includeDogstatsd bool) []string { - tags := Datadog.GetStringSlice("tags") - extraTags := Datadog.GetStringSlice("extra_tags") +// GetConfiguredTags returns list of tags from a configuration, based on +// `tags` (DD_TAGS) and `extra_tags“ (DD_EXTRA_TAGS), with `dogstatsd_tags` (DD_DOGSTATSD_TAGS) +// if includeDogdstatsd is true. +func GetConfiguredTags(config Config, includeDogstatsd bool) []string { + tags := config.GetStringSlice("tags") + extraTags := config.GetStringSlice("extra_tags") var dsdTags []string if includeDogstatsd { - dsdTags = Datadog.GetStringSlice("dogstatsd_tags") + dsdTags = config.GetStringSlice("dogstatsd_tags") } combined := make([]string, 0, len(tags)+len(extraTags)+len(dsdTags)) @@ -2029,6 +2059,14 @@ func GetConfiguredTags(includeDogstatsd bool) []string { return combined } +// GetGlobalConfiguredTags returns complete list of user configured tags. +// +// This is composed of DD_TAGS and DD_EXTRA_TAGS, with DD_DOGSTATSD_TAGS included +// if includeDogstatsd is true. +func GetGlobalConfiguredTags(includeDogstatsd bool) []string { + return GetConfiguredTags(Datadog, includeDogstatsd) +} + func bindVectorOptions(config Config, datatype DataType) { config.BindEnvAndSetDefault(fmt.Sprintf("vector.%s.enabled", datatype), false) config.BindEnvAndSetDefault(fmt.Sprintf("vector.%s.url", datatype), "") @@ -2061,7 +2099,7 @@ func GetTraceAgentDefaultEnv() string { defaultEnv = Datadog.GetString("env") log.Debugf("Setting DefaultEnv to %q (from 'env' config option)", defaultEnv) } else { - for _, tag := range GetConfiguredTags(false) { + for _, tag := range GetConfiguredTags(Datadog, false) { if strings.HasPrefix(tag, "env:") { defaultEnv = strings.TrimPrefix(tag, "env:") log.Debugf("Setting DefaultEnv to %q (from `env:` entry under the 'tags' config option: %q)", defaultEnv, tag) diff --git a/pkg/config/config_template.yaml b/pkg/config/config_template.yaml index 400fc88820af0..4f8a589e32a16 100644 --- a/pkg/config/config_template.yaml +++ b/pkg/config/config_template.yaml @@ -895,17 +895,6 @@ api_key: # # oid_batch_size: 5 -{{- if (eq .OS "windows")}} - ## @param windows_counter_refresh_interval - number - optional - default: 60 - ## This controls the interval in seconds for which windows performance counters are refreshed by the agent. - ## Refreshes are necessary for the discovery of new counters/countersets and instances for integrations that - ## rely on performance counters. Checks include active_directory, aspdotnet, dotnetclr, exchange_server, hyperv, - ## iis and windows_performance_counters. - ## Refresh can be disabled by setting the interval to 0. - # - # windows_counter_refresh_interval: 60 -{{ end }} - {{- if .InternalProfiling -}} ## @param profiling - custom object - optional @@ -1024,8 +1013,8 @@ api_key: ## @param open_files_limit - integer - optional - default: 500 ## @env DD_LOGS_CONFIG_OPEN_FILES_LIMIT - integer - optional - default: 500 ## The maximum number of files that can be tailed in parallel. - # Note: the default for windows and Mac OS is 200. The default for - # all other systems is 500. + ## Note: the default for windows and Mac OS is 200. The default for + ## all other systems is 500. # # open_files_limit: 500 @@ -1183,7 +1172,7 @@ api_key: # repl: "" ## @param ignore_resources - list of strings - optional - ## @env DD_APM_IGNORE_RESOURCES - space separated list of strings - optional + ## @env DD_APM_IGNORE_RESOURCES - comma separated list of strings - optional ## An exclusion list of regular expressions can be provided to disable certain traces based on their resource name ## all entries must be surrounded by double quotes and separated by commas. # @@ -1539,6 +1528,20 @@ api_key: {{ end -}} +{{- if .UniversalServiceMonitoringModule }} + +############################################################# +## System Probe Universal Service monitoring Configuration ## +############################################################# + +# service_monitoring_config: +## @param enabled - boolean - optional - default: false +## Set to true to enable the Universal Service Monitoring Module of the System Probe +# +# enabled: false + +{{ end -}} + {{- if .SecurityModule }} ########################################## diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index f976fdd4ab0db..363f5aeb5d865 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -558,82 +558,80 @@ additional_endpoints: } func TestAddAgentVersionToDomain(t *testing.T) { - // US - newURL, err := AddAgentVersionToDomain("https://app.datadoghq.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("app")+".datadoghq.com", newURL) - - newURL, err = AddAgentVersionToDomain("https://app.datadoghq.com", "flare") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("flare")+".datadoghq.com", newURL) - - // EU - newURL, err = AddAgentVersionToDomain("https://app.datadoghq.eu", "app") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("app")+".datadoghq.eu", newURL) - - newURL, err = AddAgentVersionToDomain("https://app.datadoghq.eu", "flare") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("flare")+".datadoghq.eu", newURL) - - // Gov - newURL, err = AddAgentVersionToDomain("https://app.ddog-gov.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("app")+".ddog-gov.com", newURL) - - newURL, err = AddAgentVersionToDomain("https://app.ddog-gov.com", "flare") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("flare")+".ddog-gov.com", newURL) - - // Additional site - newURL, err = AddAgentVersionToDomain("https://app.us2.datadoghq.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("app")+".us2.datadoghq.com", newURL) - - newURL, err = AddAgentVersionToDomain("https://app.us2.datadoghq.com", "flare") - require.Nil(t, err) - assert.Equal(t, "https://"+getDomainPrefix("flare")+".us2.datadoghq.com", newURL) - - // Custom DD URL: leave unchanged - newURL, err = AddAgentVersionToDomain("https://custom.datadoghq.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://custom.datadoghq.com", newURL) - - newURL, err = AddAgentVersionToDomain("https://custom.datadoghq.com", "flare") - require.Nil(t, err) - assert.Equal(t, "https://custom.datadoghq.com", newURL) - - // Custom DD URL with 'agent' subdomain: leave unchanged - newURL, err = AddAgentVersionToDomain("https://custom.agent.datadoghq.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://custom.agent.datadoghq.com", newURL) - - newURL, err = AddAgentVersionToDomain("https://custom.agent.datadoghq.com", "flare") - require.Nil(t, err) - assert.Equal(t, "https://custom.agent.datadoghq.com", newURL) - - // Custom DD URL: unclear if anyone is actually using such a URL, but for now leave unchanged - newURL, err = AddAgentVersionToDomain("https://app.custom.datadoghq.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://app.custom.datadoghq.com", newURL) - - newURL, err = AddAgentVersionToDomain("https://app.custom.datadoghq.com", "flare") - require.Nil(t, err) - assert.Equal(t, "https://app.custom.datadoghq.com", newURL) - - // Custom top-level domain: unclear if anyone is actually using this, but for now leave unchanged - newURL, err = AddAgentVersionToDomain("https://app.datadoghq.internal", "app") - require.Nil(t, err) - assert.Equal(t, "https://app.datadoghq.internal", newURL) - - newURL, err = AddAgentVersionToDomain("https://app.datadoghq.internal", "flare") - require.Nil(t, err) - assert.Equal(t, "https://app.datadoghq.internal", newURL) - - // DD URL set to proxy, leave unchanged - newURL, err = AddAgentVersionToDomain("https://app.myproxy.com", "app") - require.Nil(t, err) - assert.Equal(t, "https://app.myproxy.com", newURL) + appVersionPrefix := getDomainPrefix("app") + flareVersionPrefix := getDomainPrefix("flare") + + versionURLTests := []struct { + url string + expectedURL string + shouldAppendVersion bool + }{ + { // US + "https://app.datadoghq.com", + ".datadoghq.com", + true, + }, + { // EU + "https://app.datadoghq.eu", + ".datadoghq.eu", + true, + }, + { // Gov + "https://app.ddog-gov.com", + ".ddog-gov.com", + true, + }, + { // Additional site + "https://app.us2.datadoghq.com", + ".us2.datadoghq.com", + true, + }, + { // arbitrary site + "https://app.xx9.datadoghq.com", + ".xx9.datadoghq.com", + true, + }, + { // Custom DD URL: leave unchanged + "https://custom.datadoghq.com", + "custom.datadoghq.com", + false, + }, + { // Custom DD URL with 'agent' subdomain: leave unchanged + "https://custom.agent.datadoghq.com", + "custom.agent.datadoghq.com", + false, + }, + { // Custom DD URL: unclear if anyone is actually using such a URL, but for now leave unchanged + "https://app.custom.datadoghq.com", + "app.custom.datadoghq.com", + false, + }, + { // Custom top-level domain: unclear if anyone is actually using this, but for now leave unchanged + "https://app.datadoghq.internal", + "app.datadoghq.internal", + false, + }, + { // DD URL set to proxy, leave unchanged + "https://app.myproxy.com", + "app.myproxy.com", + false, + }, + } + + for _, testCase := range versionURLTests { + appURL, err := AddAgentVersionToDomain(testCase.url, "app") + require.Nil(t, err) + flareURL, err := AddAgentVersionToDomain(testCase.url, "flare") + require.Nil(t, err) + + if testCase.shouldAppendVersion { + assert.Equal(t, "https://"+appVersionPrefix+testCase.expectedURL, appURL) + assert.Equal(t, "https://"+flareVersionPrefix+testCase.expectedURL, flareURL) + } else { + assert.Equal(t, "https://"+testCase.expectedURL, appURL) + assert.Equal(t, "https://"+testCase.expectedURL, flareURL) + } + } } func TestIsCloudProviderEnabled(t *testing.T) { @@ -1235,7 +1233,7 @@ func assertFipsProxyExpectedConfig(t *testing.T, expectedBaseHTTPURL, expectedBa if rng { assert.Equal(t, expectedBaseHTTPURL+"01", c.GetString("dd_url")) assert.Equal(t, expectedBaseHTTPURL+"02", c.GetString("apm_config.apm_dd_url")) - assert.Equal(t, expectedBaseHTTPURL+"03", c.GetString("apm_config.profiling_dd_url")) + assert.Equal(t, expectedBaseHTTPURL+"03"+"/api/v2/profile", c.GetString("apm_config.profiling_dd_url")) assert.Equal(t, expectedBaseHTTPURL+"10", c.GetString("apm_config.telemetry.dd_url")) assert.Equal(t, expectedBaseHTTPURL+"04", c.GetString("process_config.process_dd_url")) assert.Equal(t, expectedBaseURL+"05", c.GetString("logs_config.logs_dd_url")) @@ -1246,7 +1244,7 @@ func assertFipsProxyExpectedConfig(t *testing.T, expectedBaseHTTPURL, expectedBa } else { assert.Equal(t, expectedBaseHTTPURL, c.GetString("dd_url")) assert.Equal(t, expectedBaseHTTPURL, c.GetString("apm_config.apm_dd_url")) - assert.Equal(t, expectedBaseHTTPURL, c.GetString("apm_config.profiling_dd_url")) + assert.Equal(t, expectedBaseHTTPURL, c.GetString("apm_config.profiling_dd_url")) // Omitting "/api/v2/profile" as the config is not overwritten assert.Equal(t, expectedBaseHTTPURL, c.GetString("apm_config.telemetry.dd_url")) assert.Equal(t, expectedBaseHTTPURL, c.GetString("process_config.process_dd_url")) assert.Equal(t, expectedBaseURL, c.GetString("logs_config.logs_dd_url")) diff --git a/pkg/config/environment.go b/pkg/config/environment.go index 98204b1fb004b..59ce13c20425c 100644 --- a/pkg/config/environment.go +++ b/pkg/config/environment.go @@ -46,7 +46,7 @@ func IsKubernetes() bool { // IsECSFargate returns whether the Agent is running in ECS Fargate func IsECSFargate() bool { - return os.Getenv("ECS_FARGATE") != "" + return os.Getenv("ECS_FARGATE") != "" || os.Getenv("AWS_EXECUTION_ENV") == "AWS_ECS_FARGATE" } // IsHostProcAvailable returns whether host proc is available or not diff --git a/pkg/config/process.go b/pkg/config/process.go index d8cab39e68f3a..725e3246e183f 100644 --- a/pkg/config/process.go +++ b/pkg/config/process.go @@ -164,6 +164,7 @@ func setupProcesses(config Config) { procBindEnvAndSetDefault(config, "process_config.internal_profiling.enabled", false) procBindEnvAndSetDefault(config, "process_config.grpc_connection_timeout_secs", DefaultGRPCConnectionTimeoutSecs) procBindEnvAndSetDefault(config, "process_config.remote_tagger", false) + procBindEnvAndSetDefault(config, "process_config.remote_workloadmeta", false) // This flag might change. It's still being tested. procBindEnvAndSetDefault(config, "process_config.disable_realtime_checks", false) // Process Discovery Check diff --git a/pkg/config/process_test.go b/pkg/config/process_test.go index 44e0363b65460..3d4c57677a3a0 100644 --- a/pkg/config/process_test.go +++ b/pkg/config/process_test.go @@ -38,6 +38,10 @@ func TestProcessDefaultConfig(t *testing.T) { key: "process_config.remote_tagger", defaultValue: false, }, + { + key: "process_config.remote_workloadmeta", + defaultValue: false, + }, { key: "process_config.process_discovery.enabled", defaultValue: true, diff --git a/pkg/config/remote/api/http.go b/pkg/config/remote/api/http.go index aff6fe1ee5039..e4067ac8c0d3d 100644 --- a/pkg/config/remote/api/http.go +++ b/pkg/config/remote/api/http.go @@ -85,7 +85,7 @@ func (c *HTTPClient) Fetch(ctx context.Context, request *pbgo.LatestConfigsReque url := c.baseURL + pollEndpoint log.Debugf("Querying url %s with %+v", url, request) - req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, bytes.NewBuffer(body)) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewBuffer(body)) if err != nil { return nil, fmt.Errorf("failed to create org data request: %w", err) } diff --git a/pkg/config/remote/client.go b/pkg/config/remote/client.go index b2e302d563ef8..9fee5137919df 100644 --- a/pkg/config/remote/client.go +++ b/pkg/config/remote/client.go @@ -33,6 +33,12 @@ const ( recoveryInterval = 2 ) +// ConfigUpdater defines the interface that an agent client uses to get config updates +// from the core remote-config service +type ConfigUpdater interface { + ClientGetConfigs(context.Context, *pbgo.ClientGetConfigsRequest) (*pbgo.ClientGetConfigsResponse, error) +} + // Client is a remote-configuration client to obtain configurations from the local API type Client struct { m sync.Mutex @@ -52,34 +58,79 @@ type Client struct { backoffPolicy backoff.Policy backoffErrorCount int - state *state.Repository + updater ConfigUpdater - grpc pbgo.AgentSecureClient + state *state.Repository // Listeners - apmListeners []func(update map[string]state.APMSamplingConfig) - cwsListeners []func(update map[string]state.ConfigCWSDD) + apmListeners []func(update map[string]state.APMSamplingConfig) + cwsListeners []func(update map[string]state.ConfigCWSDD) + cwsCustomListeners []func(update map[string]state.ConfigCWSCustom) +} + +// agentGRPCConfigFetcher defines how to retrieve config updates over a +// datadog-agent's secure GRPC client +type agentGRPCConfigFetcher struct { + client pbgo.AgentSecureClient +} + +func newAgentGRPCConfigFetcher() (*agentGRPCConfigFetcher, error) { + c, err := grpc.GetDDAgentSecureClient(context.Background()) + if err != nil { + return nil, err + } + + return &agentGRPCConfigFetcher{ + client: c, + }, nil +} + +// ClientGetConfigs implements the ConfigUpdater interface for agentGRPCConfigFetcher +func (g *agentGRPCConfigFetcher) ClientGetConfigs(ctx context.Context, request *pbgo.ClientGetConfigsRequest) (*pbgo.ClientGetConfigsResponse, error) { + // When communicating with the core service via grpc, the auth token is handled + // by the core-agent, which runs independently. It's not guaranteed it starts before us, + // or that if it restarts that the auth token remains the same. Thus we need to do this every request. + token, err := security.FetchAuthToken() + if err != nil { + return nil, errors.Wrap(err, "could not acquire agent auth token") + } + md := metadata.MD{ + "authorization": []string{fmt.Sprintf("Bearer %s", token)}, + } + + ctx = metadata.NewOutgoingContext(ctx, md) + + return g.client.ClientGetConfigs(ctx, request) } // NewClient creates a new client -func NewClient(agentName string, agentVersion string, products []data.Product, pollInterval time.Duration) (*Client, error) { - return newClient(agentName, true, agentVersion, products, pollInterval) +func NewClient(agentName string, updater ConfigUpdater, agentVersion string, products []data.Product, pollInterval time.Duration) (*Client, error) { + return newClient(agentName, updater, true, agentVersion, products, pollInterval) } -// NewUnverifiedClient creates a new client that does not perform any TUF verification -func NewUnverifiedClient(agentName string, agentVersion string, products []data.Product, pollInterval time.Duration) (*Client, error) { - return newClient(agentName, false, agentVersion, products, pollInterval) +// NewGRPCClient creates a new client that retrieves updates over the datadog-agent's secure GRPC client +func NewGRPCClient(agentName string, agentVersion string, products []data.Product, pollInterval time.Duration) (*Client, error) { + grpcClient, err := newAgentGRPCConfigFetcher() + if err != nil { + return nil, err + } + + return newClient(agentName, grpcClient, true, agentVersion, products, pollInterval) } -func newClient(agentName string, doTufVerification bool, agentVersion string, products []data.Product, pollInterval time.Duration) (*Client, error) { - ctx, close := context.WithCancel(context.Background()) - grpcClient, err := grpc.GetDDAgentSecureClient(ctx) +// NewUnverifiedClient creates a new client that does not perform any TUF verification +func NewUnverifiedClient(agentName string, agentVersion string, products []data.Product, pollInterval time.Duration) (*Client, error) { + grpcClient, err := newAgentGRPCConfigFetcher() if err != nil { - close() return nil, err } + return newClient(agentName, grpcClient, false, agentVersion, products, pollInterval) +} + +func newClient(agentName string, updater ConfigUpdater, doTufVerification bool, agentVersion string, products []data.Product, pollInterval time.Duration) (*Client, error) { var repository *state.Repository + var err error if doTufVerification { repository, err = state.NewRepository(meta.RootsDirector().Last()) @@ -87,7 +138,6 @@ func newClient(agentName string, doTufVerification bool, agentVersion string, pr repository, err = state.NewUnverifiedRepository() } if err != nil { - close() return nil, err } @@ -101,20 +151,23 @@ func newClient(agentName string, doTufVerification bool, agentVersion string, pr backoffPolicy := backoff.NewPolicy(minBackoffFactor, pollInterval.Seconds(), maximalMaxBackoffTime.Seconds(), recoveryInterval, false) + ctx, close := context.WithCancel(context.Background()) + return &Client{ - ID: generateID(), - startupSync: sync.Once{}, - ctx: ctx, - close: close, - agentName: agentName, - agentVersion: agentVersion, - products: data.ProductListToString(products), - grpc: grpcClient, - state: repository, - pollInterval: pollInterval, - backoffPolicy: backoffPolicy, - apmListeners: make([]func(update map[string]state.APMSamplingConfig), 0), - cwsListeners: make([]func(update map[string]state.ConfigCWSDD), 0), + ID: generateID(), + startupSync: sync.Once{}, + ctx: ctx, + close: close, + agentName: agentName, + agentVersion: agentVersion, + products: data.ProductListToString(products), + state: repository, + pollInterval: pollInterval, + backoffPolicy: backoffPolicy, + apmListeners: make([]func(update map[string]state.APMSamplingConfig), 0), + cwsListeners: make([]func(update map[string]state.ConfigCWSDD), 0), + cwsCustomListeners: make([]func(update map[string]state.ConfigCWSCustom), 0), + updater: updater, }, nil } @@ -163,23 +216,12 @@ func (c *Client) pollLoop() { // applies that update, informing any registered listeners of any config state changes // that occurred. func (c *Client) update() error { - // This client is running, at the moment, in the trace-agent or the security-agent. The auth token is handled - // by the core-agent, running independently. It's not guaranteed it starts before us, or that if it restarts that - // the auth token remains the same. Thus we need to do this every request. - token, err := security.FetchAuthToken() - if err != nil { - return errors.Wrap(err, "could not acquire agent auth token") - } - md := metadata.MD{ - "authorization": []string{fmt.Sprintf("Bearer %s", token)}, - } - ctx := metadata.NewOutgoingContext(c.ctx, md) - req, err := c.newUpdateRequest() if err != nil { return err } - response, err := c.grpc.ClientGetConfigs(ctx, req) + + response, err := c.updater.ClientGetConfigs(c.ctx, req) if err != nil { return err } @@ -211,6 +253,11 @@ func (c *Client) update() error { listener(c.state.CWSDDConfigs()) } } + if containsProduct(changedProducts, state.ProductCWSCustom) { + for _, listener := range c.cwsCustomListeners { + listener(c.state.CWSCustomConfigs()) + } + } return nil } @@ -243,6 +290,15 @@ func (c *Client) RegisterCWSDDUpdate(fn func(update map[string]state.ConfigCWSDD fn(c.state.CWSDDConfigs()) } +// RegisterCWSCustomUpdate registers a callback function to be called after a successful client update that will +// contain the current state of the CWS_CUSTOM product. +func (c *Client) RegisterCWSCustomUpdate(fn func(update map[string]state.ConfigCWSCustom)) { + c.m.Lock() + defer c.m.Unlock() + c.cwsCustomListeners = append(c.cwsCustomListeners, fn) + fn(c.state.CWSCustomConfigs()) +} + func (c *Client) applyUpdate(pbUpdate *pbgo.ClientGetConfigsResponse) ([]string, error) { fileMap := make(map[string][]byte, len(pbUpdate.TargetFiles)) for _, f := range pbUpdate.TargetFiles { diff --git a/pkg/config/remote/data/product.go b/pkg/config/remote/data/product.go index 2b50e7da95f69..cf66b3bb9e833 100644 --- a/pkg/config/remote/data/product.go +++ b/pkg/config/remote/data/product.go @@ -13,6 +13,8 @@ const ( ProductAPMSampling Product = "APM_SAMPLING" // ProductCWSDD is the cloud workload security product ProductCWSDD Product = "CWS_DD" + // ProductCWSCustom is the cloud workload security product + ProductCWSCustom Product = "CWS_CUSTOM" // ProductTesting1 is a testing product ProductTesting1 Product = "TESTING1" ) diff --git a/pkg/config/remote/service/service.go b/pkg/config/remote/service/service.go index 9ee6b4669d53c..800254d8e70f2 100644 --- a/pkg/config/remote/service/service.go +++ b/pkg/config/remote/service/service.go @@ -15,10 +15,10 @@ import ( "sync" "time" + "github.com/DataDog/go-tuf/data" + tufutil "github.com/DataDog/go-tuf/util" "github.com/benbjohnson/clock" "github.com/secure-systems-lab/go-securesystemslib/cjson" - "github.com/theupdateframework/go-tuf/data" - tufutil "github.com/theupdateframework/go-tuf/util" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -27,6 +27,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/config/remote/api" rdata "github.com/DataDog/datadog-agent/pkg/config/remote/data" + "github.com/DataDog/datadog-agent/pkg/config/remote/meta" "github.com/DataDog/datadog-agent/pkg/config/remote/telemetry" "github.com/DataDog/datadog-agent/pkg/config/remote/uptane" "github.com/DataDog/datadog-agent/pkg/proto/pbgo" @@ -154,8 +155,7 @@ func NewService() (*Service, error) { if err != nil { return nil, err } - apiKeyHash := sha256.Sum256([]byte(apiKey)) - cacheKey := fmt.Sprintf("%s/", apiKeyHash) + cacheKey := generateCacheKey(apiKey) opt := []uptane.ClientOption{} if authKeys.rcKeySet { opt = append(opt, uptane.WithOrgIDCheck(authKeys.rcKey.OrgID)) @@ -353,7 +353,7 @@ func (s *Service) getRefreshInterval() (time.Duration, error) { } // ClientGetConfigs is the polling API called by tracers and agents to get the latest configurations -func (s *Service) ClientGetConfigs(request *pbgo.ClientGetConfigsRequest) (*pbgo.ClientGetConfigsResponse, error) { +func (s *Service) ClientGetConfigs(ctx context.Context, request *pbgo.ClientGetConfigsRequest) (*pbgo.ClientGetConfigsResponse, error) { s.Lock() defer s.Unlock() err := validateRequest(request) @@ -620,3 +620,20 @@ func enforceCanonicalJSON(raw []byte) ([]byte, error) { return canonical, nil } + +func generateCacheKey(apiKey string) string { + h := sha256.New() + h.Write([]byte(apiKey)) + + // Hash the API Key with the initial root. This prevents the agent from being locked + // to a root chain if a developer accidentally forgets to use the development roots + // in a testing environment + embeddedRoots := meta.RootsConfig() + if r, ok := embeddedRoots[1]; ok { + h.Write(r) + } + + hash := h.Sum(nil) + + return fmt.Sprintf("%x/", hash) +} diff --git a/pkg/config/remote/service/service_test.go b/pkg/config/remote/service/service_test.go index f5772ce0d031f..e4112b23f39c0 100644 --- a/pkg/config/remote/service/service_test.go +++ b/pkg/config/remote/service/service_test.go @@ -14,10 +14,10 @@ import ( "testing" "time" + "github.com/DataDog/go-tuf/data" "github.com/benbjohnson/clock" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" - "github.com/theupdateframework/go-tuf/data" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -262,13 +262,13 @@ func TestClientGetConfigsRequestMissingFields(t *testing.T) { // The Client object is missing req := &pbgo.ClientGetConfigsRequest{} - _, err := service.ClientGetConfigs(req) + _, err := service.ClientGetConfigs(context.Background(), req) assert.Error(t, err) assert.Equal(t, status.Convert(err).Code(), codes.InvalidArgument) // The Client object is present, but State is missing req.Client = &pbgo.Client{} - _, err = service.ClientGetConfigs(req) + _, err = service.ClientGetConfigs(context.Background(), req) assert.Error(t, err) assert.Equal(t, status.Convert(err).Code(), codes.InvalidArgument) @@ -276,7 +276,7 @@ func TestClientGetConfigsRequestMissingFields(t *testing.T) { req.Client = &pbgo.Client{ State: &pbgo.ClientState{}, } - _, err = service.ClientGetConfigs(req) + _, err = service.ClientGetConfigs(context.Background(), req) assert.Error(t, err) assert.Equal(t, status.Convert(err).Code(), codes.InvalidArgument) @@ -287,7 +287,7 @@ func TestClientGetConfigsRequestMissingFields(t *testing.T) { }, IsAgent: true, } - _, err = service.ClientGetConfigs(req) + _, err = service.ClientGetConfigs(context.Background(), req) assert.Error(t, err) assert.Equal(t, status.Convert(err).Code(), codes.InvalidArgument) @@ -298,7 +298,7 @@ func TestClientGetConfigsRequestMissingFields(t *testing.T) { }, IsTracer: true, } - _, err = service.ClientGetConfigs(req) + _, err = service.ClientGetConfigs(context.Background(), req) assert.Error(t, err) assert.Equal(t, status.Convert(err).Code(), codes.InvalidArgument) @@ -312,7 +312,7 @@ func TestClientGetConfigsRequestMissingFields(t *testing.T) { IsAgent: true, ClientTracer: &pbgo.ClientTracer{}, } - _, err = service.ClientGetConfigs(req) + _, err = service.ClientGetConfigs(context.Background(), req) assert.Error(t, err) assert.Equal(t, status.Convert(err).Code(), codes.InvalidArgument) } @@ -420,7 +420,7 @@ func TestService(t *testing.T) { }).Return(lastConfigResponse, nil) service.clients.seen(client) // Avoid blocking on channel sending when nothing is at the other end - configResponse, err := service.ClientGetConfigs(&pbgo.ClientGetConfigsRequest{Client: client}) + configResponse, err := service.ClientGetConfigs(context.Background(), &pbgo.ClientGetConfigsRequest{Client: client}) assert.NoError(t, err) assert.ElementsMatch(t, [][]byte{canonicalRoot3, canonicalRoot4}, configResponse.Roots) assert.ElementsMatch(t, []*pbgo.File{{Path: "datadog/2/APM_SAMPLING/id/1", Raw: fileAPM1}, {Path: "datadog/2/APM_SAMPLING/id/2", Raw: fileAPM2}}, configResponse.TargetFiles) @@ -526,7 +526,7 @@ func TestServiceClientPredicates(t *testing.T) { }).Return(lastConfigResponse, nil) service.clients.seen(client) // Avoid blocking on channel sending when nothing is at the other end - configResponse, err := service.ClientGetConfigs(&pbgo.ClientGetConfigsRequest{Client: client}) + configResponse, err := service.ClientGetConfigs(context.Background(), &pbgo.ClientGetConfigsRequest{Client: client}) assert.NoError(err) assert.ElementsMatch( configResponse.ClientConfigs, @@ -786,7 +786,7 @@ func TestConfigExpiration(t *testing.T) { }).Return(lastConfigResponse, nil) service.clients.seen(client) // Avoid blocking on channel sending when nothing is at the other end - configResponse, err := service.ClientGetConfigs(&pbgo.ClientGetConfigsRequest{Client: client}) + configResponse, err := service.ClientGetConfigs(context.Background(), &pbgo.ClientGetConfigsRequest{Client: client}) assert.NoError(err) assert.ElementsMatch( configResponse.ClientConfigs, diff --git a/pkg/config/remote/service/tracer_predicates.go b/pkg/config/remote/service/tracer_predicates.go index 31911d27e56df..453e37cdfa275 100644 --- a/pkg/config/remote/service/tracer_predicates.go +++ b/pkg/config/remote/service/tracer_predicates.go @@ -9,8 +9,8 @@ import ( "encoding/json" "time" + "github.com/DataDog/go-tuf/data" "github.com/Masterminds/semver" - "github.com/theupdateframework/go-tuf/data" rdata "github.com/DataDog/datadog-agent/pkg/config/remote/data" "github.com/DataDog/datadog-agent/pkg/proto/pbgo" diff --git a/pkg/config/remote/uptane/client.go b/pkg/config/remote/uptane/client.go index 8523fa9a1e7d8..62f82777ccf6f 100644 --- a/pkg/config/remote/uptane/client.go +++ b/pkg/config/remote/uptane/client.go @@ -8,12 +8,13 @@ package uptane import ( "bytes" "fmt" + "strings" "sync" "time" + "github.com/DataDog/go-tuf/client" + "github.com/DataDog/go-tuf/data" "github.com/pkg/errors" - "github.com/theupdateframework/go-tuf/client" - "github.com/theupdateframework/go-tuf/data" "go.etcd.io/bbolt" rdata "github.com/DataDog/datadog-agent/pkg/config/remote/data" @@ -213,7 +214,8 @@ func (c *Client) updateRepos(response *pbgo.LatestConfigsResponse) error { } _, err = c.configTUFClient.Update() if err != nil { - return errors.Wrap(err, "could not update config repository") + e := fmt.Sprintf("could not update config repository [%s]", configMetasUpdateSummary(response.ConfigMetas)) + return errors.Wrap(err, e) } return nil } @@ -360,3 +362,33 @@ func (c *Client) verifyUptane() error { } return nil } + +func configMetasUpdateSummary(metas *pbgo.ConfigMetas) string { + if metas == nil { + return "no metas in update" + } + + var b strings.Builder + + if len(metas.Roots) != 0 { + b.WriteString("roots=") + for i := 0; i < len(metas.Roots)-2; i++ { + b.WriteString(fmt.Sprintf("%d,", metas.Roots[i].Version)) + } + b.WriteString(fmt.Sprintf("%d ", metas.Roots[len(metas.Roots)-1].Version)) + } + + if metas.TopTargets != nil { + b.WriteString(fmt.Sprintf("targets=%d ", metas.TopTargets.Version)) + } + + if metas.Snapshot != nil { + b.WriteString(fmt.Sprintf("snapshot=%d ", metas.Snapshot.Version)) + } + + if metas.Timestamp != nil { + b.WriteString(fmt.Sprintf("timestamp=%d", metas.Timestamp.Version)) + } + + return b.String() +} diff --git a/pkg/config/remote/uptane/client_test.go b/pkg/config/remote/uptane/client_test.go index cadea65aba5d9..6446cf91713ea 100644 --- a/pkg/config/remote/uptane/client_test.go +++ b/pkg/config/remote/uptane/client_test.go @@ -13,10 +13,10 @@ import ( "testing" "time" + "github.com/DataDog/go-tuf/data" + "github.com/DataDog/go-tuf/pkg/keys" + "github.com/DataDog/go-tuf/sign" "github.com/stretchr/testify/assert" - "github.com/theupdateframework/go-tuf/data" - "github.com/theupdateframework/go-tuf/pkg/keys" - "github.com/theupdateframework/go-tuf/sign" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/config/remote/meta" diff --git a/pkg/config/remote/uptane/local_store.go b/pkg/config/remote/uptane/local_store.go index e91c8322b0a8c..8669ed79bc619 100644 --- a/pkg/config/remote/uptane/local_store.go +++ b/pkg/config/remote/uptane/local_store.go @@ -22,7 +22,7 @@ var ( // Its goal is to persist TUF metadata. This implementation of the local store // also saves every root ever validated by go-tuf. This is needed to update the roots // of tracers and other partial clients. -// See https://pkg.go.dev/github.com/theupdateframework/go-tuf/client#LocalStore +// See https://pkg.go.dev/github.com/DataDog/go-tuf/client#LocalStore type localStore struct { // metasBucket stores metadata saved by go-tuf metasBucket string @@ -79,7 +79,7 @@ func (s *localStore) writeRoot(tx *transaction, root json.RawMessage) error { } // GetMeta implements go-tuf's LocalStore.GetTarget -// See https://pkg.go.dev/github.com/theupdateframework/go-tuf/client#LocalStore +// See https://pkg.go.dev/github.com/DataDog/go-tuf/client#LocalStore func (s *localStore) GetMeta() (map[string]json.RawMessage, error) { meta := make(map[string]json.RawMessage) err := s.store.view(func(tx *transaction) error { @@ -96,7 +96,7 @@ func (s *localStore) GetMeta() (map[string]json.RawMessage, error) { } // DeleteMeta implements go-tuf's LocalStore.DeleteMeta -// See https://pkg.go.dev/github.com/theupdateframework/go-tuf/client#LocalStore +// See https://pkg.go.dev/github.com/DataDog/go-tuf/client#LocalStore func (s *localStore) DeleteMeta(name string) error { return s.store.update(func(tx *transaction) error { tx.delete(s.metasBucket, name) @@ -105,7 +105,7 @@ func (s *localStore) DeleteMeta(name string) error { } // SetMeta implements go-tuf's LocalStore.SetMeta -// See https://pkg.go.dev/github.com/theupdateframework/go-tuf/client#LocalStore +// See https://pkg.go.dev/github.com/DataDog/go-tuf/client#LocalStore func (s *localStore) SetMeta(name string, meta json.RawMessage) error { return s.store.update(func(tx *transaction) error { if name == metaRoot { diff --git a/pkg/config/remote/uptane/remote_store.go b/pkg/config/remote/uptane/remote_store.go index 088cbbac8b924..47413a4bfbb50 100644 --- a/pkg/config/remote/uptane/remote_store.go +++ b/pkg/config/remote/uptane/remote_store.go @@ -9,7 +9,7 @@ import ( "bytes" "io" - "github.com/theupdateframework/go-tuf/client" + "github.com/DataDog/go-tuf/client" "github.com/DataDog/datadog-agent/pkg/proto/pbgo" ) @@ -25,7 +25,7 @@ const ( // remoteStore implements go-tuf's RemoteStore // Its goal is to serve TUF metadata updates coming to the backend in a way go-tuf understands -// See https://pkg.go.dev/github.com/theupdateframework/go-tuf/client#RemoteStore +// See https://pkg.go.dev/github.com/DataDog/go-tuf/client#RemoteStore type remoteStore struct { targetStore *targetStore metas map[role]map[uint64][]byte @@ -58,7 +58,7 @@ func (s *remoteStore) latestVersion(r role) uint64 { } // GetMeta implements go-tuf's RemoteStore.GetMeta -// See https://pkg.go.dev/github.com/theupdateframework/go-tuf/client#RemoteStore +// See https://pkg.go.dev/github.com/DataDog/go-tuf/client#RemoteStore func (s *remoteStore) GetMeta(path string) (io.ReadCloser, int64, error) { metaPath, err := parseMetaPath(path) if err != nil { @@ -83,7 +83,7 @@ func (s *remoteStore) GetMeta(path string) (io.ReadCloser, int64, error) { } // GetMeta implements go-tuf's RemoteStore.GetTarget -// See https://pkg.go.dev/github.com/theupdateframework/go-tuf/client#RemoteStore +// See https://pkg.go.dev/github.com/DataDog/go-tuf/client#RemoteStore func (s *remoteStore) GetTarget(targetPath string) (stream io.ReadCloser, size int64, err error) { target, found, err := s.targetStore.getTargetFile(targetPath) if err != nil { diff --git a/pkg/config/remote/uptane/remote_store_test.go b/pkg/config/remote/uptane/remote_store_test.go index 7fac5265b9629..0f403b25eb9bd 100644 --- a/pkg/config/remote/uptane/remote_store_test.go +++ b/pkg/config/remote/uptane/remote_store_test.go @@ -10,8 +10,8 @@ import ( "io" "testing" + "github.com/DataDog/go-tuf/client" "github.com/stretchr/testify/assert" - "github.com/theupdateframework/go-tuf/client" "github.com/DataDog/datadog-agent/pkg/proto/pbgo" ) diff --git a/pkg/config/remote/uptane/util_test.go b/pkg/config/remote/uptane/util_test.go index f0a2401d4708a..77b534ab33d24 100644 --- a/pkg/config/remote/uptane/util_test.go +++ b/pkg/config/remote/uptane/util_test.go @@ -9,8 +9,8 @@ import ( "encoding/json" "testing" + "github.com/DataDog/go-tuf/data" "github.com/stretchr/testify/assert" - "github.com/theupdateframework/go-tuf/data" ) func TestParseMetaPath(t *testing.T) { diff --git a/pkg/config/render_config.go b/pkg/config/render_config.go index c115ce4382b7e..c2ab9d1f9c11f 100644 --- a/pkg/config/render_config.go +++ b/pkg/config/render_config.go @@ -19,41 +19,42 @@ import ( // context contains the context used to render the config file template type context struct { - OS string - Common bool - Agent bool - Python bool // Sub-option of Agent - BothPythonPresent bool // Sub-option of Agent - Python - Metadata bool - InternalProfiling bool - Dogstatsd bool - LogsAgent bool - JMX bool - Autoconfig bool - Logging bool - Autodiscovery bool - DockerTagging bool - Kubelet bool - KubernetesTagging bool - ECS bool - Containerd bool - CRI bool - ProcessAgent bool - SystemProbe bool - KubeApiServer bool - TraceAgent bool - ClusterAgent bool - ClusterChecks bool - AdmissionController bool - CloudFoundryBBS bool - CloudFoundryCC bool - Compliance bool - SNMP bool - SecurityModule bool - SecurityAgent bool - NetworkModule bool // Sub-module of System Probe - PrometheusScrape bool - OTLP bool + OS string + Common bool + Agent bool + Python bool // Sub-option of Agent + BothPythonPresent bool // Sub-option of Agent - Python + Metadata bool + InternalProfiling bool + Dogstatsd bool + LogsAgent bool + JMX bool + Autoconfig bool + Logging bool + Autodiscovery bool + DockerTagging bool + Kubelet bool + KubernetesTagging bool + ECS bool + Containerd bool + CRI bool + ProcessAgent bool + SystemProbe bool + KubeApiServer bool + TraceAgent bool + ClusterAgent bool + ClusterChecks bool + AdmissionController bool + CloudFoundryBBS bool + CloudFoundryCC bool + Compliance bool + SNMP bool + SecurityModule bool + SecurityAgent bool + NetworkModule bool // Sub-module of System Probe + UniversalServiceMonitoringModule bool // Sub-module of System Probe + PrometheusScrape bool + OTLP bool } func mkContext(buildType string) context { @@ -104,9 +105,10 @@ func mkContext(buildType string) context { } case "system-probe": return context{ - SystemProbe: true, - NetworkModule: true, - SecurityModule: true, + SystemProbe: true, + NetworkModule: true, + UniversalServiceMonitoringModule: true, + SecurityModule: true, } case "dogstatsd": return context{ diff --git a/pkg/config/settings/runtime_setting_profiling.go b/pkg/config/settings/runtime_setting_profiling.go index 3e863c234c560..9cd102f37358c 100644 --- a/pkg/config/settings/runtime_setting_profiling.go +++ b/pkg/config/settings/runtime_setting_profiling.go @@ -85,6 +85,7 @@ func (l ProfilingRuntimeSetting) Set(v interface{}) error { MutexProfileFraction: profiling.GetMutexProfileFraction(), BlockProfileRate: profiling.GetBlockProfileRate(), WithGoroutineProfile: config.Datadog.GetBool("internal_profiling.enable_goroutine_stacktraces"), + WithDeltaProfiles: config.Datadog.GetBool("internal_profiling.delta_profiles"), Tags: []string{fmt.Sprintf("version:%v", v)}, } err := profiling.Start(settings) diff --git a/pkg/config/system_probe.go b/pkg/config/system_probe.go index 64332544e5066..89bee70be734d 100644 --- a/pkg/config/system_probe.go +++ b/pkg/config/system_probe.go @@ -180,6 +180,7 @@ func InitSystemProbeConfig(cfg Config) { // service monitoring cfg.BindEnvAndSetDefault(join(smNS, "enabled"), false, "DD_SYSTEM_PROBE_SERVICE_MONITORING_ENABLED") + cfg.BindEnvAndSetDefault(join(smNS, "process_service_inference", "enabled"), false, "DD_SYSTEM_PROBE_PROCESS_SERVICE_INFERENCE_ENABLED") // enable/disable use of root net namespace cfg.BindEnvAndSetDefault(join(netNS, "enable_root_netns"), true) diff --git a/pkg/dogstatsd/replay/file.go b/pkg/dogstatsd/replay/file.go index b621fe12f161e..306f9e6309783 100644 --- a/pkg/dogstatsd/replay/file.go +++ b/pkg/dogstatsd/replay/file.go @@ -6,8 +6,8 @@ package replay import ( - "bufio" "fmt" + "io" "github.com/h2non/filetype" "github.com/h2non/filetype/matchers" @@ -17,7 +17,8 @@ var ( datadogType = filetype.NewType("dog", "datadog/capture") // DATADOG0F1FF0000 in HEX (D474D060F1FF0000); (F0 | datadogFileVersion) for different file versions support // 00 to terminate header - datadogHeader = []byte{0xD4, 0x74, 0xD0, 0x60, 0xF0, 0xFF, 0x00, 0x00} + datadogHeader = []byte{0xD4, 0x74, 0xD0, 0x60, 0xF0, 0xFF, 0x00, 0x00} + ErrHeaderWrite = fmt.Errorf("capture file header could not be fully written to buffer") ) const ( @@ -68,18 +69,21 @@ func fileVersion(buf []byte) (int, error) { } // WriteHeader writes the datadog header to the Writer argument to conform to the .dog file format. -func WriteHeader(w *bufio.Writer) error { +func WriteHeader(w io.Writer) error { hdr := make([]byte, len(datadogHeader)) copy(hdr, datadogHeader) hdr[versionIndex] |= datadogFileVersion //Write header - if n, err := w.Write(hdr); err != nil || n < len(datadogHeader) { - if err != nil { - return fmt.Errorf("Capture file header could not be fully written to buffer") - } + n, err := w.Write(hdr) + + if err != nil { return err } + if n < len(datadogHeader) { + return ErrHeaderWrite + } + return nil } diff --git a/pkg/dogstatsd/replay/file_test.go b/pkg/dogstatsd/replay/file_test.go index 32bcb3694b191..c0e711b3c1538 100644 --- a/pkg/dogstatsd/replay/file_test.go +++ b/pkg/dogstatsd/replay/file_test.go @@ -8,6 +8,8 @@ package replay import ( "bufio" "bytes" + "io" + "io/fs" "testing" "github.com/stretchr/testify/assert" @@ -18,7 +20,7 @@ func TestHeaderFormat(t *testing.T) { contents := bufio.NewWriter(buff) err := WriteHeader(contents) - assert.Nil(t, err) + assert.NoError(t, err) // let's make sure these are written to the underlying byte buffer contents.Flush() @@ -29,7 +31,7 @@ func TestHeaderFormat(t *testing.T) { // look at version v, err := fileVersion(b) - assert.Nil(t, err) + assert.NoError(t, err) assert.Equal(t, v, int(datadogFileVersion)) // let's inspect the header @@ -42,6 +44,44 @@ func TestHeaderFormat(t *testing.T) { } } +func TestHeaderFormatError(t *testing.T) { + tests := []struct { + name string + contents io.Writer + expected error + }{ + { + name: "No error but less bytes written than datadogHeader", + contents: &errorWriter{1, nil}, + expected: ErrHeaderWrite, + }, + { + name: "Error and less bytes written than datadogHeader", + contents: &errorWriter{1, fs.ErrInvalid}, + expected: fs.ErrInvalid, + }, + { + name: "Error and more bytes written than datadogHeader", + contents: &errorWriter{500, fs.ErrInvalid}, + expected: fs.ErrInvalid, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.ErrorIs(t, WriteHeader(tt.contents), tt.expected, tt.name) + }) + } +} + +type errorWriter struct { + n int + err error +} + +func (e *errorWriter) Write(_ []byte) (n int, err error) { + return e.n, e.err +} + func TestFormatMatcher(t *testing.T) { assert.True(t, datadogMatcher(datadogHeader)) diff --git a/pkg/dogstatsd/server_test.go b/pkg/dogstatsd/server_test.go index 8c4828c9d1daa..d28e10d40816f 100644 --- a/pkg/dogstatsd/server_test.go +++ b/pkg/dogstatsd/server_test.go @@ -47,6 +47,9 @@ func getAvailableUDPPort() (int, error) { } func TestNewServer(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + port, err := getAvailableUDPPort() require.NoError(t, err) config.Datadog.SetDefault("dogstatsd_port", port) @@ -62,6 +65,9 @@ func TestNewServer(t *testing.T) { } func TestStopServer(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + port, err := getAvailableUDPPort() require.NoError(t, err) config.Datadog.SetDefault("dogstatsd_port", port) @@ -112,6 +118,9 @@ func TestNoRaceOriginTagMaps(t *testing.T) { } func TestUDPReceive(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + port, err := getAvailableUDPPort() require.NoError(t, err) config.Datadog.SetDefault("dogstatsd_port", port) @@ -389,6 +398,9 @@ func TestUDPReceive(t *testing.T) { } func TestUDPForward(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + fport, err := getAvailableUDPPort() require.NoError(t, err) @@ -433,6 +445,9 @@ func TestUDPForward(t *testing.T) { } func TestHistToDist(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + port, err := getAvailableUDPPort() require.NoError(t, err) defaultPort := config.Datadog.GetInt("dogstatsd_port") @@ -531,6 +546,9 @@ func TestEOLParsing(t *testing.T) { } func TestE2EParsing(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + port, err := getAvailableUDPPort() require.NoError(t, err) config.Datadog.SetDefault("dogstatsd_port", port) @@ -573,6 +591,9 @@ func TestE2EParsing(t *testing.T) { } func TestExtraTags(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + port, err := getAvailableUDPPort() require.NoError(t, err) config.Datadog.SetDefault("dogstatsd_port", port) @@ -607,11 +628,11 @@ func TestStaticTags(t *testing.T) { require.NoError(t, err) config.Datadog.SetDefault("dogstatsd_port", port) config.Datadog.SetDefault("dogstatsd_tags", []string{"sometag3:somevalue3"}) - config.Datadog.SetDefault("eks_fargate", true) // triggers DD_TAGS in static_tags config.Datadog.SetDefault("tags", []string{"from:dd_tags"}) - config.SetDetectedFeatures(config.FeatureMap{}) defer config.Datadog.SetDefault("dogstatsd_tags", []string{}) - defer config.Datadog.SetDefault("eks_fargate", false) + + config.SetDetectedFeatures(config.FeatureMap{config.EKSFargate: struct{}{}}) + defer config.SetDetectedFeatures(nil) demux := aggregator.InitTestAgentDemultiplexerWithFlushInterval(10 * time.Millisecond) s, err := NewServer(demux, false) @@ -642,6 +663,9 @@ func TestStaticTags(t *testing.T) { } func TestDebugStatsSpike(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + assert := assert.New(t) demux := mockDemultiplexer() defer demux.Stop(false) @@ -702,6 +726,9 @@ func TestDebugStatsSpike(t *testing.T) { } func TestDebugStats(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + demux := mockDemultiplexer() defer demux.Stop(false) s, err := NewServer(demux, false) @@ -777,6 +804,9 @@ func TestDebugStats(t *testing.T) { } func TestNoMappingsConfig(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + datadogYaml := `` samples := []metrics.MetricSample{} @@ -894,6 +924,9 @@ dogstatsd_mapper_profiles: samples := []metrics.MetricSample{} for _, scenario := range scenarios { t.Run(scenario.name, func(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + config.Datadog.SetConfigType("yaml") err := config.Datadog.ReadConfig(strings.NewReader(scenario.config)) assert.NoError(t, err, "Case `%s` failed. ReadConfig should not return error %v", scenario.name, err) @@ -931,6 +964,9 @@ dogstatsd_mapper_profiles: } func TestNewServerExtraTags(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + // restore env/config after having runned the test p := config.Datadog.Get("dogstatsd_port") defer func() { @@ -1049,6 +1085,9 @@ func testProcessedMetricsOrigin(t *testing.T) { } func TestProcessedMetricsOrigin(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + v := config.Datadog.GetBool("dogstatsd_origin_optout_enabled") defer config.Datadog.Set("dogstatsd_origin_optout_enabled", v) for _, enabled := range []bool{true, false} { @@ -1087,6 +1126,9 @@ func testContainerIDParsing(t *testing.T) { } func TestContainerIDParsing(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + v := config.Datadog.GetBool("dogstatsd_origin_optout_enabled") defer config.Datadog.Set("dogstatsd_origin_optout_enabled", v) for _, enabled := range []bool{true, false} { @@ -1137,6 +1179,9 @@ func testOriginOptout(t *testing.T, enabled bool) { } func TestOriginOptout(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + v := config.Datadog.GetBool("dogstatsd_origin_optout_enabled") defer config.Datadog.Set("dogstatsd_origin_optout_enabled", v) for _, enabled := range []bool{true, false} { diff --git a/pkg/ebpf/bytecode/runtime/all_helpers.go b/pkg/ebpf/bytecode/runtime/all_helpers.go new file mode 100644 index 0000000000000..561560c4d2722 --- /dev/null +++ b/pkg/ebpf/bytecode/runtime/all_helpers.go @@ -0,0 +1,219 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf + +package runtime + +// updated as of Linux v6.0 commit 4fe89d07dcc2804c8b562f6c7896a45643d34b2f +var allHelpers = []string{ + "BPF_FUNC_map_lookup_elem", + "BPF_FUNC_map_update_elem", + "BPF_FUNC_map_delete_elem", + "BPF_FUNC_probe_read", + "BPF_FUNC_ktime_get_ns", + "BPF_FUNC_trace_printk", + "BPF_FUNC_get_prandom_u32", + "BPF_FUNC_get_smp_processor_id", + "BPF_FUNC_skb_store_bytes", + "BPF_FUNC_l3_csum_replace", + "BPF_FUNC_l4_csum_replace", + "BPF_FUNC_tail_call", + "BPF_FUNC_clone_redirect", + "BPF_FUNC_get_current_pid_tgid", + "BPF_FUNC_get_current_uid_gid", + "BPF_FUNC_get_current_comm", + "BPF_FUNC_get_cgroup_classid", + "BPF_FUNC_skb_vlan_push", + "BPF_FUNC_skb_vlan_pop", + "BPF_FUNC_skb_get_tunnel_key", + "BPF_FUNC_skb_set_tunnel_key", + "BPF_FUNC_perf_event_read", + "BPF_FUNC_redirect", + "BPF_FUNC_get_route_realm", + "BPF_FUNC_perf_event_output", + "BPF_FUNC_skb_load_bytes", + "BPF_FUNC_get_stackid", + "BPF_FUNC_csum_diff", + "BPF_FUNC_skb_get_tunnel_opt", + "BPF_FUNC_skb_set_tunnel_opt", + "BPF_FUNC_skb_change_proto", + "BPF_FUNC_skb_change_type", + "BPF_FUNC_skb_under_cgroup", + "BPF_FUNC_get_hash_recalc", + "BPF_FUNC_get_current_task", + "BPF_FUNC_probe_write_user", + "BPF_FUNC_current_task_under_cgroup", + "BPF_FUNC_skb_change_tail", + "BPF_FUNC_skb_pull_data", + "BPF_FUNC_csum_update", + "BPF_FUNC_set_hash_invalid", + "BPF_FUNC_get_numa_node_id", + "BPF_FUNC_skb_change_head", + "BPF_FUNC_xdp_adjust_head", + "BPF_FUNC_probe_read_str", + "BPF_FUNC_get_socket_cookie", + "BPF_FUNC_get_socket_uid", + "BPF_FUNC_set_hash", + "BPF_FUNC_setsockopt", + "BPF_FUNC_skb_adjust_room", + "BPF_FUNC_redirect_map", + "BPF_FUNC_sk_redirect_map", + "BPF_FUNC_sock_map_update", + "BPF_FUNC_xdp_adjust_meta", + "BPF_FUNC_perf_event_read_value", + "BPF_FUNC_perf_prog_read_value", + "BPF_FUNC_getsockopt", + "BPF_FUNC_override_return", + "BPF_FUNC_sock_ops_cb_flags_set", + "BPF_FUNC_msg_redirect_map", + "BPF_FUNC_msg_apply_bytes", + "BPF_FUNC_msg_cork_bytes", + "BPF_FUNC_msg_pull_data", + "BPF_FUNC_bind", + "BPF_FUNC_xdp_adjust_tail", + "BPF_FUNC_skb_get_xfrm_state", + "BPF_FUNC_get_stack", + "BPF_FUNC_skb_load_bytes_relative", + "BPF_FUNC_fib_lookup", + "BPF_FUNC_sock_hash_update", + "BPF_FUNC_msg_redirect_hash", + "BPF_FUNC_sk_redirect_hash", + "BPF_FUNC_lwt_push_encap", + "BPF_FUNC_lwt_seg6_store_bytes", + "BPF_FUNC_lwt_seg6_adjust_srh", + "BPF_FUNC_lwt_seg6_action", + "BPF_FUNC_rc_repeat", + "BPF_FUNC_rc_keydown", + "BPF_FUNC_skb_cgroup_id", + "BPF_FUNC_get_current_cgroup_id", + "BPF_FUNC_get_local_storage", + "BPF_FUNC_sk_select_reuseport", + "BPF_FUNC_skb_ancestor_cgroup_id", + "BPF_FUNC_sk_lookup_tcp", + "BPF_FUNC_sk_lookup_udp", + "BPF_FUNC_sk_release", + "BPF_FUNC_map_push_elem", + "BPF_FUNC_map_pop_elem", + "BPF_FUNC_map_peek_elem", + "BPF_FUNC_msg_push_data", + "BPF_FUNC_msg_pop_data", + "BPF_FUNC_rc_pointer_rel", + "BPF_FUNC_spin_lock", + "BPF_FUNC_spin_unlock", + "BPF_FUNC_sk_fullsock", + "BPF_FUNC_tcp_sock", + "BPF_FUNC_skb_ecn_set_ce", + "BPF_FUNC_get_listener_sock", + "BPF_FUNC_skc_lookup_tcp", + "BPF_FUNC_tcp_check_syncookie", + "BPF_FUNC_sysctl_get_name", + "BPF_FUNC_sysctl_get_current_value", + "BPF_FUNC_sysctl_get_new_value", + "BPF_FUNC_sysctl_set_new_value", + "BPF_FUNC_strtol", + "BPF_FUNC_strtoul", + "BPF_FUNC_sk_storage_get", + "BPF_FUNC_sk_storage_delete", + "BPF_FUNC_send_signal", + "BPF_FUNC_tcp_gen_syncookie", + "BPF_FUNC_skb_output", + "BPF_FUNC_probe_read_user", + "BPF_FUNC_probe_read_kernel", + "BPF_FUNC_probe_read_user_str", + "BPF_FUNC_probe_read_kernel_str", + "BPF_FUNC_tcp_send_ack", + "BPF_FUNC_send_signal_thread", + "BPF_FUNC_jiffies64", + "BPF_FUNC_read_branch_records", + "BPF_FUNC_get_ns_current_pid_tgid", + "BPF_FUNC_xdp_output", + "BPF_FUNC_get_netns_cookie", + "BPF_FUNC_get_current_ancestor_cgroup_id", + "BPF_FUNC_sk_assign", + "BPF_FUNC_ktime_get_boot_ns", + "BPF_FUNC_seq_printf", + "BPF_FUNC_seq_write", + "BPF_FUNC_sk_cgroup_id", + "BPF_FUNC_sk_ancestor_cgroup_id", + "BPF_FUNC_ringbuf_output", + "BPF_FUNC_ringbuf_reserve", + "BPF_FUNC_ringbuf_submit", + "BPF_FUNC_ringbuf_discard", + "BPF_FUNC_ringbuf_query", + "BPF_FUNC_csum_level", + "BPF_FUNC_skc_to_tcp6_sock", + "BPF_FUNC_skc_to_tcp_sock", + "BPF_FUNC_skc_to_tcp_timewait_sock", + "BPF_FUNC_skc_to_tcp_request_sock", + "BPF_FUNC_skc_to_udp6_sock", + "BPF_FUNC_get_task_stack", + "BPF_FUNC_load_hdr_opt", + "BPF_FUNC_store_hdr_opt", + "BPF_FUNC_reserve_hdr_opt", + "BPF_FUNC_inode_storage_get", + "BPF_FUNC_inode_storage_delete", + "BPF_FUNC_d_path", + "BPF_FUNC_copy_from_user", + "BPF_FUNC_snprintf_btf", + "BPF_FUNC_seq_printf_btf", + "BPF_FUNC_skb_cgroup_classid", + "BPF_FUNC_redirect_neigh", + "BPF_FUNC_per_cpu_ptr", + "BPF_FUNC_this_cpu_ptr", + "BPF_FUNC_redirect_peer", + "BPF_FUNC_task_storage_get", + "BPF_FUNC_task_storage_delete", + "BPF_FUNC_get_current_task_btf", + "BPF_FUNC_bprm_opts_set", + "BPF_FUNC_ktime_get_coarse_ns", + "BPF_FUNC_ima_inode_hash", + "BPF_FUNC_sock_from_file", + "BPF_FUNC_check_mtu", + "BPF_FUNC_for_each_map_elem", + "BPF_FUNC_snprintf", + "BPF_FUNC_sys_bpf", + "BPF_FUNC_btf_find_by_name_kind", + "BPF_FUNC_sys_close", + "BPF_FUNC_timer_init", + "BPF_FUNC_timer_set_callback", + "BPF_FUNC_timer_start", + "BPF_FUNC_timer_cancel", + "BPF_FUNC_get_func_ip", + "BPF_FUNC_get_attach_cookie", + "BPF_FUNC_task_pt_regs", + "BPF_FUNC_get_branch_snapshot", + "BPF_FUNC_trace_vprintk", + "BPF_FUNC_skc_to_unix_sock", + "BPF_FUNC_kallsyms_lookup_name", + "BPF_FUNC_find_vma", + "BPF_FUNC_loop", + "BPF_FUNC_strncmp", + "BPF_FUNC_get_func_arg", + "BPF_FUNC_get_func_ret", + "BPF_FUNC_get_func_arg_cnt", + "BPF_FUNC_get_retval", + "BPF_FUNC_set_retval", + "BPF_FUNC_xdp_get_buff_len", + "BPF_FUNC_xdp_load_bytes", + "BPF_FUNC_xdp_store_bytes", + "BPF_FUNC_copy_from_user_task", + "BPF_FUNC_skb_set_tstamp", + "BPF_FUNC_ima_file_hash", + "BPF_FUNC_kptr_xchg", + "BPF_FUNC_map_lookup_percpu_elem", + "BPF_FUNC_skc_to_mptcp_sock", + "BPF_FUNC_dynptr_from_mem", + "BPF_FUNC_ringbuf_reserve_dynptr", + "BPF_FUNC_ringbuf_submit_dynptr", + "BPF_FUNC_ringbuf_discard_dynptr", + "BPF_FUNC_dynptr_read", + "BPF_FUNC_dynptr_write", + "BPF_FUNC_dynptr_data", + "BPF_FUNC_tcp_raw_gen_syncookie_ipv4", + "BPF_FUNC_tcp_raw_gen_syncookie_ipv6", + "BPF_FUNC_tcp_raw_check_syncookie_ipv4", + "BPF_FUNC_tcp_raw_check_syncookie_ipv6", +} diff --git a/pkg/ebpf/bytecode/runtime/asset.go b/pkg/ebpf/bytecode/runtime/asset.go index bea7bb6f838ef..123f72d792e92 100644 --- a/pkg/ebpf/bytecode/runtime/asset.go +++ b/pkg/ebpf/bytecode/runtime/asset.go @@ -53,7 +53,15 @@ func (a *asset) Compile(config *ebpf.Config, additionalFlags []string, client st } }() - kernelHeaders := kernel.GetKernelHeaders(config, client) + opts := kernel.KernelHeaderOptions{ + DownloadEnabled: config.EnableKernelHeaderDownload, + Dirs: config.KernelHeadersDirs, + DownloadDir: config.KernelHeadersDownloadDir, + AptConfigDir: config.AptConfigDir, + YumReposDir: config.YumReposDir, + ZypperReposDir: config.ZypperReposDir, + } + kernelHeaders := kernel.GetKernelHeaders(opts, client) if len(kernelHeaders) == 0 { a.tm.compilationResult = headerFetchErr return nil, fmt.Errorf("unable to find kernel headers") diff --git a/pkg/ebpf/bytecode/runtime/conntrack.go b/pkg/ebpf/bytecode/runtime/conntrack.go deleted file mode 100644 index f8c2549c1ebed..0000000000000 --- a/pkg/ebpf/bytecode/runtime/conntrack.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var Conntrack = newAsset("conntrack.c", "8c776f81c062678080a3cfcd4a39d7089a103588e23a03dc842b019cd6c79ca6") diff --git a/pkg/ebpf/bytecode/runtime/generated_asset.go b/pkg/ebpf/bytecode/runtime/generated_asset.go index ed6d22b041d85..155be42670bbd 100644 --- a/pkg/ebpf/bytecode/runtime/generated_asset.go +++ b/pkg/ebpf/bytecode/runtime/generated_asset.go @@ -49,7 +49,15 @@ func (a *generatedAsset) Compile(config *ebpf.Config, inputCode string, addition } }() - kernelHeaders := kernel.GetKernelHeaders(config, client) + opts := kernel.KernelHeaderOptions{ + DownloadEnabled: config.EnableKernelHeaderDownload, + Dirs: config.KernelHeadersDirs, + DownloadDir: config.KernelHeadersDownloadDir, + AptConfigDir: config.AptConfigDir, + YumReposDir: config.YumReposDir, + ZypperReposDir: config.ZypperReposDir, + } + kernelHeaders := kernel.GetKernelHeaders(opts, client) if len(kernelHeaders) == 0 { a.tm.compilationResult = headerFetchErr return nil, fmt.Errorf("unable to find kernel headers") diff --git a/pkg/ebpf/bytecode/runtime/helpers.go b/pkg/ebpf/bytecode/runtime/helpers.go new file mode 100644 index 0000000000000..c2c39c00d5d82 --- /dev/null +++ b/pkg/ebpf/bytecode/runtime/helpers.go @@ -0,0 +1,109 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf + +package runtime + +import ( + "bufio" + "bytes" + "fmt" + "io" + "os" + "strings" + "text/template" + + "github.com/DataDog/datadog-agent/pkg/ebpf/compiler" +) + +const listGenSource = ` +#include + +#define __BPF_ENUM_FN(x) BPF_FUNC_ ## x +__BPF_FUNC_MAPPER(__BPF_ENUM_FN) +#undef __BPF_ENUM_FN +` + +const defineTemplate = ` +#ifndef __BPF_CROSS_COMPILE_DYNAMIC__ +#define __BPF_CROSS_COMPILE_DYNAMIC__ + +{{ range $index, $fn := .AllFuncs -}} +#define __E_{{ $fn }} {{ mapexists $fn $.AvailableFuncs }} +{{ end -}} +#endif +` + +func includeHelperAvailability(kernelHeaders []string) (string, error) { + fns, err := getAvailableHelpers(kernelHeaders) + if err != nil { + return "", fmt.Errorf("get available helpers: %w", err) + } + + f, err := os.CreateTemp(os.TempDir(), "bpf_cross_compile_dynamic.*.h") + if err != nil { + return "", fmt.Errorf("temp define file: %w", err) + } + defer f.Close() + + if err := generateHelperDefines(fns, allHelpers, f); err != nil { + return "", fmt.Errorf("generate helper defines: %w", err) + } + return f.Name(), nil +} + +type helperData struct { + AllFuncs []string + AvailableFuncs map[string]struct{} +} + +func generateHelperDefines(availableFns []string, allFns []string, out io.Writer) error { + tmpl, err := template.New("helperexist").Funcs(map[string]any{ + "mapexists": func(k string, m map[string]struct{}) bool { + _, ok := m[k] + return ok + }, + }).Parse(defineTemplate) + if err != nil { + return fmt.Errorf("helper define template parse: %w", err) + } + + data := &helperData{ + AllFuncs: allFns, + AvailableFuncs: make(map[string]struct{}), + } + + for _, f := range availableFns { + data.AvailableFuncs[f] = struct{}{} + } + return tmpl.Execute(out, data) +} + +func getAvailableHelpers(kernelHeaders []string) ([]string, error) { + clangOut := &bytes.Buffer{} + if err := compiler.Preprocess(bytes.NewBufferString(listGenSource), clangOut, nil, kernelHeaders); err != nil { + return nil, fmt.Errorf("preprocess helpers: %w", err) + } + + var lastLine []byte + scanner := bufio.NewScanner(clangOut) + for scanner.Scan() { + lastLine = scanner.Bytes() + } + if len(lastLine) == 0 { + return nil, fmt.Errorf("empty output") + } + + funcs := strings.Split(string(lastLine), ", ") + if len(funcs) < 2 || funcs[0] != "BPF_FUNC_unspec" { + return nil, fmt.Errorf("invalid preprocess output: %s", lastLine) + } + + // remove BPF_FUNC_unspec + funcs = funcs[1:] + funcs[len(funcs)-1] = strings.TrimSuffix(funcs[len(funcs)-1], ",") + return funcs, nil +} diff --git a/pkg/ebpf/bytecode/runtime/helpers_test.go b/pkg/ebpf/bytecode/runtime/helpers_test.go new file mode 100644 index 0000000000000..87bacedc21822 --- /dev/null +++ b/pkg/ebpf/bytecode/runtime/helpers_test.go @@ -0,0 +1,70 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf + +package runtime + +import ( + "bytes" + "strings" + "testing" + + "github.com/DataDog/gopsutil/host" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/util/kernel" +) + +func TestGetAvailableHelpers(t *testing.T) { + kv, err := kernel.HostVersion() + require.NoError(t, err) + _, family, _, err := host.PlatformInformation() + require.NoError(t, err) + if kv < kernel.VersionCode(4, 10, 0) && family != "rhel" { + t.Skip("__BPF_FUNC_MAPPER macro not available on vanilla kernels < 4.10.0") + } + + cfg := ebpf.NewConfig() + opts := kernel.KernelHeaderOptions{ + DownloadEnabled: cfg.EnableKernelHeaderDownload, + Dirs: cfg.KernelHeadersDirs, + DownloadDir: cfg.KernelHeadersDownloadDir, + AptConfigDir: cfg.AptConfigDir, + YumReposDir: cfg.YumReposDir, + ZypperReposDir: cfg.ZypperReposDir, + } + kernelHeaders := kernel.GetKernelHeaders(opts, nil) + fns, err := getAvailableHelpers(kernelHeaders) + require.NoError(t, err) + assert.NotEmpty(t, fns, "number of available helpers") + + for _, f := range fns { + assert.NotEqual(t, "BPF_FUNC_unspec", f) + assert.False(t, strings.HasSuffix(f, ",")) + t.Log(f) + } +} + +func TestGenerateHelperDefines(t *testing.T) { + allfns := []string{"BPF_FUNC_map_lookup_elem", "BPF_FUNC_map_update_elem", "BPF_FUNC_map_delete_elem"} + availfns := []string{"BPF_FUNC_map_lookup_elem", "BPF_FUNC_map_update_elem"} + buf := &bytes.Buffer{} + err := generateHelperDefines(availfns, allfns, buf) + require.NoError(t, err) + + const exp = ` +#ifndef __BPF_CROSS_COMPILE_DYNAMIC__ +#define __BPF_CROSS_COMPILE_DYNAMIC__ + +#define __E_BPF_FUNC_map_lookup_elem true +#define __E_BPF_FUNC_map_update_elem true +#define __E_BPF_FUNC_map_delete_elem false +#endif +` + assert.Equal(t, exp, buf.String()) +} diff --git a/pkg/ebpf/bytecode/runtime/http.go b/pkg/ebpf/bytecode/runtime/http.go index 21131bef4e96b..57cb78f3f95e4 100644 --- a/pkg/ebpf/bytecode/runtime/http.go +++ b/pkg/ebpf/bytecode/runtime/http.go @@ -4,4 +4,4 @@ package runtime -var Http = newAsset("http.c", "656422f0bdf10c60b117057bb247ac3d381fb74dc5d94e4c9913b8b261fa796f") +var Http = newAsset("http.c", "09a590eb44074e7707925a3535611994df039724e81fe47f508ac08cb68523a4") diff --git a/pkg/ebpf/bytecode/runtime/oom-kill.go b/pkg/ebpf/bytecode/runtime/oom-kill.go deleted file mode 100644 index 7c57d963248ce..0000000000000 --- a/pkg/ebpf/bytecode/runtime/oom-kill.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var OomKill = newAsset("oom-kill.c", "22f55aa9a693adbcd396973a59e9395109b4b2d38fa907f1bbb882bf3440a7ff") diff --git a/pkg/ebpf/bytecode/runtime/runtime-security.go b/pkg/ebpf/bytecode/runtime/runtime-security.go deleted file mode 100644 index f770180d4c897..0000000000000 --- a/pkg/ebpf/bytecode/runtime/runtime-security.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var RuntimeSecurity = newAsset("runtime-security.c", "96670bae8b5bd67c521ad70ea85bd4b48344fb392fc03c221e6465abca27ef64") diff --git a/pkg/ebpf/bytecode/runtime/runtime_compilation_helpers.go b/pkg/ebpf/bytecode/runtime/runtime_compilation_helpers.go index 90f568d2bfd34..8191e1fb47ab9 100644 --- a/pkg/ebpf/bytecode/runtime/runtime_compilation_helpers.go +++ b/pkg/ebpf/bytecode/runtime/runtime_compilation_helpers.go @@ -17,10 +17,13 @@ import ( "path/filepath" "strings" + "github.com/DataDog/gopsutil/host" + "golang.org/x/sys/unix" + "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" "github.com/DataDog/datadog-agent/pkg/ebpf/compiler" + "github.com/DataDog/datadog-agent/pkg/util/kernel" "github.com/DataDog/datadog-agent/pkg/util/log" - "golang.org/x/sys/unix" ) type CompiledOutput interface { @@ -30,6 +33,7 @@ type CompiledOutput interface { } var defaultFlags = []string{ + "-DCOMPILE_RUNTIME", "-D__KERNEL__", "-DCONFIG_64BIT", "-D__BPF_TRACING__", @@ -69,6 +73,26 @@ func compileToObjectFile(in io.Reader, outputDir, filename, inHash string, addit return nil, outputFileErr, fmt.Errorf("error stat-ing output file %s: %w", outputFile, err) } + kv, err := kernel.HostVersion() + if err != nil { + return nil, kernelVersionErr, fmt.Errorf("unable to get kernel version: %w", err) + } + _, family, _, err := host.PlatformInformation() + if err != nil { + return nil, kernelVersionErr, fmt.Errorf("unable to get kernel family: %w", err) + } + + // RHEL platforms back-ported the __BPF_FUNC_MAPPER macro, so we can always use the dynamic method there + if kv >= kernel.VersionCode(4, 10, 0) || family == "rhel" { + var helperPath string + helperPath, err = includeHelperAvailability(kernelHeaders) + if err != nil { + return nil, compilationErr, fmt.Errorf("error getting helper availability: %w", err) + } + defer os.Remove(helperPath) + flags = append(flags, fmt.Sprintf("-include%s", helperPath)) + } + if err := compiler.CompileToObjectFile(in, outputFile, flags, kernelHeaders); err != nil { return nil, compilationErr, fmt.Errorf("failed to compile runtime version of %s: %s", filename, err) } diff --git a/pkg/ebpf/bytecode/runtime/tcp-queue-length.go b/pkg/ebpf/bytecode/runtime/tcp-queue-length.go deleted file mode 100644 index eac8b3c2cfd6c..0000000000000 --- a/pkg/ebpf/bytecode/runtime/tcp-queue-length.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var TcpQueueLength = newAsset("tcp-queue-length.c", "9fd146b7f51386efd5df66614ba2a704351697b3bbb3a5fe20b0f36b6a3f2613") diff --git a/pkg/ebpf/bytecode/runtime/telemetry.go b/pkg/ebpf/bytecode/runtime/telemetry.go index ce52b47058f12..c6acc217eabab 100644 --- a/pkg/ebpf/bytecode/runtime/telemetry.go +++ b/pkg/ebpf/bytecode/runtime/telemetry.go @@ -28,7 +28,7 @@ type CompilationResult int const ( notAttempted CompilationResult = iota compilationSuccess - kernelVersionErr // nolint:deadcode,unused + kernelVersionErr verificationError outputDirErr outputFileErr diff --git a/pkg/ebpf/bytecode/runtime/tracer.go b/pkg/ebpf/bytecode/runtime/tracer.go deleted file mode 100644 index e8253110fed86..0000000000000 --- a/pkg/ebpf/bytecode/runtime/tracer.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var Tracer = newAsset("tracer.c", "fef0d4a2d2f9271962c6bbb1cdd9574be813145cc6faa30b0ad5a453985a13d7") diff --git a/pkg/ebpf/c/co-re/bpf_core_read.h b/pkg/ebpf/c/bpf_core_read.h similarity index 97% rename from pkg/ebpf/c/co-re/bpf_core_read.h rename to pkg/ebpf/c/bpf_core_read.h index 059ce3275b534..058cfadc4817a 100644 --- a/pkg/ebpf/c/co-re/bpf_core_read.h +++ b/pkg/ebpf/c/bpf_core_read.h @@ -2,6 +2,8 @@ #ifndef __BPF_CORE_READ_H__ #define __BPF_CORE_READ_H__ +#include "bpf_helpers.h" + /* * enum bpf_field_info_kind is passed as a second argument into * __builtin_preserve_field_info() built-in to get a specific aspect of @@ -480,4 +482,21 @@ enum bpf_enum_value_kind { __r; \ }) +#ifdef COMPILE_RUNTIME + +#undef BPF_CORE_READ +#define BPF_CORE_READ BPF_PROBE_READ +#undef BPF_CORE_READ_USER +#define BPF_CORE_READ_USER BPF_PROBE_READ_USER +#undef BPF_CORE_READ_INTO +#define BPF_CORE_READ_INTO BPF_PROBE_READ_INTO +#undef BPF_CORE_READ_USER_INTO +#define BPF_CORE_READ_USER_INTO BPF_PROBE_READ_USER_INTO +#undef BPF_CORE_READ_STR_INTO +#define BPF_CORE_READ_STR_INTO BPF_PROBE_READ_STR_INTO +#undef BPF_CORE_READ_USER_STR_INTO +#define BPF_CORE_READ_USER_STR_INTO BPF_PROBE_READ_USER_STR_INTO + +#endif + #endif diff --git a/pkg/ebpf/c/bpf_cross_compile.h b/pkg/ebpf/c/bpf_cross_compile.h new file mode 100644 index 0000000000000..58da862ed1342 --- /dev/null +++ b/pkg/ebpf/c/bpf_cross_compile.h @@ -0,0 +1,169 @@ +#ifndef __BPF_CROSS_COMPILE__ +#define __BPF_CROSS_COMPILE__ + +#ifdef COMPILE_CORE +#define bpf_helper_exists(fn) bpf_core_enum_value_exists(enum bpf_func_id, fn) +#endif + +#ifdef COMPILE_RUNTIME +#include +#include + +#if !defined(__BPF_FUNC_MAPPER) +#define __E_BPF_FUNC_map_lookup_elem false +#define __E_BPF_FUNC_map_update_elem false +#define __E_BPF_FUNC_map_delete_elem false +#define __E_BPF_FUNC_probe_read false +#define __E_BPF_FUNC_ktime_get_ns false +#define __E_BPF_FUNC_trace_printk false +#define __E_BPF_FUNC_get_prandom_u32 false +#define __E_BPF_FUNC_get_smp_processor_id false +#define __E_BPF_FUNC_skb_store_bytes false +#define __E_BPF_FUNC_l3_csum_replace false +#define __E_BPF_FUNC_l4_csum_replace false +#define __E_BPF_FUNC_tail_call false +#define __E_BPF_FUNC_clone_redirect false +#define __E_BPF_FUNC_get_current_pid_tgid false +#define __E_BPF_FUNC_get_current_uid_gid false +#define __E_BPF_FUNC_get_current_comm false +#define __E_BPF_FUNC_get_cgroup_classid false +#define __E_BPF_FUNC_skb_vlan_push false +#define __E_BPF_FUNC_skb_vlan_pop false +#define __E_BPF_FUNC_skb_get_tunnel_key false +#define __E_BPF_FUNC_skb_set_tunnel_key false +#define __E_BPF_FUNC_perf_event_read false +#define __E_BPF_FUNC_redirect false +#define __E_BPF_FUNC_get_route_realm false +#define __E_BPF_FUNC_perf_event_output false +#define __E_BPF_FUNC_skb_load_bytes false +#define __E_BPF_FUNC_get_stackid false +#define __E_BPF_FUNC_csum_diff false +#define __E_BPF_FUNC_skb_get_tunnel_opt false +#define __E_BPF_FUNC_skb_set_tunnel_opt false +#define __E_BPF_FUNC_skb_change_proto false +#define __E_BPF_FUNC_skb_change_type false +#define __E_BPF_FUNC_skb_under_cgroup false +#define __E_BPF_FUNC_get_hash_recalc false +#define __E_BPF_FUNC_get_current_task false +#define __E_BPF_FUNC_probe_write_user false +#define __E_BPF_FUNC_current_task_under_cgroup false +#define __E_BPF_FUNC_skb_change_tail false +#define __E_BPF_FUNC_skb_pull_data false +#define __E_BPF_FUNC_csum_update false +#define __E_BPF_FUNC_set_hash_invalid false + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) +#undef __E_BPF_FUNC_map_lookup_elem +#define __E_BPF_FUNC_map_lookup_elem true +#undef __E_BPF_FUNC_map_update_elem +#define __E_BPF_FUNC_map_update_elem true +#undef __E_BPF_FUNC_map_delete_elem +#define __E_BPF_FUNC_map_delete_elem true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0) +#undef __E_BPF_FUNC_probe_read +#define __E_BPF_FUNC_probe_read true +#undef __E_BPF_FUNC_ktime_get_ns +#define __E_BPF_FUNC_ktime_get_ns true +#undef __E_BPF_FUNC_trace_printk +#define __E_BPF_FUNC_trace_printk true +#undef __E_BPF_FUNC_get_prandom_u32 +#define __E_BPF_FUNC_get_prandom_u32 true +#undef __E_BPF_FUNC_get_smp_processor_id +#define __E_BPF_FUNC_get_smp_processor_id true +#undef __E_BPF_FUNC_skb_store_bytes +#define __E_BPF_FUNC_skb_store_bytes true +#undef __E_BPF_FUNC_l3_csum_replace +#define __E_BPF_FUNC_l3_csum_replace true +#undef __E_BPF_FUNC_l4_csum_replace +#define __E_BPF_FUNC_l4_csum_replace true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) +#undef __E_BPF_FUNC_tail_call +#define __E_BPF_FUNC_tail_call true +#undef __E_BPF_FUNC_clone_redirect +#define __E_BPF_FUNC_clone_redirect true +#undef __E_BPF_FUNC_get_current_pid_tgid +#define __E_BPF_FUNC_get_current_pid_tgid true +#undef __E_BPF_FUNC_get_current_uid_gid +#define __E_BPF_FUNC_get_current_uid_gid true +#undef __E_BPF_FUNC_get_current_comm +#define __E_BPF_FUNC_get_current_comm true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) +#undef __E_BPF_FUNC_get_cgroup_classid +#define __E_BPF_FUNC_get_cgroup_classid true +#undef __E_BPF_FUNC_skb_vlan_push +#define __E_BPF_FUNC_skb_vlan_push true +#undef __E_BPF_FUNC_skb_vlan_pop +#define __E_BPF_FUNC_skb_vlan_pop true +#undef __E_BPF_FUNC_skb_get_tunnel_key +#define __E_BPF_FUNC_skb_get_tunnel_key true +#undef __E_BPF_FUNC_skb_set_tunnel_key +#define __E_BPF_FUNC_skb_set_tunnel_key true +#undef __E_BPF_FUNC_perf_event_read +#define __E_BPF_FUNC_perf_event_read true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0) +#undef __E_BPF_FUNC_redirect +#define __E_BPF_FUNC_redirect true +#undef __E_BPF_FUNC_get_route_realm +#define __E_BPF_FUNC_get_route_realm true +#undef __E_BPF_FUNC_perf_event_output +#define __E_BPF_FUNC_perf_event_output true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0) +#undef __E_BPF_FUNC_skb_load_bytes +#define __E_BPF_FUNC_skb_load_bytes true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) +#undef __E_BPF_FUNC_get_stackid +#define __E_BPF_FUNC_get_stackid true +#undef __E_BPF_FUNC_csum_diff +#define __E_BPF_FUNC_csum_diff true +#undef __E_BPF_FUNC_skb_get_tunnel_opt +#define __E_BPF_FUNC_skb_get_tunnel_opt true +#undef __E_BPF_FUNC_skb_set_tunnel_opt +#define __E_BPF_FUNC_skb_set_tunnel_opt true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) +#undef __E_BPF_FUNC_skb_change_proto +#define __E_BPF_FUNC_skb_change_proto true +#undef __E_BPF_FUNC_skb_change_type +#define __E_BPF_FUNC_skb_change_type true +#undef __E_BPF_FUNC_skb_under_cgroup +#define __E_BPF_FUNC_skb_under_cgroup true +#undef __E_BPF_FUNC_get_hash_recalc +#define __E_BPF_FUNC_get_hash_recalc true +#undef __E_BPF_FUNC_get_current_task +#define __E_BPF_FUNC_get_current_task true +#undef __E_BPF_FUNC_probe_write_user +#define __E_BPF_FUNC_probe_write_user true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) +#undef __E_BPF_FUNC_current_task_under_cgroup +#define __E_BPF_FUNC_current_task_under_cgroup true +#undef __E_BPF_FUNC_skb_change_tail +#define __E_BPF_FUNC_skb_change_tail true +#undef __E_BPF_FUNC_skb_pull_data +#define __E_BPF_FUNC_skb_pull_data true +#undef __E_BPF_FUNC_csum_update +#define __E_BPF_FUNC_csum_update true +#undef __E_BPF_FUNC_set_hash_invalid +#define __E_BPF_FUNC_set_hash_invalid true +#endif + +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) */ + +#define bpf_helper_exists(x) __E_ ## x +#endif /* defined(COMPILE_RUNTIME) */ + +#endif /* defined(__BPF_CROSS_COMPILE__) */ diff --git a/pkg/ebpf/c/co-re/bpf_helper_defs.h b/pkg/ebpf/c/bpf_helper_defs.h similarity index 99% rename from pkg/ebpf/c/co-re/bpf_helper_defs.h rename to pkg/ebpf/c/bpf_helper_defs.h index ff9a46f03decc..ab7edd1648439 100644 --- a/pkg/ebpf/c/co-re/bpf_helper_defs.h +++ b/pkg/ebpf/c/bpf_helper_defs.h @@ -323,7 +323,12 @@ static long (*bpf_l4_csum_replace)(struct __sk_buff *skb, __u32 offset, __u64 fr * Returns * 0 on success, or a negative error in case of failure. */ -static long (*bpf_tail_call)(void *ctx, void *prog_array_map, __u32 index) = (void *) 12; +/* at some point in kernel < 4.15, a duplicate bpf_tail_call symbol got included in the kernel headers. + This breaks eBPF builds with a symbol redefinition error. + It is fixed in 4.15 with commit https://github.com/torvalds/linux/commit/035226b964c820f65e201cdf123705a8f1d7c670 + Using bpf_tail_call_compat as a symbol name avoids this issue. + */ +static long (*bpf_tail_call_compat)(void *ctx, void *prog_array_map, __u32 index) = (void *) 12; /* * bpf_clone_redirect @@ -756,7 +761,12 @@ static long (*bpf_skb_load_bytes)(const void *skb, __u32 offset, void *to, __u32 * The positive or null stack id on success, or a negative error * in case of failure. */ -static long (*bpf_get_stackid)(void *ctx, void *map, __u64 flags) = (void *) 27; + /* at some point in kernel < 4.15, a duplicate bpf_get_stackid symbol got included in the kernel headers. + This breaks eBPF builds with a symbol redefinition error. + It is fixed in 4.15 with commit https://github.com/torvalds/linux/commit/035226b964c820f65e201cdf123705a8f1d7c670 + Using bpf_get_stackid_compat as a symbol name avoids this issue. + */ +static long (*bpf_get_stackid_compat)(void *ctx, void *map, __u64 flags) = (void *) 27; /* * bpf_csum_diff diff --git a/pkg/ebpf/c/bpf_helpers.h b/pkg/ebpf/c/bpf_helpers.h index 304d6b85383b7..62b646df0d12d 100644 --- a/pkg/ebpf/c/bpf_helpers.h +++ b/pkg/ebpf/c/bpf_helpers.h @@ -1,178 +1,312 @@ -#ifndef __BPF_HELPERS_H -#define __BPF_HELPERS_H +/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ +#ifndef __BPF_HELPERS__ +#define __BPF_HELPERS__ -#include -#include +#include "ktypes.h" -/* Macro to output debug logs to /sys/kernel/debug/tracing/trace_pipe - */ -#if DEBUG == 1 -#define log_debug(fmt, ...) \ - ({ \ - char ____fmt[] = fmt; \ - bpf_trace_printk(____fmt, sizeof(____fmt), ##__VA_ARGS__); \ - }) -#else -// No op -#define log_debug(fmt, ...) -#endif - -#ifndef __always_inline -#define __always_inline __attribute__((always_inline)) +#ifndef COMPILE_CORE +#include #endif -/* helper macro to place programs, maps, license in - * different sections in elf_bpf file. Section names - * are interpreted by elf_bpf loader +/* + * Note that bpf programs need to include either + * vmlinux.h (auto-generated from BTF) or linux/types.h + * in advance since bpf_helper_defs.h uses such types + * as __u64. */ -#define SEC(NAME) __attribute__((section(NAME), used)) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-variable" +#include "bpf_helper_defs.h" +#pragma clang diagnostic pop +#include "bpf_helpers_custom.h" + +#define __uint(name, val) int (*name)[val] +#define __type(name, val) typeof(val) *name +#define __array(name, val) typeof(val) *name[] + +/* + * Helper macro to place programs, maps, license in + * different sections in elf_bpf file. Section names + * are interpreted by libbpf depending on the context (BPF programs, BPF maps, + * extern variables, etc). + * To allow use of SEC() with externs (e.g., for extern .maps declarations), + * make sure __attribute__((unused)) doesn't trigger compilation warning. + */ +#if __GNUC__ && !__clang__ -/* helper functions called from eBPF programs written in C */ -static void* (*bpf_map_lookup_elem)(void* map, void* key) = (void*)BPF_FUNC_map_lookup_elem; -static int (*bpf_map_update_elem)(void* map, void* key, void* value, - unsigned long long flags) - = (void*)BPF_FUNC_map_update_elem; -static int (*bpf_map_delete_elem)(void* map, void* key) = (void*)BPF_FUNC_map_delete_elem; -static int (*bpf_probe_read)(void* dst, int size, void* unsafe_ptr) = (void*)BPF_FUNC_probe_read; -static unsigned long long (*bpf_ktime_get_ns)(void) = (void*)BPF_FUNC_ktime_get_ns; -static int (*bpf_trace_printk)(const char* fmt, int fmt_size, ...) = (void*)BPF_FUNC_trace_printk; -static unsigned long long (*bpf_get_smp_processor_id)(void) = (void*)BPF_FUNC_get_smp_processor_id; -static unsigned long long (*bpf_get_current_pid_tgid)(void) = (void*)BPF_FUNC_get_current_pid_tgid; -static unsigned long long (*bpf_get_current_uid_gid)(void) = (void*)BPF_FUNC_get_current_uid_gid; -static int (*bpf_get_current_comm)(void* buf, int buf_size) = (void*)BPF_FUNC_get_current_comm; -static int (*bpf_perf_event_read)(void* map, int index) = (void*)BPF_FUNC_perf_event_read; -static int (*bpf_clone_redirect)(void* ctx, int ifindex, int flags) = (void*)BPF_FUNC_clone_redirect; -static int (*bpf_redirect)(int ifindex, int flags) = (void*)BPF_FUNC_redirect; -static int (*bpf_perf_event_output)(void* ctx, void* map, - unsigned long long flags, void* data, - int size) - = (void*)BPF_FUNC_perf_event_output; -static int (*bpf_skb_get_tunnel_key)(void* ctx, void* key, int size, int flags) = (void*)BPF_FUNC_skb_get_tunnel_key; -static int (*bpf_skb_set_tunnel_key)(void* ctx, void* key, int size, int flags) = (void*)BPF_FUNC_skb_set_tunnel_key; -static unsigned long long (*bpf_get_prandom_u32)(void) = (void*)BPF_FUNC_get_prandom_u32; -static int (*bpf_skb_store_bytes)(void* ctx, int off, void* from, int len, int flags) = (void*)BPF_FUNC_skb_store_bytes; -static int (*bpf_l3_csum_replace)(void* ctx, int off, int from, int to, int flags) = (void*)BPF_FUNC_l3_csum_replace; -static int (*bpf_l4_csum_replace)(void* ctx, int off, int from, int to, int flags) = (void*)BPF_FUNC_l4_csum_replace; - -/* at some point in kernel < 4.15, a duplicate bpf_tail_call symbol got included in the kernel headers. - This breaks eBPF builds with a symbol redefinition error. - It is fixed in 4.15 with commit https://github.com/torvalds/linux/commit/035226b964c820f65e201cdf123705a8f1d7c670 - Using bpf_tail_call_compat as a symbol name avoids this issue. +/* + * Pragma macros are broken on GCC + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55578 + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90400 */ -static int (*bpf_tail_call_compat)(void* ctx, void* map, int key) = (void*)BPF_FUNC_tail_call; +#define SEC(name) __attribute__((section(name), used)) + +#else + +#define SEC(name) \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wignored-attributes\"") \ + __attribute__((section(name), used)) \ + _Pragma("GCC diagnostic pop") \ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) -static long (*bpf_skb_load_bytes)(const void *skb, u32 offset, void *to, u32 len) = (void*)BPF_FUNC_skb_load_bytes; #endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) || RHEL_MAJOR == 7 -static u64 (*bpf_get_current_task)(void) = (void*)BPF_FUNC_get_current_task; -static int (*bpf_probe_write_user)(void *dst, const void *src, int size) = (void *) BPF_FUNC_probe_write_user; +/* Avoid 'linux/stddef.h' definition of '__always_inline'. */ +#undef __always_inline +#define __always_inline inline __attribute__((always_inline)) + +#ifndef __noinline +#define __noinline __attribute__((noinline)) +#endif +#ifndef __weak +#define __weak __attribute__((weak)) #endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) || RHEL_MAJOR == 7 -static int (*bpf_probe_read_str)(void* dst, int size, void* unsafe_ptr) = (void*)BPF_FUNC_probe_read_str; +/* + * Use __hidden attribute to mark a non-static BPF subprogram effectively + * static for BPF verifier's verification algorithm purposes, allowing more + * extensive and permissive BPF verification process, taking into account + * subprogram's caller context. + */ +#define __hidden __attribute__((visibility("hidden"))) + +/* When utilizing vmlinux.h with BPF CO-RE, user BPF programs can't include + * any system-level headers (such as stddef.h, linux/version.h, etc), and + * commonly-used macros like NULL and KERNEL_VERSION aren't available through + * vmlinux.h. This just adds unnecessary hurdles and forces users to re-define + * them on their own. So as a convenience, provide such definitions here. + */ +#ifndef NULL +#define NULL ((void *)0) #endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0) -static int (*bpf_probe_read_user_str)(void* dst, int size, void* unsafe_ptr) = (void*)BPF_FUNC_probe_read_user_str; -static int (*bpf_probe_read_kernel_str)(void* dst, int size, void* unsafe_ptr) = (void*)BPF_FUNC_probe_read_kernel_str; -static int (*bpf_probe_read_user)(void* dst, int size, void* unsafe_ptr) = (void*)BPF_FUNC_probe_read_user; -static int (*bpf_probe_read_kernel)(void* dst, int size, void* unsafe_ptr) = (void*)BPF_FUNC_probe_read_kernel; -#else -/* cilium/ebpf loader will fixup bpf_probe_read_{user,kernel} call to bpf_probe_read on kernel older than 5.5.0 - but our runtime compilation would need to do that here as BPF_FUNC_xxx would not be defined in uapi headers +#ifndef KERNEL_VERSION +#define KERNEL_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + ((c) > 255 ? 255 : (c))) +#endif + +/* + * Helper macros to manipulate data structures */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) -static int (*bpf_probe_read_user_str)(void* dst, int size, void* unsafe_ptr) = (void*)BPF_FUNC_probe_read_str; -static int (*bpf_probe_read_kernel_str)(void* dst, int size, void* unsafe_ptr) = (void*)BPF_FUNC_probe_read_str; +#ifndef offsetof +#define offsetof(TYPE, MEMBER) ((unsigned long)&((TYPE *)0)->MEMBER) #endif -static int (*bpf_probe_read_user)(void* dst, int size, void* unsafe_ptr) = (void*)BPF_FUNC_probe_read; -static int (*bpf_probe_read_kernel)(void* dst, int size, void* unsafe_ptr) = (void*)BPF_FUNC_probe_read; +#ifndef container_of +#define container_of(ptr, type, member) \ + ({ \ + void *__mptr = (void *)(ptr); \ + ((type *)(__mptr - offsetof(type, member))); \ + }) #endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0) -static int (*bpf_ringbuf_output)(void *ringbuf, void *data, u64 size, u64 flags) = (void*)BPF_FUNC_ringbuf_output; +/* + * Compiler (optimization) barrier. + */ +#ifndef barrier +#define barrier() asm volatile("" ::: "memory") #endif -#pragma clang diagnostic pop +/* Variable-specific compiler (optimization) barrier. It's a no-op which makes + * compiler believe that there is some black box modification of a given + * variable and thus prevents compiler from making extra assumption about its + * value and potential simplifications and optimizations on this variable. + * + * E.g., compiler might often delay or even omit 32-bit to 64-bit casting of + * a variable, making some code patterns unverifiable. Putting barrier_var() + * in place will ensure that cast is performed before the barrier_var() + * invocation, because compiler has to pessimistically assume that embedded + * asm section might perform some extra operations on that variable. + * + * This is a variable-specific variant of more global barrier(). + */ +#ifndef barrier_var +#define barrier_var(var) asm volatile("" : "=r"(var) : "0"(var)) +#endif -/* llvm builtin functions that eBPF C program may use to - * emit BPF_LD_ABS and BPF_LD_IND instructions +/* + * Helper macro to throw a compilation error if __bpf_unreachable() gets + * built into the resulting code. This works given BPF back end does not + * implement __builtin_trap(). This is useful to assert that certain paths + * of the program code are never used and hence eliminated by the compiler. + * + * For example, consider a switch statement that covers known cases used by + * the program. __bpf_unreachable() can then reside in the default case. If + * the program gets extended such that a case is not covered in the switch + * statement, then it will throw a build error due to the default case not + * being compiled out. */ -struct sk_buff; -unsigned long long load_byte(void* skb, - unsigned long long off) asm("llvm.bpf.load.byte"); -unsigned long long load_half(void* skb, - unsigned long long off) asm("llvm.bpf.load.half"); -unsigned long long load_word(void* skb, - unsigned long long off) asm("llvm.bpf.load.word"); - -/* a helper structure used by eBPF C program - * to describe map attributes to elf_bpf loader +#ifndef __bpf_unreachable +# define __bpf_unreachable() __builtin_trap() +#endif + +/* + * Helper function to perform a tail call with a constant/immediate map slot. */ -#define BUF_SIZE_MAP_NS 256 +#if __clang_major__ >= 8 && defined(__bpf__) +static __always_inline void +bpf_tail_call_static(void *ctx, const void *map, const __u32 slot) +{ + if (!__builtin_constant_p(slot)) + __bpf_unreachable(); + /* + * Provide a hard guarantee that LLVM won't optimize setting r2 (map + * pointer) and r3 (constant map index) from _different paths_ ending + * up at the _same_ call insn as otherwise we won't be able to use the + * jmpq/nopl retpoline-free patching by the x86-64 JIT in the kernel + * given they mismatch. See also d2e4c1e6c294 ("bpf: Constant map key + * tracking for prog array pokes") for details on verifier tracking. + * + * Note on clobber list: we need to stay in-line with BPF calling + * convention, so even if we don't end up using r0, r4, r5, we need + * to mark them as clobber so that LLVM doesn't end up using them + * before / after the call. + */ + asm volatile("r1 = %[ctx]\n\t" + "r2 = %[map]\n\t" + "r3 = %[slot]\n\t" + "call 12" + :: [ctx]"r"(ctx), [map]"r"(map), [slot]"i"(slot) + : "r0", "r1", "r2", "r3", "r4", "r5"); +} +#endif + +/* + * Helper structure used by eBPF C program + * to describe BPF map attributes to libbpf loader + */ struct bpf_map_def { - unsigned int type; - unsigned int key_size; - unsigned int value_size; - unsigned int max_entries; - unsigned int map_flags; - unsigned int pinning; - char namespace[BUF_SIZE_MAP_NS]; + unsigned int type; + unsigned int key_size; + unsigned int value_size; + unsigned int max_entries; + unsigned int map_flags; +} __attribute__((deprecated("use BTF-defined maps in .maps section"))); + +enum libbpf_pin_type { + LIBBPF_PIN_NONE, + /* PIN_BY_NAME: pin maps by name (in /sys/fs/bpf by default) */ + LIBBPF_PIN_BY_NAME, }; -#define PT_REGS_STACK_PARM(x,n) \ -({ \ - unsigned long p = 0; \ - bpf_probe_read(&p, sizeof(p), ((unsigned long *)x->sp) + n); \ - p; \ +enum libbpf_tristate { + TRI_NO = 0, + TRI_YES = 1, + TRI_MODULE = 2, +}; + +#define __kconfig __attribute__((section(".kconfig"))) +#define __ksym __attribute__((section(".ksyms"))) +#define __kptr __attribute__((btf_type_tag("kptr"))) +#define __kptr_ref __attribute__((btf_type_tag("kptr_ref"))) + +#ifndef ___bpf_concat +#define ___bpf_concat(a, b) a ## b +#endif +#ifndef ___bpf_apply +#define ___bpf_apply(fn, n) ___bpf_concat(fn, n) +#endif +#ifndef ___bpf_nth +#define ___bpf_nth(_, _1, _2, _3, _4, _5, _6, _7, _8, _9, _a, _b, _c, N, ...) N +#endif +#ifndef ___bpf_narg +#define ___bpf_narg(...) \ + ___bpf_nth(_, ##__VA_ARGS__, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) +#endif + +#define ___bpf_fill0(arr, p, x) do {} while (0) +#define ___bpf_fill1(arr, p, x) arr[p] = x +#define ___bpf_fill2(arr, p, x, args...) arr[p] = x; ___bpf_fill1(arr, p + 1, args) +#define ___bpf_fill3(arr, p, x, args...) arr[p] = x; ___bpf_fill2(arr, p + 1, args) +#define ___bpf_fill4(arr, p, x, args...) arr[p] = x; ___bpf_fill3(arr, p + 1, args) +#define ___bpf_fill5(arr, p, x, args...) arr[p] = x; ___bpf_fill4(arr, p + 1, args) +#define ___bpf_fill6(arr, p, x, args...) arr[p] = x; ___bpf_fill5(arr, p + 1, args) +#define ___bpf_fill7(arr, p, x, args...) arr[p] = x; ___bpf_fill6(arr, p + 1, args) +#define ___bpf_fill8(arr, p, x, args...) arr[p] = x; ___bpf_fill7(arr, p + 1, args) +#define ___bpf_fill9(arr, p, x, args...) arr[p] = x; ___bpf_fill8(arr, p + 1, args) +#define ___bpf_fill10(arr, p, x, args...) arr[p] = x; ___bpf_fill9(arr, p + 1, args) +#define ___bpf_fill11(arr, p, x, args...) arr[p] = x; ___bpf_fill10(arr, p + 1, args) +#define ___bpf_fill12(arr, p, x, args...) arr[p] = x; ___bpf_fill11(arr, p + 1, args) +#define ___bpf_fill(arr, args...) \ + ___bpf_apply(___bpf_fill, ___bpf_narg(args))(arr, 0, args) + +/* + * BPF_SEQ_PRINTF to wrap bpf_seq_printf to-be-printed values + * in a structure. + */ +#define BPF_SEQ_PRINTF(seq, fmt, args...) \ +({ \ + static const char ___fmt[] = fmt; \ + unsigned long long ___param[___bpf_narg(args)]; \ + \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ + ___bpf_fill(___param, args); \ + _Pragma("GCC diagnostic pop") \ + \ + bpf_seq_printf(seq, ___fmt, sizeof(___fmt), \ + ___param, sizeof(___param)); \ }) -#if defined(__x86_64__) - -#define PT_REGS_PARM1(x) ((x)->di) -#define PT_REGS_PARM2(x) ((x)->si) -#define PT_REGS_PARM3(x) ((x)->dx) -#define PT_REGS_PARM4(x) ((x)->cx) -#define PT_REGS_PARM5(x) ((x)->r8) -#define PT_REGS_PARM6(x) ((x)->r9) -#define PT_REGS_PARM7(x) PT_REGS_STACK_PARM(x,1) -#define PT_REGS_PARM8(x) PT_REGS_STACK_PARM(x,2) -#define PT_REGS_PARM9(x) PT_REGS_STACK_PARM(x,3) -#define PT_REGS_RET(x) ((x)->sp) -#define PT_REGS_FP(x) ((x)->bp) -#define PT_REGS_RC(x) ((x)->ax) -#define PT_REGS_SP(x) ((x)->sp) -#define PT_REGS_IP(x) ((x)->ip) - -#elif defined(__aarch64__) - -#define PT_REGS_PARM1(x) ((x)->regs[0]) -#define PT_REGS_PARM2(x) ((x)->regs[1]) -#define PT_REGS_PARM3(x) ((x)->regs[2]) -#define PT_REGS_PARM4(x) ((x)->regs[3]) -#define PT_REGS_PARM5(x) ((x)->regs[4]) -#define PT_REGS_PARM6(x) ((x)->regs[5]) -#define PT_REGS_PARM7(x) ((x)->regs[6]) -#define PT_REGS_PARM8(x) ((x)->regs[7]) -#define PT_REGS_PARM9(x) PT_REGS_STACK_PARM(x,1) -#define PT_REGS_RET(x) ((x)->regs[30]) -#define PT_REGS_FP(x) ((x)->regs[29]) /* Works only with CONFIG_FRAME_POINTER */ -#define PT_REGS_RC(x) ((x)->regs[0]) -#define PT_REGS_SP(x) ((x)->sp) -#define PT_REGS_IP(x) ((x)->pc) +/* + * BPF_SNPRINTF wraps the bpf_snprintf helper with variadic arguments instead of + * an array of u64. + */ +#define BPF_SNPRINTF(out, out_size, fmt, args...) \ +({ \ + static const char ___fmt[] = fmt; \ + unsigned long long ___param[___bpf_narg(args)]; \ + \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ + ___bpf_fill(___param, args); \ + _Pragma("GCC diagnostic pop") \ + \ + bpf_snprintf(out, out_size, ___fmt, \ + ___param, sizeof(___param)); \ +}) +#ifdef BPF_NO_GLOBAL_DATA +#define BPF_PRINTK_FMT_MOD #else -#error "Unsupported platform" +#define BPF_PRINTK_FMT_MOD static const #endif -#define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ bpf_probe_read(&(ip), sizeof(ip), (void*)PT_REGS_RET(ctx)); }) -#define BPF_KRETPROBE_READ_RET_IP(ip, ctx) ({ bpf_probe_read(&(ip), sizeof(ip), \ - (void*)(PT_REGS_FP(ctx) + sizeof(ip))); }) +#define __bpf_printk(fmt, ...) \ +({ \ + BPF_PRINTK_FMT_MOD char ____fmt[] = fmt; \ + bpf_trace_printk(____fmt, sizeof(____fmt), \ + ##__VA_ARGS__); \ +}) + +/* + * __bpf_vprintk wraps the bpf_trace_vprintk helper with variadic arguments + * instead of an array of u64. + */ +#define __bpf_vprintk(fmt, args...) \ +({ \ + static const char ___fmt[] = fmt; \ + unsigned long long ___param[___bpf_narg(args)]; \ + \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ + ___bpf_fill(___param, args); \ + _Pragma("GCC diagnostic pop") \ + \ + bpf_trace_vprintk(___fmt, sizeof(___fmt), \ + ___param, sizeof(___param)); \ +}) + +/* Use __bpf_printk when bpf_printk call has 3 or fewer fmt args + * Otherwise use __bpf_vprintk + */ +#define ___bpf_pick_printk(...) \ + ___bpf_nth(_, ##__VA_ARGS__, __bpf_vprintk, __bpf_vprintk, __bpf_vprintk, \ + __bpf_vprintk, __bpf_vprintk, __bpf_vprintk, __bpf_vprintk, \ + __bpf_vprintk, __bpf_vprintk, __bpf_printk /*3*/, __bpf_printk /*2*/,\ + __bpf_printk /*1*/, __bpf_printk /*0*/) + +/* Helper macro to print out debug messages */ +#define bpf_printk(fmt, args...) ___bpf_pick_printk(args)(fmt, ##args) #endif diff --git a/pkg/ebpf/c/bpf_helpers_custom.h b/pkg/ebpf/c/bpf_helpers_custom.h new file mode 100644 index 0000000000000..76606272c2706 --- /dev/null +++ b/pkg/ebpf/c/bpf_helpers_custom.h @@ -0,0 +1,29 @@ +#ifndef __BPF_HELPERS_CUSTOM__ +#define __BPF_HELPERS_CUSTOM__ + +#include "bpf_cross_compile.h" + +/* Macro to output debug logs to /sys/kernel/debug/tracing/trace_pipe + */ +#ifdef DEBUG +#define log_debug(fmt, ...) \ + ({ \ + char ____fmt[] = fmt; \ + bpf_trace_printk(____fmt, sizeof(____fmt), ##__VA_ARGS__); \ + }) +#else +// No op +#define log_debug(fmt, ...) +#endif + +/* llvm builtin functions that eBPF C program may use to + * emit BPF_LD_ABS and BPF_LD_IND instructions + */ +unsigned long long load_byte(void* skb, + unsigned long long off) asm("llvm.bpf.load.byte"); +unsigned long long load_half(void* skb, + unsigned long long off) asm("llvm.bpf.load.half"); +unsigned long long load_word(void* skb, + unsigned long long off) asm("llvm.bpf.load.word"); + +#endif diff --git a/pkg/ebpf/c/co-re/bpf_tracing.h b/pkg/ebpf/c/bpf_tracing.h similarity index 99% rename from pkg/ebpf/c/co-re/bpf_tracing.h rename to pkg/ebpf/c/bpf_tracing.h index 780f7bfc41f70..ec373fdf3b105 100644 --- a/pkg/ebpf/c/co-re/bpf_tracing.h +++ b/pkg/ebpf/c/bpf_tracing.h @@ -560,4 +560,6 @@ ____##name(struct pt_regs *ctx, ##args) #define BPF_KPROBE_SYSCALL BPF_KSYSCALL -#endif \ No newline at end of file +#include "bpf_tracing_custom.h" + +#endif diff --git a/pkg/ebpf/c/bpf_tracing_custom.h b/pkg/ebpf/c/bpf_tracing_custom.h new file mode 100644 index 0000000000000..39578a88de3b6 --- /dev/null +++ b/pkg/ebpf/c/bpf_tracing_custom.h @@ -0,0 +1,58 @@ +#ifndef __BPF_TRACING_CUSTOM_H__ +#define __BPF_TRACING_CUSTOM_H__ + +#if defined(bpf_target_x86) + +#define __PT_PARM6_REG r9 +#define PT_REGS_STACK_PARM(x,n) \ +({ \ + unsigned long p = 0; \ + bpf_probe_read_kernel(&p, sizeof(p), ((unsigned long *)x->__PT_SP_REG) + n); \ + p; \ +}) + +#define PT_REGS_PARM7(x) PT_REGS_STACK_PARM(x,1) +#define PT_REGS_PARM8(x) PT_REGS_STACK_PARM(x,2) +#define PT_REGS_PARM9(x) PT_REGS_STACK_PARM(x,3) + +#elif defined(bpf_target_arm64) + +#define __PT_PARM6_REG regs[5] +#define PT_REGS_STACK_PARM(x,n) \ +({ \ + unsigned long p = 0; \ + bpf_probe_read_kernel(&p, sizeof(p), ((unsigned long *)x->sp) + n); \ + p; \ +}) + +#define PT_REGS_PARM7(x) (__PT_REGS_CAST(x)->regs[6]) +#define PT_REGS_PARM8(x) (__PT_REGS_CAST(x)->regs[7]) +#define PT_REGS_PARM9(x) PT_REGS_STACK_PARM(__PT_REGS_CAST(x),1) +#define PT_REGS_PARM7_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), regs[6]) +#define PT_REGS_PARM8_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), regs[7]) + +#endif /* defined(bpf_target_x86) */ + +#if defined(bpf_target_defined) + +#define PT_REGS_PARM6(x) (__PT_REGS_CAST(x)->__PT_PARM6_REG) +#define PT_REGS_PARM6_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_PARM6_REG) + +#else /* defined(bpf_target_defined) */ + +#define PT_REGS_PARM6(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) +#define PT_REGS_PARM7(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) +#define PT_REGS_PARM8(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) +#define PT_REGS_PARM9(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) +#define PT_REGS_PARM6_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) +#define PT_REGS_PARM7_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) +#define PT_REGS_PARM8_CORE(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) + +#endif + +#define ___bpf_kprobe_args6(x, args...) ___bpf_kprobe_args5(args), (void *)PT_REGS_PARM6(ctx) +#define ___bpf_kprobe_args7(x, args...) ___bpf_kprobe_args6(args), (void *)PT_REGS_PARM7(ctx) +#define ___bpf_kprobe_args8(x, args...) ___bpf_kprobe_args7(args), (void *)PT_REGS_PARM8(ctx) +#define ___bpf_kprobe_args9(x, args...) ___bpf_kprobe_args8(args), (void *)PT_REGS_PARM9(ctx) + +#endif diff --git a/pkg/ebpf/c/co-re/bpf_endian.h b/pkg/ebpf/c/co-re/bpf_endian.h deleted file mode 100644 index 32623544ee348..0000000000000 --- a/pkg/ebpf/c/co-re/bpf_endian.h +++ /dev/null @@ -1,99 +0,0 @@ -/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ -#ifndef __BPF_ENDIAN__ -#define __BPF_ENDIAN__ - -/* - * Isolate byte #n and put it into byte #m, for __u##b type. - * E.g., moving byte #6 (nnnnnnnn) into byte #1 (mmmmmmmm) for __u64: - * 1) xxxxxxxx nnnnnnnn xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx mmmmmmmm xxxxxxxx - * 2) nnnnnnnn xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx mmmmmmmm xxxxxxxx 00000000 - * 3) 00000000 00000000 00000000 00000000 00000000 00000000 00000000 nnnnnnnn - * 4) 00000000 00000000 00000000 00000000 00000000 00000000 nnnnnnnn 00000000 - */ -#define ___bpf_mvb(x, b, n, m) ((__u##b)(x) << (b-(n+1)*8) >> (b-8) << (m*8)) - -#define ___bpf_swab16(x) ((__u16)( \ - ___bpf_mvb(x, 16, 0, 1) | \ - ___bpf_mvb(x, 16, 1, 0))) - -#define ___bpf_swab32(x) ((__u32)( \ - ___bpf_mvb(x, 32, 0, 3) | \ - ___bpf_mvb(x, 32, 1, 2) | \ - ___bpf_mvb(x, 32, 2, 1) | \ - ___bpf_mvb(x, 32, 3, 0))) - -#define ___bpf_swab64(x) ((__u64)( \ - ___bpf_mvb(x, 64, 0, 7) | \ - ___bpf_mvb(x, 64, 1, 6) | \ - ___bpf_mvb(x, 64, 2, 5) | \ - ___bpf_mvb(x, 64, 3, 4) | \ - ___bpf_mvb(x, 64, 4, 3) | \ - ___bpf_mvb(x, 64, 5, 2) | \ - ___bpf_mvb(x, 64, 6, 1) | \ - ___bpf_mvb(x, 64, 7, 0))) - -/* LLVM's BPF target selects the endianness of the CPU - * it compiles on, or the user specifies (bpfel/bpfeb), - * respectively. The used __BYTE_ORDER__ is defined by - * the compiler, we cannot rely on __BYTE_ORDER from - * libc headers, since it doesn't reflect the actual - * requested byte order. - * - * Note, LLVM's BPF target has different __builtin_bswapX() - * semantics. It does map to BPF_ALU | BPF_END | BPF_TO_BE - * in bpfel and bpfeb case, which means below, that we map - * to cpu_to_be16(). We could use it unconditionally in BPF - * case, but better not rely on it, so that this header here - * can be used from application and BPF program side, which - * use different targets. - */ -#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ -# define __bpf_ntohs(x) __builtin_bswap16(x) -# define __bpf_htons(x) __builtin_bswap16(x) -# define __bpf_constant_ntohs(x) ___bpf_swab16(x) -# define __bpf_constant_htons(x) ___bpf_swab16(x) -# define __bpf_ntohl(x) __builtin_bswap32(x) -# define __bpf_htonl(x) __builtin_bswap32(x) -# define __bpf_constant_ntohl(x) ___bpf_swab32(x) -# define __bpf_constant_htonl(x) ___bpf_swab32(x) -# define __bpf_be64_to_cpu(x) __builtin_bswap64(x) -# define __bpf_cpu_to_be64(x) __builtin_bswap64(x) -# define __bpf_constant_be64_to_cpu(x) ___bpf_swab64(x) -# define __bpf_constant_cpu_to_be64(x) ___bpf_swab64(x) -#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -# define __bpf_ntohs(x) (x) -# define __bpf_htons(x) (x) -# define __bpf_constant_ntohs(x) (x) -# define __bpf_constant_htons(x) (x) -# define __bpf_ntohl(x) (x) -# define __bpf_htonl(x) (x) -# define __bpf_constant_ntohl(x) (x) -# define __bpf_constant_htonl(x) (x) -# define __bpf_be64_to_cpu(x) (x) -# define __bpf_cpu_to_be64(x) (x) -# define __bpf_constant_be64_to_cpu(x) (x) -# define __bpf_constant_cpu_to_be64(x) (x) -#else -# error "Fix your compiler's __BYTE_ORDER__?!" -#endif - -#define bpf_htons(x) \ - (__builtin_constant_p(x) ? \ - __bpf_constant_htons(x) : __bpf_htons(x)) -#define bpf_ntohs(x) \ - (__builtin_constant_p(x) ? \ - __bpf_constant_ntohs(x) : __bpf_ntohs(x)) -#define bpf_htonl(x) \ - (__builtin_constant_p(x) ? \ - __bpf_constant_htonl(x) : __bpf_htonl(x)) -#define bpf_ntohl(x) \ - (__builtin_constant_p(x) ? \ - __bpf_constant_ntohl(x) : __bpf_ntohl(x)) -#define bpf_cpu_to_be64(x) \ - (__builtin_constant_p(x) ? \ - __bpf_constant_cpu_to_be64(x) : __bpf_cpu_to_be64(x)) -#define bpf_be64_to_cpu(x) \ - (__builtin_constant_p(x) ? \ - __bpf_constant_be64_to_cpu(x) : __bpf_be64_to_cpu(x)) - -#endif /* __BPF_ENDIAN__ */ \ No newline at end of file diff --git a/pkg/ebpf/c/co-re/bpf_helpers.h b/pkg/ebpf/c/co-re/bpf_helpers.h deleted file mode 100644 index 5b01775a29b85..0000000000000 --- a/pkg/ebpf/c/co-re/bpf_helpers.h +++ /dev/null @@ -1,314 +0,0 @@ -/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ -#ifndef __BPF_HELPERS__ -#define __BPF_HELPERS__ - -/* Macro to output debug logs to /sys/kernel/debug/tracing/trace_pipe - */ -#if DEBUG == 1 -#define log_debug(fmt, ...) \ - ({ \ - char ____fmt[] = fmt; \ - bpf_trace_printk(____fmt, sizeof(____fmt), ##__VA_ARGS__); \ - }) -#else -// No op -#define log_debug(fmt, ...) -#endif - -/* - * Note that bpf programs need to include either - * vmlinux.h (auto-generated from BTF) or linux/types.h - * in advance since bpf_helper_defs.h uses such types - * as __u64. - */ -#include "bpf_helper_defs.h" - -#define __uint(name, val) int (*name)[val] -#define __type(name, val) typeof(val) *name -#define __array(name, val) typeof(val) *name[] - -/* - * Helper macro to place programs, maps, license in - * different sections in elf_bpf file. Section names - * are interpreted by libbpf depending on the context (BPF programs, BPF maps, - * extern variables, etc). - * To allow use of SEC() with externs (e.g., for extern .maps declarations), - * make sure __attribute__((unused)) doesn't trigger compilation warning. - */ -#if __GNUC__ && !__clang__ - -/* - * Pragma macros are broken on GCC - * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55578 - * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90400 - */ -#define SEC(name) __attribute__((section(name), used)) - -#else - -#define SEC(name) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wignored-attributes\"") \ - __attribute__((section(name), used)) \ - _Pragma("GCC diagnostic pop") \ - -#endif - -/* Avoid 'linux/stddef.h' definition of '__always_inline'. */ -#undef __always_inline -#define __always_inline inline __attribute__((always_inline)) - -#ifndef __noinline -#define __noinline __attribute__((noinline)) -#endif -#ifndef __weak -#define __weak __attribute__((weak)) -#endif - -/* - * Use __hidden attribute to mark a non-static BPF subprogram effectively - * static for BPF verifier's verification algorithm purposes, allowing more - * extensive and permissive BPF verification process, taking into account - * subprogram's caller context. - */ -#define __hidden __attribute__((visibility("hidden"))) - -/* When utilizing vmlinux.h with BPF CO-RE, user BPF programs can't include - * any system-level headers (such as stddef.h, linux/version.h, etc), and - * commonly-used macros like NULL and KERNEL_VERSION aren't available through - * vmlinux.h. This just adds unnecessary hurdles and forces users to re-define - * them on their own. So as a convenience, provide such definitions here. - */ -#ifndef NULL -#define NULL ((void *)0) -#endif - -#ifndef KERNEL_VERSION -#define KERNEL_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + ((c) > 255 ? 255 : (c))) -#endif - -/* - * Helper macros to manipulate data structures - */ -#ifndef offsetof -#define offsetof(TYPE, MEMBER) ((unsigned long)&((TYPE *)0)->MEMBER) -#endif -#ifndef container_of -#define container_of(ptr, type, member) \ - ({ \ - void *__mptr = (void *)(ptr); \ - ((type *)(__mptr - offsetof(type, member))); \ - }) -#endif - -/* - * Compiler (optimization) barrier. - */ -#ifndef barrier -#define barrier() asm volatile("" ::: "memory") -#endif - -/* Variable-specific compiler (optimization) barrier. It's a no-op which makes - * compiler believe that there is some black box modification of a given - * variable and thus prevents compiler from making extra assumption about its - * value and potential simplifications and optimizations on this variable. - * - * E.g., compiler might often delay or even omit 32-bit to 64-bit casting of - * a variable, making some code patterns unverifiable. Putting barrier_var() - * in place will ensure that cast is performed before the barrier_var() - * invocation, because compiler has to pessimistically assume that embedded - * asm section might perform some extra operations on that variable. - * - * This is a variable-specific variant of more global barrier(). - */ -#ifndef barrier_var -#define barrier_var(var) asm volatile("" : "=r"(var) : "0"(var)) -#endif - -/* - * Helper macro to throw a compilation error if __bpf_unreachable() gets - * built into the resulting code. This works given BPF back end does not - * implement __builtin_trap(). This is useful to assert that certain paths - * of the program code are never used and hence eliminated by the compiler. - * - * For example, consider a switch statement that covers known cases used by - * the program. __bpf_unreachable() can then reside in the default case. If - * the program gets extended such that a case is not covered in the switch - * statement, then it will throw a build error due to the default case not - * being compiled out. - */ -#ifndef __bpf_unreachable -# define __bpf_unreachable() __builtin_trap() -#endif - -/* - * Helper function to perform a tail call with a constant/immediate map slot. - */ -#if __clang_major__ >= 8 && defined(__bpf__) -static __always_inline void -bpf_tail_call_static(void *ctx, const void *map, const __u32 slot) -{ - if (!__builtin_constant_p(slot)) - __bpf_unreachable(); - - /* - * Provide a hard guarantee that LLVM won't optimize setting r2 (map - * pointer) and r3 (constant map index) from _different paths_ ending - * up at the _same_ call insn as otherwise we won't be able to use the - * jmpq/nopl retpoline-free patching by the x86-64 JIT in the kernel - * given they mismatch. See also d2e4c1e6c294 ("bpf: Constant map key - * tracking for prog array pokes") for details on verifier tracking. - * - * Note on clobber list: we need to stay in-line with BPF calling - * convention, so even if we don't end up using r0, r4, r5, we need - * to mark them as clobber so that LLVM doesn't end up using them - * before / after the call. - */ - asm volatile("r1 = %[ctx]\n\t" - "r2 = %[map]\n\t" - "r3 = %[slot]\n\t" - "call 12" - :: [ctx]"r"(ctx), [map]"r"(map), [slot]"i"(slot) - : "r0", "r1", "r2", "r3", "r4", "r5"); -} -#endif - -/* - * Helper structure used by eBPF C program - * to describe BPF map attributes to libbpf loader - */ -struct bpf_map_def { - unsigned int type; - unsigned int key_size; - unsigned int value_size; - unsigned int max_entries; - unsigned int map_flags; -} __attribute__((deprecated("use BTF-defined maps in .maps section"))); - -enum libbpf_pin_type { - LIBBPF_PIN_NONE, - /* PIN_BY_NAME: pin maps by name (in /sys/fs/bpf by default) */ - LIBBPF_PIN_BY_NAME, -}; - -enum libbpf_tristate { - TRI_NO = 0, - TRI_YES = 1, - TRI_MODULE = 2, -}; - -#define __kconfig __attribute__((section(".kconfig"))) -#define __ksym __attribute__((section(".ksyms"))) -#define __kptr __attribute__((btf_type_tag("kptr"))) -#define __kptr_ref __attribute__((btf_type_tag("kptr_ref"))) - -#ifndef ___bpf_concat -#define ___bpf_concat(a, b) a ## b -#endif -#ifndef ___bpf_apply -#define ___bpf_apply(fn, n) ___bpf_concat(fn, n) -#endif -#ifndef ___bpf_nth -#define ___bpf_nth(_, _1, _2, _3, _4, _5, _6, _7, _8, _9, _a, _b, _c, N, ...) N -#endif -#ifndef ___bpf_narg -#define ___bpf_narg(...) \ - ___bpf_nth(_, ##__VA_ARGS__, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) -#endif - -#define ___bpf_fill0(arr, p, x) do {} while (0) -#define ___bpf_fill1(arr, p, x) arr[p] = x -#define ___bpf_fill2(arr, p, x, args...) arr[p] = x; ___bpf_fill1(arr, p + 1, args) -#define ___bpf_fill3(arr, p, x, args...) arr[p] = x; ___bpf_fill2(arr, p + 1, args) -#define ___bpf_fill4(arr, p, x, args...) arr[p] = x; ___bpf_fill3(arr, p + 1, args) -#define ___bpf_fill5(arr, p, x, args...) arr[p] = x; ___bpf_fill4(arr, p + 1, args) -#define ___bpf_fill6(arr, p, x, args...) arr[p] = x; ___bpf_fill5(arr, p + 1, args) -#define ___bpf_fill7(arr, p, x, args...) arr[p] = x; ___bpf_fill6(arr, p + 1, args) -#define ___bpf_fill8(arr, p, x, args...) arr[p] = x; ___bpf_fill7(arr, p + 1, args) -#define ___bpf_fill9(arr, p, x, args...) arr[p] = x; ___bpf_fill8(arr, p + 1, args) -#define ___bpf_fill10(arr, p, x, args...) arr[p] = x; ___bpf_fill9(arr, p + 1, args) -#define ___bpf_fill11(arr, p, x, args...) arr[p] = x; ___bpf_fill10(arr, p + 1, args) -#define ___bpf_fill12(arr, p, x, args...) arr[p] = x; ___bpf_fill11(arr, p + 1, args) -#define ___bpf_fill(arr, args...) \ - ___bpf_apply(___bpf_fill, ___bpf_narg(args))(arr, 0, args) - -/* - * BPF_SEQ_PRINTF to wrap bpf_seq_printf to-be-printed values - * in a structure. - */ -#define BPF_SEQ_PRINTF(seq, fmt, args...) \ -({ \ - static const char ___fmt[] = fmt; \ - unsigned long long ___param[___bpf_narg(args)]; \ - \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ - ___bpf_fill(___param, args); \ - _Pragma("GCC diagnostic pop") \ - \ - bpf_seq_printf(seq, ___fmt, sizeof(___fmt), \ - ___param, sizeof(___param)); \ -}) - -/* - * BPF_SNPRINTF wraps the bpf_snprintf helper with variadic arguments instead of - * an array of u64. - */ -#define BPF_SNPRINTF(out, out_size, fmt, args...) \ -({ \ - static const char ___fmt[] = fmt; \ - unsigned long long ___param[___bpf_narg(args)]; \ - \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ - ___bpf_fill(___param, args); \ - _Pragma("GCC diagnostic pop") \ - \ - bpf_snprintf(out, out_size, ___fmt, \ - ___param, sizeof(___param)); \ -}) - -#ifdef BPF_NO_GLOBAL_DATA -#define BPF_PRINTK_FMT_MOD -#else -#define BPF_PRINTK_FMT_MOD static const -#endif - -#define __bpf_printk(fmt, ...) \ -({ \ - BPF_PRINTK_FMT_MOD char ____fmt[] = fmt; \ - bpf_trace_printk(____fmt, sizeof(____fmt), \ - ##__VA_ARGS__); \ -}) - -/* - * __bpf_vprintk wraps the bpf_trace_vprintk helper with variadic arguments - * instead of an array of u64. - */ -#define __bpf_vprintk(fmt, args...) \ -({ \ - static const char ___fmt[] = fmt; \ - unsigned long long ___param[___bpf_narg(args)]; \ - \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wint-conversion\"") \ - ___bpf_fill(___param, args); \ - _Pragma("GCC diagnostic pop") \ - \ - bpf_trace_vprintk(___fmt, sizeof(___fmt), \ - ___param, sizeof(___param)); \ -}) - -/* Use __bpf_printk when bpf_printk call has 3 or fewer fmt args - * Otherwise use __bpf_vprintk - */ -#define ___bpf_pick_printk(...) \ - ___bpf_nth(_, ##__VA_ARGS__, __bpf_vprintk, __bpf_vprintk, __bpf_vprintk, \ - __bpf_vprintk, __bpf_vprintk, __bpf_vprintk, __bpf_vprintk, \ - __bpf_vprintk, __bpf_vprintk, __bpf_printk /*3*/, __bpf_printk /*2*/,\ - __bpf_printk /*1*/, __bpf_printk /*0*/) - -/* Helper macro to print out debug messages */ -#define bpf_printk(fmt, args...) ___bpf_pick_printk(args)(fmt, ##args) - -#endif \ No newline at end of file diff --git a/pkg/ebpf/c/co-re/map-defs.h b/pkg/ebpf/c/co-re/map-defs.h deleted file mode 100644 index cd5a5335924d8..0000000000000 --- a/pkg/ebpf/c/co-re/map-defs.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef _MAP_DEFS_H_ -#define _MAP_DEFS_H_ - -#include "bpf_helpers.h" - -#define __uint(name, val) int (*name)[val] -#define __type(name, val) typeof(val) *name - -#define BPF_MAP(_name, _type, _key_type, _value_type, _max_entries, _pin) \ - struct { \ - __uint(type, _type); \ - __uint(max_entries, _max_entries); \ - __uint(pinning, _pin); \ - __type(key, _key_type); \ - __type(value, _value_type); \ - } _name SEC(".maps"); - -#define BPF_PERF_EVENT_ARRAY_MAP_PINNED(name, value_type, max_entries) \ - BPF_MAP(name, BPF_MAP_TYPE_PERF_EVENT_ARRAY, u32, value_type, \ - max_entries, 1) - -#define BPF_PERF_EVENT_ARRAY_MAP(name, value_type, max_entries) \ - BPF_MAP(name, BPF_MAP_TYPE_PERF_EVENT_ARRAY, u32, value_type, \ - max_entries, 0) - -#define BPF_ARRAY_MAP(name, value_type, max_entries) \ - BPF_MAP(name, BPF_MAP_TYPE_ARRAY, u32, value_type, max_entries, 0) - -#define BPF_HASH_MAP_PINNED(name, key_type, value_type, max_entries) \ - BPF_MAP(name, BPF_MAP_TYPE_HASH, key_type, value_type, max_entries, 1) - -#define BPF_HASH_MAP(name, key_type, value_type, max_entries) \ - BPF_MAP(name, BPF_MAP_TYPE_HASH, key_type, value_type, max_entries, 0) - -#define BPF_PROG_ARRAY(name, max_entries) \ - BPF_MAP(name, BPF_MAP_TYPE_PROG_ARRAY, u32, u32, max_entries, 0) - -#define BPF_LRU_MAP(name, key_type, value_type, max_entries) \ - BPF_MAP(name, BPF_MAP_TYPE_LRU_HASH, key_type, value_type, max_entries, 0) - -#define BPF_LRU_MAP_PINNED(name, key_type, value_type, max_entries) \ - BPF_MAP(name, BPF_MAP_TYPE_LRU_HASH, key_type, value_type, max_entries, 1) - -#define BPF_PERCPU_HASH_MAP(name, key_type, value_type, max_entries) \ - BPF_MAP(name, BPF_MAP_TYPE_PERCPU_HASH, key_type, value_type, max_entries, 0) - -#define BPF_PERCPU_ARRAY_MAP(name, key_type, value_type, max_entries) \ - BPF_MAP(name, BPF_MAP_TYPE_PERCPU_ARRAY, key_type, value_type, max_entries, 0) - -#endif diff --git a/pkg/ebpf/c/ktypes.h b/pkg/ebpf/c/ktypes.h new file mode 100644 index 0000000000000..de243a94a5a9a --- /dev/null +++ b/pkg/ebpf/c/ktypes.h @@ -0,0 +1,11 @@ +#ifndef __KTYPES_H__ +#define __KTYPES_H__ + +#ifdef COMPILE_CORE +#include "vmlinux.h" +#else +#include +#include +#endif + +#endif diff --git a/pkg/ebpf/c/map-defs.h b/pkg/ebpf/c/map-defs.h index cd5a5335924d8..a7935b7ec864a 100644 --- a/pkg/ebpf/c/map-defs.h +++ b/pkg/ebpf/c/map-defs.h @@ -3,9 +3,6 @@ #include "bpf_helpers.h" -#define __uint(name, val) int (*name)[val] -#define __type(name, val) typeof(val) *name - #define BPF_MAP(_name, _type, _key_type, _value_type, _max_entries, _pin) \ struct { \ __uint(type, _type); \ diff --git a/pkg/ebpf/c/co-re/vmlinux.h b/pkg/ebpf/c/vmlinux.h similarity index 100% rename from pkg/ebpf/c/co-re/vmlinux.h rename to pkg/ebpf/c/vmlinux.h diff --git a/pkg/ebpf/c/co-re/vmlinux_5_15_0.h b/pkg/ebpf/c/vmlinux_5_15_0.h similarity index 100% rename from pkg/ebpf/c/co-re/vmlinux_5_15_0.h rename to pkg/ebpf/c/vmlinux_5_15_0.h diff --git a/pkg/ebpf/c/co-re/vmlinux_5_15_0_arm.h b/pkg/ebpf/c/vmlinux_5_15_0_arm.h similarity index 100% rename from pkg/ebpf/c/co-re/vmlinux_5_15_0_arm.h rename to pkg/ebpf/c/vmlinux_5_15_0_arm.h diff --git a/pkg/ebpf/co_re.go b/pkg/ebpf/co_re.go new file mode 100644 index 0000000000000..60c7f2b8e50cf --- /dev/null +++ b/pkg/ebpf/co_re.go @@ -0,0 +1,66 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package ebpf + +import ( + "errors" + "fmt" + "path" + "path/filepath" + "strings" + + manager "github.com/DataDog/ebpf-manager" + bpflib "github.com/cilium/ebpf" + "github.com/cilium/ebpf/btf" + + "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" +) + +// LoadCOREAsset attempts to find kernel BTF, reads the CO-RE object file, and then calls the callback function with the +// asset and BTF options pre-filled. You should attempt to load the CO-RE program in the startFn func for telemetry to +// be correctly recorded. +func LoadCOREAsset(cfg *Config, filename string, startFn func(bytecode.AssetReader, manager.Options) error) error { + var telemetry COREResult + base := strings.TrimSuffix(filename, path.Ext(filename)) + defer func() { + StoreCORETelemetryForAsset(base, telemetry) + }() + + var btfData *btf.Spec + btfData, telemetry = GetBTF(cfg.BTFPath, cfg.BPFDir) + if btfData == nil { + return fmt.Errorf("could not find BTF data on host") + } + + buf, err := bytecode.GetReader(filepath.Join(cfg.BPFDir, "co-re"), filename) + if err != nil { + telemetry = AssetReadError + return fmt.Errorf("error reading %s: %s", filename, err) + } + defer buf.Close() + + opts := manager.Options{ + VerifierOptions: bpflib.CollectionOptions{ + Programs: bpflib.ProgramOptions{ + KernelTypes: btfData, + }, + }, + } + + err = startFn(buf, opts) + if err != nil { + var ve *bpflib.VerifierError + if errors.As(err, &ve) { + telemetry = VerifierError + } else { + telemetry = LoaderError + } + } + return err +} diff --git a/pkg/ebpf/co_re_telemetry.go b/pkg/ebpf/co_re_telemetry.go index 19c0a0bf48ec2..efaae729b5118 100644 --- a/pkg/ebpf/co_re_telemetry.go +++ b/pkg/ebpf/co_re_telemetry.go @@ -22,6 +22,7 @@ const ( btfNotFound AssetReadError VerifierError + LoaderError ) // coreTelemetryByAsset is a global object which is responsible for storing CO-RE telemetry for all ebpf assets diff --git a/pkg/ebpf/compiler/compiler.go b/pkg/ebpf/compiler/compiler.go index ff79bcd695ae8..0ad5925d69584 100644 --- a/pkg/ebpf/compiler/compiler.go +++ b/pkg/ebpf/compiler/compiler.go @@ -35,55 +35,85 @@ var ( const compilationStepTimeout = 60 * time.Second -// CompileToObjectFile compiles an eBPF program -func CompileToObjectFile(in io.Reader, outputFile string, cflags []string, headerDirs []string) error { - if len(headerDirs) == 0 { - return fmt.Errorf("unable to find kernel headers") +func writeStdarg() (string, error) { + tmpIncludeDir, err := os.MkdirTemp(os.TempDir(), "include-") + if err != nil { + return "", fmt.Errorf("error creating temporary include directory: %s", err.Error()) } + if err = os.WriteFile(filepath.Join(tmpIncludeDir, "stdarg.h"), stdargHData, 0644); err != nil { + return "", fmt.Errorf("error writing data to stdarg.h: %s", err.Error()) + } + return tmpIncludeDir, nil +} + +func kernelHeaderPaths(headerDirs []string) ([]string, error) { arch := kernel.Arch() if arch == "" { - return fmt.Errorf("unable to get kernel arch for %s", runtime.GOARCH) + return nil, fmt.Errorf("unable to get kernel arch for %s", runtime.GOARCH) } - tmpIncludeDir, err := os.MkdirTemp(os.TempDir(), "include-") - if err != nil { - return fmt.Errorf("error creating temporary include directory: %s", err.Error()) + var paths []string + for _, d := range headerDirs { + paths = append(paths, + fmt.Sprintf("%s/arch/%s/include", d, arch), + fmt.Sprintf("%s/arch/%s/include/generated", d, arch), + fmt.Sprintf("%s/include", d), + fmt.Sprintf("%s/arch/%s/include/uapi", d, arch), + fmt.Sprintf("%s/arch/%s/include/generated/uapi", d, arch), + fmt.Sprintf("%s/include/uapi", d), + fmt.Sprintf("%s/include/generated/uapi", d), + ) } - defer os.RemoveAll(tmpIncludeDir) + return paths, nil +} - if err = os.WriteFile(filepath.Join(tmpIncludeDir, "stdarg.h"), stdargHData, 0644); err != nil { - return fmt.Errorf("error writing data to stdarg.h: %s", err.Error()) +// CompileToObjectFile compiles an eBPF program +func CompileToObjectFile(in io.Reader, outputFile string, cflags []string, headerDirs []string) error { + if len(headerDirs) == 0 { + return fmt.Errorf("unable to find kernel headers") } - for _, d := range headerDirs { - cflags = append(cflags, - fmt.Sprintf("-isystem%s/arch/%s/include", d, arch), - fmt.Sprintf("-isystem%s/arch/%s/include/generated", d, arch), - fmt.Sprintf("-isystem%s/include", d), - fmt.Sprintf("-isystem%s/arch/%s/include/uapi", d, arch), - fmt.Sprintf("-isystem%s/arch/%s/include/generated/uapi", d, arch), - fmt.Sprintf("-isystem%s/include/uapi", d), - fmt.Sprintf("-isystem%s/include/generated/uapi", d), - ) + tmpIncludeDir, err := writeStdarg() + if err != nil { + return err } + defer os.RemoveAll(tmpIncludeDir) cflags = append(cflags, fmt.Sprintf("-isystem%s", tmpIncludeDir)) + + kps, err := kernelHeaderPaths(headerDirs) + if err != nil { + return err + } + for _, p := range kps { + cflags = append(cflags, fmt.Sprintf("-isystem%s", p)) + } + cflags = append(cflags, "-c", "-x", "c", "-o", "-", "-") + clangOut := &bytes.Buffer{} + if err := clang(in, clangOut, cflags); err != nil { + return fmt.Errorf("compiling asset to bytecode: %w", err) + } + if err := llc(clangOut, outputFile); err != nil { + return fmt.Errorf("error compiling bytecode to object file: %w", err) + } + return nil +} - var clangOut, clangErr, llcErr bytes.Buffer +func clang(in io.Reader, out io.Writer, cflags []string) error { + var clangErr bytes.Buffer clangCtx, clangCancel := context.WithTimeout(context.Background(), compilationStepTimeout) defer clangCancel() compileToBC := exec.CommandContext(clangCtx, clangBinPath, cflags...) compileToBC.Stdin = in - compileToBC.Stdout = &clangOut + compileToBC.Stdout = out compileToBC.Stderr = &clangErr - log.Debugf("compiling asset to bytecode: %v", compileToBC.Args) - - err = compileToBC.Run() + log.Debugf("running clang: %v", compileToBC.Args) + err := compileToBC.Run() if err != nil { var errMsg string if clangCtx.Err() == context.DeadlineExceeded { @@ -93,24 +123,28 @@ func CompileToObjectFile(in io.Reader, outputFile string, cflags []string, heade } else { errMsg = err.Error() } - return fmt.Errorf("error compiling asset to bytecode: %s", errMsg) + return fmt.Errorf("clang: %s", errMsg) } if len(clangErr.String()) > 0 { log.Debugf("%s", clangErr.String()) } + return nil +} +func llc(in io.Reader, outputFile string) error { + var llcErr bytes.Buffer llcCtx, llcCancel := context.WithTimeout(context.Background(), compilationStepTimeout) defer llcCancel() bcToObj := exec.CommandContext(llcCtx, llcBinPath, "-march=bpf", "-filetype=obj", "-o", outputFile, "-") - bcToObj.Stdin = &clangOut + bcToObj.Stdin = in bcToObj.Stdout = nil bcToObj.Stderr = &llcErr - log.Debugf("compiling bytecode to object file: %v", bcToObj.Args) + log.Debugf("running llc: %v", bcToObj.Args) - err = bcToObj.Run() + err := bcToObj.Run() if err != nil { var errMsg string if llcCtx.Err() == context.DeadlineExceeded { @@ -120,12 +154,32 @@ func CompileToObjectFile(in io.Reader, outputFile string, cflags []string, heade } else { errMsg = err.Error() } - return fmt.Errorf("error compiling bytecode to object file: %s", errMsg) + return fmt.Errorf("llc: %s", errMsg) } if len(llcErr.String()) > 0 { - log.Debugf("%s", clangErr.String()) + log.Debugf("%s", llcErr.String()) } - return nil } + +// Preprocess runs the clang preprocessor on `in` and writes the output to `out` +func Preprocess(in io.Reader, out io.Writer, cflags []string, headerDirs []string) error { + tmpIncludeDir, err := writeStdarg() + if err != nil { + return err + } + defer os.RemoveAll(tmpIncludeDir) + cflags = append(cflags, fmt.Sprintf("-isystem%s", tmpIncludeDir)) + + kps, err := kernelHeaderPaths(headerDirs) + if err != nil { + return fmt.Errorf("format kernel header paths: %w", err) + } + for _, p := range kps { + cflags = append(cflags, fmt.Sprintf("-isystem%s", p)) + } + + cflags = append(cflags, "-E", "-x", "c", "-o", "-", "-") + return clang(in, out, cflags) +} diff --git a/pkg/ebpf/include_headers.go b/pkg/ebpf/include_headers.go index 71bf3b29f7f19..e79fccc1473d7 100644 --- a/pkg/ebpf/include_headers.go +++ b/pkg/ebpf/include_headers.go @@ -23,6 +23,7 @@ var ( // CIncludePattern is the regex for #include headers of C files CIncludePattern = `^\s*#include\s+"(.*)"$` includeRegexp *regexp.Regexp + ignoredHeaders = map[string]struct{}{"vmlinux.h": {}} ) func init() { @@ -143,6 +144,9 @@ func processIncludes(path string, out io.Writer, ps *pathSearcher, includedFiles match := includeRegexp.FindSubmatch(scanner.Bytes()) if len(match) == 2 { headerName := string(match[1]) + if _, ok := ignoredHeaders[headerName]; ok { + continue + } headerPath, err := ps.findInclude(path, headerName) if err != nil { return fmt.Errorf("error searching for header: %s", err) diff --git a/pkg/epforwarder/epforwarder.go b/pkg/epforwarder/epforwarder.go index d448e43bc8238..3c12a7be852f5 100644 --- a/pkg/epforwarder/epforwarder.go +++ b/pkg/epforwarder/epforwarder.go @@ -138,7 +138,7 @@ func (s *defaultEventPlatformForwarder) SendEventPlatformEvent(e *message.Messag case p.in <- e: return nil default: - return fmt.Errorf("event platform forwarder pipeline channel is full for eventType=%s. consider increasing batch_max_concurrent_send", eventType) + return fmt.Errorf("event platform forwarder pipeline channel is full for eventType=%s. Channel capacity is %d. consider increasing batch_max_concurrent_send", eventType, cap(p.in)) } } @@ -162,7 +162,11 @@ func (s *defaultEventPlatformForwarder) Purge() map[string][]*message.Message { defer s.purgeMx.Unlock() result := make(map[string][]*message.Message) for eventType, p := range s.pipelines { - result[eventType] = purgeChan(p.in) + res := purgeChan(p.in) + result[eventType] = res + if eventType == eventTypeDBMActivity || eventType == eventTypeDBMMetrics || eventType == eventTypeDBMSamples { + log.Debugf("purged DBM channel %s: %d events", eventType, len(res)) + } } return result } diff --git a/pkg/flare/archive.go b/pkg/flare/archive.go index e840d2108f9de..5406d75da531f 100644 --- a/pkg/flare/archive.go +++ b/pkg/flare/archive.go @@ -9,96 +9,51 @@ import ( "bufio" "bytes" "context" - "crypto/rand" - "encoding/hex" "encoding/json" "expvar" "fmt" "io" "net/http" - "os" "path/filepath" "regexp" "sort" "strings" "time" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/pkg/api/security" apiutil "github.com/DataDog/datadog-agent/pkg/api/util" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/diagnose" "github.com/DataDog/datadog-agent/pkg/diagnose/connectivity" + "github.com/DataDog/datadog-agent/pkg/metadata/inventories" + v5 "github.com/DataDog/datadog-agent/pkg/metadata/v5" "github.com/DataDog/datadog-agent/pkg/secrets" "github.com/DataDog/datadog-agent/pkg/status" "github.com/DataDog/datadog-agent/pkg/status/health" - "github.com/DataDog/datadog-agent/pkg/util" - hostnameUtil "github.com/DataDog/datadog-agent/pkg/util/hostname" + host "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/util/scrubber" "github.com/DataDog/datadog-agent/pkg/workloadmeta" - "github.com/mholt/archiver/v3" "gopkg.in/yaml.v2" ) -const ( - routineDumpFilename = "go-routine-dump.log" - - // Maximum size for the root directory name - directoryNameMaxSize = 32 -) - var ( pprofURL = fmt.Sprintf("http://127.0.0.1:%s/debug/pprof/goroutine?debug=2", config.Datadog.GetString("expvar_port")) telemetryURL = fmt.Sprintf("http://127.0.0.1:%s/telemetry", config.Datadog.GetString("expvar_port")) - procStatusURL string // Match .yaml and .yml to ship configuration files in the flare. cnfFileExtRx = regexp.MustCompile(`(?i)\.ya?ml`) - - // Filter to clean the directory name from invalid file name characters - directoryNameFilter = regexp.MustCompile(`[^a-zA-Z0-9_-]+`) - - // specialized scrubber for flare content - flareScrubber *scrubber.Scrubber ) // SearchPaths is just an alias for a map of strings type SearchPaths map[string]string -// permissionsInfos holds permissions info about the files shipped -// in the flare. -// The key is the filepath of the file. -type permissionsInfos map[string]filePermsInfo - // ProfileData maps (pprof) profile names to the profile data. type ProfileData map[string][]byte -func init() { - flareScrubber = scrubber.New() - scrubber.AddDefaultReplacers(flareScrubber) - - // The default scrubber doesn't deal with api keys of other services, for - // example powerDNS which has an "api_key" field in its YAML configuration. - // We add a replacer to scrub even those credentials. - // - // It is a best effort to match the api key field without matching our - // own already scrubbed (we don't want to match: "**************************abcde") - // Basically we allow many special chars while forbidding *. - // - // We want the value to be at least 2 characters which will avoid matching the first '"' from the regular - // replacer for api_key. - otherAPIKeysRx := regexp.MustCompile(`api_key\s*:\s*[a-zA-Z0-9\\\/\^\]\[\(\){}!|%:;"~><=#@$_\-\+]{2,}`) - flareScrubber.AddReplacer(scrubber.SingleLine, scrubber.Replacer{ - Regex: otherAPIKeysRx, - ReplFunc: func(b []byte) []byte { - return []byte("api_key: \"********\"") - }, - }) -} - // CreatePerformanceProfile adds a set of heap and CPU profiles into target, using cpusec as the CPU // profile duration, debugURL as the target URL for fetching the profiles and prefix as a prefix for // naming them inside target. @@ -147,345 +102,149 @@ func CreatePerformanceProfile(prefix, debugURL string, cpusec int, target *Profi // CreateArchive packages up the files func CreateArchive(local bool, distPath, pyChecksPath string, logFilePaths []string, pdata ProfileData, ipcError error) (string, error) { - zipFilePath := getArchivePath() + fb, err := flarehelpers.NewFlareBuilder() + if err != nil { + return "", err + } + + CompleteFlare(fb, local, distPath, pyChecksPath, logFilePaths, pdata, ipcError) + return fb.Save() +} + +// CompleteFlare packages up the files with an already created builder. This is aimed to be used by the flare +// component while we migrate to a component architecture. +func CompleteFlare(fb flarehelpers.FlareBuilder, local bool, distPath, pyChecksPath string, logFilePaths []string, pdata ProfileData, ipcError error) { confSearchPaths := SearchPaths{ "": config.Datadog.GetString("confd_path"), "dist": filepath.Join(distPath, "conf.d"), "checksd": pyChecksPath, } - return createArchive(confSearchPaths, local, zipFilePath, logFilePaths, pdata, ipcError) + createArchive(fb, confSearchPaths, local, logFilePaths, pdata, ipcError) } -func createArchive(confSearchPaths SearchPaths, local bool, zipFilePath string, logFilePaths []string, pdata ProfileData, ipcError error) (string, error) { +func createArchive(fb flarehelpers.FlareBuilder, confSearchPaths SearchPaths, local bool, logFilePaths []string, pdata ProfileData, ipcError error) { /** WARNING * - * When adding data to flares, carefully analyze the what is being added - * and ensure that it contains no credentials or unnecessary user-specific - * data. The ./pkg/util/scrubber package can be useful for scrubbing - * secrets that match pre-programmed patterns, but it is always better to - * not capture data containing secrets, than to scrub that data. + * When adding data to flares, carefully analyze what is being added and ensure that it contains no credentials + * or unnecessary user-specific data. The FlareBuilder scrubs secrets that match pre-programmed patterns, but it + * is always better to not capture data containing secrets, than to scrub that data. */ - tempDir, err := createTempDir() - if err != nil { - return "", err - } - defer os.RemoveAll(tempDir) - - // Get hostname, if there's an error in getting the hostname, - // set the hostname to unknown - hostname, err := hostnameUtil.Get(context.TODO()) - if err != nil { - hostname = "unknown" - } - - hostname = cleanDirectoryName(hostname) - - permsInfos := make(permissionsInfos) - if local { - err = writeLocal(tempDir, hostname) - if err != nil { - return "", err - } + fb.AddFile("local", []byte("")) if ipcError != nil { - msg := []byte(fmt.Sprintf("unable to contact the agent to retrieve flare: %s", ipcError)) // Can't reach the agent, mention it in those two files - err = writeStatusFile(tempDir, hostname, msg) - if err != nil { - return "", err - } - err = writeConfigCheck(tempDir, hostname, msg) - if err != nil { - return "", err - } + msg := []byte(fmt.Sprintf("unable to contact the agent to retrieve flare: %s", ipcError)) + fb.AddFile("status.log", msg) + fb.AddFile("config-check.log", msg) } else { // Can't reach the agent, mention it in those two files - err = writeStatusFile(tempDir, hostname, []byte("unable to get the status of the agent, is it running?")) - if err != nil { - return "", err - } - err = writeConfigCheck(tempDir, hostname, []byte("unable to get loaded checks config, is the agent running?")) - if err != nil { - return "", err - } + fb.AddFile("status.log", []byte("unable to get the status of the agent, is it running?")) + fb.AddFile("config-check.log", []byte("unable to get loaded checks config, is the agent running?")) } } else { - // Status informations are available, zip them up as the agent is running. - err = zipStatusFile(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip status: %s", err) - } + // Status information are available, add them as the agent is running. - err = zipConfigCheck(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip config check: %s", err) - } - - err = zipAgentTaggerList(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip tagger list: %s", err) - } + fb.AddFileFromFunc("status.log", status.GetAndFormatStatus) + fb.AddFileFromFunc("config-check.log", getConfigCheck) + fb.AddFileFromFunc("tagger-list.json", getAgentTaggerList) + fb.AddFileFromFunc("workload-list.log", getWorkloadList) + fb.AddFileFromFunc("process-agent_tagger-list.json", getProcessAgentTaggerList) - err = zipWorkloadList(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip workload list: %s", err) - } - - err = zipProcessAgentTaggerList(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip process-agent tagger list: %s", err) - } - - err = zipProcessChecks(tempDir, hostname, config.GetProcessAPIAddressPort) - if err != nil { - log.Errorf("Could not zip process agent checks: %s", err) - } - } - - // auth token permissions info (only if existing) - if _, err = os.Stat(security.GetAuthTokenFilepath()); err == nil && !os.IsNotExist(err) { - permsInfos.add(security.GetAuthTokenFilepath()) + getProcessChecks(fb, config.GetProcessAPIAddressPort) } - err = zipConfigFiles(tempDir, hostname, confSearchPaths, permsInfos) - if err != nil { - log.Errorf("Could not zip config: %s", err) - } + fb.RegisterFilePerm(security.GetAuthTokenFilepath()) - err = zipExpVar(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip exp var: %s", err) + systemProbeConfigBPFDir := config.Datadog.GetString("system_probe_config.bpf_dir") + if systemProbeConfigBPFDir != "" { + fb.RegisterDirPerm(systemProbeConfigBPFDir) } + addSystemProbePlatformSpecificEntries(fb) if config.Datadog.GetBool("system_probe_config.enabled") { - err = zipSystemProbeStats(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip system probe exp var stats: %s", err) - } + fb.AddFileFromFunc(filepath.Join("expvar", "system-probe"), getSystemProbeStats) } - err = zipDiagnose(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip diagnose: %s", err) - } + fb.AddFileFromFunc("process_agent_runtime_config_dump.yaml", getProcessAgentFullConfig) + fb.AddFileFromFunc("runtime_config_dump.yaml", func() ([]byte, error) { return yaml.Marshal(config.Datadog.AllSettings()) }) + fb.AddFileFromFunc("diagnose.log", func() ([]byte, error) { return functionOutputToBytes(diagnose.RunAll), nil }) + fb.AddFileFromFunc("connectivity.log", getDatadogConnectivity) + fb.AddFileFromFunc("secrets.log", getSecrets) + fb.AddFileFromFunc("envvars.log", getEnvVars) + fb.AddFileFromFunc("metadata_inventories.json", inventories.GetLastPayload) + fb.AddFileFromFunc("metadata_v5.json", getMetadataV5) + fb.AddFileFromFunc("health.yaml", getHealth) + fb.AddFileFromFunc("go-routine-dump.log", func() ([]byte, error) { return getHTTPCallContent(pprofURL) }) + fb.AddFileFromFunc("docker_inspect.log", getDockerSelfInspect) + fb.AddFileFromFunc("docker_ps.log", getDockerPs) - err = zipDatadogConnectivity(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip diagnose datadog-connectivity: %s", err) - } + getRegistryJSON(fb) - err = zipRegistryJSON(tempDir, hostname) - if err != nil { - log.Warnf("Could not zip registry.json: %s", err) - } - - err = zipVersionHistory(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip version-history.json: %s", err) - } - - err = zipSecrets(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip secrets: %s", err) - } + getVersionHistory(fb) + fb.CopyFile(filepath.Join(config.FileUsedDir(), "install_info")) - err = zipEnvvars(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip env vars: %s", err) - } - - err = zipMetadataInventories(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip inventories metadata payload: %s", err) - } - - err = zipMetadataV5(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip v5 metadata payload: %s", err) - } - - err = zipHealth(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip health check: %s", err) - } + getConfigFiles(fb, confSearchPaths) + getExpVar(fb) //nolint:errcheck + getWindowsData(fb) if config.Datadog.GetBool("telemetry.enabled") { - err = zipTelemetry(tempDir, hostname) - if err != nil { - log.Errorf("Could not collect telemetry metrics: %s", err) - } - } - - err = zipStackTraces(tempDir, hostname) - if err != nil { - log.Errorf("Could not collect go routine stack traces: %s", err) - } - - if config.IsContainerized() { - err = zipDockerSelfInspect(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip docker inspect: %s", err) - } - } - - err = zipDockerPs(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip docker ps: %s", err) - } - - err = zipTypeperfData(tempDir, hostname) - if err != nil { - log.Errorf("Could not write typeperf data: %s", err) - } - err = zipLodctrOutput(tempDir, hostname) - if err != nil { - log.Errorf("Could not write lodctr data: %s", err) - } - - err = zipCounterStrings(tempDir, hostname) - if err != nil { - log.Errorf("Could not write counter strings: %s", err) - } - - err = zipWindowsEventLogs(tempDir, hostname) - if err != nil { - log.Errorf("Could not export Windows event logs: %s", err) - } - err = zipServiceStatus(tempDir, hostname) - if err != nil { - log.Errorf("Could not export Windows driver status: %s", err) - } - err = zipDatadogRegistry(tempDir, hostname) - if err != nil { - log.Errorf("Could not export Windows Datadog Registry: %s", err) + fb.AddFileFromFunc("telemetry.log", func() ([]byte, error) { return getHTTPCallContent(telemetryURL) }) } if config.Datadog.GetBool("remote_configuration.enabled") { - err = zipRemoteConfigDB(tempDir, hostname) - if err != nil { + if err := getRemoteConfigDB(fb); err != nil { log.Errorf("Could not export remote-config database: %s", err) } } - // force a log flush before zipping them - log.Flush() for _, logFilePath := range logFilePaths { - err = zipLogFiles(tempDir, hostname, logFilePath, permsInfos) - if err != nil { - log.Errorf("Could not zip logs: %s", err) - } - } - - err = zipInstallInfo(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip install_info: %s", err) - } - - if pdata != nil { - err = zipPerformanceProfile(tempDir, hostname, pdata) - if err != nil { - log.Errorf("Could not zip performance profile: %s", err) - } - } - - // gets files infos and write the permissions.log file - if err := permsInfos.commit(tempDir, hostname, os.ModePerm); err != nil { - log.Errorf("Could not write permissions.log file: %s", err) + getLogFiles(fb, logFilePath) } - // File format is determined based on `zipFilePath` extension - err = archiver.Archive([]string{filepath.Join(tempDir, hostname)}, zipFilePath) - if err != nil { - return "", err - } - - return zipFilePath, nil + getPerformanceProfile(fb, pdata) } -func createTempDir() (string, error) { - b := make([]byte, 10) - _, err := rand.Read(b) - if err != nil { - return "", err - } - - dirName := hex.EncodeToString(b) - return os.MkdirTemp("", dirName) +func getVersionHistory(fb flarehelpers.FlareBuilder) { + fb.CopyFileTo(config.Datadog.GetString("run_path"), "version-history.json") } -func zipStatusFile(tempDir, hostname string) error { - // Grab the status - s, err := status.GetAndFormatStatus() - if err != nil { - return err +func getPerformanceProfile(fb flarehelpers.FlareBuilder, pdata ProfileData) { + for name, data := range pdata { + fb.AddFile(filepath.Join("profiles", name), data) } - return writeStatusFile(tempDir, hostname, s) } -func writeStatusFile(tempDir, hostname string, data []byte) error { - return joinPathAndWriteScrubbedFile(data, tempDir, hostname, "status.log") +func getRegistryJSON(fb flarehelpers.FlareBuilder) { + fb.CopyFile(filepath.Join(config.Datadog.GetString("logs_config.run_path"))) } -func addParentPerms(dirPath string, permsInfos permissionsInfos) { - parent := filepath.Dir(dirPath) - - // We do not enter the loop when `filepath.Dir` returns ".", meaning an empty directory was passed. - for parent != "." { - if len(filepath.Dir(parent)) == len(parent) { - permsInfos.add(parent) - break - } - - permsInfos.add(parent) - parent = filepath.Dir(parent) - } -} +func getMetadataV5() ([]byte, error) { + ctx := context.Background() + hostnameData, _ := host.GetWithProvider(ctx) + payload := v5.GetPayload(ctx, hostnameData) -func zipLogFiles(tempDir, hostname, logFilePath string, permsInfos permissionsInfos) error { - // Force dir path to be absolute first - logFileDir, err := filepath.Abs(filepath.Dir(logFilePath)) + data, err := json.MarshalIndent(payload, "", " ") if err != nil { - log.Errorf("Error getting absolute path to log directory of %q: %v", logFilePath, err) - return err + return nil, err } - permsInfos.add(logFileDir) - - err = filepath.Walk(logFileDir, func(src string, f os.FileInfo, err error) error { - if f == nil { - return nil - } - if f.IsDir() { - return nil - } - if filepath.Ext(f.Name()) == ".log" || getFirstSuffix(f.Name()) == ".log" { - targRelPath, relErr := filepath.Rel(logFileDir, src) - if relErr != nil { - log.Errorf("Can't get relative path to %q: %v", src, relErr) - return nil - } - dst := filepath.Join(tempDir, hostname, "logs", targRelPath) + return data, nil +} - if permsInfos != nil { - permsInfos.add(src) - } +func getLogFiles(fb flarehelpers.FlareBuilder, logFileDir string) { + log.Flush() - return util.CopyFileAll(src, dst) + fb.CopyDirToWithoutScrubbing(filepath.Dir(logFileDir), "logs", func(path string) bool { + if filepath.Ext(path) == ".log" || getFirstSuffix(path) == ".log" { + return true } - return nil + return false }) - - // The permsInfos map is empty when we cannot read the auth token. - if len(permsInfos) != 0 { - addParentPerms(logFileDir, permsInfos) - } - - return err } -func zipExpVar(tempDir, hostname string) error { +func getExpVar(fb flarehelpers.FlareBuilder) error { variables := make(map[string]interface{}) expvar.Do(func(kv expvar.KeyValue) { variable := make(map[string]interface{}) @@ -502,7 +261,7 @@ func zipExpVar(tempDir, hostname string) error { return err } - err = joinPathAndWriteScrubbedFile(yamlValue, tempDir, hostname, "expvar", key) + err = fb.AddFile(filepath.Join("expvar", key), yamlValue) if err != nil { return err } @@ -512,10 +271,10 @@ func zipExpVar(tempDir, hostname string) error { if config.Datadog.IsSet("apm_config.receiver_port") { apmPort = config.Datadog.GetString("apm_config.receiver_port") } - f := filepath.Join(tempDir, hostname, "expvar", "trace-agent") + f := filepath.Join("expvar", "trace-agent") resp, err := http.Get(fmt.Sprintf("http://127.0.0.1:%s/debug/vars", apmPort)) if err != nil { - return writeScrubbedFile(f, []byte(fmt.Sprintf("Error retrieving vars: %v", err))) + return fb.AddFile(f, []byte(fmt.Sprintf("Error retrieving vars: %v", err))) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { @@ -523,8 +282,7 @@ func zipExpVar(tempDir, hostname string) error { if err != nil { return err } - return writeScrubbedFile(f, - []byte(fmt.Sprintf("Got response %s from /debug/vars:\n%s", resp.Status, slurp))) + return fb.AddFile(f, []byte(fmt.Sprintf("Got response %s from /debug/vars:\n%s", resp.Status, slurp))) } var all map[string]interface{} if err := json.NewDecoder(resp.Body).Decode(&all); err != nil { @@ -534,82 +292,66 @@ func zipExpVar(tempDir, hostname string) error { if err != nil { return err } - return writeScrubbedFile(f, v) + return fb.AddFile(f, v) } -func zipSystemProbeStats(tempDir, hostname string) error { +func getSystemProbeStats() ([]byte, error) { sysProbeStats := status.GetSystemProbeStats(config.Datadog.GetString("system_probe_config.sysprobe_socket")) sysProbeBuf, err := yaml.Marshal(sysProbeStats) if err != nil { - return err + return nil, err } - return joinPathAndWriteScrubbedFile(sysProbeBuf, tempDir, hostname, "expvar", "system-probe") + return sysProbeBuf, nil } -// zipProcessAgentFullConfig fetches process-agent runtime config as YAML and writes it to process_agent_runtime_config_dump.yaml -func zipProcessAgentFullConfig(tempDir, hostname string) error { - // procStatusURL can be manually set for test purposes - if procStatusURL == "" { - addressPort, err := config.GetProcessAPIAddressPort() - if err != nil { - return fmt.Errorf("wrong configuration to connect to process-agent") - } - - procStatusURL = fmt.Sprintf("http://%s/config/all", addressPort) +// getProcessAgentFullConfig fetches process-agent runtime config as YAML and returns it to be added to process_agent_runtime_config_dump.yaml +func getProcessAgentFullConfig() ([]byte, error) { + addressPort, err := config.GetProcessAPIAddressPort() + if err != nil { + return nil, fmt.Errorf("wrong configuration to connect to process-agent") } - cfgB := status.GetProcessAgentRuntimeConfig(procStatusURL) + procStatusURL := fmt.Sprintf("http://%s/config/all", addressPort) - return joinPathAndWriteScrubbedFile(cfgB, tempDir, hostname, "process_agent_runtime_config_dump.yaml") + cfgB := status.GetProcessAgentRuntimeConfig(procStatusURL) + return cfgB, nil } -func zipConfigFiles(tempDir, hostname string, confSearchPaths SearchPaths, permsInfos permissionsInfos) error { - c, err := yaml.Marshal(config.Datadog.AllSettings()) - if err != nil { - return err - } - - err = joinPathAndWriteScrubbedFile(c, tempDir, hostname, "runtime_config_dump.yaml") - if err != nil { - return err - } - - // Use best effort to write process-agent runtime configs - err = zipProcessAgentFullConfig(tempDir, hostname) - if err != nil { - log.Warnf("could not zip process_agent_runtime_config_dump.yaml: %s", err) - } +func getConfigFiles(fb flarehelpers.FlareBuilder, confSearchPaths SearchPaths) { + for prefix, filePath := range confSearchPaths { + fb.CopyDirTo(filePath, prefix, func(path string) bool { + // ignore .example file + if filepath.Ext(path) == ".example" { + return false + } - err = walkConfigFilePaths(tempDir, hostname, confSearchPaths, permsInfos) - if err != nil { - return err + firstSuffix := []byte(getFirstSuffix(path)) + ext := []byte(filepath.Ext(path)) + if cnfFileExtRx.Match(firstSuffix) || cnfFileExtRx.Match(ext) { + return true + } + return false + }) } if config.Datadog.ConfigFileUsed() != "" { + mainConfpath := config.Datadog.ConfigFileUsed() + confDir := filepath.Dir(mainConfpath) + // zip up the config file that was actually used, if one exists - filePath := config.Datadog.ConfigFileUsed() - if err = createConfigFiles(filePath, tempDir, hostname, permsInfos); err != nil { - return err - } - // figure out system-probe file path based on main config path, - // and use best effort to include system-probe.yaml to the flare - systemProbePath := getConfigPath(filePath, "system-probe.yaml") - if systemErr := createConfigFiles(systemProbePath, tempDir, hostname, permsInfos); systemErr != nil { - log.Warnf("could not zip system-probe.yaml, system-probe might not be configured, or is in a different directory with datadog.yaml: %s", systemErr) - } + fb.CopyFileTo(mainConfpath, filepath.Join("etc", "datadog-agent.yaml")) + + // figure out system-probe file path based on main config path, and use best effort to include + // system-probe.yaml to the flare + fb.CopyFileTo(filepath.Join(confDir, "system-probe.yaml"), filepath.Join("etc", "system-probe.yaml")) // use best effort to include security-agent.yaml to the flare - securityAgentPath := getConfigPath(filePath, "security-agent.yaml") - if secErr := createConfigFiles(securityAgentPath, tempDir, hostname, permsInfos); secErr != nil { - log.Warnf("could not zip security-agent.yaml, security-agent might not be configured, or is in a different directory with datadog.yaml: %s", secErr) - } + fb.CopyFileTo(filepath.Join(confDir, "security-agent.yaml"), filepath.Join("etc", "system-probe.yaml")) } - - return err } -func zipSecrets(tempDir, hostname string) error { +func getSecrets() ([]byte, error) { fct := func(writer io.Writer) error { info, err := secrets.GetDebugInfo() if err != nil { @@ -620,166 +362,80 @@ func zipSecrets(tempDir, hostname string) error { return nil } - return zipCommandOutput(fct, tempDir, hostname, "secrets.log") + return functionOutputToBytes(fct), nil } -func zipProcessChecks(tempDir, hostname string, getAddressPort func() (url string, err error)) error { +func getProcessChecks(fb flarehelpers.FlareBuilder, getAddressPort func() (url string, err error)) { addressPort, err := getAddressPort() if err != nil { - return fmt.Errorf("wrong configuration to connect to process-agent: %s", err.Error()) + log.Errorf("Could not zip process agent checks: wrong configuration to connect to process-agent: %s", err.Error()) + return } checkURL := fmt.Sprintf("http://%s/check/", addressPort) - zipCheck := func(checkName, setting string) error { + getCheck := func(checkName, setting string) { + filename := fmt.Sprintf("%s_check_output.json", checkName) + if !config.Datadog.GetBool(setting) { - return nil + fb.AddFile(filename, []byte(fmt.Sprintf("'%s' is disabled", setting))) + return } - filename := fmt.Sprintf("%s_check_output.json", checkName) - if err := zipHTTPCallContent(tempDir, hostname, filename, checkURL+checkName); err != nil { - _ = log.Error(err) - err = os.WriteFile( - filepath.Join(tempDir, hostname, "process_check_output.json"), + err := fb.AddFileFromFunc(filename, func() ([]byte, error) { return getHTTPCallContent(checkURL + checkName) }) + if err != nil { + fb.AddFile( + "process_check_output.json", []byte(fmt.Sprintf("error: process-agent is not running or is unreachable: %s", err.Error())), - os.ModePerm, ) - if err != nil { - return err - } } - return nil - } - - if err := zipCheck("process", "process_config.process_collection.enabled"); err != nil { - return err - } - - if err := zipCheck("container", "process_config.container_collection.enabled"); err != nil { - return err - } - - if err := zipCheck("process_discovery", "process_config.process_discovery.enabled"); err != nil { - return err } - return nil -} - -func zipDiagnose(tempDir, hostname string) error { - return zipCommandOutput(diagnose.RunAll, tempDir, hostname, "diagnose.log") + getCheck("process", "process_config.process_collection.enabled") + getCheck("container", "process_config.container_collection.enabled") + getCheck("process_discovery", "process_config.process_discovery.enabled") } -func zipDatadogConnectivity(tempDir, hostname string) error { +func getDatadogConnectivity() ([]byte, error) { fct := func(w io.Writer) error { return connectivity.RunDatadogConnectivityDiagnose(w, false) } - return zipCommandOutput(fct, tempDir, hostname, "connectivity.log") -} - -func zipCommandOutput(fct func(w io.Writer) error, tempDir, hostname, filename string) error { - bytes := functionOutputToBytes(fct) - return joinPathAndWriteScrubbedFile(bytes, tempDir, hostname, filename) + return functionOutputToBytes(fct), nil } -func zipReader(r io.Reader, targetDir, filename string) error { - targetPath := filepath.Join(targetDir, filename) - - if err := ensureParentDirsExist(targetPath); err != nil { - return err - } - - zipped, err := os.OpenFile(targetPath, os.O_RDWR|os.O_CREATE, os.ModePerm) - if err != nil { - return err - } - defer zipped.Close() - - // use read/write instead of io.Copy - // see: https://github.com/golang/go/issues/44272 - buf := make([]byte, 256) - for { - n, err := r.Read(buf) - if err != nil && err != io.EOF { - return err - } - if n == 0 { - break - } - - if _, err := zipped.Write(buf[:n]); err != nil { - return err - } - } - return err -} - -func zipFile(sourceDir, targetDir, filename string) error { - original, err := os.Open(filepath.Join(sourceDir, filename)) - if err != nil { - return err - } - defer original.Close() - - return zipReader(original, targetDir, filename) -} - -func zipRegistryJSON(tempDir, hostname string) error { - originalPath := config.Datadog.GetString("logs_config.run_path") - targetPath := filepath.Join(tempDir, hostname) - return zipFile(originalPath, targetPath, "registry.json") -} - -func zipVersionHistory(tempDir, hostname string) error { - originalPath := config.Datadog.GetString("run_path") - targetPath := filepath.Join(tempDir, hostname) - return zipFile(originalPath, targetPath, "version-history.json") -} - -func zipConfigCheck(tempDir, hostname string) error { +func getConfigCheck() ([]byte, error) { fct := func(w io.Writer) error { return GetConfigCheck(w, true) } - bytes := functionOutputToBytes(fct) - return writeConfigCheck(tempDir, hostname, bytes) -} - -func writeConfigCheck(tempDir, hostname string, data []byte) error { - return joinPathAndWriteScrubbedFile(data, tempDir, hostname, "config-check.log") + return functionOutputToBytes(fct), nil } -// Used for testing mock HTTP server -var taggerListURL string - -func zipAgentTaggerList(tempDir, hostname string) error { +func getAgentTaggerList() ([]byte, error) { ipcAddress, err := config.GetIPCAddress() if err != nil { - return err + return nil, err } - if taggerListURL == "" { - taggerListURL = fmt.Sprintf("https://%v:%v/agent/tagger-list", ipcAddress, config.Datadog.GetInt("cmd_port")) - } + taggerListURL := fmt.Sprintf("https://%v:%v/agent/tagger-list", ipcAddress, config.Datadog.GetInt("cmd_port")) - return zipTaggerList(tempDir, hostname, taggerListURL, "tagger-list.json") + return getTaggerList(taggerListURL) } -func zipProcessAgentTaggerList(tempDir, hostname string) error { +func getProcessAgentTaggerList() ([]byte, error) { addressPort, err := config.GetProcessAPIAddressPort() if err != nil { - return fmt.Errorf("wrong configuration to connect to process-agent") + return nil, fmt.Errorf("wrong configuration to connect to process-agent") } taggerListURL := fmt.Sprintf("http://%s/agent/tagger-list", addressPort) - - return zipTaggerList(tempDir, hostname, taggerListURL, "process-agent_tagger-list.json") + return getTaggerList(taggerListURL) } -func zipTaggerList(tempDir, hostname, remoteURL, outputFile string) error { +func getTaggerList(remoteURL string) ([]byte, error) { c := apiutil.GetClient(false) // FIX: get certificates right then make this true r, err := apiutil.DoGet(c, remoteURL, apiutil.LeaveConnectionOpen) if err != nil { - return err + return nil, err } // Pretty print JSON output @@ -787,200 +443,84 @@ func zipTaggerList(tempDir, hostname, remoteURL, outputFile string) error { writer := bufio.NewWriter(&b) err = json.Indent(&b, r, "", "\t") if err != nil { - return joinPathAndWriteScrubbedFile(r, tempDir, hostname, outputFile) + return r, nil } writer.Flush() - return joinPathAndWriteScrubbedFile(b.Bytes(), tempDir, hostname, outputFile) + return b.Bytes(), nil } -// workloadListURL allows mocking the agent HTTP server -var workloadListURL string - -func zipWorkloadList(tempDir, hostname string) error { +func getWorkloadList() ([]byte, error) { ipcAddress, err := config.GetIPCAddress() if err != nil { - return err + return nil, err } - if workloadListURL == "" { - workloadListURL = fmt.Sprintf("https://%v:%v/agent/workload-list/verbose", ipcAddress, config.Datadog.GetInt("cmd_port")) - } + workloadListURL := fmt.Sprintf("https://%v:%v/agent/workload-list/verbose", ipcAddress, config.Datadog.GetInt("cmd_port")) c := apiutil.GetClient(false) // FIX: get certificates right then make this true r, err := apiutil.DoGet(c, workloadListURL, apiutil.LeaveConnectionOpen) if err != nil { - return err + return nil, err } workload := workloadmeta.WorkloadDumpResponse{} err = json.Unmarshal(r, &workload) if err != nil { - return err + return nil, err } fct := func(w io.Writer) error { workload.Write(w) return nil } - return zipCommandOutput(fct, tempDir, hostname, "workload-list.log") + return functionOutputToBytes(fct), nil } -func zipHealth(tempDir, hostname string) error { +func getHealth() ([]byte, error) { s := health.GetReady() sort.Strings(s.Healthy) sort.Strings(s.Unhealthy) yamlValue, err := yaml.Marshal(s) if err != nil { - return err + return nil, err } - return joinPathAndWriteScrubbedFile(yamlValue, tempDir, hostname, "health.yaml") + return yamlValue, nil } -func zipInstallInfo(tempDir, hostname string) error { - targetPath := filepath.Join(tempDir, hostname) - return zipFile(config.FileUsedDir(), targetPath, "install_info") -} - -func zipTelemetry(tempDir, hostname string) error { - return zipHTTPCallContent(tempDir, hostname, "telemetry.log", telemetryURL) -} - -func zipStackTraces(tempDir, hostname string) error { - return zipHTTPCallContent(tempDir, hostname, routineDumpFilename, pprofURL) -} - -// zipHTTPCallContent does a GET HTTP call to the given url and +// getHTTPCallContent does a GET HTTP call to the given url and // writes the content of the HTTP response in the given file, ready // to be shipped in a flare. -func zipHTTPCallContent(tempDir, hostname, filename, url string) error { +func getHTTPCallContent(url string) ([]byte, error) { ctx, cancel := context.WithTimeout(context.Background(), 4*time.Second) defer cancel() client := http.Client{} req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { - return err + return nil, err } resp, err := client.Do(req.WithContext(ctx)) if err != nil { - return err + return nil, err } defer resp.Body.Close() // read the entire body, so that it can be scrubbed in its entirety data, err := io.ReadAll(resp.Body) if err != nil { - return err - } - - return joinPathAndWriteScrubbedFile(data, tempDir, hostname, filename) -} - -func zipPerformanceProfile(tempDir, hostname string, pdata ProfileData) error { - dir := filepath.Join(tempDir, hostname, "profiles") - if err := os.MkdirAll(dir, os.ModePerm); err != nil { - return err - } - for name, data := range pdata { - fullpath := filepath.Join(dir, name) - if err := os.WriteFile(fullpath, data, os.ModePerm); err != nil { - return err - } - } - return nil -} - -func walkConfigFilePaths(tempDir, hostname string, confSearchPaths SearchPaths, permsInfos permissionsInfos) error { - for prefix, filePath := range confSearchPaths { - - err := filepath.Walk(filePath, func(src string, f os.FileInfo, err error) error { - if f == nil { - return nil - } - if f.IsDir() { - return nil - } - - if filepath.Ext(f.Name()) == ".example" { - return nil - } - - firstSuffix := getFirstSuffix(f.Name()) - ext := filepath.Ext(f.Name()) - - if cnfFileExtRx.Match([]byte(firstSuffix)) || cnfFileExtRx.Match([]byte(ext)) { - baseName := strings.Replace(src, filePath, "", 1) - - data, err := os.ReadFile(src) - if err != nil { - if os.IsNotExist(err) { - log.Warnf("the specified path: %s does not exist", filePath) - } - return err - } - err = joinPathAndWriteScrubbedFile(data, tempDir, hostname, "etc", "confd", prefix, baseName) - if err != nil { - return err - } - - if permsInfos != nil { - permsInfos.add(src) - - if len(permsInfos) != 0 { - absPath, err := filepath.Abs(filePath) - if err != nil { - log.Errorf("Error while getting absolute file path for parent directory: %v", err) - } - addParentPerms(absPath, permsInfos) - } - } - } - - return nil - }) - if err != nil { - return err - } - - } - - return nil -} - -// writeScrubbedFile writes the given data to the given file, after applying -// flareScrubber to it. -// -// WARNING: while this function applies a scrubber, that scrubber cannot scrub -// all secrets. Ensure that the data being written cannot contain user secrets -// or proprietary information. For example, do not include arbitrary -// environment variables. -func writeScrubbedFile(filename string, data []byte) error { - scrubbed, err := flareScrubber.ScrubBytes(data) - if err != nil { - return err + return nil, err } - return os.WriteFile(filename, scrubbed, os.ModePerm) -} -// writeScrubbedFileSafe verifies that the folder exists before calling writeScrubbedFile() -func writeScrubbedFileSafe(filename string, data []byte) error { - err := ensureParentDirsExist(filename) - if err != nil { - return err - } - return writeScrubbedFile(filename, data) + return data, nil } -// joinPathAndWriteScrubbedFile joins all the path components into a path and safely -// writes data to the created path -func joinPathAndWriteScrubbedFile(data []byte, pathComponents ...string) error { - filename := filepath.Join(pathComponents...) - return writeScrubbedFileSafe(filename, data) +func getFirstSuffix(s string) string { + return filepath.Ext(strings.TrimSuffix(s, filepath.Ext(s))) } // functionOutputToBytes runs a given function and returns its output in a byte array @@ -997,65 +537,3 @@ func functionOutputToBytes(fct func(writer io.Writer) error) []byte { return buffer.Bytes() } - -func ensureParentDirsExist(p string) error { - return os.MkdirAll(filepath.Dir(p), os.ModePerm) -} - -func getFirstSuffix(s string) string { - return filepath.Ext(strings.TrimSuffix(s, filepath.Ext(s))) -} - -func getArchivePath() string { - dir := os.TempDir() - t := time.Now().UTC() - timeString := strings.ReplaceAll(t.Format(time.RFC3339), ":", "-") - fileName := "" - lvl, err := log.GetLogLevel() - if err == nil { - fileName = strings.Join([]string{"datadog", "agent", timeString, lvl.String()}, "-") - } else { - fileName = strings.Join([]string{"datadog", "agent", timeString}, "-") - } - fileName = strings.Join([]string{fileName, "zip"}, ".") - filePath := filepath.Join(dir, fileName) - return filePath -} - -func cleanDirectoryName(name string) string { - filteredName := directoryNameFilter.ReplaceAllString(name, "_") - if len(filteredName) > directoryNameMaxSize { - return filteredName[:directoryNameMaxSize] - } - return filteredName -} - -// createConfigFiles takes the content of config files that need to be included in the flare and -// put them in the directory waiting to be archived -func createConfigFiles(filePath, tempDir, hostname string, permsInfos permissionsInfos) error { - // Check if the file exists - _, err := os.Stat(filePath) - if err == nil { - - data, err := os.ReadFile(filePath) - if err != nil { - return err - } - - err = joinPathAndWriteScrubbedFile(data, tempDir, hostname, "etc", filepath.Base(filePath)) - if err != nil { - return err - } - - if permsInfos != nil { - permsInfos.add(filePath) - } - } - return err -} - -// getConfigPath would take the path to datadog.yaml and replace the file name with the given agent file name -func getConfigPath(ddCfgFilePath string, agentFileName string) string { - path := filepath.Dir(ddCfgFilePath) - return filepath.Join(path, agentFileName) -} diff --git a/pkg/flare/archive_dca.go b/pkg/flare/archive_dca.go index 8b9864fd7fbef..0ab1107cabf7c 100644 --- a/pkg/flare/archive_dca.go +++ b/pkg/flare/archive_dca.go @@ -8,168 +8,77 @@ package flare import ( "bufio" "bytes" - "context" "encoding/json" "fmt" - "os" + "io/ioutil" + "net/http" "path/filepath" - "github.com/mholt/archiver/v3" - + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" apiv1 "github.com/DataDog/datadog-agent/pkg/clusteragent/api/v1" "github.com/DataDog/datadog-agent/pkg/clusteragent/custommetrics" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/status" - hostnameUtil "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver" "github.com/DataDog/datadog-agent/pkg/util/log" ) // CreateDCAArchive packages up the files func CreateDCAArchive(local bool, distPath, logFilePath string) (string, error) { - zipFilePath := getArchivePath() - confSearchPaths := SearchPaths{ - "": config.Datadog.GetString("confd_path"), - "dist": filepath.Join(distPath, "conf.d"), - } - return createDCAArchive(zipFilePath, local, confSearchPaths, logFilePath) -} - -func createDCAArchive(zipFilePath string, local bool, confSearchPaths SearchPaths, logFilePath string) (string, error) { - tempDir, err := createTempDir() + fb, err := flarehelpers.NewFlareBuilder() if err != nil { return "", err } - defer os.RemoveAll(tempDir) - // Get hostname, if there's an error in getting the hostname, - // set the hostname to unknown - hostname, err := hostnameUtil.Get(context.TODO()) - if err != nil { - hostname = "unknown" + confSearchPaths := SearchPaths{ + "": config.Datadog.GetString("confd_path"), + "dist": filepath.Join(distPath, "conf.d"), } + createDCAArchive(fb, local, confSearchPaths, logFilePath) + return fb.Save() +} + +func createDCAArchive(fb flarehelpers.FlareBuilder, local bool, confSearchPaths SearchPaths, logFilePath string) { // If the request against the API does not go through we don't collect the status log. if local { - err = writeLocal(tempDir, hostname) - if err != nil { - return "", err - } + fb.AddFile("local", []byte("")) } else { // The Status will be unavailable unless the agent is running. // Only zip it up if the agent is running - err = zipDCAStatusFile(tempDir, hostname) + err := fb.AddFileFromFunc("cluster-agent-status.log", status.GetAndFormatDCAStatus) if err != nil { - log.Infof("Error getting the status of the DCA, %q", err) - return "", err + log.Errorf("Error getting the status of the DCA, %q", err) + return } } - permsInfos := make(permissionsInfos) - - err = zipLogFiles(tempDir, hostname, logFilePath, permsInfos) - if err != nil { - return "", err - } - - err = zipConfigFiles(tempDir, hostname, confSearchPaths, permsInfos) - if err != nil { - return "", err - } - - err = zipClusterAgentConfigCheck(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip config check: %s", err) - } - - err = zipExpVar(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipEnvvars(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipMetadataMap(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipClusterAgentClusterChecks(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip clustercheck status: %s", err) - } - - err = zipClusterAgentDiagnose(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip diagnose: %s", err) - } + getLogFiles(fb, logFilePath) + getConfigFiles(fb, confSearchPaths) + getClusterAgentConfigCheck(fb) //nolint:errcheck + getExpVar(fb) //nolint:errcheck + getMetadataMap(fb) //nolint:errcheck + getClusterAgentClusterChecks(fb) //nolint:errcheck + getClusterAgentDiagnose(fb) //nolint:errcheck + fb.AddFileFromFunc("envvars.log", getEnvVars) + fb.AddFileFromFunc("telemetry.log", QueryDCAMetrics) if config.Datadog.GetBool("external_metrics_provider.enabled") { - err = zipHPAStatus(tempDir, hostname) - if err != nil { - return "", err - } + getHPAStatus(fb) //nolint:errcheck } - - err = zipClusterAgentTelemetry(tempDir, hostname) - if err != nil { - log.Errorf("Could not zip telemetry payload: %v", err) - } - - err = permsInfos.commit(tempDir, hostname, os.ModePerm) - if err != nil { - log.Infof("Error while creating permissions.log infos file: %s", err) - } - - // File format is determined based on `zipFilePath` extension - err = archiver.Archive([]string{filepath.Join(tempDir, hostname)}, zipFilePath) - if err != nil { - return "", err - } - - return zipFilePath, nil } -func writeLocal(tempDir, hostname string) error { - f := filepath.Join(tempDir, hostname, "local") - err := ensureParentDirsExist(f) +// QueryDCAMetrics gets the metrics payload exposed by the cluster agent +func QueryDCAMetrics() ([]byte, error) { + r, err := http.Get(fmt.Sprintf("http://localhost:%d/metrics", config.Datadog.GetInt("metrics_port"))) if err != nil { - return err + return nil, err } - return os.WriteFile(f, []byte{}, os.ModePerm) + defer r.Body.Close() + return ioutil.ReadAll(r.Body) } -func zipDCAStatusFile(tempDir, hostname string) error { - // Grab the status - log.Infof("Zipping the status at %s for %s", tempDir, hostname) - s, err := status.GetAndFormatDCAStatus() - if err != nil { - log.Infof("Error zipping the status: %q", err) - return err - } - - // Clean it up - cleaned, err := flareScrubber.ScrubBytes(s) - if err != nil { - log.Infof("Error redacting the log files: %q", err) - return err - } - - f := filepath.Join(tempDir, hostname, "cluster-agent-status.log") - log.Infof("Flare status made at %s", tempDir) - err = ensureParentDirsExist(f) - if err != nil { - return err - } - - err = os.WriteFile(f, cleaned, os.ModePerm) - return err -} - -func zipMetadataMap(tempDir, hostname string) error { +func getMetadataMap(fb flarehelpers.FlareBuilder) error { metaList := apiv1.NewMetadataResponse() cl, err := apiserver.GetAPIClient() if err != nil { @@ -184,44 +93,28 @@ func zipMetadataMap(tempDir, hostname string) error { metaBytes, err := json.Marshal(metaList) if err != nil { - log.Infof("Error while marshalling the cluster level metadata: %q", err) - return err + return log.Errorf("Error while marshalling the cluster level metadata: %q", err) } str, err := status.FormatMetadataMapCLI(metaBytes) if err != nil { - log.Infof("Error while rendering the cluster level metadata: %q", err) - return err + return log.Errorf("Error while rendering the cluster level metadata: %q", err) } - sByte := []byte(str) - f := filepath.Join(tempDir, hostname, "cluster-agent-metadatamapper.log") - log.Infof("Flare metadata mapper made at %s", tempDir) - err = ensureParentDirsExist(f) - if err != nil { - return err - } - - return os.WriteFile(f, sByte, os.ModePerm) + return fb.AddFile("cluster-agent-metadatamapper.log", []byte(str)) } -func zipClusterAgentClusterChecks(tempDir, hostname string) error { +func getClusterAgentClusterChecks(fb flarehelpers.FlareBuilder) error { var b bytes.Buffer writer := bufio.NewWriter(&b) GetClusterChecks(writer, "") //nolint:errcheck writer.Flush() - f := filepath.Join(tempDir, hostname, "clusterchecks.log") - err := ensureParentDirsExist(f) - if err != nil { - return err - } - - return writeScrubbedFile(f, b.Bytes()) + return fb.AddFile("clusterchecks.log", b.Bytes()) } -func zipHPAStatus(tempDir, hostname string) error { +func getHPAStatus(fb flarehelpers.FlareBuilder) error { stats := make(map[string]interface{}) apiCl, err := apiserver.GetAPIClient() if err != nil { @@ -231,68 +124,33 @@ func zipHPAStatus(tempDir, hostname string) error { } statsBytes, err := json.Marshal(stats) if err != nil { - log.Infof("Error while marshalling the cluster level metadata: %q", err) - return err + return log.Errorf("Error while marshalling the cluster level metadata: %q", err) } str, err := status.FormatHPAStatus(statsBytes) if err != nil { - return err + return log.Errorf("Could not collect custommetricsprovider.log: %s", err) } - sByte := []byte(str) - - f := filepath.Join(tempDir, hostname, "custommetricsprovider.log") - log.Infof("Flare hpa status made at %s", tempDir) - err = ensureParentDirsExist(f) - if err != nil { - return err - } - - err = os.WriteFile(f, sByte, os.ModePerm) - if err != nil { - return err - } - return err + return fb.AddFile("custommetricsprovider.log", []byte(str)) } -func zipClusterAgentConfigCheck(tempDir, hostname string) error { +func getClusterAgentConfigCheck(fb flarehelpers.FlareBuilder) error { var b bytes.Buffer writer := bufio.NewWriter(&b) GetClusterAgentConfigCheck(writer, true) //nolint:errcheck writer.Flush() - return writeConfigCheck(tempDir, hostname, b.Bytes()) + return fb.AddFile("config-check.log", b.Bytes()) } -func zipClusterAgentDiagnose(tempDir, hostname string) error { +func getClusterAgentDiagnose(fb flarehelpers.FlareBuilder) error { var b bytes.Buffer writer := bufio.NewWriter(&b) GetClusterAgentDiagnose(writer) //nolint:errcheck writer.Flush() - f := filepath.Join(tempDir, hostname, "diagnose.log") - err := ensureParentDirsExist(f) - if err != nil { - return err - } - - return writeScrubbedFile(f, b.Bytes()) -} - -func zipClusterAgentTelemetry(tempDir, hostname string) error { - payload, err := QueryDCAMetrics() - if err != nil { - return err - } - - f := filepath.Join(tempDir, hostname, "telemetry.log") - err = ensureParentDirsExist(f) - if err != nil { - return err - } - - return writeScrubbedFile(f, payload) + return fb.AddFile("diagnose.log", b.Bytes()) } diff --git a/pkg/flare/archive_docker.go b/pkg/flare/archive_docker.go index bf0f3f9617536..386157def852e 100644 --- a/pkg/flare/archive_docker.go +++ b/pkg/flare/archive_docker.go @@ -13,11 +13,11 @@ import ( "context" "encoding/json" "fmt" - "path/filepath" "regexp" "strings" "text/tabwriter" + "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/containers/metrics" "github.com/DataDog/datadog-agent/pkg/util/docker" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -27,20 +27,24 @@ import ( const dockerCommandMaxLength = 29 -func zipDockerSelfInspect(tempDir, hostname string) error { +func getDockerSelfInspect() ([]byte, error) { + if !config.IsContainerized() { + return nil, fmt.Errorf("The Agent is not containerized") + } + du, err := docker.GetDockerUtil() if err != nil { - return err + return nil, err } selfContainerID, err := metrics.GetProvider().GetMetaCollector().GetSelfContainerID() if err != nil { - return fmt.Errorf("Unable to determine self container id, err: %w", err) + return nil, fmt.Errorf("Unable to determine self container id, err: %w", err) } co, err := du.Inspect(context.TODO(), selfContainerID, false) if err != nil { - return err + return nil, err } // Remove the envvars section, as we already @@ -56,7 +60,7 @@ func zipDockerSelfInspect(tempDir, hostname string) error { // Serialise as JSON jsonStats, err := json.Marshal(co) if err != nil { - return err + return nil, err } var out bytes.Buffer json.Indent(&out, jsonStats, "", "\t") //nolint:errcheck @@ -71,21 +75,20 @@ func zipDockerSelfInspect(tempDir, hostname string) error { } serialized = imgRx.ReplaceAllFunc(serialized, replFunc) - f := filepath.Join(tempDir, hostname, "docker_inspect.log") - return writeScrubbedFile(f, serialized) + return serialized, nil } -func zipDockerPs(tempDir, hostname string) error { +func getDockerPs() ([]byte, error) { du, err := docker.GetDockerUtil() if err != nil { // if we can't reach docker, let's do nothing log.Debugf("Couldn't reach docker for getting `docker ps`: %s", err) - return nil + return nil, nil } options := types.ContainerListOptions{All: true, Limit: 500} containerList, err := du.RawContainerList(context.TODO(), options) if err != nil { - return err + return nil, err } // Prepare contents @@ -99,12 +102,11 @@ func zipDockerPs(tempDir, hostname string) error { } err = w.Flush() if err != nil { - return err + return nil, err } // Write to file - f := filepath.Join(tempDir, hostname, "docker_ps.log") - return writeScrubbedFile(f, output.Bytes()) + return output.Bytes(), nil } // trimCommand removes arguments from command string diff --git a/pkg/flare/archive_linux.go b/pkg/flare/archive_linux.go index 68750681234d7..2840f28964050 100644 --- a/pkg/flare/archive_linux.go +++ b/pkg/flare/archive_linux.go @@ -15,22 +15,28 @@ import ( "path/filepath" "regexp" "syscall" + + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" + "github.com/DataDog/datadog-agent/pkg/config" ) -func zipLinuxFile(source, tempDir, hostname, filename string) error { - return zipFile(source, filepath.Join(tempDir, hostname), filename) +func addSystemProbePlatformSpecificEntries(fb flarehelpers.FlareBuilder) { + sysprobeSocketLocation := config.Datadog.GetString("system_probe_config.sysprobe_socket") + if sysprobeSocketLocation != "" { + fb.RegisterDirPerm(filepath.Dir(sysprobeSocketLocation)) + } } -func zipLinuxKernelSymbols(tempDir, hostname string) error { - return zipLinuxFile("/proc", tempDir, hostname, "kallsyms") +func getLinuxKernelSymbols(fb flarehelpers.FlareBuilder) error { + return fb.CopyFile("/proc/kallsyms") } -func zipLinuxKprobeEvents(tempDir, hostname string) error { - return zipLinuxFile("/sys/kernel/debug/tracing", tempDir, hostname, "kprobe_events") +func getLinuxKprobeEvents(fb flarehelpers.FlareBuilder) error { + return fb.CopyFile("/sys/kernel/debug/tracing/kprobe_events") } -func zipLinuxPid1MountInfo(tempDir, hostname string) error { - return zipLinuxFile("/proc/1", tempDir, hostname, "mountinfo") +func getLinuxPid1MountInfo(fb flarehelpers.FlareBuilder) error { + return fb.CopyFile("/proc/1/mountinfo") } var klogRegexp = regexp.MustCompile(`<(\d+)>(.*)`) @@ -77,24 +83,24 @@ func parseDmesg(buffer []byte) (string, error) { return result, nil } -func zipLinuxDmesg(tempDir, hostname string) error { +func getLinuxDmesg(fb flarehelpers.FlareBuilder) error { dmesg, err := readAllDmesg() if err != nil { return err } - buffer, err := parseDmesg(dmesg) + content, err := parseDmesg(dmesg) if err != nil { return err } - return zipReader(bytes.NewBufferString(buffer), filepath.Join(tempDir, hostname), "dmesg") + return fb.AddFile("dmesg", []byte(content)) } -func zipLinuxTracingAvailableEvents(tempDir, hostname string) error { - return zipLinuxFile("/sys/kernel/debug/tracing", tempDir, hostname, "available_events") +func getLinuxTracingAvailableEvents(fb flarehelpers.FlareBuilder) error { + return fb.CopyFile("/sys/kernel/debug/tracing/available_events") } -func zipLinuxTracingAvailableFilterFunctions(tempDir, hostname string) error { - return zipLinuxFile("/sys/kernel/debug/tracing", tempDir, hostname, "available_filter_functions") +func getLinuxTracingAvailableFilterFunctions(fb flarehelpers.FlareBuilder) error { + return fb.CopyFile("/sys/kernel/debug/tracing/available_filter_functions") } diff --git a/pkg/flare/archive_linux_test.go b/pkg/flare/archive_linux_test.go deleted file mode 100644 index 7861c2396bd4a..0000000000000 --- a/pkg/flare/archive_linux_test.go +++ /dev/null @@ -1,40 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build linux -// +build linux - -package flare - -import ( - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestZipLinuxFileWrapper(t *testing.T) { - srcDir := t.TempDir() - dstDir := t.TempDir() - - file, err := os.Create(filepath.Join(srcDir, "testfile.txt")) - require.NoError(t, err) - - expectedContent := "expected content" - _, err = file.WriteString(expectedContent) - require.NoError(t, err) - - err = file.Close() - require.NoError(t, err) - - err = zipLinuxFile(srcDir, dstDir, "hostname", "testfile.txt") - require.NoError(t, err) - - targetPath := filepath.Join(dstDir, "hostname", "testfile.txt") - actualContent, err := os.ReadFile(targetPath) - require.NoError(t, err) - require.Equal(t, expectedContent, string(actualContent)) -} diff --git a/pkg/flare/archive_nix.go b/pkg/flare/archive_nix.go index 15d02bba57246..0027c8b7b187a 100644 --- a/pkg/flare/archive_nix.go +++ b/pkg/flare/archive_nix.go @@ -9,133 +9,7 @@ package flare import ( - "fmt" - "log" - "os" - "os/user" - "path/filepath" - "strconv" - "strings" - "syscall" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" ) -func zipCounterStrings(tempDir, hostname string) error { - return nil -} - -func zipTypeperfData(tempDir, hostname string) error { - return nil -} - -func zipLodctrOutput(tempDir, hostname string) error { - return nil -} -func zipWindowsEventLogs(tempDir, hostname string) error { - return nil -} -func zipServiceStatus(tempDir, hostname string) error { - return nil -} -func zipDatadogRegistry(tempDir, hostname string) error { - return nil -} - -type filePermsInfo struct { - mode os.FileMode - owner string - group string -} - -// Add puts the given filepath in the map -// of files to process later during the commit phase. -func (p permissionsInfos) add(filePath string) { - p[filePath] = filePermsInfo{} -} - -// Commit resolves the infos of every stacked files in the map -// and then writes the permissions.log file on the filesystem. -func (p permissionsInfos) commit(tempDir, hostname string, mode os.FileMode) error { - if err := p.statFiles(); err != nil { - return err - } - return p.write(tempDir, hostname, mode) -} - -func (p permissionsInfos) statFiles() error { - for filePath := range p { - fi, err := os.Stat(filePath) - if err != nil { - log.Println(err) - return fmt.Errorf("while getting info of %s: %s", filePath, err) - } - - var sys syscall.Stat_t - if err := syscall.Stat(filePath, &sys); err != nil { - return fmt.Errorf("can't retrieve file %s uid/gid infos: %s", filePath, err) - } - - var uname string - var uid = strconv.Itoa(int(sys.Uid)) - u, err := user.LookupId(uid) - if err != nil { - // User not found, eg: it was deleted from the system - uname = uid - } else if len(u.Name) > 0 { - uname = u.Name - } else { - uname = u.Username - } - - var gname string - var gid = strconv.Itoa(int(sys.Gid)) - g, err := user.LookupGroupId(gid) - if err != nil { - // Group not found, eg: it was deleted from the system - gname = gid - } else { - gname = g.Name - } - - p[filePath] = filePermsInfo{ - mode: fi.Mode(), - owner: uname, - group: gname, - } - } - return nil -} - -func (p permissionsInfos) write(tempDir, hostname string, mode os.FileMode) error { - // init the file - t := filepath.Join(tempDir, hostname, "permissions.log") - - if err := ensureParentDirsExist(t); err != nil { - return err - } - - f, err := os.OpenFile(t, os.O_RDWR|os.O_CREATE|os.O_APPEND, mode) - if err != nil { - return fmt.Errorf("while opening: %s", err) - } - - defer f.Close() - - // write headers - s := fmt.Sprintf("%-50s | %-5s | %-10s | %-10s\n", "File path", "mode", "owner", "group") - if _, err = f.Write([]byte(s)); err != nil { - return err - } - if _, err = f.Write([]byte(strings.Repeat("-", len(s)) + "\n")); err != nil { - return err - } - - // write each file permissions infos - for filePath, perms := range p { - _, err = f.WriteString(fmt.Sprintf("%-50s | %-5s | %-10s | %-10s\n", filePath, perms.mode.String(), perms.owner, perms.group)) - if err != nil { - return err - } - } - - return nil -} +func getWindowsData(fb flarehelpers.FlareBuilder) {} diff --git a/pkg/flare/archive_nix_test.go b/pkg/flare/archive_nix_test.go deleted file mode 100644 index 950ecba41fa4d..0000000000000 --- a/pkg/flare/archive_nix_test.go +++ /dev/null @@ -1,130 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !windows -// +build !windows - -package flare - -import ( - "archive/zip" - "os" - "path/filepath" - "strings" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/config" -) - -// Ensure the permissions.log is being created -func TestPermsFile(t *testing.T) { - assert := assert.New(t) - - common.SetupConfig("./test") - mockConfig := config.Mock(t) - mockConfig.Set("confd_path", "./test/confd") - mockConfig.Set("log_file", "./test/logs/agent.log") - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{}, true, zipFilePath, []string{""}, nil, nil) - defer os.Remove(zipFilePath) - - assert.Nil(err) - assert.Equal(zipFilePath, filePath) - - // asserts that it as indeed created a permissions.log file - z, err := zip.OpenReader(zipFilePath) - assert.NoError(err, "opening the zip shouldn't pop an error") - - ok := false - for _, f := range z.File { - if strings.HasSuffix(f.Name, "permissions.log") { - ok = true - } - } - assert.True(ok, "a permissions.log should have been appended to the zip") -} - -func TestAddPermsInfo(t *testing.T) { - assert := assert.New(t) - - permsInfos := make(permissionsInfos) - - // create two files for which we'll add infos into the permissions.log - f1, err := os.CreateTemp("", "ddtests*") - assert.NoError(err, "creating a temporary file should not fail") - assert.NotNil(f1, "temporary file should not be nil") - f2, err := os.CreateTemp("", "ddtests*") - assert.NoError(err, "creating a temporary file should not fail") - assert.NotNil(f2, "temporary file should not be nil") - - permsInfos.add(f1.Name()) - permsInfos.add(f2.Name()) - - permsFilePath := filepath.Join(os.TempDir(), "permissions.log") - - err = permsInfos.commit(os.TempDir(), "", os.ModePerm) - assert.NoError(err, "stating files + writing permissions.log should not fail") - - // should have created a permissions.log in the tmp dir - // + added headers and info of the previously created files - data, err := os.ReadFile(permsFilePath) - assert.NoError(err, "should be able to read the temporary permissions file") - assert.Equal(4, strings.Count(string(data), "\n"), "the permissions file should contain 2 lines of headers, 2 lines of entries") - - os.Remove(filepath.Join(os.TempDir(), "permissions.log")) - os.Remove(f1.Name()) - os.Remove(f2.Name()) -} - -func TestAddParentPerms(t *testing.T) { - assert := assert.New(t) - - permsInfos := make(permissionsInfos) - - // Basic Case - path := "/a/b/c/d" - addParentPerms(path, permsInfos) - expectedParentPerms := map[string]filePermsInfo{ - "/": {0, "", ""}, "/a": {0, "", ""}, "/a/b": {0, "", ""}, "/a/b/c": {0, "", ""}, - } - assert.EqualValues(expectedParentPerms, permsInfos) - - // Empty Case - permsInfos = make(permissionsInfos) - path = "" - addParentPerms(path, permsInfos) - expectedParentPerms = map[string]filePermsInfo{} - assert.EqualValues(expectedParentPerms, permsInfos) - - // Only root - permsInfos = make(permissionsInfos) - path = "/" - addParentPerms(path, permsInfos) - expectedParentPerms = map[string]filePermsInfo{ - "/": {0, "", ""}, - } - assert.EqualValues(expectedParentPerms, permsInfos) - - // Space in path - permsInfos = make(permissionsInfos) - path = "/a b/c" - addParentPerms(path, permsInfos) - expectedParentPerms = map[string]filePermsInfo{ - "/": {0, "", ""}, "/a b": {0, "", ""}, - } - assert.EqualValues(expectedParentPerms, permsInfos) - - // Dot in path - permsInfos = make(permissionsInfos) - path = "/a.b/c" - addParentPerms(path, permsInfos) - expectedParentPerms = map[string]filePermsInfo{ - "/": {0, "", ""}, "/a.b": {0, "", ""}, - } - assert.EqualValues(expectedParentPerms, permsInfos) -} diff --git a/pkg/flare/archive_nodocker.go b/pkg/flare/archive_nodocker.go index d8dcdb22665e2..94adbca652352 100644 --- a/pkg/flare/archive_nodocker.go +++ b/pkg/flare/archive_nodocker.go @@ -8,10 +8,10 @@ package flare -func zipDockerSelfInspect(tempDir, hostname string) error { - return nil +func getDockerSelfInspect() ([]byte, error) { + return nil, nil } -func zipDockerPs(tempDir, hostname string) error { - return nil +func getDockerPs() ([]byte, error) { + return nil, nil } diff --git a/pkg/flare/archive_nolinux.go b/pkg/flare/archive_nolinux.go index ccc64daa6fc48..520f72e0b4a2a 100644 --- a/pkg/flare/archive_nolinux.go +++ b/pkg/flare/archive_nolinux.go @@ -8,26 +8,32 @@ package flare -func zipLinuxKernelSymbols(tempDir, hostname string) error { +import ( + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" +) + +func addSystemProbePlatformSpecificEntries(fb flarehelpers.FlareBuilder) {} + +func getLinuxKernelSymbols(fb flarehelpers.FlareBuilder) error { return nil } -func zipLinuxKprobeEvents(tempDir, hostname string) error { +func getLinuxKprobeEvents(fb flarehelpers.FlareBuilder) error { return nil } -func zipLinuxDmesg(tempDir, hostname string) error { +func getLinuxDmesg(fb flarehelpers.FlareBuilder) error { return nil } -func zipLinuxPid1MountInfo(tempDir, hostname string) error { +func getLinuxPid1MountInfo(fb flarehelpers.FlareBuilder) error { return nil } -func zipLinuxTracingAvailableEvents(tempDir, hostname string) error { +func getLinuxTracingAvailableEvents(fb flarehelpers.FlareBuilder) error { return nil } -func zipLinuxTracingAvailableFilterFunctions(tempDir, hostname string) error { +func getLinuxTracingAvailableFilterFunctions(fb flarehelpers.FlareBuilder) error { return nil } diff --git a/pkg/flare/archive_security.go b/pkg/flare/archive_security.go index 0a5145898874b..65fc835f4d36d 100644 --- a/pkg/flare/archive_security.go +++ b/pkg/flare/archive_security.go @@ -6,205 +6,76 @@ package flare import ( - "context" "os" - "path/filepath" - - "github.com/mholt/archiver/v3" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/status" - "github.com/DataDog/datadog-agent/pkg/util" - hostnameUtil "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/log" ) // CreateSecurityAgentArchive packages up the files func CreateSecurityAgentArchive(local bool, logFilePath string, runtimeStatus, complianceStatus map[string]interface{}) (string, error) { - zipFilePath := getArchivePath() - - tempDir, err := createTempDir() + fb, err := flarehelpers.NewFlareBuilder() if err != nil { return "", err } - defer os.RemoveAll(tempDir) + createSecurityAgentArchive(fb, local, logFilePath, runtimeStatus, complianceStatus) - // Get hostname, if there's an error in getting the hostname, - // set the hostname to unknown - hostname, err := hostnameUtil.Get(context.TODO()) - if err != nil { - hostname = "unknown" - } + return fb.Save() +} +// createSecurityAgentArchive packages up the files +func createSecurityAgentArchive(fb flarehelpers.FlareBuilder, local bool, logFilePath string, runtimeStatus, complianceStatus map[string]interface{}) { // If the request against the API does not go through we don't collect the status log. if local { - err = writeLocal(tempDir, hostname) - if err != nil { - return "", err - } + fb.AddFile("local", []byte("")) } else { // The Status will be unavailable unless the agent is running. // Only zip it up if the agent is running - err = zipSecurityAgentStatusFile(tempDir, hostname, runtimeStatus, complianceStatus) + err := fb.AddFileFromFunc("security-agent-status.log", func() ([]byte, error) { + return status.GetAndFormatSecurityAgentStatus(runtimeStatus, complianceStatus) + }) if err != nil { log.Infof("Error getting the status of the Security Agent, %q", err) - return "", err + return } } - permsInfos := make(permissionsInfos) - - err = zipLogFiles(tempDir, hostname, logFilePath, permsInfos) - if err != nil { - return "", err - } - - err = zipConfigFiles(tempDir, hostname, SearchPaths{}, permsInfos) - if err != nil { - return "", err - } - - err = zipComplianceFiles(tempDir, hostname, permsInfos) - if err != nil { - return "", err - } - - err = zipRuntimeFiles(tempDir, hostname, permsInfos) - if err != nil { - return "", err - } - - err = zipExpVar(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipEnvvars(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipLinuxKernelSymbols(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipLinuxPid1MountInfo(tempDir, hostname) - if err != nil { - return "", err - } - - err = zipLinuxDmesg(tempDir, hostname) - if err != nil { - log.Infof("Error while retrieving dmesg: %s", err) - } - - err = zipLinuxKprobeEvents(tempDir, hostname) - if err != nil { - log.Infof("Error while getting kprobe_events: %s", err) - } - - err = zipLinuxTracingAvailableEvents(tempDir, hostname) - if err != nil { - log.Infof("Error while getting kprobe_events: %s", err) - } - - err = zipLinuxTracingAvailableFilterFunctions(tempDir, hostname) - if err != nil { - log.Infof("Error while getting kprobe_events: %s", err) - } - - err = permsInfos.commit(tempDir, hostname, os.ModePerm) - if err != nil { - log.Infof("Error while creating permissions.log infos file: %s", err) - } - - // File format is determined based on `zipFilePath` extension - err = archiver.Archive([]string{filepath.Join(tempDir, hostname)}, zipFilePath) - if err != nil { - return "", err - } - - return zipFilePath, nil -} - -func zipSecurityAgentStatusFile(tempDir, hostname string, runtimeStatus, complianceStatus map[string]interface{}) error { - // Grab the status - log.Infof("Zipping the status at %s for %s", tempDir, hostname) - s, err := status.GetAndFormatSecurityAgentStatus(runtimeStatus, complianceStatus) - if err != nil { - log.Infof("Error zipping the status: %q", err) - return err - } - - // Clean it up - cleaned, err := flareScrubber.ScrubBytes(s) - if err != nil { - log.Infof("Error redacting the log files: %q", err) - return err - } - - f := filepath.Join(tempDir, hostname, "security-agent-status.log") - log.Infof("Flare status made at %s", tempDir) - err = ensureParentDirsExist(f) - if err != nil { - return err - } - - err = os.WriteFile(f, cleaned, os.ModePerm) - return err + getLogFiles(fb, logFilePath) + getConfigFiles(fb, SearchPaths{}) + getComplianceFiles(fb) //nolint:errcheck + getRuntimeFiles(fb) //nolint:errcheck + getExpVar(fb) //nolint:errcheck + fb.AddFileFromFunc("envvars.log", getEnvVars) + getLinuxKernelSymbols(fb) //nolint:errcheck + getLinuxPid1MountInfo(fb) //nolint:errcheck + getLinuxDmesg(fb) //nolint:errcheck + getLinuxKprobeEvents(fb) //nolint:errcheck + getLinuxTracingAvailableEvents(fb) //nolint:errcheck + getLinuxTracingAvailableFilterFunctions(fb) //nolint:errcheck } -func zipComplianceFiles(tempDir, hostname string, permsInfos permissionsInfos) error { +func getComplianceFiles(fb flarehelpers.FlareBuilder) error { compDir := config.Datadog.GetString("compliance_config.dir") - if permsInfos != nil { - addParentPerms(compDir, permsInfos) - } - - err := filepath.Walk(compDir, func(src string, f os.FileInfo, err error) error { - if f == nil { - return nil - } - if f.IsDir() || f.Mode()&os.ModeSymlink != 0 { - return nil - } - - dst := filepath.Join(tempDir, hostname, "compliance.d", f.Name()) - - if permsInfos != nil { - permsInfos.add(src) + return fb.CopyDirTo(compDir, "compliance.d", func(path string) bool { + f, err := os.Lstat(path) + if err != nil { + return false } - - return util.CopyFileAll(src, dst) + return f.Mode()&os.ModeSymlink == 0 }) - - return err } -func zipRuntimeFiles(tempDir, hostname string, permsInfos permissionsInfos) error { +func getRuntimeFiles(fb flarehelpers.FlareBuilder) error { runtimeDir := config.Datadog.GetString("runtime_security_config.policies.dir") - if permsInfos != nil { - addParentPerms(runtimeDir, permsInfos) - } - - err := filepath.Walk(runtimeDir, func(src string, f os.FileInfo, err error) error { - if f == nil { - return nil - } - if f.IsDir() || f.Mode()&os.ModeSymlink != 0 { - return nil - } - - dst := filepath.Join(tempDir, hostname, "runtime-security.d", f.Name()) - - if permsInfos != nil { - permsInfos.add(src) + return fb.CopyDirTo(runtimeDir, "runtime-security.d", func(path string) bool { + f, err := os.Lstat(path) + if err != nil { + return false } - - return util.CopyFileAll(src, dst) + return f.Mode()&os.ModeSymlink == 0 }) - - return err } diff --git a/pkg/flare/archive_security_test.go b/pkg/flare/archive_security_test.go index f38ef430b5532..8cdb46c90f936 100644 --- a/pkg/flare/archive_security_test.go +++ b/pkg/flare/archive_security_test.go @@ -9,20 +9,14 @@ package flare import ( - "archive/zip" - "os" - "path/filepath" "testing" - "github.com/stretchr/testify/assert" - "github.com/DataDog/datadog-agent/cmd/agent/common" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/pkg/config" ) func TestCreateSecurityAgentArchive(t *testing.T) { - assert := assert.New(t) - common.SetupConfig("./test") mockConfig := config.Mock(t) mockConfig.Set("compliance_config.dir", "./test/compliance.d") @@ -54,23 +48,11 @@ func TestCreateSecurityAgentArchive(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - zipFilePath, err := CreateSecurityAgentArchive(test.local, logFilePath, nil, nil) - defer os.Remove(zipFilePath) - - assert.NoError(err) - - // asserts that it as indeed created a permissions.log file - z, err := zip.OpenReader(zipFilePath) - assert.NoError(err, "opening the zip shouldn't pop an error") - - var fileNames []string - for _, f := range z.File { - fileNames = append(fileNames, f.Name) - } + mock := flarehelpers.NewFlareBuilderMock(t) + createSecurityAgentArchive(mock.Fb, test.local, logFilePath, nil, nil) - dir := fileNames[0] for _, f := range test.expectedFiles { - assert.Contains(fileNames, filepath.Join(dir, f)) + mock.AssertFileExists(f) } }) } diff --git a/pkg/flare/archive_test.go b/pkg/flare/archive_test.go index 2c927a0f1ab67..612a0c39d6331 100644 --- a/pkg/flare/archive_test.go +++ b/pkg/flare/archive_test.go @@ -6,17 +6,14 @@ package flare import ( - "archive/zip" "encoding/json" "fmt" - "io" - "log" + "net" "net/http" "net/http/httptest" + "net/url" "os" - "path" "path/filepath" - "strings" "testing" "github.com/stretchr/testify/assert" @@ -25,333 +22,84 @@ import ( procmodel "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/cmd/agent/api/response" "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/config/settings" tagger_api "github.com/DataDog/datadog-agent/pkg/tagger/api" "github.com/DataDog/datadog-agent/pkg/workloadmeta" ) -func createTestDirStructure( - t *testing.T, - filename string, -) (string, string, error) { - srcDir := t.TempDir() - dstDir := t.TempDir() - - // create non-empty file in the source directory - file, err := os.Create(filepath.Join(srcDir, filename)) - if err != nil { - return "", "", err - } - - _, err = file.WriteString("mockfilecontent") - if err != nil { - return "", "", err - } - - err = file.Close() - if err != nil { - return "", "", err - } - - return srcDir, dstDir, nil -} - -func TestArchiveName(t *testing.T) { - // test with No log level set - zipFilePath := getArchivePath() - assert.Contains(t, zipFilePath, "Z.zip") - assert.NotContains(t, zipFilePath, "info") - - // init and configure logger at runtime - config.SetupLogger("TEST", "debug", "", "", true, true, true) - ll := settings.LogLevelRuntimeSetting{} - - // set 'trace' level logging - err := ll.Set("trace") - assert.Nil(t, err) - - // Verify the runtime setting is set to 'trace' - v, err := ll.Get() - assert.Equal(t, "trace", v) - assert.Nil(t, err) - - // verify filePath string ends with the correct log_level - zipFilePath = getArchivePath() - assert.Contains(t, zipFilePath, "-trace.zip") - assert.NotContains(t, zipFilePath, "Z.zip") -} - -func TestCreateArchive(t *testing.T) { - common.SetupConfig("./test") - mockConfig := config.Mock(t) - mockConfig.Set("confd_path", "./test/confd") - mockConfig.Set("log_file", "./test/logs/agent.log") - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{}, true, zipFilePath, []string{""}, nil, nil) - - require.Nil(t, err) - require.Equal(t, zipFilePath, filePath) - - if _, err := os.Stat(zipFilePath); os.IsNotExist(err) { - assert.Fail(t, "The Zip File was not created") - } else { - os.Remove(zipFilePath) - } -} - -func TestCreateArchiveAndGoRoutines(t *testing.T) { - contents := "No Goroutines for you, my friend!" +func TestGoRoutines(t *testing.T) { + expected := "No Goroutines for you, my friend!" ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintf(w, "%s", contents) + fmt.Fprintf(w, "%s", expected) })) defer ts.Close() - pprofURL = ts.URL - - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{}, true, zipFilePath, []string{""}, nil, nil) - - require.Nil(t, err) - require.Equal(t, zipFilePath, filePath) - - // Open a zip archive for reading. - z, err := zip.OpenReader(zipFilePath) - if err != nil { - assert.Fail(t, "Unable to open the flare archive") - } - defer z.Close() - defer os.Remove(zipFilePath) - - // Iterate through the files in the archive, - // printing some of their contents. - found := false - for _, f := range z.File { - // find go-routine dump. - if path.Base(f.Name) == routineDumpFilename { - found = true - - dump, err := f.Open() - if err != nil { - assert.Fail(t, "Unable to open go-routine dump") - } - defer dump.Close() - - routines, err := io.ReadAll(dump) - if err != nil { - assert.Fail(t, "Unable to read go-routine dump") - } - - assert.Equal(t, contents, string(routines[:])) - } - } - - assert.True(t, found, "Go routine dump not found in flare") -} - -// The zipfile should be created even if there is no config file. -func TestCreateArchiveBadConfig(t *testing.T) { - common.SetupConfig("") - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{}, true, zipFilePath, []string{""}, nil, nil) - - require.Nil(t, err) - require.Equal(t, zipFilePath, filePath) - - if _, err := os.Stat(zipFilePath); os.IsNotExist(err) { - assert.Fail(t, "The Zip File was not created") - } else { - os.Remove(zipFilePath) - } -} - -// Ensure sensitive data is redacted -func TestZipConfigCheck(t *testing.T) { - cr := response.ConfigCheckResponse{ - Configs: make([]integration.Config, 0), - } - cr.Configs = append(cr.Configs, integration.Config{ - Name: "TestCheck", - Instances: []integration.Data{[]byte("username: User\npassword: MySecurePass")}, - Provider: "FooProvider", - }) - - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - out, _ := json.Marshal(cr) - w.Write(out) - })) - defer ts.Close() - configCheckURL = ts.URL - - dir := t.TempDir() - - zipConfigCheck(dir, "") - content, err := os.ReadFile(filepath.Join(dir, "config-check.log")) - if err != nil { - log.Fatal(err) - } - - assert.NotContains(t, string(content), "MySecurePass") + content, err := getHTTPCallContent(ts.URL) + require.NoError(t, err) + assert.Equal(t, expected, string(content)) } func TestIncludeSystemProbeConfig(t *testing.T) { - assert := assert.New(t) common.SetupConfig("./test/datadog-agent.yaml") // create system-probe.yaml file because it's in .gitignore _, err := os.Create("./test/system-probe.yaml") - assert.NoError(err, "couldn't create system-probe.yaml") + require.NoError(t, err, "couldn't create system-probe.yaml") defer os.Remove("./test/system-probe.yaml") - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{"": "./test/confd"}, true, zipFilePath, []string{""}, nil, nil) - assert.NoError(err) - assert.Equal(zipFilePath, filePath) - - defer os.Remove(zipFilePath) + mock := flarehelpers.NewFlareBuilderMock(t) + getConfigFiles(mock.Fb, SearchPaths{"": "./test/confd"}) - z, err := zip.OpenReader(zipFilePath) - assert.NoError(err, "opening the zip shouldn't pop an error") - - var hasDDConfig, hasSysProbeConfig bool - for _, f := range z.File { - if strings.HasSuffix(f.Name, "datadog-agent.yaml") { - hasDDConfig = true - } - if strings.HasSuffix(f.Name, "system-probe.yaml") { - hasSysProbeConfig = true - } - } - - assert.True(hasDDConfig, "datadog-agent.yaml should've been included") - assert.True(hasSysProbeConfig, "system-probe.yaml should've been included") + mock.AssertFileExists("etc", "datadog-agent.yaml") + mock.AssertFileExists("etc", "system-probe.yaml") } func TestIncludeConfigFiles(t *testing.T) { - assert := assert.New(t) - common.SetupConfig("./test") - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{"": "./test/confd"}, true, zipFilePath, []string{""}, nil, nil) - - assert.NoError(err) - assert.Equal(zipFilePath, filePath) - - if _, err := os.Stat(zipFilePath); os.IsNotExist(err) { - assert.Fail("The Zip File was not created") - } - defer os.Remove(zipFilePath) + mock := flarehelpers.NewFlareBuilderMock(t) + getConfigFiles(mock.Fb, SearchPaths{"": "./test/confd"}) - // asserts that test.yaml and test.yml have been included - z, err := zip.OpenReader(zipFilePath) - assert.NoError(err, "opening the zip shouldn't pop an error") - - yaml, yml := false, false - for _, f := range z.File { - if strings.HasSuffix(f.Name, "test.yaml") { - yaml = true - } else if strings.HasSuffix(f.Name, "test.Yml") { - yml = true - } else if strings.HasSuffix(f.Name, "not_included.conf") { - assert.Fail("not_included.conf should not been included into the flare") - } - } - - assert.True(yml, "test.yml should've been included") - assert.True(yaml, "test.yaml should've been included") + mock.AssertFileExists("test.yaml") + mock.AssertFileExists("test.Yml") + mock.AssertNoFileExists("not_included.conf") } -func TestCleanDirectoryName(t *testing.T) { - insaneHostname := ` - - - - 404 - File or directory not found. - - - - -
-
-

404 - File or directory not found.

-

The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.

-
-
- - ` - - cleanedHostname := cleanDirectoryName(insaneHostname) - - assert.Len(t, cleanedHostname, directoryNameMaxSize) - assert.True(t, !directoryNameFilter.MatchString(cleanedHostname)) +func createTestFile(t *testing.T, filename string) string { + path := filepath.Join(t.TempDir(), filename) + require.NoError(t, os.WriteFile(path, []byte("mockfilecontent"), os.ModePerm)) + return path } -func TestZipLogFiles(t *testing.T) { - srcDir := t.TempDir() - dstDir := t.TempDir() +func TestRegistryJSON(t *testing.T) { + srcDir := createTestFile(t, "registry.json") - var err error - f, err := os.Create(filepath.Join(srcDir, "agent.log")) - require.NoError(t, err) - require.NoError(t, f.Close()) - - f, err = os.Create(filepath.Join(srcDir, "trace-agent.log")) - require.NoError(t, err) - require.NoError(t, f.Close()) + confMock := config.Mock(t) + confMock.Set("logs_config.run_path", srcDir) - err = os.Mkdir(filepath.Join(srcDir, "archive"), 0o700) - require.NoError(t, err) - - f, err = os.Create(filepath.Join(srcDir, "archive", "agent.log")) - require.NoError(t, err) - require.NoError(t, f.Close()) - - permsInfos := make(permissionsInfos) - - err = zipLogFiles(dstDir, "test", filepath.Join(srcDir, "agent.log"), permsInfos) - require.NoError(t, err) + mock := flarehelpers.NewFlareBuilderMock(t) + getRegistryJSON(mock.Fb) - // Check all the log files are in the destination path, at the right subdirectories - _, err = os.Stat(filepath.Join(dstDir, "test", "logs", "agent.log")) - assert.NoError(t, err) - _, err = os.Stat(filepath.Join(dstDir, "test", "logs", "trace-agent.log")) - assert.NoError(t, err) - _, err = os.Stat(filepath.Join(dstDir, "test", "logs", "archive", "agent.log")) - assert.NoError(t, err) + mock.AssertFileContent("mockfilecontent", "registry.json") } -func TestZipRegistryJSON(t *testing.T) { - srcDir, dstDir, err := createTestDirStructure(t, "registry.json") +func setupIPCAddress(t *testing.T, URL string) *config.MockConfig { + u, err := url.Parse(URL) require.NoError(t, err) - - tempRunPath := config.Datadog.GetString("logs_config.run_path") - config.Datadog.Set("logs_config.run_path", srcDir) - defer config.Datadog.Set("logs_config.run_path", tempRunPath) - - err = zipRegistryJSON(dstDir, "test") + host, port, err := net.SplitHostPort(u.Host) require.NoError(t, err) - targetPath := filepath.Join(dstDir, "test", "registry.json") - actualContent, err := os.ReadFile(targetPath) - require.NoError(t, err) - require.Equal(t, "mockfilecontent", string(actualContent)) + confMock := config.Mock(t) + confMock.Set("ipc_address", host) + confMock.Set("cmd_port", port) + confMock.Set("process_config.cmd_port", port) + + return confMock } -func TestZipTaggerList(t *testing.T) { +func TestGetAgentTaggerList(t *testing.T) { tagMap := make(map[string]tagger_api.TaggerListEntity) tagMap["random_entity_name"] = tagger_api.TaggerListEntity{ Tags: map[string][]string{ @@ -368,14 +116,10 @@ func TestZipTaggerList(t *testing.T) { })) defer s.Close() - dir := t.TempDir() + setupIPCAddress(t, s.URL) - taggerListURL = s.URL - zipAgentTaggerList(dir, "") - content, err := os.ReadFile(filepath.Join(dir, "tagger-list.json")) - if err != nil { - log.Fatal(err) - } + content, err := getAgentTaggerList() + require.NoError(t, err) assert.Contains(t, string(content), "random_entity_name") assert.Contains(t, string(content), "docker_source_name") @@ -383,7 +127,7 @@ func TestZipTaggerList(t *testing.T) { assert.Contains(t, string(content), "image_name:custom-agent") } -func TestZipWorkloadList(t *testing.T) { +func TestGetWorkloadList(t *testing.T) { workloadMap := make(map[string]workloadmeta.WorkloadEntity) workloadMap["kind_id"] = workloadmeta.WorkloadEntity{ Infos: map[string]string{ @@ -401,14 +145,10 @@ func TestZipWorkloadList(t *testing.T) { })) defer s.Close() - dir := t.TempDir() + setupIPCAddress(t, s.URL) - workloadListURL = s.URL - zipWorkloadList(dir, "") - content, err := os.ReadFile(filepath.Join(dir, "workload-list.log")) - if err != nil { - log.Fatal(err) - } + content, err := getWorkloadList() + require.NoError(t, err) assert.Contains(t, string(content), "kind_id") assert.Contains(t, string(content), "container_id_1") @@ -419,100 +159,31 @@ func TestZipWorkloadList(t *testing.T) { func TestPerformanceProfile(t *testing.T) { testProfile := ProfileData{ - "first": []byte{}, - "second": []byte{}, - "third": []byte{}, - } - zipFilePath := getArchivePath() - filePath, err := createArchive(SearchPaths{}, true, zipFilePath, []string{""}, testProfile, nil) - - require.NoError(t, err) - require.Equal(t, zipFilePath, filePath) - - // Open a zip archive for reading. - z, err := zip.OpenReader(zipFilePath) - if err != nil { - assert.Fail(t, "Unable to open the flare archive") - } - defer z.Close() - defer os.Remove(zipFilePath) - - firstHeap, secondHeap, cpu := false, false, false - for _, f := range z.File { - switch path.Base(f.Name) { - case "first": - firstHeap = true - case "second": - secondHeap = true - case "third": - cpu = true - } + "first": []byte("data1"), + "second": []byte("data2"), + "third": []byte("data3"), } + mock := flarehelpers.NewFlareBuilderMock(t) + getPerformanceProfile(mock.Fb, testProfile) - assert.True(t, firstHeap, "first-heap.profile should've been included") - assert.True(t, secondHeap, "second-heap.profile should've been included") - assert.True(t, cpu, "cpu.profile should've been included") -} - -// Test that writeScrubbedFile actually scrubs third-party API keys. -func TestRedactingOtherServicesApiKey(t *testing.T) { - dir := t.TempDir() - filename := path.Join(dir, "test.config") - - clear := `init_config: -instances: -- host: 127.0.0.1 - api_key: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - port: 8082 - api_key: dGhpc2++lzM+XBhc3N3b3JkW113aXRo/c29tZWN]oYXJzMTIzCg== - version: 4 # omit this line if you're running pdns_recursor version 3.x` - redacted := `init_config: -instances: -- host: 127.0.0.1 - api_key: "***************************aaaaa" - port: 8082 - api_key: "********" - version: 4 # omit this line if you're running pdns_recursor version 3.x` - - err := writeScrubbedFile(filename, []byte(clear)) - require.NoError(t, err) - - got, err := os.ReadFile(filename) - require.NoError(t, err) - assert.Equal(t, redacted, string(got)) -} - -func TestZipFile(t *testing.T) { - srcDir, dstDir, err := createTestDirStructure(t, "test.json") - require.NoError(t, err) - - err = zipFile(srcDir, dstDir, "test.json") - require.NoError(t, err) - - targetPath := filepath.Join(dstDir, "test.json") - actualContent, err := os.ReadFile(targetPath) - require.NoError(t, err) - require.Equal(t, "mockfilecontent", string(actualContent)) + mock.AssertFileContent("data1", "profiles", "first") + mock.AssertFileContent("data2", "profiles", "second") + mock.AssertFileContent("data3", "profiles", "third") } -func TestZipVersionHistory(t *testing.T) { - srcDir, dstDir, err := createTestDirStructure(t, "version-history.json") - require.NoError(t, err) +func TestVersionHistory(t *testing.T) { + srcDir := createTestFile(t, "version-history.json") - tempRunPath := config.Datadog.GetString("run_path") - config.Datadog.Set("run_path", srcDir) - defer config.Datadog.Set("run_path", tempRunPath) + confMock := config.Mock(t) + confMock.Set("run_path", srcDir) - err = zipVersionHistory(dstDir, "test") - require.NoError(t, err) + mock := flarehelpers.NewFlareBuilderMock(t) + getVersionHistory(mock.Fb) - targetPath := filepath.Join(dstDir, "test", "version-history.json") - actualContent, err := os.ReadFile(targetPath) - require.NoError(t, err) - require.Equal(t, "mockfilecontent", string(actualContent)) + mock.AssertFileContent("mockfilecontent", "version-history.json") } -func TestZipProcessAgentFullConfig(t *testing.T) { +func TestProcessAgentFullConfig(t *testing.T) { type ProcessConfig struct { Enabled string `yaml:"enabled"` } @@ -529,18 +200,16 @@ func TestZipProcessAgentFullConfig(t *testing.T) { }, } - exp := `api_key: "***************************aaaaa" + exp := `api_key: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa dd_url: https://my-url.com process_config: - enabled: "true"` + enabled: "true" +` t.Run("without process-agent running", func(t *testing.T) { - dir := t.TempDir() - - zipProcessAgentFullConfig(dir, "") - content, err := os.ReadFile(filepath.Join(dir, "process_agent_runtime_config_dump.yaml")) + content, err := getProcessAgentFullConfig() require.NoError(t, err) - assert.Equal(t, "error: process-agent is not running or is unreachable", string(content)) + assert.Equal(t, "error: process-agent is not running or is unreachable\n", string(content)) }) t.Run("with process-agent running", func(t *testing.T) { @@ -556,17 +225,15 @@ process_config: srv := httptest.NewServer(http.HandlerFunc(handler)) defer srv.Close() - dir := t.TempDir() + setupIPCAddress(t, srv.URL) - procStatusURL = srv.URL - zipProcessAgentFullConfig(dir, "") - content, err := os.ReadFile(filepath.Join(dir, "process_agent_runtime_config_dump.yaml")) + content, err := getProcessAgentFullConfig() require.NoError(t, err) assert.Equal(t, exp, string(content)) }) } -func TestZipProcessAgentChecks(t *testing.T) { +func TestProcessAgentChecks(t *testing.T) { expectedProcesses := []procmodel.MessageBody{ &procmodel.CollectorProc{ Processes: []*procmodel.Process{ @@ -604,15 +271,10 @@ func TestZipProcessAgentChecks(t *testing.T) { require.NoError(t, err) t.Run("without process-agent running", func(t *testing.T) { - dir := t.TempDir() - fmt.Println(dir) + mock := flarehelpers.NewFlareBuilderMock(t) + getProcessChecks(mock.Fb, func() (string, error) { return "fake:1337", nil }) - err = zipProcessChecks(dir, "", func() (string, error) { return "fake:1337", nil }) - require.NoError(t, err) - - content, err := os.ReadFile(filepath.Join(dir, "process_check_output.json")) - require.NoError(t, err) - assert.True(t, strings.HasPrefix(string(content), "error: process-agent is not running or is unreachable")) + mock.AssertFileContentMatch("error: process-agent is not running or is unreachable: error collecting data from callback for 'process_discovery_check_output.json': .*", "process_check_output.json") }) t.Run("with process-agent running", func(t *testing.T) { cfg := config.Mock(t) @@ -638,21 +300,13 @@ func TestZipProcessAgentChecks(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(handler)) defer srv.Close() - dir := t.TempDir() + setupIPCAddress(t, srv.URL) - err = zipProcessChecks(dir, "", func() (string, error) { return strings.TrimPrefix(srv.URL, "http://"), nil }) - require.NoError(t, err) - - content, err := os.ReadFile(filepath.Join(dir, "process_check_output.json")) - require.NoError(t, err) - assert.Equal(t, expectedProcessesJSON, content) + mock := flarehelpers.NewFlareBuilderMock(t) + getProcessChecks(mock.Fb, config.GetProcessAPIAddressPort) - content, err = os.ReadFile(filepath.Join(dir, "container_check_output.json")) - require.NoError(t, err) - assert.Equal(t, expectedContainersJSON, content) - - content, err = os.ReadFile(filepath.Join(dir, "process_discovery_check_output.json")) - require.NoError(t, err) - assert.Equal(t, expectedProcessDiscoveryJSON, content) + mock.AssertFileContent(string(expectedProcessesJSON), "process_check_output.json") + mock.AssertFileContent(string(expectedContainersJSON), "container_check_output.json") + mock.AssertFileContent(string(expectedProcessDiscoveryJSON), "process_discovery_check_output.json") }) } diff --git a/pkg/flare/archive_win.go b/pkg/flare/archive_win.go index b7ae2820d04e5..7933a72cfea84 100644 --- a/pkg/flare/archive_win.go +++ b/pkg/flare/archive_win.go @@ -20,6 +20,7 @@ import ( "golang.org/x/sys/windows" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/winutil" ) @@ -40,62 +41,47 @@ const ( evtExportLogChannelPath uint32 = 0x1 ) -func zipCounterStrings(tempDir, hostname string) error { - bufferIncrement := uint32(1024) - bufferSize := bufferIncrement - var counterlist []uint16 - for { - var regtype uint32 - counterlist = make([]uint16, bufferSize) - var sz uint32 - sz = bufferSize - regerr := windows.RegQueryValueEx(windows.HKEY_PERFORMANCE_DATA, - windows.StringToUTF16Ptr("Counter 009"), - nil, // reserved - ®type, - (*byte)(unsafe.Pointer(&counterlist[0])), - &sz) - if regerr == error(windows.ERROR_MORE_DATA) { - // buffer's not big enough - bufferSize += bufferIncrement - continue - } - // must set the length of the slice to the actual amount of data - // sz is in bytes, but it's a slice of uint16s, so divide the returned - // buffer size by two. - counterlist = counterlist[:(sz / 2)] - break - } - clist := winutil.ConvertWindowsStringList(counterlist) - fname := filepath.Join(tempDir, hostname, "counter_strings.txt") - err := ensureParentDirsExist(fname) - if err != nil { - return err - } - f, err := os.Create(fname) - if err != nil { - return err - } - defer f.Close() - for i := 0; i < len(clist); i++ { - _, err = f.WriteString(clist[i]) - if err != nil { - return err - } - _, err = f.WriteString("\r\n") - if err != nil { - return err - } - } - err = f.Sync() - if err != nil { - return err - } - return nil - +func getCounterStrings(fb flarehelpers.FlareBuilder) error { + return fb.AddFileFromFunc("counter_strings.txt", + func() ([]byte, error) { + bufferIncrement := uint32(1024) + bufferSize := bufferIncrement + var counterlist []uint16 + for { + var regtype uint32 + counterlist = make([]uint16, bufferSize) + var sz uint32 + sz = bufferSize + regerr := windows.RegQueryValueEx(windows.HKEY_PERFORMANCE_DATA, + windows.StringToUTF16Ptr("Counter 009"), + nil, // reserved + ®type, + (*byte)(unsafe.Pointer(&counterlist[0])), + &sz) + if regerr == error(windows.ERROR_MORE_DATA) { + // buffer's not big enough + bufferSize += bufferIncrement + continue + } + // must set the length of the slice to the actual amount of data + // sz is in bytes, but it's a slice of uint16s, so divide the returned + // buffer size by two. + counterlist = counterlist[:(sz / 2)] + break + } + clist := winutil.ConvertWindowsStringList(counterlist) + + f := &bytes.Buffer{} + for i := 0; i < len(clist); i++ { + f.Write([]byte(clist[i])) //nolint:errcheck + f.Write([]byte("\r\n")) //nolint:errcheck + } + return f.Bytes(), nil + }, + ) } -func zipTypeperfData(tempDir, hostname string) error { +func getTypeperfData(fb flarehelpers.FlareBuilder) error { cancelctx, cancelfunc := context.WithTimeout(context.Background(), execTimeout) defer cancelfunc() @@ -105,21 +91,13 @@ func zipTypeperfData(tempDir, hostname string) error { cmd.Stdout = &out err := cmd.Run() if err != nil { - return err - } - f := filepath.Join(tempDir, hostname, "typeperf.txt") - err = ensureParentDirsExist(f) - if err != nil { - return err + log.Errorf("Could not write typeperf data: %s", err) } - err = os.WriteFile(f, out.Bytes(), os.ModePerm) - if err != nil { - return err - } - return nil + return fb.AddFile("typeperf.txt", out.Bytes()) } -func zipLodctrOutput(tempDir, hostname string) error { + +func getLodctrOutput(fb flarehelpers.FlareBuilder) error { cancelctx, cancelfunc := context.WithTimeout(context.Background(), execTimeout) defer cancelfunc() @@ -134,23 +112,12 @@ func zipLodctrOutput(tempDir, hostname string) error { // it succeeds. Log the error in case it's some other error, // but continue on. } - f := filepath.Join(tempDir, hostname, "lodctr.txt") - err = ensureParentDirsExist(f) - if err != nil { - log.Warnf("Error in ensureParentDirsExist %v", err) - return err - } - err = os.WriteFile(f, out.Bytes(), os.ModePerm) - if err != nil { - log.Warnf("Error writing file %v", err) - return err - } - return nil + return fb.AddFile("lodctr.txt", out.Bytes()) } -// zipWindowsEventLogs exports Windows event logs. -func zipWindowsEventLogs(tempDir, hostname string) error { +// getWindowsEventLogs exports Windows event logs. +func getWindowsEventLogs(fb flarehelpers.FlareBuilder) error { var err error for eventLogChannel := range eventLogChannelsToExport { @@ -159,11 +126,10 @@ func zipWindowsEventLogs(tempDir, hostname string) error { // Export one event log file to the temporary location. errExport := exportWindowsEventLog( + fb, eventLogChannel, eventLogQuery, - eventLogFileName, - tempDir, - hostname) + eventLogFileName) if errExport != nil { log.Warnf("could not export event log %v, error: %v", eventLogChannel, errExport) @@ -171,16 +137,14 @@ func zipWindowsEventLogs(tempDir, hostname string) error { } } - return err + return log.Errorf("Could not export Windows event logs: %s", err) } // exportWindowsEventLog exports one event log file to the temporary location. // destFileName might contain a path. -func exportWindowsEventLog(eventLogChannel, eventLogQuery, destFileName, tempDir, hostname string) error { +func exportWindowsEventLog(fb flarehelpers.FlareBuilder, eventLogChannel, eventLogQuery, destFileName string) error { // Put all event logs under "eventlog" folder - destFullFileName := filepath.Join(tempDir, hostname, "eventlog", destFileName) - - err := ensureParentDirsExist(destFullFileName) + destFullFileName, err := fb.PrepareFilePath(filepath.Join("eventlog", destFileName)) if err != nil { log.Warnf("cannot create folder for %s: %v", destFullFileName, err) return err @@ -213,69 +177,55 @@ func exportWindowsEventLog(eventLogChannel, eventLogQuery, destFileName, tempDir return err } -type filePermsInfo struct{} - -func (p permissionsInfos) add(filePath string) {} -func (p permissionsInfos) commit(tempDir, hostname string, mode os.FileMode) error { - return nil +func getServiceStatus(fb flarehelpers.FlareBuilder) error { + return fb.AddFileFromFunc( + "servicestatus.txt", + func() ([]byte, error) { + cancelctx, cancelfunc := context.WithTimeout(context.Background(), execTimeout) + defer cancelfunc() + + cmd := exec.CommandContext(cancelctx, "powershell", "-c", "get-service", "data*,ddnpm", "|", "fl") + + var out bytes.Buffer + cmd.Stdout = &out + err := cmd.Run() + if err != nil { + log.Warnf("Error running powershell command %v", err) + // for some reason the lodctr command returns error 259 even when + // it succeeds. Log the error in case it's some other error, + // but continue on. + } + + f := &bytes.Buffer{} + _, err = f.Write(out.Bytes()) + if err != nil { + log.Warnf("Error writing file %v", err) + return nil, err + } + // compute the location of the driver + ddroot, err := winutil.GetProgramFilesDirForProduct("DataDog Agent") + if err == nil { + pathtodriver := filepath.Join(ddroot, "bin", "agent", "driver", "ddnpm.sys") + fi, err := os.Stat(pathtodriver) + if err != nil { + f.Write([]byte(fmt.Sprintf("Failed to stat file %v %v\n", pathtodriver, err))) //nolint:errcheck + } else { + f.Write([]byte(fmt.Sprintf("Driver last modification time : %v\n", fi.ModTime().Format(time.UnixDate)))) //nolint:errcheck + } + } else { + return nil, fmt.Errorf("Error getting path to datadog agent binaries %v", err) + } + return f.Bytes(), nil + }) } -func zipServiceStatus(tempDir, hostname string) error { - f := filepath.Join(tempDir, hostname, "servicestatus.txt") - err := ensureParentDirsExist(f) - if err != nil { - return fmt.Errorf("Error in ensureParentDirsExist %v", err) - } - - fh, err := os.Create(f) - if err != nil { - return fmt.Errorf("Error creating temp file %s %v", f, err) - } - defer fh.Close() - cancelctx, cancelfunc := context.WithTimeout(context.Background(), execTimeout) - defer cancelfunc() - - cmd := exec.CommandContext(cancelctx, "powershell", "-c", "get-service", "data*,ddnpm", "|", "fl") - - var out bytes.Buffer - cmd.Stdout = &out - err = cmd.Run() - if err != nil { - log.Warnf("Error running powershell command %v", err) - // for some reason the lodctr command returns error 259 even when - // it succeeds. Log the error in case it's some other error, - // but continue on. - } - - _, err = fh.Write(out.Bytes()) - if err != nil { - log.Warnf("Error writing file %v", err) - return err - } - // compute the location of the driver - ddroot, err := winutil.GetProgramFilesDirForProduct("DataDog Agent") - if err == nil { - pathtodriver := filepath.Join(ddroot, "bin", "agent", "driver", "ddnpm.sys") - fi, err := os.Stat(pathtodriver) - if err != nil { - _, _ = fh.WriteString(fmt.Sprintf("Failed to stat file %v %v\n", pathtodriver, err)) - } else { - _, _ = fh.WriteString(fmt.Sprintf("Driver last modification time : %v\n", fi.ModTime().Format(time.UnixDate))) - } - } else { - return fmt.Errorf("Error getting path to datadog agent binaries %v", err) - } - return nil -} - -// zipDatadogRegistry function saves all Datadog registry keys and values from HKLM\Software\Datadog. +// getDatadogRegistry function saves all Datadog registry keys and values from HKLM\Software\Datadog. // The implementation is based on the invoking Windows built-in reg.exe command, which does all // heavy lifting (instead of relying on explicit and recursive Registry API calls). // More technical details can be found in the PR https://github.com/DataDog/datadog-agent/pull/11290 -func zipDatadogRegistry(tempDir, hostname string) error { +func getDatadogRegistry(fb flarehelpers.FlareBuilder) error { // Generate raw exported registry file which we will scrub just in case - rawf := filepath.Join(tempDir, hostname, "datadog-raw.reg") - err := ensureParentDirsExist(rawf) + rawf, err := fb.PrepareFilePath("datadog-raw.reg") if err != nil { return fmt.Errorf("Error in ensureParentDirsExist %v", err) } @@ -300,12 +250,14 @@ func zipDatadogRegistry(tempDir, hostname string) error { return err } - // ... scrub it and write it back - f := filepath.Join(tempDir, hostname, "datadog.reg") - err = writeScrubbedFile(f, data) - if err != nil { - return err - } + return fb.AddFile("datadog.reg", data) +} - return nil +func getWindowsData(fb flarehelpers.FlareBuilder) { + getTypeperfData(fb) //nolint:errcheck + getLodctrOutput(fb) //nolint:errcheck + getCounterStrings(fb) //nolint:errcheck + getWindowsEventLogs(fb) //nolint:errcheck + getServiceStatus(fb) //nolint:errcheck + getDatadogRegistry(fb) //nolint:errcheck } diff --git a/pkg/flare/archive_win_test.go b/pkg/flare/archive_win_test.go deleted file mode 100644 index b2813ed15cfc8..0000000000000 --- a/pkg/flare/archive_win_test.go +++ /dev/null @@ -1,52 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build windows -// +build windows - -package flare - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -// Test that addParentPerms does not loop on Windows. -func TestAddParentPermsWindows(t *testing.T) { - assert := assert.New(t) - - permsInfos := make(permissionsInfos) - expectedParentPerms := map[string]filePermsInfo{} - - // Basic Case - path := "C:\\a\\b\\c\\d" - addParentPerms(path, permsInfos) - assert.EqualValues(expectedParentPerms, permsInfos) - - // Empty Case - path = "" - addParentPerms(path, permsInfos) - assert.EqualValues(expectedParentPerms, permsInfos) - - // Only root - permsInfos = make(permissionsInfos) - path = "C:\\" - addParentPerms(path, permsInfos) - assert.EqualValues(expectedParentPerms, permsInfos) - - // Space in path - permsInfos = make(permissionsInfos) - path = "D:\\a b\\c" - addParentPerms(path, permsInfos) - assert.EqualValues(expectedParentPerms, permsInfos) - - // Dot in path - permsInfos = make(permissionsInfos) - path = "E:\\a.b\\c" - addParentPerms(path, permsInfos) - assert.EqualValues(expectedParentPerms, permsInfos) - -} diff --git a/pkg/flare/config_check.go b/pkg/flare/config_check.go index 7624b9f8b3bf2..14403694fc84f 100644 --- a/pkg/flare/config_check.go +++ b/pkg/flare/config_check.go @@ -103,6 +103,7 @@ func PrintConfig(w io.Writer, c integration.Config, checkName string) { if checkName != "" && c.Name != checkName { return } + configDigest := c.FastDigest() if !c.ClusterCheck { fmt.Fprintln(w, fmt.Sprintf("\n=== %s check ===", color.GreenString(c.Name))) } else { @@ -120,7 +121,7 @@ func PrintConfig(w io.Writer, c integration.Config, checkName string) { fmt.Fprintln(w, fmt.Sprintf("%s: %s", color.BlueString("Configuration source"), color.RedString("Unknown configuration source"))) } for _, inst := range c.Instances { - ID := string(check.BuildID(c.Name, inst, c.InitConfig)) + ID := string(check.BuildID(c.Name, configDigest, inst, c.InitConfig)) fmt.Fprintln(w, fmt.Sprintf("%s: %s", color.BlueString("Instance ID"), color.CyanString(ID))) fmt.Fprint(w, fmt.Sprintf("%s", inst)) fmt.Fprintln(w, "~") diff --git a/pkg/flare/dca_telemetry.go b/pkg/flare/dca_telemetry.go deleted file mode 100644 index 062c5308c7387..0000000000000 --- a/pkg/flare/dca_telemetry.go +++ /dev/null @@ -1,24 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package flare - -import ( - "fmt" - "io" - "net/http" - - "github.com/DataDog/datadog-agent/pkg/config" -) - -// QueryDCAMetrics gets the metrics payload exposed by the cluster agent -func QueryDCAMetrics() ([]byte, error) { - r, err := http.Get(fmt.Sprintf("http://localhost:%d/metrics", config.Datadog.GetInt("metrics_port"))) - if err != nil { - return nil, err - } - defer r.Body.Close() - return io.ReadAll(r.Body) -} diff --git a/pkg/flare/envvars.go b/pkg/flare/envvars.go index 0b3412e0f72d0..13f56c79f5909 100644 --- a/pkg/flare/envvars.go +++ b/pkg/flare/envvars.go @@ -9,7 +9,6 @@ import ( "bytes" "fmt" "os" - "path/filepath" "strings" "github.com/DataDog/datadog-agent/pkg/config" @@ -77,8 +76,6 @@ var allowedEnvvarNames = []string{ "DD_CUSTOM_SENSITIVE_WORDS", "DD_STRIP_PROCESS_ARGS", "DD_LOGS_STDOUT", - "DD_AGENT_PY", - "DD_AGENT_PY_ENV", "LOG_LEVEL", "LOG_TO_CONSOLE", "DD_COLLECT_DOCKER_NETWORK", @@ -116,9 +113,9 @@ func getAllowedEnvvars() []string { return found } -// zipEnvvars collects allowed envvars that can affect the agent's +// getEnvVars collects allowed envvars that can affect the agent's // behaviour while not being handled by viper, in addition to the envvars handled by viper -func zipEnvvars(tempDir, hostname string) error { +func getEnvVars() ([]byte, error) { envvars := getAllowedEnvvars() var b bytes.Buffer @@ -131,6 +128,5 @@ func zipEnvvars(tempDir, hostname string) error { fmt.Fprintln(&b, "Found no allowed envvar") } - f := filepath.Join(tempDir, hostname, "envvars.log") - return writeScrubbedFile(f, b.Bytes()) + return b.Bytes(), nil } diff --git a/pkg/flare/metadata.go b/pkg/flare/metadata.go deleted file mode 100644 index 9cdad77e954eb..0000000000000 --- a/pkg/flare/metadata.go +++ /dev/null @@ -1,43 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package flare - -import ( - "context" - "encoding/json" - "path/filepath" - - "github.com/DataDog/datadog-agent/pkg/metadata/inventories" - v5 "github.com/DataDog/datadog-agent/pkg/metadata/v5" - host "github.com/DataDog/datadog-agent/pkg/util/hostname" -) - -func addMetadata(tempDir, hostname, filename string, data []byte) error { - f := filepath.Join(tempDir, hostname, filename) - return writeScrubbedFile(f, data) -} - -func zipMetadataInventories(tempDir, hostname string) error { - payload, err := inventories.GetLastPayload() - if err != nil { - return err - } - - return addMetadata(tempDir, hostname, "metadata_inventories.json", payload) -} - -func zipMetadataV5(tempDir, hostname string) error { - ctx := context.Background() - hostnameData, _ := host.GetWithProvider(ctx) - payload := v5.GetPayload(ctx, hostnameData) - - data, err := json.MarshalIndent(payload, "", " ") - if err != nil { - return err - } - - return addMetadata(tempDir, hostname, "metadata_v5.json", data) -} diff --git a/pkg/flare/remote_config.go b/pkg/flare/remote_config.go index b62e7783b8d51..b13801e8d680c 100644 --- a/pkg/flare/remote_config.go +++ b/pkg/flare/remote_config.go @@ -12,6 +12,7 @@ import ( "path/filepath" "strings" + flarehelpers "github.com/DataDog/datadog-agent/comp/core/flare/helpers" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util" "go.etcd.io/bbolt" @@ -25,9 +26,9 @@ func hashRCTargets(raw []byte) []byte { return []byte(s) } -func zipRemoteConfigDB(tempDir, hostname string) error { - dstPath := filepath.Join(tempDir, hostname, "remote-config.db") - tempPath := filepath.Join(tempDir, hostname, "remote-config.temp.db") +func getRemoteConfigDB(fb flarehelpers.FlareBuilder) error { + dstPath, _ := fb.PrepareFilePath("remote-config.db") + tempPath, _ := fb.PrepareFilePath("remote-config.temp.db") srcPath := filepath.Join(config.Datadog.GetString("run_path"), "remote-config.db") // Copies the db so it avoids bbolt from being locked diff --git a/pkg/forwarder/forwarder.go b/pkg/forwarder/forwarder.go index b9b3a8e4205b0..c46ed28a1973d 100644 --- a/pkg/forwarder/forwarder.go +++ b/pkg/forwarder/forwarder.go @@ -420,11 +420,11 @@ func (f *DefaultForwarder) State() uint32 { return f.internalState.Load() } -func (f *DefaultForwarder) createHTTPTransactions(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header) []*transaction.HTTPTransaction { - return f.createAdvancedHTTPTransactions(endpoint, payloads, apiKeyInQueryString, extra, transaction.TransactionPriorityNormal, true) +func (f *DefaultForwarder) createHTTPTransactions(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, extra http.Header) []*transaction.HTTPTransaction { + return f.createAdvancedHTTPTransactions(endpoint, payloads, extra, transaction.TransactionPriorityNormal, true) } -func (f *DefaultForwarder) createAdvancedHTTPTransactions(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header, priority transaction.Priority, storableOnDisk bool) []*transaction.HTTPTransaction { +func (f *DefaultForwarder) createAdvancedHTTPTransactions(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, extra http.Header, priority transaction.Priority, storableOnDisk bool) []*transaction.HTTPTransaction { transactions := make([]*transaction.HTTPTransaction, 0, len(payloads)*len(f.domainForwarders)) allowArbitraryTags := config.Datadog.GetBool("allow_arbitrary_tags") @@ -434,9 +434,6 @@ func (f *DefaultForwarder) createAdvancedHTTPTransactions(endpoint transaction.E t := transaction.NewHTTPTransaction() t.Domain, _ = dr.Resolve(endpoint) t.Endpoint = endpoint - if apiKeyInQueryString { - t.Endpoint.Route = fmt.Sprintf("%s?api_key=%s", endpoint.Route, apiKey) - } t.Payload = payload t.Priority = priority t.StorableOnDisk = storableOnDisk @@ -514,53 +511,53 @@ func (f *DefaultForwarder) sendHTTPTransactions(transactions []*transaction.HTTP // SubmitSketchSeries will send payloads to Datadog backend - PROTOTYPE FOR PERCENTILE func (f *DefaultForwarder) SubmitSketchSeries(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.SketchSeriesEndpoint, payload, false, extra) + transactions := f.createHTTPTransactions(endpoints.SketchSeriesEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitHostMetadata will send a host_metadata tag type payload to Datadog backend. func (f *DefaultForwarder) SubmitHostMetadata(payload transaction.BytesPayloads, extra http.Header) error { return f.submitV1IntakeWithTransactionsFactory(payload, extra, - func(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header) []*transaction.HTTPTransaction { + func(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, extra http.Header) []*transaction.HTTPTransaction { // Host metadata contains the API KEY and should not be stored on disk. storableOnDisk := false - return f.createAdvancedHTTPTransactions(endpoint, payloads, apiKeyInQueryString, extra, transaction.TransactionPriorityHigh, storableOnDisk) + return f.createAdvancedHTTPTransactions(endpoint, payloads, extra, transaction.TransactionPriorityHigh, storableOnDisk) }) } // SubmitAgentChecksMetadata will send a agentchecks_metadata tag type payload to Datadog backend. func (f *DefaultForwarder) SubmitAgentChecksMetadata(payload transaction.BytesPayloads, extra http.Header) error { return f.submitV1IntakeWithTransactionsFactory(payload, extra, - func(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header) []*transaction.HTTPTransaction { + func(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, extra http.Header) []*transaction.HTTPTransaction { // Agentchecks metadata contains the API KEY and should not be stored on disk. storableOnDisk := false - return f.createAdvancedHTTPTransactions(endpoint, payloads, apiKeyInQueryString, extra, transaction.TransactionPriorityNormal, storableOnDisk) + return f.createAdvancedHTTPTransactions(endpoint, payloads, extra, transaction.TransactionPriorityNormal, storableOnDisk) }) } // SubmitMetadata will send a metadata type payload to Datadog backend. func (f *DefaultForwarder) SubmitMetadata(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.V1MetadataEndpoint, payload, false, extra) + transactions := f.createHTTPTransactions(endpoints.V1MetadataEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitV1Series will send timeserie to v1 endpoint (this will be remove once // the backend handles v2 endpoints). func (f *DefaultForwarder) SubmitV1Series(payloads transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.V1SeriesEndpoint, payloads, true, extra) + transactions := f.createHTTPTransactions(endpoints.V1SeriesEndpoint, payloads, extra) return f.sendHTTPTransactions(transactions) } // SubmitSeries will send timeseries to the v2 endpoint func (f *DefaultForwarder) SubmitSeries(payloads transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payloads, false, extra) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payloads, extra) return f.sendHTTPTransactions(transactions) } // SubmitV1CheckRuns will send service checks to v1 endpoint (this will be removed once // the backend handles v2 endpoints). func (f *DefaultForwarder) SubmitV1CheckRuns(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.V1CheckRunsEndpoint, payload, true, extra) + transactions := f.createHTTPTransactions(endpoints.V1CheckRunsEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } @@ -572,8 +569,8 @@ func (f *DefaultForwarder) SubmitV1Intake(payload transaction.BytesPayloads, ext func (f *DefaultForwarder) submitV1IntakeWithTransactionsFactory( payload transaction.BytesPayloads, extra http.Header, - createHTTPTransactions func(endpoint transaction.Endpoint, payload transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header) []*transaction.HTTPTransaction) error { - transactions := createHTTPTransactions(endpoints.V1IntakeEndpoint, payload, true, extra) + createHTTPTransactions func(endpoint transaction.Endpoint, payload transaction.BytesPayloads, extra http.Header) []*transaction.HTTPTransaction) error { + transactions := createHTTPTransactions(endpoints.V1IntakeEndpoint, payload, extra) // the intake endpoint requires the Content-Type header to be set for _, t := range transactions { @@ -637,18 +634,18 @@ func (f *DefaultForwarder) SubmitOrchestratorManifests(payload transaction.Bytes // SubmitContainerLifecycleEvents sends container lifecycle events func (f *DefaultForwarder) SubmitContainerLifecycleEvents(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.ContainerLifecycleEndpoint, payload, false, extra) + transactions := f.createHTTPTransactions(endpoints.ContainerLifecycleEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitContainerImages sends container image func (f *DefaultForwarder) SubmitContainerImages(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.ContainerImageEndpoint, payload, false, extra) + transactions := f.createHTTPTransactions(endpoints.ContainerImageEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } func (f *DefaultForwarder) submitProcessLikePayload(ep transaction.Endpoint, payload transaction.BytesPayloads, extra http.Header, retryable bool) (chan Response, error) { - transactions := f.createHTTPTransactions(ep, payload, false, extra) + transactions := f.createHTTPTransactions(ep, payload, extra) results := make(chan Response, len(transactions)) internalResults := make(chan Response, len(transactions)) expectedResponses := len(transactions) diff --git a/pkg/forwarder/forwarder_health.go b/pkg/forwarder/forwarder_health.go index c69cfa0a228cd..b3c09a2e687a3 100644 --- a/pkg/forwarder/forwarder_health.go +++ b/pkg/forwarder/forwarder_health.go @@ -36,6 +36,10 @@ var ( apiKeyStatus = expvar.Map{} apiKeyFailure = expvar.Map{} + + // domainURLRegexp determines if an URL belongs to Datadog or not. If the URL belongs to Datadog it's prefixed + // with 'api.' (see computeDomainsURL). + domainURLRegexp = regexp.MustCompile(`([a-z]{2}\d\.)?(datadoghq\.[a-z]+|ddog-gov\.com)$`) ) func init() { @@ -138,14 +142,10 @@ func (fh *forwarderHealth) healthCheckLoop() { // computeDomainsURL populates a map containing API Endpoints per API keys that belongs to the forwarderHealth struct func (fh *forwarderHealth) computeDomainsURL() { for domain, dr := range fh.domainResolvers { - apiDomain := "" - re := regexp.MustCompile(`((us|eu)\d\.)?(datadoghq\.[a-z]+|ddog-gov\.com)$`) - if re.MatchString(domain) { - apiDomain = "https://api." + re.FindString(domain) - } else { - apiDomain = domain + if domainURLRegexp.MatchString(domain) { + domain = "https://api." + domainURLRegexp.FindString(domain) } - fh.keysPerAPIEndpoint[apiDomain] = append(fh.keysPerAPIEndpoint[apiDomain], dr.GetAPIKeys()...) + fh.keysPerAPIEndpoint[domain] = append(fh.keysPerAPIEndpoint[domain], dr.GetAPIKeys()...) } } diff --git a/pkg/forwarder/forwarder_health_test.go b/pkg/forwarder/forwarder_health_test.go index df8573b397787..54a7fa342500d 100644 --- a/pkg/forwarder/forwarder_health_test.go +++ b/pkg/forwarder/forwarder_health_test.go @@ -48,6 +48,7 @@ func TestComputeDomainsURL(t *testing.T) { "https://custom.agent.datadoghq.com": {"api_key3"}, "https://app.datadoghq.eu": {"api_key4"}, "https://app.us2.datadoghq.com": {"api_key5"}, + "https://app.xx9.datadoghq.com": {"api_key5"}, "https://custom.agent.us2.datadoghq.com": {"api_key6"}, // debatable whether the next one should be changed to `api.`, preserve pre-existing behavior for now "https://app.datadoghq.internal": {"api_key7"}, @@ -60,6 +61,7 @@ func TestComputeDomainsURL(t *testing.T) { "https://api.datadoghq.com": {"api_key1", "api_key2", "api_key3"}, "https://api.datadoghq.eu": {"api_key4"}, "https://api.us2.datadoghq.com": {"api_key5", "api_key6"}, + "https://api.xx9.datadoghq.com": {"api_key5"}, "https://api.datadoghq.internal": {"api_key7"}, "https://app.myproxy.com": {"api_key8"}, "https://api.ddog-gov.com": {"api_key9", "api_key10"}, diff --git a/pkg/forwarder/forwarder_test.go b/pkg/forwarder/forwarder_test.go index cceabc44cc092..05d9fb06d9b76 100644 --- a/pkg/forwarder/forwarder_test.go +++ b/pkg/forwarder/forwarder_test.go @@ -10,7 +10,6 @@ import ( "io" "net/http" "net/http/httptest" - "strings" "sync" "testing" "time" @@ -141,7 +140,7 @@ func TestCreateHTTPTransactions(t *testing.T) { headers := make(http.Header) headers.Set("HTTP-MAGIC", "foo") - transactions := forwarder.createHTTPTransactions(endpoint, payloads, false, headers) + transactions := forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 4) assert.Equal(t, testVersionDomain, transactions[0].Domain) assert.Equal(t, testVersionDomain, transactions[1].Domain) @@ -161,13 +160,6 @@ func TestCreateHTTPTransactions(t *testing.T) { assert.Equal(t, p1, transactions[1].Payload.GetContent()) assert.Equal(t, p2, transactions[2].Payload.GetContent()) assert.Equal(t, p2, transactions[3].Payload.GetContent()) - - transactions = forwarder.createHTTPTransactions(endpoint, payloads, true, headers) - require.Len(t, transactions, 4) - assert.Contains(t, transactions[0].Endpoint.Route, "api_key=api-key-1") - assert.Contains(t, transactions[1].Endpoint.Route, "api_key=api-key-2") - assert.Contains(t, transactions[2].Endpoint.Route, "api_key=api-key-1") - assert.Contains(t, transactions[3].Endpoint.Route, "api_key=api-key-2") } func TestCreateHTTPTransactionsWithMultipleDomains(t *testing.T) { @@ -178,7 +170,7 @@ func TestCreateHTTPTransactionsWithMultipleDomains(t *testing.T) { headers := make(http.Header) headers.Set("HTTP-MAGIC", "foo") - transactions := forwarder.createHTTPTransactions(endpoint, payloads, true, headers) + transactions := forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 3, "should contain 3 transactions, contains %d", len(transactions)) var txNormal, txBar []*transaction.HTTPTransaction @@ -194,14 +186,15 @@ func TestCreateHTTPTransactionsWithMultipleDomains(t *testing.T) { assert.Equal(t, len(txNormal), 2, "Two transactions should target the normal domain") assert.Equal(t, len(txBar), 1, "One transactions should target the normal domain") - if strings.HasSuffix(txNormal[0].Endpoint.Route, "api-key-1") { - assert.Equal(t, txNormal[0].Endpoint.Route, "/api/foo?api_key=api-key-1") - assert.Equal(t, txNormal[1].Endpoint.Route, "/api/foo?api_key=api-key-2") + if txNormal[0].Headers.Get("DD-Api-Key") == "api-key-1" { + assert.Equal(t, txNormal[0].Headers.Get("DD-Api-Key"), "api-key-1") + assert.Equal(t, txNormal[1].Headers.Get("DD-Api-Key"), "api-key-2") } else { - assert.Equal(t, txNormal[0].Endpoint.Route, "/api/foo?api_key=api-key-2") - assert.Equal(t, txNormal[1].Endpoint.Route, "/api/foo?api_key=api-key-1") + assert.Equal(t, txNormal[0].Headers.Get("DD-Api-Key"), "api-key-2") + assert.Equal(t, txNormal[1].Headers.Get("DD-Api-Key"), "api-key-1") } - assert.Equal(t, txBar[0].Endpoint.Route, "/api/foo?api_key=api-key-3") + + assert.Equal(t, txBar[0].Headers.Get("DD-Api-Key"), "api-key-3") } func TestCreateHTTPTransactionsWithDifferentResolvers(t *testing.T) { @@ -216,7 +209,7 @@ func TestCreateHTTPTransactionsWithDifferentResolvers(t *testing.T) { headers := make(http.Header) headers.Set("HTTP-MAGIC", "foo") - transactions := forwarder.createHTTPTransactions(endpoint, payloads, true, headers) + transactions := forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 4, "should contain 4 transactions, contains %d", len(transactions)) var txNormal, txBar, txVector []*transaction.HTTPTransaction @@ -235,15 +228,15 @@ func TestCreateHTTPTransactionsWithDifferentResolvers(t *testing.T) { assert.Equal(t, len(txNormal), 2, "Two transactions should target the normal domain") assert.Equal(t, len(txBar), 1, "One transactions should target the normal domain") - if strings.HasSuffix(txNormal[0].Endpoint.Route, "api-key-1") { - assert.Equal(t, txNormal[0].Endpoint.Route, "/api/foo?api_key=api-key-1") - assert.Equal(t, txNormal[1].Endpoint.Route, "/api/foo?api_key=api-key-2") + if txNormal[0].Headers.Get("DD-Api-Key") == "api-key-1" { + assert.Equal(t, txNormal[0].Headers.Get("DD-Api-Key"), "api-key-1") + assert.Equal(t, txNormal[1].Headers.Get("DD-Api-Key"), "api-key-2") } else { - assert.Equal(t, txNormal[0].Endpoint.Route, "/api/foo?api_key=api-key-2") - assert.Equal(t, txNormal[1].Endpoint.Route, "/api/foo?api_key=api-key-1") + assert.Equal(t, txNormal[0].Headers.Get("DD-Api-Key"), "api-key-2") + assert.Equal(t, txNormal[1].Headers.Get("DD-Api-Key"), "api-key-1") } - assert.Equal(t, txBar[0].Endpoint.Route, "/api/foo?api_key=api-key-3") - assert.Equal(t, txVector[0].Endpoint.Route, "/api/foo?api_key=api-key-4") + assert.Equal(t, txBar[0].Headers.Get("DD-Api-Key"), "api-key-3") + assert.Equal(t, txVector[0].Headers.Get("DD-Api-Key"), "api-key-4") } func TestCreateHTTPTransactionsWithOverrides(t *testing.T) { @@ -259,17 +252,17 @@ func TestCreateHTTPTransactionsWithOverrides(t *testing.T) { headers := make(http.Header) headers.Set("HTTP-MAGIC", "foo") - transactions := forwarder.createHTTPTransactions(endpoint, payloads, true, headers) + transactions := forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 1, "should contain 1 transaction, contains %d", len(transactions)) - assert.Equal(t, transactions[0].Endpoint.Route, "/api/foo?api_key=api-key-1") + assert.Equal(t, transactions[0].Endpoint.Route, "/api/foo") assert.Equal(t, transactions[0].Domain, testVersionDomain) endpoint.Name = "diverted" - transactions = forwarder.createHTTPTransactions(endpoint, payloads, true, headers) + transactions = forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 1, "should contain 1 transaction, contains %d", len(transactions)) - assert.Equal(t, transactions[0].Endpoint.Route, "/api/foo?api_key=api-key-1") + assert.Equal(t, transactions[0].Endpoint.Route, "/api/foo") assert.Equal(t, transactions[0].Domain, "vector.tld") } @@ -283,7 +276,7 @@ func TestArbitraryTagsHTTPHeader(t *testing.T) { payload := []byte("A payload") headers := make(http.Header) - transactions := forwarder.createHTTPTransactions(endpoint, transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&payload}), false, headers) + transactions := forwarder.createHTTPTransactions(endpoint, transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&payload}), headers) require.True(t, len(transactions) > 0) assert.Equal(t, "true", transactions[0].Headers.Get(arbitraryTagHTTPHeaderKey)) } @@ -294,7 +287,7 @@ func TestSendHTTPTransactions(t *testing.T) { p1 := []byte("A payload") payloads := transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&p1}) headers := make(http.Header) - tr := forwarder.createHTTPTransactions(endpoint, payloads, false, headers) + tr := forwarder.createHTTPTransactions(endpoint, payloads, headers) // fw is stopped, we should get an error err := forwarder.sendHTTPTransactions(tr) @@ -424,7 +417,7 @@ func TestTransactionEventHandlers(t *testing.T) { headers := http.Header{} headers.Set("key", "value") - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, false, headers) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, headers) require.Len(t, transactions, 1) attempts := atomic.NewInt64(0) @@ -482,7 +475,7 @@ func TestTransactionEventHandlersOnRetry(t *testing.T) { headers := http.Header{} headers.Set("key", "value") - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, false, headers) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, headers) require.Len(t, transactions, 1) attempts := atomic.NewInt64(0) @@ -536,7 +529,7 @@ func TestTransactionEventHandlersNotRetryable(t *testing.T) { headers := http.Header{} headers.Set("key", "value") - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, false, headers) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, headers) require.Len(t, transactions, 1) attempts := atomic.NewInt64(0) @@ -595,7 +588,7 @@ func TestProcessLikePayloadResponseTimeout(t *testing.T) { headers := http.Header{} headers.Set("key", "value") - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, false, headers) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, headers) require.Len(t, transactions, 1) responses, err := f.submitProcessLikePayload(endpoints.SeriesEndpoint, payload, headers, true) diff --git a/pkg/forwarder/sync_forwarder.go b/pkg/forwarder/sync_forwarder.go index 9d0c60a6abf85..cdb458c9642c3 100644 --- a/pkg/forwarder/sync_forwarder.go +++ b/pkg/forwarder/sync_forwarder.go @@ -64,19 +64,19 @@ func (f *SyncForwarder) sendHTTPTransactions(transactions []*transaction.HTTPTra // SubmitV1Series will send timeserie to v1 endpoint (this will be remove once // the backend handles v2 endpoints). func (f *SyncForwarder) SubmitV1Series(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1SeriesEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1SeriesEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitSeries will send timeseries to the v2 endpoint func (f *SyncForwarder) SubmitSeries(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.SeriesEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.SeriesEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitV1Intake will send payloads to the universal `/intake/` endpoint used by Agent v.5 func (f *SyncForwarder) SubmitV1Intake(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1IntakeEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1IntakeEndpoint, payload, extra) // the intake endpoint requires the Content-Type header to be set for _, t := range transactions { t.Headers.Set("Content-Type", "application/json") @@ -87,13 +87,13 @@ func (f *SyncForwarder) SubmitV1Intake(payload transaction.BytesPayloads, extra // SubmitV1CheckRuns will send service checks to v1 endpoint (this will be removed once // the backend handles v2 endpoints). func (f *SyncForwarder) SubmitV1CheckRuns(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1CheckRunsEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1CheckRunsEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitSketchSeries will send payloads to Datadog backend - PROTOTYPE FOR PERCENTILE func (f *SyncForwarder) SubmitSketchSeries(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.SketchSeriesEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.SketchSeriesEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } diff --git a/pkg/forwarder/transaction/transaction.go b/pkg/forwarder/transaction/transaction.go index 751c31f553227..5fbad4756d427 100644 --- a/pkg/forwarder/transaction/transaction.go +++ b/pkg/forwarder/transaction/transaction.go @@ -300,7 +300,7 @@ func (t *HTTPTransaction) internalProcess(ctx context.Context, client *http.Clie transactionEndpointName := t.GetEndpointName() logURL := scrubber.ScrubLine(url) // sanitized url that can be logged - req, err := http.NewRequest("POST", url, reader) + req, err := http.NewRequestWithContext(ctx, "POST", url, reader) if err != nil { log.Errorf("Could not create request for transaction to invalid URL %q (dropping transaction): %s", logURL, err) transactionsErrors.Add(1) @@ -308,7 +308,6 @@ func (t *HTTPTransaction) internalProcess(ctx context.Context, client *http.Clie transactionsSentRequestErrors.Add(1) return 0, nil, nil } - req = req.WithContext(ctx) req.Header = t.Headers resp, err := client.Do(req) diff --git a/pkg/jmxfetch/jmxfetch.go b/pkg/jmxfetch/jmxfetch.go index f956ccecda5de..567c382196740 100644 --- a/pkg/jmxfetch/jmxfetch.go +++ b/pkg/jmxfetch/jmxfetch.go @@ -108,7 +108,7 @@ type checkInitCfg struct { JavaOptions string `yaml:"java_options,omitempty"` } -// Monitor TODO : IML-199 +// Monitor monitors this JMXFetch instance, waiting for JMX to stop. Gracefully handles restarting the JMXFetch process. func (j *JMXFetch) Monitor() { limiter := newRestartLimiter(config.Datadog.GetInt("jmx_max_restarts"), float64(config.Datadog.GetInt("jmx_restart_interval"))) ticker := time.NewTicker(500 * time.Millisecond) diff --git a/pkg/kubestatemetrics/builder/builder.go b/pkg/kubestatemetrics/builder/builder.go index 202a776050e32..3862a8e70d647 100644 --- a/pkg/kubestatemetrics/builder/builder.go +++ b/pkg/kubestatemetrics/builder/builder.go @@ -134,6 +134,11 @@ func (b *Builder) WithAllowLabels(l map[string][]string) { b.ksmBuilder.WithAllowLabels(l) } +// WithAllowAnnotations configures which annotations can be returned for metrics +func (b *Builder) WithAllowAnnotations(l map[string][]string) { + b.ksmBuilder.WithAllowAnnotations(l) +} + // Build initializes and registers all enabled stores. // Returns metric writers. func (b *Builder) Build() []metricsstore.MetricsWriter { diff --git a/pkg/logs/agent.go b/pkg/logs/agent.go index 1f5a3537f4094..c66546f5612d1 100644 --- a/pkg/logs/agent.go +++ b/pkg/logs/agent.go @@ -17,13 +17,10 @@ import ( "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers" "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/channel" "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/container" - "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/docker" filelauncher "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/file" "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/journald" - "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/kubernetes" "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/listener" "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/windowsevent" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util/containersorpods" "github.com/DataDog/datadog-agent/pkg/logs/pipeline" "github.com/DataDog/datadog-agent/pkg/logs/schedulers" "github.com/DataDog/datadog-agent/pkg/logs/service" @@ -67,8 +64,6 @@ func NewAgent(sources *sources.LogSources, services *service.Services, processin // setup the pipeline provider that provides pairs of processor and sender pipelineProvider := pipeline.NewProvider(config.NumberOfPipelines, auditor, diagnosticMessageReceiver, processingRules, endpoints, destinationsCtx) - cop := containersorpods.NewChooser() - // setup the launchers lnchrs := launchers.NewLaunchers(sources, pipelineProvider, auditor) lnchrs.AddLauncher(filelauncher.NewLauncher( @@ -80,22 +75,7 @@ func NewAgent(sources *sources.LogSources, services *service.Services, processin lnchrs.AddLauncher(listener.NewLauncher(coreConfig.Datadog.GetInt("logs_config.frame_size"))) lnchrs.AddLauncher(journald.NewLauncher()) lnchrs.AddLauncher(windowsevent.NewLauncher()) - if !util.CcaInAD() { - lnchrs.AddLauncher(docker.NewLauncher( - time.Duration(coreConfig.Datadog.GetInt("logs_config.docker_client_read_timeout"))*time.Second, - sources, - services, - cop, - coreConfig.Datadog.GetBool("logs_config.docker_container_use_file"), - coreConfig.Datadog.GetBool("logs_config.docker_container_force_use_file"))) - lnchrs.AddLauncher(kubernetes.NewLauncher( - sources, - services, - cop, - coreConfig.Datadog.GetBool("logs_config.container_collect_all"))) - } else { - lnchrs.AddLauncher(container.NewLauncher(sources)) - } + lnchrs.AddLauncher(container.NewLauncher(sources)) return &Agent{ sources: sources, diff --git a/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket.go b/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket.go index 5c9b97034f5bd..8f56f49f37d72 100644 --- a/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket.go +++ b/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket.go @@ -13,12 +13,13 @@ import ( "time" "github.com/DataDog/datadog-agent/pkg/logs/auditor" - dockerLaunchersPkg "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers/docker" dockerTailerPkg "github.com/DataDog/datadog-agent/pkg/logs/internal/tailers/docker" "github.com/DataDog/datadog-agent/pkg/logs/message" "github.com/DataDog/datadog-agent/pkg/logs/sources" dockerutilPkg "github.com/DataDog/datadog-agent/pkg/util/docker" "github.com/DataDog/datadog-agent/pkg/util/log" + + "github.com/DataDog/datadog-agent/pkg/logs/config" ) var ( @@ -81,7 +82,7 @@ func (t *DockerSocketTailer) tryStartTailer() (*dockerTailerPkg.Tailer, chan str t.pipeline, erroredContainerID, t.readTimeout) - since, err := dockerLaunchersPkg.Since(t.registry, inner.Identifier()) + since, err := since(t.registry, inner.Identifier()) if err != nil { log.Warnf("Could not recover tailing from last committed offset %v: %v", dockerutilPkg.ShortContainerID(t.ContainerID), err) @@ -166,3 +167,31 @@ func (t *DockerSocketTailer) run( } } } + +// since returns the date from when logs should be collected. +func since(registry auditor.Registry, identifier string) (time.Time, error) { + var since time.Time + var err error + offset := registry.GetOffset(identifier) + switch { + case isEOFCorruptedOffset(offset): + since = time.Time{} + case offset != "": + // an offset was registered, tail from the offset + since, err = time.Parse(config.DateFormat, offset) + if err != nil { + since = time.Now().UTC() + } + default: + // a new service has been discovered and was launched after the agent start, tail from the beginning + since = time.Time{} + } + return since, err +} + +// isEOFCorruptedOffset return true if the offset doesn't contain a +// valid timestamp value due to a file rotation. +func isEOFCorruptedOffset(offset string) bool { + // check if the offset value is equal to EOF char + return len(offset) > 0 && offset[0] == 0x03 +} diff --git a/pkg/logs/internal/launchers/docker/container.go b/pkg/logs/internal/launchers/docker/container.go deleted file mode 100644 index 1b637a5af8f45..0000000000000 --- a/pkg/logs/internal/launchers/docker/container.go +++ /dev/null @@ -1,229 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker -// +build docker - -package docker - -import ( - "context" - "fmt" - "regexp" - "strings" - - "github.com/docker/docker/api/types" - - "github.com/DataDog/datadog-agent/pkg/util/containers" - dockerUtil "github.com/DataDog/datadog-agent/pkg/util/docker" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" - - "github.com/DataDog/datadog-agent/pkg/logs/service" - sourcesPkg "github.com/DataDog/datadog-agent/pkg/logs/sources" -) - -const ( - // configPath refers to the configuration that can be passed over a - // docker label or a pod annotation, this feature is commonly named - // 'ad' or 'autodicovery'. - configPath = "com.datadoghq.ad.logs" - - annotationConfigPathPrefix = "ad.datadoghq.com" - annotationConfigPathSuffix = "logs" -) - -// Container represents a container to tail logs from. -type Container struct { - container types.ContainerJSON - service *service.Service -} - -// NewContainer returns a new Container -func NewContainer(container types.ContainerJSON, service *service.Service) *Container { - return &Container{ - container: container, - service: service, - } -} - -// FindSource returns the source that most likely matches the container, -// if no source is found return nil -func (c *Container) FindSource(sources []*sourcesPkg.LogSource) *sourcesPkg.LogSource { - var bestMatch *sourcesPkg.LogSource - for _, source := range sources { - if source.Config.Identifier != "" && c.isIdentifierMatch(source.Config.Identifier) { - // perfect match between the source and the container - return source - } - if !c.IsMatch(source) { - continue - } - if bestMatch == nil { - bestMatch = source - } - if c.computeScore(bestMatch) < c.computeScore(source) { - bestMatch = source - } - } - return bestMatch -} - -// getShortImageName resolves the short image name of a container by calling the docker daemon -// This call is blocking -func (c *Container) getShortImageName(ctx context.Context) (string, error) { - var ( - err error - shortName string - ) - - du, err := dockerUtil.GetDockerUtil() - if err != nil { - log.Debugf("Cannot get DockerUtil: %v", err) - return shortName, err - } - imageName := c.container.Image - imageName, err = du.ResolveImageName(ctx, imageName) - if err != nil { - log.Debugf("Could not resolve image name %s: %s", imageName, err) - return shortName, err - } - _, shortName, _, err = containers.SplitImageName(imageName) - if err != nil { - log.Debugf("Cannot parse image name: %v", err) - } - return shortName, err -} - -// computeScore returns the matching score between the container and the source. -func (c *Container) computeScore(source *sourcesPkg.LogSource) int { - score := 0 - if c.isImageMatch(source.Config.Image) { - score++ - } - if c.isLabelMatch(source.Config.Label) { - score++ - } - if c.isNameMatch(source.Config.Name) { - score++ - } - return score -} - -// IsMatch returns true if the source matches with the container. -func (c *Container) IsMatch(source *sourcesPkg.LogSource) bool { - if (source.Config.Identifier != "" || c.ContainsADIdentifier()) && !c.isIdentifierMatch(source.Config.Identifier) { - // there is only one source matching a container when it contains an autodiscovery identifier, - // the one which has an identifier equals to the container identifier. - return false - } - if source.Config.Image != "" && !c.isImageMatch(source.Config.Image) { - return false - } - if source.Config.Label != "" && !c.isLabelMatch(source.Config.Label) { - return false - } - if source.Config.Name != "" && !c.isNameMatch(source.Config.Name) { - return false - } - return true -} - -// isIdentifierMatch returns if identifier matches with container identifier. -func (c *Container) isIdentifierMatch(identifier string) bool { - return c.container.ID == identifier -} - -// digestPrefix represents a prefix that can be added to an image name. -const digestPrefix = "@sha256:" - -// tagSeparator represents the separator in between an image name and its tag. -const tagSeparator = ":" - -// isImageMatch returns true if the image of the container matches with imageFilter. -// The image of a container can have the following formats: -// - '[/]image[:]', -// - '[/]image[@sha256:]' -// The imageFilter must respect the format '[/]image[:]'. -func (c *Container) isImageMatch(imageFilter string) bool { - // Trim digest if present - split := strings.SplitN(c.container.Config.Image, digestPrefix, 2) - image := split[0] - if !strings.Contains(imageFilter, tagSeparator) { - // trim tag if present - split := strings.SplitN(image, tagSeparator, 2) - image = split[0] - } - // Expect prefix to end with '/' - repository := strings.TrimSuffix(image, imageFilter) - return len(repository) == 0 || strings.HasSuffix(repository, "/") -} - -// isNameMatch returns true if one of the container name matches with the filter. -func (c *Container) isNameMatch(nameFilter string) bool { - re, err := regexp.Compile(nameFilter) - if err != nil { - log.Warn("used invalid name to filter containers: ", nameFilter) - return false - } - if name := c.container.Name; name != "" { - if re.MatchString(name) { - return true - } - } - return false -} - -// isLabelMatch returns true if container labels contains at least one label from labelFilter. -func (c *Container) isLabelMatch(labelFilter string) bool { - // Expect a comma-separated list of labels, eg: foo:bar, baz - for _, value := range strings.Split(labelFilter, ",") { - // Trim whitespace, then check whether the label format is either key:value or key=value - label := strings.TrimSpace(value) - parts := strings.FieldsFunc(label, func(c rune) bool { - return c == ':' || c == '=' - }) - // If we have exactly two parts, check there is a container label that matches both. - // Otherwise fall back to checking the whole label exists as a key. - if _, exists := c.container.Config.Labels[label]; exists || len(parts) == 2 && c.container.Config.Labels[parts[0]] == parts[1] { - return true - } - } - return false -} - -// ContainsADIdentifier returns true if the container contains an autodiscovery identifier, -// searching first in the docker labels, then in the pod specs. -func (c *Container) ContainsADIdentifier() bool { - var exists bool - _, exists = c.container.Config.Labels[configPath] - if exists { - return true - } - - pod, err := workloadmeta.GetGlobalStore().GetKubernetesPodForContainer(c.service.Identifier) - if err != nil { - return false - } - - for _, container := range pod.Containers { - if container.ID == c.service.Identifier { - // looks for the container name specified in the pod - // manifest as it's different from the name of the - // container returns by a docker inspect which is a - // concatenation of the container name specified in the - // pod manifest and a hash - _, exists = pod.Annotations[annotationConfigPath(container.Name)] - return exists - } - } - - return false -} - -// annotationConfigPath returns the path of a logs-config passed in a pod annotation. -func annotationConfigPath(containerName string) string { - return fmt.Sprintf("%s/%s.%s", annotationConfigPathPrefix, containerName, annotationConfigPathSuffix) -} diff --git a/pkg/logs/internal/launchers/docker/container_test.go b/pkg/logs/internal/launchers/docker/container_test.go deleted file mode 100644 index 4e18a821b6e15..0000000000000 --- a/pkg/logs/internal/launchers/docker/container_test.go +++ /dev/null @@ -1,348 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker -// +build docker - -package docker - -import ( - "testing" - - "github.com/docker/docker/api/types" - types_container "github.com/docker/docker/api/types/container" - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/logs/sources" -) - -func TestFindSourceWithSourceFiltersShouldSucceed(t *testing.T) { - var source *sources.LogSource - var container *Container - - sources := []*sources.LogSource{ - sources.NewLogSource("", &config.LogsConfig{Type: config.DockerType, Image: "myapp"}), - sources.NewLogSource("", &config.LogsConfig{Type: config.DockerType, Label: "mylabel"}), - sources.NewLogSource("", &config.LogsConfig{Type: config.DockerType, Image: "myapp", Label: "mylabel"}), - sources.NewLogSource("", &config.LogsConfig{Type: config.DockerType, Identifier: "1234567890"}), - } - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp"}}, - &service.Service{}) - source = container.FindSource(sources) - assert.NotNil(t, source) - assert.Equal(t, source, sources[0]) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{ - Image: "wrongapp", - Labels: map[string]string{"mylabel": "anything"}}}, - &service.Service{}) - source = container.FindSource(sources) - assert.NotNil(t, source) - assert.Equal(t, source, sources[1]) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{ - Image: "myapp", - Labels: map[string]string{"mylabel": "anything"}}}, - &service.Service{}) - source = container.FindSource(sources) - assert.NotNil(t, source) - assert.Equal(t, source, sources[2]) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ID: "1234567890"}, - Config: &types_container.Config{Labels: map[string]string{"com.datadoghq.ad.logs": "[{}]"}}}, - &service.Service{}) - source = container.FindSource(sources) - assert.NotNil(t, source) - assert.Equal(t, source, sources[3]) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ID: "0987654321"}, - Config: &types_container.Config{Labels: map[string]string{"com.datadoghq.ad.logs": "[{}]"}}}, - &service.Service{}) - source = container.FindSource(sources) - assert.Nil(t, source) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "wrongapp"}}, - &service.Service{}) - source = container.FindSource(sources) - assert.Nil(t, source) -} - -func TestFindSourceWithNoSourceFilterShouldSucceed(t *testing.T) { - var source *sources.LogSource - var container *Container - - sources := []*sources.LogSource{ - sources.NewLogSource("", &config.LogsConfig{Type: config.DockerType}), - sources.NewLogSource("", &config.LogsConfig{Type: config.DockerType, Label: "mylabel"}), - } - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{ - Image: "myapp", - Labels: map[string]string{"mylabel": "anything"}}}, - &service.Service{}) - source = container.FindSource(sources) - assert.NotNil(t, source) - assert.Equal(t, source, sources[1]) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "wrongapp"}}, - &service.Service{}) - source = container.FindSource(sources) - assert.NotNil(t, source) - assert.Equal(t, source, sources[0]) -} - -func TestIsImageMatch(t *testing.T) { - var container *Container - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp"}}, - nil) - assert.True(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp"}}, - nil) - assert.True(t, container.isImageMatch("myapp")) - assert.True(t, container.isImageMatch("repository/myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp@sha256:1234567890"}}, - nil) - assert.True(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp@sha256:1234567890"}}, - nil) - assert.True(t, container.isImageMatch("myapp")) - assert.True(t, container.isImageMatch("repository/myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp:latest"}}, - nil) - assert.True(t, container.isImageMatch("myapp")) - assert.True(t, container.isImageMatch("myapp:latest")) - assert.True(t, container.isImageMatch("repository/myapp")) - assert.True(t, container.isImageMatch("repository/myapp:latest")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp:latest"}}, - nil) - assert.True(t, container.isImageMatch("myapp")) - assert.True(t, container.isImageMatch("myapp:latest")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repositorymyapp"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp2"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp2@sha256:1234567890"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp2"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp2@sha256:1234567890"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp2:latest"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp2:latest"}}, - nil) - assert.False(t, container.isImageMatch("myapp")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp"}}, - nil) - assert.False(t, container.isImageMatch("dd/myapp")) - assert.False(t, container.isImageMatch("myapp:latest")) - assert.False(t, container.isImageMatch("dd/myapp:latest")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp"}}, - nil) - assert.False(t, container.isImageMatch("dd/myapp")) - assert.False(t, container.isImageMatch("myapp:latest")) - assert.False(t, container.isImageMatch("dd/myapp:latest")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "repository/myapp:latest"}}, - nil) - assert.False(t, container.isImageMatch("dd/myapp")) - assert.False(t, container.isImageMatch("myapp:foo")) - assert.False(t, container.isImageMatch("repository/myapp:foo")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Image: "myapp:latest"}}, - nil) - assert.False(t, container.isImageMatch("myapp:foo")) - assert.False(t, container.isImageMatch("repository/myapp")) - assert.False(t, container.isImageMatch("repository/myapp:foo")) -} - -func TestIsLabelMatch(t *testing.T) { - var container *Container - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"bar": ""}}}, - nil) - assert.False(t, container.isLabelMatch("foo")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": ""}}}, - nil) - assert.True(t, container.isLabelMatch("foo")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": "bar"}}}, - nil) - assert.True(t, container.isLabelMatch("foo")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"bar": ""}}}, - nil) - assert.False(t, container.isLabelMatch("foo:bar")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": ""}}}, - nil) - assert.False(t, container.isLabelMatch("foo:bar")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": "bar"}}}, - nil) - assert.True(t, container.isLabelMatch("foo:bar")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo:bar": ""}}}, - nil) - assert.True(t, container.isLabelMatch("foo:bar")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": ""}}}, - nil) - assert.False(t, container.isLabelMatch("foo:bar:baz")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": "bar"}}}, - nil) - assert.False(t, container.isLabelMatch("foo:bar:baz")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": "bar:baz"}}}, - nil) - assert.False(t, container.isLabelMatch("foo:bar:baz")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo:bar": "baz"}}}, - nil) - assert.False(t, container.isLabelMatch("foo:bar:baz")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo:bar:baz": ""}}}, - nil) - assert.True(t, container.isLabelMatch("foo:bar:baz")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"bar": ""}}}, - nil) - assert.False(t, container.isLabelMatch("foo=bar")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": ""}}}, - nil) - assert.False(t, container.isLabelMatch("foo=bar")) - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": "bar"}}}, - nil) - assert.True(t, container.isLabelMatch("foo=bar")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{}, - Config: &types_container.Config{Labels: map[string]string{"foo": "bar"}}}, - nil) - assert.True(t, container.isLabelMatch(" a , b:c , foo:bar , d=e ")) -} - -func TestIsNameMatch(t *testing.T) { - var container *Container - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{Name: "foo"}}, - nil) - assert.True(t, container.isNameMatch("foo")) - assert.True(t, container.isNameMatch("")) - assert.False(t, container.isNameMatch("boo")) - - container = NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{Name: "/api/v1/pods/foo"}}, - nil) - assert.True(t, container.isNameMatch("foo")) - assert.True(t, container.isNameMatch("")) - assert.False(t, container.isNameMatch("boo")) -} - -func TestIsIdentifierMatch(t *testing.T) { - container := NewContainer(types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ID: "1234567890"}}, - nil) - assert.True(t, container.isIdentifierMatch("1234567890")) - assert.False(t, container.isNameMatch("")) - assert.False(t, container.isNameMatch("docker://1234567890")) - assert.False(t, container.isNameMatch("0987654321")) -} diff --git a/pkg/logs/internal/launchers/docker/launcher.go b/pkg/logs/internal/launchers/docker/launcher.go deleted file mode 100644 index 2fa357acc61b2..0000000000000 --- a/pkg/logs/internal/launchers/docker/launcher.go +++ /dev/null @@ -1,496 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker -// +build docker - -package docker - -import ( - "context" - "fmt" - "sync" - "time" - - "github.com/DataDog/datadog-agent/pkg/logs/auditor" - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers" - "github.com/DataDog/datadog-agent/pkg/logs/internal/status" - tailer "github.com/DataDog/datadog-agent/pkg/logs/internal/tailers/docker" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util/containersorpods" - "github.com/DataDog/datadog-agent/pkg/logs/pipeline" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/logs/sources" - "github.com/DataDog/datadog-agent/pkg/util/containers" - dockerutilpkg "github.com/DataDog/datadog-agent/pkg/util/docker" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/util/startstop" -) - -const ( - backoffInitialDuration = 1 * time.Second - backoffMaxDuration = 60 * time.Second -) - -type sourceInfoPair struct { - source *sources.LogSource - info *status.MappedInfo -} - -// A Launcher starts and stops new tailers for every new containers discovered by autodiscovery. -type Launcher struct { - pipelineProvider pipeline.Provider - activeSources []*sources.LogSource - pendingContainers map[string]*Container - tailers map[string]*tailer.Tailer - registry auditor.Registry - erroredContainerID chan string - lock *sync.Mutex - collectAllSource *sources.LogSource - collectAllInfo *status.MappedInfo - readTimeout time.Duration // client read timeout to set on the created tailer - serviceNameFunc func(string, string) string // serviceNameFunc gets the service name from the tagger, it is in a separate field for testing purpose - - forceTailingFromFile bool // will ignore known offset and always tail from file - tailFromFile bool // If true docker will be tailed from the corresponding log file - fileSourcesByContainer map[string]sourceInfoPair // Keep track of locally generated sources - sources *sources.LogSources // To schedule file source when taileing container from file - services *service.Services - cop containersorpods.Chooser - - // ctx is the context for the running goroutine, set in Start - ctx context.Context - - // cancel cancels the running goroutine - cancel context.CancelFunc -} - -// NewLauncher returns a new launcher -func NewLauncher(readTimeout time.Duration, sources *sources.LogSources, services *service.Services, cop containersorpods.Chooser, tailFromFile, forceTailingFromFile bool) *Launcher { - launcher := &Launcher{ - tailers: make(map[string]*tailer.Tailer), - pendingContainers: make(map[string]*Container), - erroredContainerID: make(chan string), - lock: &sync.Mutex{}, - readTimeout: readTimeout, - serviceNameFunc: util.ServiceNameFromTags, - sources: sources, - services: services, - cop: cop, - forceTailingFromFile: forceTailingFromFile, - tailFromFile: tailFromFile, - fileSourcesByContainer: make(map[string]sourceInfoPair), - collectAllInfo: status.NewMappedInfo("Container Info"), - } - - if tailFromFile { - if err := checkReadAccess(); err != nil { - log.Errorf("Could not access container log files: %v; falling back on tailing from container runtime socket", err) - launcher.tailFromFile = false - } - } - - return launcher -} - -// Start starts the Launcher -func (l *Launcher) Start(sourceProvider launchers.SourceProvider, pipelineProvider pipeline.Provider, registry auditor.Registry) { - // only start this launcher once it's determined that we should be logging containers, and not pods. - l.ctx, l.cancel = context.WithCancel(context.Background()) - go l.run(sourceProvider, pipelineProvider, registry) -} - -// Stop stops the Launcher and its tailers in parallel, -// this call returns only when all the tailers are stopped. -func (l *Launcher) Stop() { - if l.cancel != nil { - l.cancel() - } - - // only stop this launcher once it's determined that we should be logging - // containers, and not pods, but do not block trying to find out. - if l.cop.Get() == containersorpods.LogContainers { - stopper := startstop.NewParallelStopper() - l.lock.Lock() - var containerIDs []string - for _, tailer := range l.tailers { - stopper.Add(tailer) - containerIDs = append(containerIDs, tailer.ContainerID) - } - l.lock.Unlock() - for _, containerID := range containerIDs { - l.removeTailer(containerID) - } - stopper.Stop() - } -} - -// run starts and stops new tailers when it receives a new source -// or a new service which is mapped to a container. -func (l *Launcher) run(sourceProvider launchers.SourceProvider, pipelineProvider pipeline.Provider, registry auditor.Registry) { - // if we're not logging containers, then there's nothing to do - if l.cop.Wait(l.ctx) != containersorpods.LogContainers { - return - } - - log.Info("Starting Docker launcher") - l.pipelineProvider = pipelineProvider - l.registry = registry - - addedSources, removedSources := sourceProvider.SubscribeForType(config.DockerType) - addedServices := l.services.GetAddedServicesForType(config.DockerType) - removedServices := l.services.GetRemovedServicesForType(config.DockerType) - - for { - select { - case service := <-addedServices: - // detected a new container running on the host, - dockerutil, err := dockerutilpkg.GetDockerUtil() - if err != nil { - log.Warnf("Could not use docker client, logs for container %s won’t be collected: %v", service.Identifier, err) - continue - } - dockerContainer, err := dockerutil.Inspect(context.TODO(), service.Identifier, false) - if err != nil { - log.Warnf("Could not find container with id: %v", err) - continue - } - container := NewContainer(dockerContainer, service) - source := container.FindSource(l.activeSources) - switch { - case source != nil: - // a source matches with the container, start a new tailer - l.startTailer(container, source) - default: - // no source matches with the container but a matching source may not have been - // emitted yet or the container may contain an autodiscovery identifier - // so it's put in a cache until a matching source is found. - l.pendingContainers[service.Identifier] = container - } - case source := <-addedSources: - // detected a new source that has been created either from a configuration file, - // a docker label or a pod annotation. - l.activeSources = append(l.activeSources, source) - pendingContainers := make(map[string]*Container) - for _, container := range l.pendingContainers { - if container.IsMatch(source) { - // found a container matching the new source, start a new tailer - l.startTailer(container, source) - } else { - // keep the container in cache until - pendingContainers[container.service.Identifier] = container - } - } - // keep the containers that have not found any source yet for next iterations - l.pendingContainers = pendingContainers - case source := <-removedSources: - for i, src := range l.activeSources { - if src == source { - // no need to stop any tailer here, it will be stopped after receiving a - // "remove service" event. - l.activeSources = append(l.activeSources[:i], l.activeSources[i+1:]...) - break - } - } - case service := <-removedServices: - // detected that a container has been stopped. - containerID := service.Identifier - l.stopTailer(containerID) - delete(l.pendingContainers, containerID) - case containerID := <-l.erroredContainerID: - go l.restartTailer(containerID) - case <-l.ctx.Done(): - // no docker container should be tailed anymore - log.Info("Stopping Docker launcher") - return - } - } -} - -// overrideSource create a new source with the image short name if the source is ContainerCollectAll -func (l *Launcher) overrideSource(container *Container, source *sources.LogSource) *sources.LogSource { - standardService := l.serviceNameFunc(container.container.Name, containers.BuildTaggerEntityName(container.container.ID)) - if source.Name != config.ContainerCollectAll { - if source.Config.Service == "" && standardService != "" { - source.Config.Service = standardService - } - return source - } - - if l.collectAllSource == nil { - l.collectAllSource = source - l.collectAllSource.RegisterInfo(l.collectAllInfo) - } - - shortName, err := container.getShortImageName(context.TODO()) - containerID := container.service.Identifier - if err != nil { - log.Warnf("Could not get short image name for container %v: %v", dockerutilpkg.ShortContainerID(containerID), err) - return source - } - - l.collectAllInfo.SetMessage(containerID, fmt.Sprintf("Container ID: %s, Image: %s, Created: %s, Tailing from the Docker socket", dockerutilpkg.ShortContainerID(containerID), shortName, container.container.Created)) - - newSource := newOverridenSource(standardService, shortName, source.Status) - newSource.ParentSource = source - return newSource -} - -// getFileSource create a new file source with the image short name if the source is ContainerCollectAll -func (l *Launcher) getFileSource(container *Container, source *sources.LogSource) sourceInfoPair { - containerID := container.service.Identifier - - // If containerCollectAll is set - we use the global collectAllInfo, otherwise we create a new info for this source - var sourceInfo *status.MappedInfo - - // Populate the collectAllSource if we don't have it yet - if source.Name == config.ContainerCollectAll && l.collectAllSource == nil { - l.collectAllSource = source - l.collectAllSource.RegisterInfo(l.collectAllInfo) - sourceInfo = l.collectAllInfo - } else { - sourceInfo = status.NewMappedInfo("Container Info") - source.RegisterInfo(sourceInfo) - } - - standardService := l.serviceNameFunc(container.container.Name, containers.BuildTaggerEntityName(containerID)) - shortName, err := container.getShortImageName(context.TODO()) - if err != nil { - log.Warnf("Could not get short image name for container %v: %v", dockerutilpkg.ShortContainerID(containerID), err) - } - - // Update parent source with additional information - sourceInfo.SetMessage(containerID, fmt.Sprintf("Container ID: %s, Image: %s, Created: %s, Tailing from file: %s", dockerutilpkg.ShortContainerID(containerID), shortName, container.container.Created, getPath(containerID))) - - // When ContainerCollectAll is not enabled, we try to derive the service and source names from container labels - // provided by AD (in this case, the parent source config). Otherwise we use the standard service or short image - // name for the service name and always use the short image name for the source name. - var serviceName string - if source.Name != config.ContainerCollectAll && source.Config.Service != "" { - serviceName = source.Config.Service - } else if standardService != "" { - serviceName = standardService - } else { - serviceName = shortName - } - - sourceName := shortName - if source.Name != config.ContainerCollectAll && source.Config.Source != "" { - sourceName = source.Config.Source - } - - // New file source that inherit most of its parent properties - fileSource := sources.NewLogSource(source.Name, &config.LogsConfig{ - Type: config.FileType, - Identifier: containerID, - Path: getPath(containerID), - Service: serviceName, - Source: sourceName, - Tags: source.Config.Tags, - ProcessingRules: source.Config.ProcessingRules, - }) - fileSource.SetSourceType(sources.DockerSourceType) - fileSource.Status = source.Status - fileSource.ParentSource = source - return sourceInfoPair{source: fileSource, info: sourceInfo} -} - -// newOverridenSource is separated from overrideSource for testing purpose -func newOverridenSource(standardService, shortName string, status *status.LogStatus) *sources.LogSource { - var serviceName string - if standardService != "" { - serviceName = standardService - } else { - serviceName = shortName - } - - overridenSource := sources.NewLogSource(config.ContainerCollectAll, &config.LogsConfig{ - Type: config.DockerType, - Service: serviceName, - Source: shortName, - }) - overridenSource.Status = status - return overridenSource -} - -// startTailer starts a new tailer for the container matching with the source. -func (l *Launcher) startTailer(container *Container, source *sources.LogSource) { - if l.shouldTailFromFile(container) { - l.scheduleFileSource(container, source) - } else { - l.startSocketTailer(container, source) - } -} - -func (l *Launcher) shouldTailFromFile(container *Container) bool { - if !l.tailFromFile { - return false - } - // Unsure this one is really useful, user could be instructed to clean up the registry - if l.forceTailingFromFile { - return true - } - // Check if there is a known offset for that container, if so keep tailing - // the container from the docker socket - registryID := fmt.Sprintf("docker:%s", container.service.Identifier) - offset := l.registry.GetOffset(registryID) - return offset == "" -} - -func (l *Launcher) scheduleFileSource(container *Container, source *sources.LogSource) { - containerID := container.service.Identifier - if _, isTailed := l.fileSourcesByContainer[containerID]; isTailed { - log.Warnf("Can't tail twice the same container: %v", dockerutilpkg.ShortContainerID(containerID)) - return - } - // fileSource is a new source using the original source as its parent - fileSource := l.getFileSource(container, source) - fileSource.source.ParentSource.HideFromStatus() - - // Keep source for later unscheduling - l.fileSourcesByContainer[containerID] = fileSource - l.sources.AddSource(fileSource.source) -} - -func (l *Launcher) unscheduleFileSource(containerID string) { - if sourcePair, exists := l.fileSourcesByContainer[containerID]; exists { - sourcePair.info.RemoveMessage(containerID) - delete(l.fileSourcesByContainer, containerID) - l.sources.RemoveSource(sourcePair.source) - } -} - -func (l *Launcher) startSocketTailer(container *Container, source *sources.LogSource) { - containerID := container.service.Identifier - if _, isTailed := l.getTailer(containerID); isTailed { - log.Warnf("Can't tail twice the same container: %v", dockerutilpkg.ShortContainerID(containerID)) - return - } - dockerutil, err := dockerutilpkg.GetDockerUtil() - if err != nil { - log.Warnf("Could not use docker client, logs for container %s won’t be collected: %v", containerID, err) - return - } - // overridenSource == source if the containerCollectAll option is not activated or the container has AD labels - overridenSource := l.overrideSource(container, source) - tailer := tailer.NewTailer(dockerutil, containerID, overridenSource, l.pipelineProvider.NextPipelineChan(), l.erroredContainerID, l.readTimeout) - - // compute the offset to prevent from missing or duplicating logs - since, err := Since(l.registry, tailer.Identifier()) - if err != nil { - log.Warnf("Could not recover tailing from last committed offset %v: %v", dockerutilpkg.ShortContainerID(containerID), err) - } - - // start the tailer - err = tailer.Start(since) - if err != nil { - log.Warnf("Could not start tailer %s: %v", containerID, err) - return - } - source.AddInput(containerID) - - // keep the tailer in track to stop it later on - l.addTailer(containerID, tailer) -} - -// stopTailer stops the tailer matching the containerID. -func (l *Launcher) stopTailer(containerID string) { - if l.tailFromFile { - l.unscheduleFileSource(containerID) - } else { - l.stopSocketTailer(containerID) - } -} - -func (l *Launcher) stopSocketTailer(containerID string) { - if tailer, isTailed := l.getTailer(containerID); isTailed { - // No-op if the tailer source came from AD - if l.collectAllSource != nil { - l.collectAllSource.RemoveInput(containerID) - l.collectAllInfo.RemoveMessage(containerID) - } - go tailer.Stop() - l.removeTailer(containerID) - } -} - -func (l *Launcher) restartTailer(containerID string) { - // It should never happen - if l.tailFromFile { - return - } - backoffDuration := backoffInitialDuration - cumulatedBackoff := 0 * time.Second - var source *sources.LogSource - - if oldTailer, exists := l.getTailer(containerID); exists { - source = oldTailer.Source - if l.collectAllSource != nil { - l.collectAllSource.RemoveInput(containerID) - l.collectAllInfo.RemoveMessage(containerID) - } - oldTailer.Stop() - l.removeTailer(containerID) - } else { - log.Warnf("Unable to restart tailer, old source not found, keeping previous one, container: %s", containerID) - return - } - - dockerutil, err := dockerutilpkg.GetDockerUtil() - if err != nil { - // This cannot happen since, if we have a tailer to restart, it means that we created - // it earlier and we couldn't have created it if the docker client wasn't initialized. - log.Warnf("Could not use docker client, logs for container %s won’t be collected: %v", containerID, err) - return - } - tailer := tailer.NewTailer(dockerutil, containerID, source, l.pipelineProvider.NextPipelineChan(), l.erroredContainerID, l.readTimeout) - - // compute the offset to prevent from missing or duplicating logs - since, err := Since(l.registry, tailer.Identifier()) - if err != nil { - log.Warnf("Could not recover last committed offset for container %v: %v", dockerutilpkg.ShortContainerID(containerID), err) - } - - for { - if backoffDuration > backoffMaxDuration { - log.Warnf("Could not resume tailing container %v", dockerutilpkg.ShortContainerID(containerID)) - return - } - - // start the tailer - err = tailer.Start(since) - if err != nil { - log.Warnf("Could not start tailer for container %v: %v", dockerutilpkg.ShortContainerID(containerID), err) - time.Sleep(backoffDuration) - cumulatedBackoff += backoffDuration - backoffDuration *= 2 - continue - } - // keep the tailer in track to stop it later on - l.addTailer(containerID, tailer) - source.AddInput(containerID) - return - } -} - -func (l *Launcher) addTailer(containerID string, tailer *tailer.Tailer) { - l.lock.Lock() - l.tailers[containerID] = tailer - l.lock.Unlock() -} - -func (l *Launcher) removeTailer(containerID string) { - l.lock.Lock() - delete(l.tailers, containerID) - l.lock.Unlock() -} - -func (l *Launcher) getTailer(containerID string) (*tailer.Tailer, bool) { - l.lock.Lock() - defer l.lock.Unlock() - tailer, exist := l.tailers[containerID] - return tailer, exist -} diff --git a/pkg/logs/internal/launchers/docker/launcher_nix.go b/pkg/logs/internal/launchers/docker/launcher_nix.go deleted file mode 100644 index 2a340355b18f1..0000000000000 --- a/pkg/logs/internal/launchers/docker/launcher_nix.go +++ /dev/null @@ -1,43 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker && !windows -// +build docker,!windows - -package docker - -import ( - "fmt" - "path/filepath" - - coreConfig "github.com/DataDog/datadog-agent/pkg/config" - - "golang.org/x/sys/unix" -) - -const ( - basePath = "/var/lib/docker/containers" - podmanBasePath = "/var/lib/containers/storage/overlay-containers" -) - -func checkReadAccess() error { - path := basePath - if coreConfig.Datadog.GetBool("logs_config.use_podman_logs") { - path = podmanBasePath - } - err := unix.Access(path, unix.X_OK) - if err != nil { - return fmt.Errorf("Error accessing %s: %w", path, err) - } - return nil -} - -// getPath returns the file path of the container log to tail. -func getPath(id string) string { - if coreConfig.Datadog.GetBool("logs_config.use_podman_logs") { - return filepath.Join(podmanBasePath, fmt.Sprintf("%s/userdata/ctr.log", id)) - } - return filepath.Join(basePath, id, fmt.Sprintf("%s-json.log", id)) -} diff --git a/pkg/logs/internal/launchers/docker/launcher_nix_test.go b/pkg/logs/internal/launchers/docker/launcher_nix_test.go deleted file mode 100644 index 0c2bf275cb475..0000000000000 --- a/pkg/logs/internal/launchers/docker/launcher_nix_test.go +++ /dev/null @@ -1,37 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker && !windows -// +build docker,!windows - -package docker - -import ( - "path/filepath" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/DataDog/datadog-agent/pkg/config" -) - -func TestGetPath(t *testing.T) { - t.Run("use_podman_logs=false", func(t *testing.T) { - mockConfig := config.Mock(t) - mockConfig.Set("logs_config.use_podman_logs", false) - - require.Equal(t, - filepath.Join(basePath, "123abc/123abc-json.log"), - getPath("123abc")) - }) - t.Run("use_podman_logs=true", func(t *testing.T) { - mockConfig := config.Mock(t) - mockConfig.Set("logs_config.use_podman_logs", true) - - require.Equal(t, - "/var/lib/containers/storage/overlay-containers/123abc/userdata/ctr.log", - getPath("123abc")) - }) -} diff --git a/pkg/logs/internal/launchers/docker/launcher_nodocker.go b/pkg/logs/internal/launchers/docker/launcher_nodocker.go deleted file mode 100644 index 9e5be1a7be660..0000000000000 --- a/pkg/logs/internal/launchers/docker/launcher_nodocker.go +++ /dev/null @@ -1,41 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !docker -// +build !docker - -package docker - -import ( - "time" - - "github.com/DataDog/datadog-agent/pkg/logs/auditor" - "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util/containersorpods" - "github.com/DataDog/datadog-agent/pkg/logs/pipeline" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/logs/sources" - "github.com/DataDog/datadog-agent/pkg/util/retry" -) - -// Launcher is not supported on non docker environment -type Launcher struct{} - -// NewLauncher returns a new Launcher -func NewLauncher(readTimeout time.Duration, psources *sources.LogSources, services *service.Services, cop containersorpods.Chooser, tailFromFile, forceTailingFromFile bool) *Launcher { - return &Launcher{} -} - -// IsAvailable retrurns false - not available -func IsAvailable() (bool, *retry.Retrier) { - return false, nil -} - -// Start does nothing -func (l *Launcher) Start(sourceProider launchers.SourceProvider, pipelineProvider pipeline.Provider, registry auditor.Registry) { -} - -// Stop does nothing -func (l *Launcher) Stop() {} diff --git a/pkg/logs/internal/launchers/docker/launcher_test.go b/pkg/logs/internal/launchers/docker/launcher_test.go deleted file mode 100644 index 86a3b53ee5906..0000000000000 --- a/pkg/logs/internal/launchers/docker/launcher_test.go +++ /dev/null @@ -1,189 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker -// +build docker - -package docker - -import ( - "reflect" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/logs/internal/status" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/logs/sources" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" - - "github.com/docker/docker/api/types" -) - -func init() { - workloadmeta.CreateGlobalStore(nil) -} - -func TestOverrideSourceServiceNameOrder(t *testing.T) { - tests := []struct { - name string - sFunc func(string, string) string - container *Container - source *sources.LogSource - wantServiceName string - }{ - { - name: "log config", - sFunc: func(n, e string) string { return "stdServiceName" }, - container: &Container{ - container: types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - Name: "fooName", - Image: "fooImage", - }, - }, - }, - source: &sources.LogSource{ - Name: "from container", - Config: &config.LogsConfig{ - Service: "configServiceName", - }, - }, - wantServiceName: "configServiceName", - }, - { - name: "standard tags", - sFunc: func(n, e string) string { return "stdServiceName" }, - container: &Container{ - container: types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - Name: "fooName", - Image: "fooImage", - }, - }, - }, - source: &sources.LogSource{ - Name: "from container", - Config: &config.LogsConfig{}, - }, - wantServiceName: "stdServiceName", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - l := &Launcher{ - serviceNameFunc: tt.sFunc, - } - if got := l.overrideSource(tt.container, tt.source); !reflect.DeepEqual(got.Config.Service, tt.wantServiceName) { - t.Errorf("Launcher.overrideSource() = %v, want %v", got.Config.Service, tt.wantServiceName) - } - }) - } -} - -func TestNewOverridenSourceServiceNameOrder(t *testing.T) { - tests := []struct { - name string - standardService string - shortName string - status *status.LogStatus - wantServiceName string - }{ - { - name: "standard svc name", - standardService: "stdServiceName", - shortName: "fooName", - status: status.NewLogStatus(), - wantServiceName: "stdServiceName", - }, - { - name: "image name", - standardService: "", - shortName: "fooName", - status: status.NewLogStatus(), - wantServiceName: "fooName", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := newOverridenSource(tt.standardService, tt.shortName, tt.status); !reflect.DeepEqual(got.Config.Service, tt.wantServiceName) { - t.Errorf("newOverridenSource() = %v, want %v", got.Config.Service, tt.wantServiceName) - } - }) - } -} - -func TestGetFileSource(t *testing.T) { - - testRules := []*config.ProcessingRule{ - {Name: "foo", Type: config.IncludeAtMatch, Pattern: "[[:alnum:]]{5}"}, - {Name: "bar", Type: config.ExcludeAtMatch, Pattern: "^plop"}, - {Name: "baz", Type: config.MultiLine, Pattern: "[0-9]"}, - } - tests := []struct { - name string - sFunc func(string, string) string - container *Container - source *sources.LogSource - wantServiceName string - wantSourceName string - wantPath string - wantTags []string - wantRules []*config.ProcessingRule - }{ - { - name: "service name from log config", - sFunc: func(n, e string) string { return "stdServiceName" }, - container: &Container{ - container: types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - Name: "fooName", - Image: "fooImage", - }, - }, - service: &service.Service{Identifier: "123456"}, - }, - source: sources.NewLogSource("from container", &config.LogsConfig{Service: "configServiceName", Source: "configSourceName", Tags: []string{"foo:bar", "foo:baz"}}), - wantServiceName: "configServiceName", - wantSourceName: "configSourceName", - wantPath: "/var/lib/docker/containers/123456/123456-json.log", - wantTags: []string{"foo:bar", "foo:baz"}, - }, - { - name: "service name from standard tags", - sFunc: func(n, e string) string { return "stdServiceName" }, - container: &Container{ - container: types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - Name: "fooName", - Image: "fooImage", - }, - }, - service: &service.Service{Identifier: "123456"}, - }, - source: sources.NewLogSource("from container", &config.LogsConfig{ProcessingRules: testRules, Source: "stdSourceName"}), - wantServiceName: "stdServiceName", - wantSourceName: "stdSourceName", - wantPath: "/var/lib/docker/containers/123456/123456-json.log", - wantRules: testRules, - wantTags: nil, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - l := &Launcher{ - serviceNameFunc: tt.sFunc, - } - fileSource := l.getFileSource(tt.container, tt.source) - assert.Equal(t, config.FileType, fileSource.source.Config.Type) - assert.Equal(t, tt.container.service.Identifier, fileSource.source.Config.Identifier) - assert.Equal(t, tt.wantServiceName, fileSource.source.Config.Service) - assert.Equal(t, tt.wantSourceName, fileSource.source.Config.Source) - assert.Equal(t, tt.wantTags, fileSource.source.Config.Tags) - assert.Equal(t, tt.wantRules, fileSource.source.Config.ProcessingRules) - }) - } -} diff --git a/pkg/logs/internal/launchers/docker/launcher_windows.go b/pkg/logs/internal/launchers/docker/launcher_windows.go deleted file mode 100644 index fd2220559f1a3..0000000000000 --- a/pkg/logs/internal/launchers/docker/launcher_windows.go +++ /dev/null @@ -1,30 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker && windows -// +build docker,windows - -package docker - -import ( - "fmt" - "os" - "path/filepath" -) - -const ( - basePath = "c:\\programdata\\docker\\containers" -) - -func checkReadAccess() error { - // We need read access to the docker folder - _, err := os.ReadDir(basePath) - return err -} - -// getPath returns the file path of the container log to tail. -func getPath(id string) string { - return filepath.Join(basePath, id, fmt.Sprintf("%s-json.log", id)) -} diff --git a/pkg/logs/internal/launchers/docker/launcher_windows_test.go b/pkg/logs/internal/launchers/docker/launcher_windows_test.go deleted file mode 100644 index 66d9577f20584..0000000000000 --- a/pkg/logs/internal/launchers/docker/launcher_windows_test.go +++ /dev/null @@ -1,84 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker && windows -// +build docker,windows - -package docker - -import ( - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/logs/sources" - - "github.com/docker/docker/api/types" -) - -func TestGetFileSourceOnWindows(t *testing.T) { - tests := []struct { - name string - sFunc func(string, string) string - container *Container - source *sources.LogSource - wantServiceName string - wantPath string - }{ - { - name: "service name from log config", - sFunc: func(n, e string) string { return "stdServiceName" }, - container: &Container{ - container: types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - Name: "fooName", - Image: "fooImage", - }, - }, - service: &service.Service{Identifier: "123456"}, - }, - source: sources.NewLogSource("from container", &config.LogsConfig{Service: "configServiceName"}), - wantServiceName: "configServiceName", - wantPath: "c:\\programdata\\docker\\containers\\123456\\123456-json.log", - }, - { - name: "service name from standard tags", - sFunc: func(n, e string) string { return "stdServiceName" }, - container: &Container{ - container: types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - Name: "fooName", - Image: "fooImage", - }, - }, - service: &service.Service{Identifier: "123456"}, - }, - source: sources.NewLogSource("from container", &config.LogsConfig{}), - wantServiceName: "stdServiceName", - wantPath: "c:\\programdata\\docker\\containers\\123456\\123456-json.log", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - l := &Launcher{ - serviceNameFunc: tt.sFunc, - } - fileSource := l.getFileSource(tt.container, tt.source) - assert.Equal(t, config.FileType, fileSource.source.Config.Type) - assert.Equal(t, tt.container.service.Identifier, fileSource.source.Config.Identifier) - assert.Equal(t, tt.wantServiceName, fileSource.source.Config.Service) - }) - } -} - -func TestGetPath(t *testing.T) { - require.Equal(t, - filepath.Join(basePath, "123abc/123abc-json.log"), - getPath("123abc")) -} diff --git a/pkg/logs/internal/launchers/docker/since.go b/pkg/logs/internal/launchers/docker/since.go deleted file mode 100644 index 6d75e50884adc..0000000000000 --- a/pkg/logs/internal/launchers/docker/since.go +++ /dev/null @@ -1,44 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker -// +build docker - -package docker - -import ( - "time" - - "github.com/DataDog/datadog-agent/pkg/logs/auditor" - "github.com/DataDog/datadog-agent/pkg/logs/config" -) - -// Since returns the date from when logs should be collected. -func Since(registry auditor.Registry, identifier string) (time.Time, error) { - var since time.Time - var err error - offset := registry.GetOffset(identifier) - switch { - case isEOFCorruptedOffset(offset): - since = time.Time{} - case offset != "": - // an offset was registered, tail from the offset - since, err = time.Parse(config.DateFormat, offset) - if err != nil { - since = time.Now().UTC() - } - default: - // a new service has been discovered and was launched after the agent start, tail from the beginning - since = time.Time{} - } - return since, err -} - -// isEOFCorruptedOffset return true if the offset doesn't contain a -// valid timestamp value due to a file rotation. -func isEOFCorruptedOffset(offset string) bool { - // check if the offset value is equal to EOF char - return len(offset) > 0 && offset[0] == 0x03 -} diff --git a/pkg/logs/internal/launchers/docker/since_test.go b/pkg/logs/internal/launchers/docker/since_test.go deleted file mode 100644 index 601704c243756..0000000000000 --- a/pkg/logs/internal/launchers/docker/since_test.go +++ /dev/null @@ -1,47 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build docker -// +build docker - -package docker - -import ( - "testing" - "time" - - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/logs/auditor/mock" - "github.com/DataDog/datadog-agent/pkg/logs/config" -) - -func TestSince(t *testing.T) { - now := time.Now().UTC().Add(-5 * time.Second) - registry := mock.NewRegistry() - - var since time.Time - var err error - - since, err = Since(registry, "") - assert.Nil(t, err) - assert.Equal(t, time.Time{}, since) - - registry.SetOffset("2008-01-12T01:01:01.000000001Z") - since, err = Since(registry, "") - assert.Nil(t, err) - assert.Equal(t, "2008-01-12T01:01:01.000000001Z", since.Format(config.DateFormat)) - - // Not properly formated - registry.SetOffset("2008-01-12T01:01.000000001Z") - since, err = Since(registry, "") - assert.NotNil(t, err) - assert.True(t, since.After(now)) - - registry.SetOffset("foo") - since, err = Since(registry, "") - assert.NotNil(t, err) - assert.True(t, since.After(now)) -} diff --git a/pkg/logs/internal/launchers/kubernetes/launcher.go b/pkg/logs/internal/launchers/kubernetes/launcher.go deleted file mode 100644 index b5a2206f191c7..0000000000000 --- a/pkg/logs/internal/launchers/kubernetes/launcher.go +++ /dev/null @@ -1,319 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubelet -// +build kubelet - -package kubernetes - -import ( - "context" - "fmt" - "os" - "path/filepath" - - "github.com/DataDog/datadog-agent/pkg/logs/auditor" - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util/containersorpods" - "github.com/DataDog/datadog-agent/pkg/logs/pipeline" - "github.com/DataDog/datadog-agent/pkg/logs/service" - sourcesPkg "github.com/DataDog/datadog-agent/pkg/logs/sources" - "github.com/DataDog/datadog-agent/pkg/util/containers" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" -) - -const ( - basePath = "/var/log/pods" - anyLogFile = "*.log" - anyV19LogFile = "%s_*.log" -) - -var errCollectAllDisabled = fmt.Errorf("%s disabled", config.ContainerCollectAll) - -// Launcher looks for new and deleted pods to create or delete one logs-source per container. -type Launcher struct { - sources *sourcesPkg.LogSources - services *service.Services - cop containersorpods.Chooser - sourcesByContainer map[string]*sourcesPkg.LogSource - stopped chan struct{} - collectAll bool - serviceNameFunc func(string, string) string // serviceNameFunc gets the service name from the tagger, it is in a separate field for testing purpose - workloadmetaStore workloadmeta.Store - - // ctx is the context for the running goroutine, set in Start - ctx context.Context - - // cancel cancels the running goroutine - cancel context.CancelFunc -} - -// NewLauncher returns a new launcher. -func NewLauncher(sources *sourcesPkg.LogSources, services *service.Services, cop containersorpods.Chooser, collectAll bool) *Launcher { - launcher := &Launcher{ - sources: sources, - services: services, - cop: cop, - sourcesByContainer: make(map[string]*sourcesPkg.LogSource), - stopped: make(chan struct{}), - collectAll: collectAll, - serviceNameFunc: util.ServiceNameFromTags, - workloadmetaStore: workloadmeta.GetGlobalStore(), - } - return launcher -} - -// Start starts the launcher -func (l *Launcher) Start(sourceProvider launchers.SourceProvider, pipelineProvider pipeline.Provider, registry auditor.Registry) { - // only start this launcher once it's determined that we should be logging containers, and not pods. - l.ctx, l.cancel = context.WithCancel(context.Background()) - go l.run(sourceProvider, pipelineProvider, registry) -} - -// Stop stops the launcher -func (l *Launcher) Stop() { - if l.cancel != nil { - l.cancel() - } - - // only stop this launcher once it's determined that we should be logging - // pods, and not containers, but do not block trying to find out. - if l.cop.Get() == containersorpods.LogPods { - l.stopped <- struct{}{} - } -} - -// run handles new and deleted pods, -// the kubernetes launcher consumes new and deleted services pushed by the autodiscovery -func (l *Launcher) run(sourceProvider launchers.SourceProvider, pipelineProvider pipeline.Provider, registry auditor.Registry) { - // if we're not logging pods, then there's nothing to do - if l.cop.Wait(l.ctx) != containersorpods.LogPods { - return - } - - log.Info("Starting Kubernetes launcher") - addedServices := l.services.GetAllAddedServices() - removedServices := l.services.GetAllRemovedServices() - - for { - select { - case service := <-addedServices: - l.addSource(service) - case service := <-removedServices: - l.removeSource(service) - case <-l.stopped: - log.Info("Kubernetes launcher stopped") - return - } - } -} - -// addSource creates a new log-source from a service by resolving the -// pod linked to the entityID of the service -func (l *Launcher) addSource(svc *service.Service) { - // If the container is already tailed, we don't do anything - // That shoudn't happen - if _, exists := l.sourcesByContainer[svc.GetEntityID()]; exists { - log.Warnf("A source already exist for container %v", svc.GetEntityID()) - return - } - - source, err := l.getSource(svc) - if err != nil { - if err != errCollectAllDisabled { - log.Warnf("Invalid configuration for service %q: %v", svc.GetEntityID(), err) - } - return - } - - switch svc.Type { - case config.DockerType: - source.SetSourceType(sourcesPkg.DockerSourceType) - default: - source.SetSourceType(sourcesPkg.KubernetesSourceType) - } - - l.sourcesByContainer[svc.GetEntityID()] = source - l.sources.AddSource(source) -} - -// removeSource removes a new log-source from a service -func (l *Launcher) removeSource(service *service.Service) { - containerID := service.GetEntityID() - if source, exists := l.sourcesByContainer[containerID]; exists { - delete(l.sourcesByContainer, containerID) - l.sources.RemoveSource(source) - } -} - -// kubernetesIntegration represents the name of the integration. -const kubernetesIntegration = "kubernetes" - -func (l *Launcher) getSource(svc *service.Service) (*sourcesPkg.LogSource, error) { - containerID := svc.Identifier - - pod, err := l.workloadmetaStore.GetKubernetesPodForContainer(containerID) - if err != nil { - return nil, fmt.Errorf("cannot find pod for container %q: %w", containerID, err) - } - - var container *workloadmeta.OrchestratorContainer - for _, pc := range pod.Containers { - if pc.ID == containerID { - container = &pc - break - } - } - - if container == nil { - return nil, fmt.Errorf("cannot find container %q in pod %q", containerID, pod.Name) - } - - runtimeContainer, err := l.workloadmetaStore.GetContainer(containerID) - if err != nil { - return nil, fmt.Errorf("cannot find container %q: %w", containerID, err) - } - var cfg *config.LogsConfig - - if annotation := l.getAnnotation(container.Name, pod.Annotations); annotation != "" { - configs, err := config.ParseJSON([]byte(annotation)) - if err != nil || len(configs) == 0 { - return nil, fmt.Errorf("could not parse kubernetes annotation %v", annotation) - } - - // We may have more than one log configuration in the annotation, ignore those - // unrelated to containers - containerType := string(runtimeContainer.Runtime) - for _, c := range configs { - if c.Type == "" || c.Type == containerType { - cfg = c - break - } - } - - if cfg == nil { - log.Debugf("annotation found: %v, for pod %v, container %v, but no config was usable for container log collection", annotation, pod.Name, container.Name) - } - } - - standardService := l.serviceNameFunc(container.Name, containers.BuildTaggerEntityName(containerID)) - - if cfg == nil { - if !l.collectAll { - return nil, errCollectAllDisabled - } - // The logs source is the short image name - logsSource := "" - shortImageName := container.Image.ShortName - if shortImageName == "" { - log.Debugf("Couldn't get short image for container %q: empty ShortName", container.Name) - // Fallback and use `kubernetes` as source name - logsSource = kubernetesIntegration - } else { - logsSource = shortImageName - } - - if standardService != "" { - cfg = &config.LogsConfig{ - Source: logsSource, - Service: standardService, - } - } else { - cfg = &config.LogsConfig{ - Source: logsSource, - Service: logsSource, - } - } - } - - if cfg.Service == "" && standardService != "" { - cfg.Service = standardService - } - - cfg.Type = config.FileType - cfg.Path = l.getPath(basePath, pod, container.Name) - cfg.Identifier = container.ID - if err := cfg.Validate(); err != nil { - return nil, fmt.Errorf("invalid kubernetes annotation: %v", err) - } - - sourceName := fmt.Sprintf("%s/%s/%s", pod.Namespace, pod.Name, container.Name) - - return sourcesPkg.NewLogSource(sourceName, cfg), nil -} - -// configPath refers to the configuration that can be passed over a pod annotation, -// this feature is commonly named 'ad' or 'autodiscovery'. -// The pod annotation must respect the format: ad.datadoghq.com/.logs: '[{...}]'. -const ( - configPathPrefix = "ad.datadoghq.com" - configPathSuffix = "logs" -) - -// getConfigPath returns the path of the logs-config annotation for container. -func (l *Launcher) getConfigPath(containerName string) string { - return fmt.Sprintf("%s/%s.%s", configPathPrefix, containerName, configPathSuffix) -} - -// getAnnotation returns the logs-config annotation for container if present. -// FIXME: Reuse the annotation logic from AD -func (l *Launcher) getAnnotation(containerName string, annotations map[string]string) string { - configPath := l.getConfigPath(containerName) - if annotation, exists := annotations[configPath]; exists { - return annotation - } - return "" -} - -// getPath returns a wildcard matching with any logs file of container in pod. -func (l *Launcher) getPath(basePath string, pod *workloadmeta.KubernetesPod, containerName string) string { - // the pattern for container logs is different depending on the version of Kubernetes - // so we need to try three possbile formats - // until v1.9 it was `/var/log/pods/{pod_uid}/{container_name_n}.log`, - // v.1.10 to v1.13 it was `/var/log/pods/{pod_uid}/{container_name}/{n}.log`, - // since v1.14 it is `/var/log/pods/{pod_namespace}_{pod_name}_{pod_uid}/{container_name}/{n}.log`. - // see: https://github.com/kubernetes/kubernetes/pull/74441 for more information. - oldDirectory := filepath.Join(basePath, l.getPodDirectoryUntil1_13(pod)) - if _, err := os.Stat(oldDirectory); err == nil { - v110Dir := filepath.Join(oldDirectory, containerName) - _, err := os.Stat(v110Dir) - if err == nil { - log.Debugf("Logs path found for container %s, v1.13 >= kubernetes version >= v1.10", containerName) - return filepath.Join(v110Dir, anyLogFile) - } - if !os.IsNotExist(err) { - log.Debugf("Cannot get file info for %s: %v", v110Dir, err) - } - - v19Files := filepath.Join(oldDirectory, fmt.Sprintf(anyV19LogFile, containerName)) - files, err := filepath.Glob(v19Files) - if err == nil && len(files) > 0 { - log.Debugf("Logs path found for container %s, kubernetes version <= v1.9", containerName) - return v19Files - } - if err != nil { - log.Debugf("Cannot get file info for %s: %v", v19Files, err) - } - if len(files) == 0 { - log.Debugf("Files matching %s not found", v19Files) - } - } - - log.Debugf("Using the latest kubernetes logs path for container %s", containerName) - return filepath.Join(basePath, l.getPodDirectorySince1_14(pod), containerName, anyLogFile) -} - -// getPodDirectoryUntil1_13 returns the name of the directory of pod containers until Kubernetes v1.13. -func (l *Launcher) getPodDirectoryUntil1_13(pod *workloadmeta.KubernetesPod) string { - return pod.ID -} - -// getPodDirectorySince1_14 returns the name of the directory of pod containers since Kubernetes v1.14. -func (l *Launcher) getPodDirectorySince1_14(pod *workloadmeta.KubernetesPod) string { - return fmt.Sprintf("%s_%s_%s", pod.Namespace, pod.Name, pod.ID) -} diff --git a/pkg/logs/internal/launchers/kubernetes/launcher_nokubelet.go b/pkg/logs/internal/launchers/kubernetes/launcher_nokubelet.go deleted file mode 100644 index 656bae8dbcce4..0000000000000 --- a/pkg/logs/internal/launchers/kubernetes/launcher_nokubelet.go +++ /dev/null @@ -1,39 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !kubelet -// +build !kubelet - -package kubernetes - -import ( - "github.com/DataDog/datadog-agent/pkg/logs/auditor" - "github.com/DataDog/datadog-agent/pkg/logs/internal/launchers" - "github.com/DataDog/datadog-agent/pkg/logs/internal/util/containersorpods" - "github.com/DataDog/datadog-agent/pkg/logs/pipeline" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/logs/sources" - "github.com/DataDog/datadog-agent/pkg/util/retry" -) - -// Launcher is not supported on no kubelet environment -type Launcher struct{} - -// NewLauncher returns a new launcher -func NewLauncher(sources *sources.LogSources, services *service.Services, cop containersorpods.Chooser, collectAll bool) *Launcher { - return &Launcher{} -} - -// IsAvailable retrurns false - not available -func IsAvailable() (bool, *retry.Retrier) { - return false, nil -} - -// Start does nothing -func (l *Launcher) Start(sourceProider launchers.SourceProvider, pipelineProvider pipeline.Provider, registry auditor.Registry) { -} - -// Stop does nothing -func (l *Launcher) Stop() {} diff --git a/pkg/logs/internal/launchers/kubernetes/launcher_test.go b/pkg/logs/internal/launchers/kubernetes/launcher_test.go deleted file mode 100644 index c21ed41470123..0000000000000 --- a/pkg/logs/internal/launchers/kubernetes/launcher_test.go +++ /dev/null @@ -1,436 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubelet -// +build kubelet - -package kubernetes - -import ( - "os" - "path/filepath" - "testing" - - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/logs/service" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" - workloadmetatesting "github.com/DataDog/datadog-agent/pkg/workloadmeta/testing" - - "github.com/stretchr/testify/assert" -) - -func TestGetSource(t *testing.T) { - launcher := getLauncher(true) - store := workloadmetatesting.NewStore() - - store.Set(&workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "baz", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "fuz", - Namespace: "buu", - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "boo", - Name: "foo", - Image: workloadmeta.ContainerImage{ - ShortName: "bar", - }, - }, - }, - }) - - store.Set(getBareContainer("boo", "fuz-bar-bas")) - - launcher.workloadmetaStore = store - - source, err := launcher.getSource(&service.Service{ - Type: "docker", - Identifier: "boo", - }) - - assert.Nil(t, err) - assert.Equal(t, config.FileType, source.Config.Type) - assert.Equal(t, "buu/fuz/foo", source.Name) - assert.Equal(t, "/var/log/pods/buu_fuz_baz/foo/*.log", filepath.ToSlash(source.Config.Path)) - assert.Equal(t, "boo", source.Config.Identifier) - assert.Equal(t, "bar", source.Config.Source) - assert.Equal(t, "bar", source.Config.Service) -} - -func TestGetSourceShouldBeOverridenByAutoDiscoveryAnnotation(t *testing.T) { - launcher := getLauncher(true) - store := workloadmetatesting.NewStore() - - store.Set(&workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "baz", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "fuz", - Namespace: "buu", - Annotations: map[string]string{ - "ad.datadoghq.com/foo.logs": `[{"source":"any_source","service":"any_service","tags":["tag1","tag2"]}]`, - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "boo", - Name: "foo", - Image: workloadmeta.ContainerImage{ - ShortName: "bar", - }, - }, - }, - }) - - store.Set(getBareContainer("boo", "fuz-bar-baz")) - - launcher.workloadmetaStore = store - - source, err := launcher.getSource(&service.Service{ - Type: "docker", - Identifier: "boo", - }) - - assert.Nil(t, err) - assert.Equal(t, config.FileType, source.Config.Type) - assert.Equal(t, "buu/fuz/foo", source.Name) - assert.Equal(t, "/var/log/pods/buu_fuz_baz/foo/*.log", filepath.ToSlash(source.Config.Path)) - assert.Equal(t, "boo", source.Config.Identifier) - assert.Equal(t, "any_source", source.Config.Source) - assert.Equal(t, "any_service", source.Config.Service) - assert.ElementsMatch(t, source.Config.Tags, []string{"tag1", "tag2"}) -} - -func TestGetSourceShouldFailWithInvalidAutoDiscoveryAnnotation(t *testing.T) { - launcher := getLauncher(true) - store := workloadmetatesting.NewStore() - - store.Set(&workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "baz", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "fuz", - Namespace: "buu", - Annotations: map[string]string{ - // missing [ ] - "ad.datadoghq.com/foo.logs": `{"source":"any_source","service":"any_service","tags":["tag1","tag2"]}`, - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "boo", - Name: "foo", - Image: workloadmeta.ContainerImage{ - ShortName: "bar", - }, - }, - }, - }) - - store.Set(getBareContainer("boo", "fuz-bar-baz")) - - launcher.workloadmetaStore = store - - source, err := launcher.getSource(&service.Service{ - Type: "docker", - Identifier: "boo", - }) - - assert.NotNil(t, err) - assert.Nil(t, source) -} - -func TestContainerCollectAll(t *testing.T) { - launcherCollectAll := getLauncher(true) - launcherCollectAllDisabled := getLauncher(false) - - store := workloadmetatesting.NewStore() - - store.Set(&workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "podfoo", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "fuz", - Namespace: "buu", - Annotations: map[string]string{ - "ad.datadoghq.com/foo.logs": `[{"source":"any_source","service":"any_service"}]`, - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "foo", - Name: "foo", - }, - { - ID: "bar", - Name: "bar", - }, - }, - }) - - store.Set(getBareContainer("foo", "foo")) - store.Set(getBareContainer("bar", "bar")) - - launcherCollectAll.workloadmetaStore = store - launcherCollectAllDisabled.workloadmetaStore = store - - source, err := launcherCollectAll.getSource(&service.Service{ - Type: "docker", - Identifier: "foo", - }) - assert.Nil(t, err) - assert.Equal(t, "foo", source.Config.Identifier) - - source, err = launcherCollectAll.getSource(&service.Service{ - Type: "docker", - Identifier: "bar", - }) - assert.Nil(t, err) - assert.Equal(t, "bar", source.Config.Identifier) - - source, err = launcherCollectAllDisabled.getSource(&service.Service{ - Type: "docker", - Identifier: "foo", - }) - assert.Nil(t, err) - assert.Equal(t, "foo", source.Config.Identifier) - - source, err = launcherCollectAllDisabled.getSource(&service.Service{ - Type: "docker", - Identifier: "bar", - }) - assert.Equal(t, errCollectAllDisabled, err) - assert.Nil(t, source) -} - -func TestGetPath(t *testing.T) { - launcher := getLauncher(true) - container := "foo" - pod := &workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - ID: "baz", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "fuz", - Namespace: "buu", - }, - } - - basePath := t.TempDir() - - // v1.14+ (default) - podDirectory := "buu_fuz_baz" - path := launcher.getPath(basePath, pod, container) - assert.Equal(t, filepath.Join(basePath, podDirectory, "foo", "*.log"), path) - - // v1.10 - v1.13 - podDirectory = "baz" - containerDirectory := "foo" - - err := os.MkdirAll(filepath.Join(basePath, podDirectory, containerDirectory), 0777) - assert.Nil(t, err) - - path = launcher.getPath(basePath, pod, container) - assert.Equal(t, filepath.Join(basePath, podDirectory, "foo", "*.log"), path) - - // v1.9 - os.RemoveAll(basePath) - podDirectory = "baz" - logFile := "foo_1.log" - - err = os.MkdirAll(filepath.Join(basePath, podDirectory), 0777) - assert.Nil(t, err) - - f, err := os.Create(filepath.Join(basePath, podDirectory, logFile)) - assert.Nil(t, err) - t.Cleanup(func() { - assert.NoError(t, f.Close()) - }) - - path = launcher.getPath(basePath, pod, container) - assert.Equal(t, filepath.Join(basePath, podDirectory, "foo_*.log"), path) -} - -func TestGetSourceServiceNameOrder(t *testing.T) { - tests := []struct { - name string - sFunc func(string, string) string - pod *workloadmeta.KubernetesPod - container *workloadmeta.Container - wantServiceName string - wantSourceName string - wantErr bool - }{ - { - name: "log config", - sFunc: func(n, e string) string { return "stdServiceName" }, - pod: &workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "podUIDFoo", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "podName", - Namespace: "podNamespace", - Annotations: map[string]string{ - "ad.datadoghq.com/fooName.logs": `[{"source":"foo","service":"annotServiceName"}]`, - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "fooID", - Name: "fooName", - Image: workloadmeta.ContainerImage{ - ShortName: "fooImage", - }, - }, - }, - }, - container: getBareContainer("fooID", "fooName"), - wantServiceName: "annotServiceName", - wantSourceName: "foo", - wantErr: false, - }, - { - name: "standard tags", - sFunc: func(n, e string) string { return "stdServiceName" }, - pod: &workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "podUIDFoo", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "podName", - Namespace: "podNamespace", - Annotations: map[string]string{ - "ad.datadoghq.com/fooName.logs": `[{"source":"foo"}]`, - }, - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "fooID", - Name: "fooName", - Image: workloadmeta.ContainerImage{ - ShortName: "fooImage", - }, - }, - }, - }, - container: getBareContainer("fooID", "fooName"), - wantServiceName: "stdServiceName", - wantSourceName: "foo", - wantErr: false, - }, - { - name: "standard tags, undefined source, use image as source", - sFunc: func(n, e string) string { return "stdServiceName" }, - pod: &workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "podUIDFoo", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "podName", - Namespace: "podNamespace", - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "fooID", - Name: "fooName", - Image: workloadmeta.ContainerImage{ - ShortName: "fooImage", - }, - }, - }, - }, - container: getBareContainer("fooID", "fooName"), - wantServiceName: "stdServiceName", - wantSourceName: "fooImage", - wantErr: false, - }, - { - name: "image name", - sFunc: func(n, e string) string { return "" }, - pod: &workloadmeta.KubernetesPod{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindKubernetesPod, - ID: "podUIDFoo", - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: "podName", - Namespace: "podNamespace", - }, - Containers: []workloadmeta.OrchestratorContainer{ - { - ID: "fooID", - Name: "fooName", - Image: workloadmeta.ContainerImage{ - ShortName: "fooImage", - }, - }, - }, - }, - container: getBareContainer("fooID", "fooName"), - wantServiceName: "fooImage", - wantSourceName: "fooImage", - wantErr: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - store := workloadmetatesting.NewStore() - store.Set(tt.container) - store.Set(tt.pod) - l := &Launcher{ - collectAll: true, - serviceNameFunc: tt.sFunc, - workloadmetaStore: store, - } - - got, err := l.getSource(&service.Service{ - Type: string(tt.container.Runtime), - Identifier: tt.container.ID, - }) - - if (err != nil) != tt.wantErr { - t.Errorf("Launcher.getSource() error = %v, wantErr %v", err, tt.wantErr) - return - } - assert.Equal(t, tt.wantServiceName, got.Config.Service) - assert.Equal(t, tt.wantSourceName, got.Config.Source) - }) - } -} - -func getBareContainer(id, name string) *workloadmeta.Container { - return &workloadmeta.Container{ - EntityID: workloadmeta.EntityID{ - Kind: workloadmeta.KindContainer, - ID: id, - }, - EntityMeta: workloadmeta.EntityMeta{ - Name: name, - }, - Runtime: workloadmeta.ContainerRuntimeDocker, - } -} - -func getLauncher(collectAll bool) *Launcher { - return &Launcher{ - collectAll: collectAll, - serviceNameFunc: func(string, string) string { return "" }, - } -} diff --git a/pkg/logs/internal/tailers/file/tailer.go b/pkg/logs/internal/tailers/file/tailer.go index aaae3a4054230..433542369fda1 100644 --- a/pkg/logs/internal/tailers/file/tailer.go +++ b/pkg/logs/internal/tailers/file/tailer.go @@ -213,12 +213,12 @@ func (t *Tailer) StopAfterFileRotation() { go func() { time.Sleep(t.closeTimeout) if newBytesRead := t.Source().BytesRead.Get() - bytesReadAtRotationTime; newBytesRead > 0 { - log.Infof("After rotation close timeout (%ds), an additional %d bytes were read from file %q", t.closeTimeout, newBytesRead, t.file.Path) + log.Infof("After rotation close timeout (%s), an additional %d bytes were read from file %q", t.closeTimeout, newBytesRead, t.file.Path) fileStat, err := t.osFile.Stat() if err != nil { log.Warnf("During rotation close, unable to determine total file size for %q, err: %v", t.file.Path, err) } else if remainingBytes := fileStat.Size() - t.lastReadOffset.Load(); remainingBytes > 0 { - log.Warnf("After rotation close timeout (%ds), there were %d bytes remaining unread for file %q. These unread logs are now lost. Consider increasing DD_LOGS_CONFIG_CLOSE_TIMEOUT", t.closeTimeout, remainingBytes, t.file.Path) + log.Warnf("After rotation close timeout (%s), there were %d bytes remaining unread for file %q. These unread logs are now lost. Consider increasing DD_LOGS_CONFIG_CLOSE_TIMEOUT", t.closeTimeout, remainingBytes, t.file.Path) } } t.stopForward() diff --git a/pkg/logs/logs.go b/pkg/logs/logs.go index b08ab61335a5f..e91df95a63550 100644 --- a/pkg/logs/logs.go +++ b/pkg/logs/logs.go @@ -23,10 +23,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/logs/config" "github.com/DataDog/datadog-agent/pkg/logs/diagnostic" adScheduler "github.com/DataDog/datadog-agent/pkg/logs/schedulers/ad" - ccaScheduler "github.com/DataDog/datadog-agent/pkg/logs/schedulers/cca" "github.com/DataDog/datadog-agent/pkg/logs/service" "github.com/DataDog/datadog-agent/pkg/logs/status" - ddUtil "github.com/DataDog/datadog-agent/pkg/util" ) const ( @@ -135,9 +133,6 @@ func start(ac *autodiscovery.AutoConfig, serverless bool) (*Agent, error) { panic("AutoConfig must be initialized before logs-agent") } agent.AddScheduler(adScheduler.New(ac)) - if !ddUtil.CcaInAD() { - agent.AddScheduler(ccaScheduler.New(ac)) - } } return agent, nil diff --git a/pkg/logs/schedulers/ad/scheduler.go b/pkg/logs/schedulers/ad/scheduler.go index aabe0cbec9961..2b800c423773a 100644 --- a/pkg/logs/schedulers/ad/scheduler.go +++ b/pkg/logs/schedulers/ad/scheduler.go @@ -19,7 +19,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/logs/schedulers" "github.com/DataDog/datadog-agent/pkg/logs/service" sourcesPkg "github.com/DataDog/datadog-agent/pkg/logs/sources" - ddUtil "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/containers" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -78,23 +77,6 @@ func (s *Scheduler) Schedule(configs []integration.Config) { for _, source := range sources { s.mgr.AddSource(source) } - case !ddUtil.CcaInAD() && s.newService(config): - entityType, _, err := s.parseEntity(config.TaggerEntity) - if err != nil { - log.Warnf("Invalid service: %v", err) - continue - } - // logs only consider container services - if entityType != containers.ContainerEntityName { - continue - } - log.Infof("Received a new service: %v", config.ServiceID) - service, err := s.toService(config) - if err != nil { - log.Warnf("Invalid service: %v", err) - continue - } - s.mgr.AddService(service) default: // invalid integration config continue @@ -131,24 +113,6 @@ func (s *Scheduler) Unschedule(configs []integration.Config) { s.mgr.RemoveSource(source) } } - case !ddUtil.CcaInAD() && s.newService(config): - // new service to remove - entityType, _, err := s.parseEntity(config.TaggerEntity) - if err != nil { - log.Warnf("Invalid service: %v", err) - continue - } - // logs only consider container services - if entityType != containers.ContainerEntityName { - continue - } - log.Infof("New service to remove: entity: %v", config.ServiceID) - service, err := s.toService(config) - if err != nil { - log.Warnf("Invalid service: %v", err) - continue - } - s.mgr.RemoveService(service) default: // invalid integration config continue @@ -161,11 +125,6 @@ func (s *Scheduler) newSources(config integration.Config) bool { return config.Provider != "" } -// newService returns true if the config can be mapped to a service. -func (s *Scheduler) newService(config integration.Config) bool { - return config.Provider == "" && config.ServiceID != "" -} - // configName returns the name of the configuration. func (s *Scheduler) configName(config integration.Config) string { if config.Name != "" { @@ -262,15 +221,6 @@ func (s *Scheduler) toService(config integration.Config) (*service.Service, erro return service.NewService(provider, identifier), nil } -// parseEntity breaks down an entity into a service provider and a service identifier. -func (s *Scheduler) parseEntity(entity string) (string, string, error) { - components := strings.Split(entity, containers.EntitySeparator) - if len(components) != 2 { - return "", "", fmt.Errorf("entity is malformed : %v", entity) - } - return components[0], components[1], nil -} - // parseServiceID breaks down an AD service ID, assuming it is formatted // as `something://something-else`, into its consituent parts. func (s *Scheduler) parseServiceID(serviceID string) (string, string, error) { diff --git a/pkg/metadata/host/host_tags.go b/pkg/metadata/host/host_tags.go index 547ddb3e9524c..58edb37ef8034 100644 --- a/pkg/metadata/host/host_tags.go +++ b/pkg/metadata/host/host_tags.go @@ -82,7 +82,7 @@ func GetHostTags(ctx context.Context, cached bool) *Tags { return appendAndSplitTags(old, new, splits) } - rawHostTags := config.GetConfiguredTags(false) + rawHostTags := config.GetGlobalConfiguredTags(false) hostTags := make([]string, 0, len(rawHostTags)) gceTags := []string{} hostTags = appendToHostTags(hostTags, rawHostTags) diff --git a/pkg/network/config/config_test.go b/pkg/network/config/config_test.go index b336251a3036c..1ef918117abad 100644 --- a/pkg/network/config/config_test.go +++ b/pkg/network/config/config_test.go @@ -122,32 +122,6 @@ func TestEnableHTTPMonitoring(t *testing.T) { defer restoreGlobalConfig() t.Setenv("DD_SYSTEM_PROBE_NETWORK_ENABLE_HTTP_MONITORING", "true") - _, err := sysconfig.New("") - require.NoError(t, err) - cfg := New() - - assert.True(t, cfg.EnableHTTPMonitoring) - }) -} - -func TestEnableHTTPMonitoringViaHTTP(t *testing.T) { - t.Run("via YAML", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - _, err := sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableHTTP.yaml") - require.NoError(t, err) - cfg := New() - - assert.True(t, cfg.EnableHTTPMonitoring) - }) - - t.Run("via ENV variable", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - os.Setenv("DD_SYSTEM_PROBE_NETWORK_ENABLE_HTTP_MONITORING", "true") - defer os.Unsetenv("DD_SYSTEM_PROBE_NETWORK_ENABLE_HTTP_MONITORING") _, err := sysconfig.New("") require.NoError(t, err) diff --git a/pkg/network/ebpf/c/prebuilt/http.c b/pkg/network/ebpf/c/prebuilt/http.c index 577734fb9657f..93f76aceb15e0 100644 --- a/pkg/network/ebpf/c/prebuilt/http.c +++ b/pkg/network/ebpf/c/prebuilt/http.c @@ -1,5 +1,6 @@ #include "kconfig.h" +#include "bpf_tracing.h" #include "tracer.h" #include "bpf_telemetry.h" #include "bpf_builtins.h" diff --git a/pkg/network/ebpf/c/prebuilt/offset-guess.c b/pkg/network/ebpf/c/prebuilt/offset-guess.c index 6d693af97a334..35287b4662853 100644 --- a/pkg/network/ebpf/c/prebuilt/offset-guess.c +++ b/pkg/network/ebpf/c/prebuilt/offset-guess.c @@ -1,6 +1,6 @@ #include "kconfig.h" #include "offset-guess.h" -#include "bpf_helpers.h" +#include "bpf_tracing.h" #include "map-defs.h" #include diff --git a/pkg/network/ebpf/c/prebuilt/tracer.c b/pkg/network/ebpf/c/prebuilt/tracer.c index ef41aaa09c853..d46d628e096ca 100644 --- a/pkg/network/ebpf/c/prebuilt/tracer.c +++ b/pkg/network/ebpf/c/prebuilt/tracer.c @@ -1,9 +1,10 @@ #include "kconfig.h" #include "bpf_telemetry.h" #include "bpf_builtins.h" +#include "bpf_tracing.h" #include "tracer.h" -#include "protocols/protocol-classification-helpers.h" +#include "protocols/protocol-classification.h" #include "tracer-events.h" #include "tracer-maps.h" #include "tracer-stats.h" @@ -116,8 +117,10 @@ int kprobe__tcp_close(struct pt_regs *ctx) { u64 pid_tgid = bpf_get_current_pid_tgid(); sk = (struct sock *)PT_REGS_PARM1(ctx); - // Should actually delete something only if the connection never got established - bpf_map_delete_elem(&tcp_ongoing_connect_pid, &sk); + // Should actually delete something only if the connection never got established & increment counter + if (bpf_map_delete_elem(&tcp_ongoing_connect_pid, &sk) == 0) { + increment_telemetry_count(tcp_failed_connect); + } clear_sockfd_maps(sk); @@ -606,27 +609,12 @@ static __always_inline int sys_enter_bind(struct socket *sock, struct sockaddr * return 0; } - u16 sin_port = 0; - sa_family_t family = 0; - bpf_probe_read_kernel_with_telemetry(&family, sizeof(sa_family_t), &addr->sa_family); - if (family == AF_INET) { - bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in *)addr)->sin_port)); - } else if (family == AF_INET6) { - bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in6 *)addr)->sin6_port)); - } - - sin_port = ntohs(sin_port); - if (sin_port == 0) { - log_debug("ERR(sys_enter_bind): sin_port is 0\n"); - return 0; - } - // write to pending_binds so the retprobe knows we can mark this as binding. bind_syscall_args_t args = {}; - args.port = sin_port; - + bpf_probe_read_kernel_with_telemetry(&args.sk, sizeof(args.sk), (char*)sock + offset_socket_sk()); + args.addr = addr; bpf_map_update_with_telemetry(pending_bind, &tid, &args, BPF_ANY); - log_debug("sys_enter_bind: started a bind on UDP port=%d sock=%llx tid=%u\n", sin_port, sock, tid); + log_debug("sys_enter_bind: started a bind on UDP sock=%llx tid=%u\n", sock, tid); return 0; } @@ -655,8 +643,7 @@ static __always_inline int sys_exit_bind(__s64 ret) { __u64 tid = bpf_get_current_pid_tgid(); // bail if this bind() is not the one we're instrumenting - bind_syscall_args_t *args; - args = bpf_map_lookup_elem(&pending_bind, &tid); + bind_syscall_args_t *args = bpf_map_lookup_elem(&pending_bind, &tid); log_debug("sys_exit_bind: tid=%u, ret=%d\n", tid, ret); @@ -665,13 +652,33 @@ static __always_inline int sys_exit_bind(__s64 ret) { return 0; } - __u16 sin_port = args->port; + struct sock * sk = args->sk; + struct sockaddr *addr = args->addr; bpf_map_delete_elem(&pending_bind, &tid); if (ret != 0) { return 0; } + u16 sin_port = 0; + sa_family_t family = 0; + bpf_probe_read_kernel_with_telemetry(&family, sizeof(sa_family_t), &addr->sa_family); + if (family == AF_INET) { + bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in *)addr)->sin_port)); + } else if (family == AF_INET6) { + bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in6 *)addr)->sin6_port)); + } + + sin_port = ntohs(sin_port); + if (sin_port == 0) { + sin_port = read_sport(sk); + } + + if (sin_port == 0) { + log_debug("ERR(sys_exit_bind): sin_port is 0\n"); + return 0; + } + port_binding_t pb = {}; pb.netns = 0; // don't have net ns info in this context pb.port = sin_port; diff --git a/pkg/network/ebpf/c/prebuilt/usm_events_test.c b/pkg/network/ebpf/c/prebuilt/usm_events_test.c new file mode 100644 index 0000000000000..2810c33becae9 --- /dev/null +++ b/pkg/network/ebpf/c/prebuilt/usm_events_test.c @@ -0,0 +1,52 @@ +#include "kconfig.h" +#include +#include + +#include "bpf_helpers.h" +#include "bpf_builtins.h" +#include "map-defs.h" +#include "protocols/events.h" + +// -------------------------------------------------------- +// this is a test program for pkg/networks/protocols/events +// -------------------------------------------------------- + +#define BATCH_SIZE 15 + +typedef struct { + __u32 expected_pid; + __u64 expected_fd; + __u64 event_id; +} test_ctx_t; + +BPF_LRU_MAP(test, __u32, test_ctx_t, 1); +USM_EVENTS_INIT(test, u64, BATCH_SIZE); + +// source /sys/kernel/debug/tracing/events/syscalls/sys_enter_write/format +struct syscalls_enter_write_args { + unsigned long long unused; + long syscall_nr; + unsigned long long fd; + const char* buf; + size_t count; +}; + +SEC("tracepoint/syscalls/sys_enter_write") +int tracepoint__syscalls__sys_enter_write(struct syscalls_enter_write_args *ctx) { + __u32 zero = 0; + __u32 pid = bpf_get_current_pid_tgid() >> 32; + test_ctx_t *test_ctx = bpf_map_lookup_elem(&test, &zero); + if (!test_ctx || test_ctx->expected_fd != ctx->fd || test_ctx->expected_pid != pid) + return 0; + + // we're echoing to userspace whatever we read from the eBPF map + __u64 event = test_ctx->event_id; + + // these functions are dynamically defined by `USM_EVENTS_INIT` + test_batch_enqueue(&event); + test_flush_batch((void*)ctx); + return 0; +} + +__u32 _version SEC("version") = 0xFFFFFFFE; // NOLINT(bugprone-reserved-identifier) +char _license[] SEC("license") = "GPL"; // NOLINT(bugprone-reserved-identifier) diff --git a/pkg/network/ebpf/c/protocols/amqp-defs.h b/pkg/network/ebpf/c/protocols/amqp-defs.h new file mode 100644 index 0000000000000..a3f83fdaa5737 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/amqp-defs.h @@ -0,0 +1,22 @@ +#ifndef __AMQP_DEFS_H +#define __AMQP_DEFS_H + +// RabbitMQ supported classes. +// Ref: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf +#define AMQP_CONNECTION_CLASS 10 +#define AMQP_BASIC_CLASS 60 + +// RabbitMQ supported connections. +#define AMQP_METHOD_CONNECTION_START 10 +#define AMQP_METHOD_CONNECTION_START_OK 11 + +// RabbitMQ supported methods types. +#define AMQP_METHOD_CONSUME 20 +#define AMQP_METHOD_PUBLISH 40 +#define AMQP_METHOD_DELIVER 60 +#define AMQP_FRAME_METHOD_TYPE 1 + +#define AMQP_MIN_FRAME_LENGTH 8 +#define AMQP_MIN_PAYLOAD_LENGTH 11 + +#endif diff --git a/pkg/network/ebpf/c/protocols/amqp-helpers.h b/pkg/network/ebpf/c/protocols/amqp-helpers.h new file mode 100644 index 0000000000000..56a2891be48d8 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/amqp-helpers.h @@ -0,0 +1,57 @@ +#ifndef __AMQP_HELPERS_H +#define __AMQP_HELPERS_H + +#include "amqp-defs.h" +#include "protocol-classification-common.h" + +// The method checks if the given buffer includes the protocol header which must be sent in the start of a new connection. +// Ref: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf +static __always_inline bool is_amqp_protocol_header(const char* buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, AMQP_MIN_FRAME_LENGTH) + +#define AMQP_PREFACE "AMQP" + + bool match = !bpf_memcmp(buf, AMQP_PREFACE, sizeof(AMQP_PREFACE)-1); + + return match; +} + +// The method checks if the given buffer is an AMQP message. +// Ref: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf +static __always_inline bool is_amqp(const char* buf, __u32 buf_size) { + // New connection should start with protocol header of AMQP. + // Ref https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf. + if (is_amqp_protocol_header(buf, buf_size)) { + return true; + } + + // Validate that we will be able to get from the buffer the class and method ids. + if (buf_size < AMQP_MIN_PAYLOAD_LENGTH) { + return false; + } + + uint8_t frame_type = buf[0]; + // Check only for method frame type. + if (frame_type != AMQP_FRAME_METHOD_TYPE) { + return false; + } + + // We extract the class id and method id by big indian from the buffer. + // Ref https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf. + __u16 class_id = buf[7] << 8 | buf[8]; + __u16 method_id = buf[9] << 8 | buf[10]; + + // ConnectionStart, ConnectionStartOk, BasicPublish, BasicDeliver, BasicConsume are the most likely methods to + // consider for the classification. + if (class_id == AMQP_CONNECTION_CLASS) { + return method_id == AMQP_METHOD_CONNECTION_START || method_id == AMQP_METHOD_CONNECTION_START_OK; + } + + if (class_id == AMQP_BASIC_CLASS) { + return method_id == AMQP_METHOD_PUBLISH || method_id == AMQP_METHOD_DELIVER || method_id == AMQP_METHOD_CONSUME; + } + + return false; +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/events-types.h b/pkg/network/ebpf/c/protocols/events-types.h new file mode 100644 index 0000000000000..bd48a10a19ddf --- /dev/null +++ b/pkg/network/ebpf/c/protocols/events-types.h @@ -0,0 +1,36 @@ +#ifndef __USM_EVENTS_TYPES_H +#define __USM_EVENTS_TYPES_H + +#include + +#define BATCH_BUFFER_SIZE (4*1024) +#define BATCH_PAGES_PER_CPU 3 + +typedef struct { + // idx is a monotonic counter used for uniquely determining a batch within a CPU core + // this is useful for detecting race conditions that result in a batch being overwritten + // before it gets consumed from userspace + __u64 idx; + // idx_to_flush is used to track which batches were flushed to userspace + // * if idx_to_flush == idx, the current index is still being appended to; + // * if idx_to_flush < idx, the batch at idx_to_flush needs to be sent to userspace; + // (note that idx will never be less than idx_to_flush); + __u64 idx_to_flush; +} batch_state_t; + +// this struct is used in the map lookup that returns the active batch for a certain CPU core +typedef struct { + __u32 cpu; + // page_num can be obtained from (batch_state_t->idx % BATCHES_PER_CPU) + __u32 page_num; +} batch_key_t; + +typedef struct { + __u64 idx; + __u16 len; + __u16 cap; + __u16 event_size; + char data[BATCH_BUFFER_SIZE]; +} batch_data_t; + +#endif diff --git a/pkg/network/ebpf/c/protocols/events.h b/pkg/network/ebpf/c/protocols/events.h new file mode 100644 index 0000000000000..acee3dc1d362a --- /dev/null +++ b/pkg/network/ebpf/c/protocols/events.h @@ -0,0 +1,118 @@ +#ifndef __USM_EVENTS_H +#define __USM_EVENTS_H + +#include "events-types.h" +#include "bpf_telemetry.h" + +/* USM_EVENTS_INIT defines two functions used for the purposes of buffering and sending + data to userspace: + 1) _batch_enqueue + 1) _flush_batch + For more information of this please refer to + pkg/networks/protocols/events/README.md */ +#define USM_EVENTS_INIT(name, value, batch_size) \ + _Static_assert((sizeof(value)*batch_size) <= BATCH_BUFFER_SIZE, \ + _STR(name)" batch is too large"); \ + \ + BPF_PERCPU_ARRAY_MAP(name##_batch_state, __u32, batch_state_t, 1) \ + BPF_PERF_EVENT_ARRAY_MAP(name##_batch_events, __u32, 0) \ + BPF_HASH_MAP(name##_batches, batch_key_t, batch_data_t, 0) \ + \ + static __always_inline bool name##_batch_full(batch_data_t *batch) { \ + return batch && batch->len == batch_size; \ + } \ + \ + static __always_inline void name##_flush_batch(struct pt_regs *ctx) { \ + u32 zero = 0; \ + batch_state_t *batch_state = bpf_map_lookup_elem(&name##_batch_state, &zero); \ + if (!batch_state || batch_state->idx_to_flush == batch_state->idx) { \ + /* batch is not ready to be flushed */ \ + return; \ + } \ + \ + batch_key_t key = get_batch_key(batch_state->idx_to_flush); \ + batch_data_t *batch = bpf_map_lookup_elem(&name##_batches, &key); \ + if (!batch) { \ + return; \ + } \ + \ + long ret = bpf_perf_event_output_with_telemetry(ctx, \ + &name##_batch_events, key.cpu, \ + batch, sizeof(batch_data_t)); \ + if (ret < 0) { \ + _LOG(name, "batch flush error: cpu: %d idx: %d err:%d", \ + key.cpu, batch->idx, ret); \ + return; \ + } \ + \ + _LOG(name, "batch flushed: cpu: %d idx: %d", key.cpu, batch->idx); \ + batch->len = 0; \ + batch_state->idx_to_flush++; \ + } \ + \ + static __always_inline void name##_batch_enqueue(value *event) { \ + u32 zero = 0; \ + batch_state_t *batch_state = bpf_map_lookup_elem(&name##_batch_state, &zero); \ + if (batch_state == NULL) { \ + return; \ + } \ + \ + batch_key_t key = get_batch_key(batch_state->idx); \ + batch_data_t *batch = bpf_map_lookup_elem(&name##_batches, &key); \ + if (batch == NULL) { \ + return; \ + } \ + \ + /* if this happens it indicates that _flush_batch is not + executing often enough and/or that BATCH_PAGES_PER_CPU is not large + enough */ \ + if (name##_batch_full(batch)) { \ + _LOG(name, "enqueue error: dropping event because batch is full.", \ + bpf_get_smp_processor_id(), batch->idx); \ + return; \ + } \ + \ + /* this will copy the given event into an eBPF map entry representing the + current active batch */ \ + if (!__enqueue_event((void *)batch, event, sizeof(value))) \ + return; \ + \ + /* annotate batch with metadata used by userspace */ \ + batch->cap = batch_size; \ + batch->event_size = sizeof(value); \ + batch->idx = batch_state->idx; \ + \ + _LOG(name, "event enqueued: cpu: %d batch_idx: %d len: %d", \ + key.cpu, batch_state->idx, batch->len); \ + /* if we have filled up the batch we move to the next one. + notice the batch will be sent "asynchronously" to userspace during the + next call of _flush_batch */ \ + if (name##_batch_full(batch)) { \ + batch_state->idx++; \ + } \ + } \ + +static __always_inline batch_key_t get_batch_key(u64 batch_idx) { + batch_key_t key = { 0 }; + key.cpu = bpf_get_smp_processor_id(); + key.page_num = batch_idx % BATCH_PAGES_PER_CPU; + return key; +} + +static __always_inline bool __enqueue_event(batch_data_t *batch, void *event, size_t event_size) { + /* bounds check to make eBPF verifier happy */ + u32 offset = batch->len*event_size; + if (offset < 0 || offset+event_size>sizeof(batch->data)) { + return false; + } + + bpf_memcpy(&batch->data[offset], event, event_size); + batch->len++; + return true; +} + +#define _STR(x) #x +#define _LOG(protocol, message, args...) \ + log_debug(_STR(protocol) " " message "\n", args); + +#endif diff --git a/pkg/network/ebpf/c/protocols/http-classification-defs.h b/pkg/network/ebpf/c/protocols/http-classification-defs.h new file mode 100644 index 0000000000000..2626012708774 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/http-classification-defs.h @@ -0,0 +1,8 @@ +#ifndef __HTTP_CLASSIFICATION_DEFS_H +#define __HTTP_CLASSIFICATION_DEFS_H + +// The minimal HTTP response has 17 characters: HTTP/1.1 200 OK\r\n +// The minimal HTTP request has 16 characters: GET x HTTP/1.1\r\n +#define HTTP_MIN_SIZE 16 + +#endif diff --git a/pkg/network/ebpf/c/protocols/http-classification-helpers.h b/pkg/network/ebpf/c/protocols/http-classification-helpers.h new file mode 100644 index 0000000000000..eafd529dd98e5 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/http-classification-helpers.h @@ -0,0 +1,37 @@ +#ifndef __HTTP_HELPERS_H +#define __HTTP_HELPERS_H + +#include "protocol-classification-common.h" + +// Checks if the given buffers start with `HTTP` prefix (represents a response) or starts with ` /` which represents +// a request, where is one of: GET, POST, PUT, DELETE, HEAD, OPTIONS, or PATCH. +static __always_inline bool is_http(const char *buf, __u32 size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, size, HTTP_MIN_SIZE) + +#define HTTP "HTTP/" +#define GET "GET /" +#define POST "POST /" +#define PUT "PUT /" +#define DELETE "DELETE /" +#define HEAD "HEAD /" +#define OPTIONS1 "OPTIONS /" +#define OPTIONS2 "OPTIONS *" +#define PATCH "PATCH /" + + // memcmp returns + // 0 when s1 == s2, + // !0 when s1 != s2. + bool http = !(bpf_memcmp(buf, HTTP, sizeof(HTTP)-1) + && bpf_memcmp(buf, GET, sizeof(GET)-1) + && bpf_memcmp(buf, POST, sizeof(POST)-1) + && bpf_memcmp(buf, PUT, sizeof(PUT)-1) + && bpf_memcmp(buf, DELETE, sizeof(DELETE)-1) + && bpf_memcmp(buf, HEAD, sizeof(HEAD)-1) + && bpf_memcmp(buf, OPTIONS1, sizeof(OPTIONS1)-1) + && bpf_memcmp(buf, OPTIONS2, sizeof(OPTIONS2)-1) + && bpf_memcmp(buf, PATCH, sizeof(PATCH)-1)); + + return http; +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/http-maps.h b/pkg/network/ebpf/c/protocols/http-maps.h index e58aab15f33af..b876eb44aa782 100644 --- a/pkg/network/ebpf/c/protocols/http-maps.h +++ b/pkg/network/ebpf/c/protocols/http-maps.h @@ -10,18 +10,6 @@ /* This map is used to keep track of in-flight HTTP transactions for each TCP connection */ BPF_LRU_MAP(http_in_flight, conn_tuple_t, http_transaction_t, 0) -/* This map used for flush complete HTTP batches to userspace */ -BPF_PERF_EVENT_ARRAY_MAP(http_batch_events, __u32, 0) - -/* - This map stores finished HTTP transactions in batches so they can be consumed by userspace - Size is set dynamically during runtime and must be equal to CPUs*HTTP_BATCH_PAGES - */ -BPF_HASH_MAP(http_batches, http_batch_key_t, http_batch_t, 0) - -/* This map holds one entry per CPU storing state associated to current http batch*/ -BPF_PERCPU_ARRAY_MAP(http_batch_state, __u32, http_batch_state_t, 1) - BPF_LRU_MAP(ssl_sock_by_ctx, void *, ssl_sock_t, 1) BPF_LRU_MAP(ssl_read_args, u64, ssl_read_args_t, 1024) diff --git a/pkg/network/ebpf/c/protocols/http-types.h b/pkg/network/ebpf/c/protocols/http-types.h index 9aedc62ff1e93..a99263e43c77f 100644 --- a/pkg/network/ebpf/c/protocols/http-types.h +++ b/pkg/network/ebpf/c/protocols/http-types.h @@ -7,10 +7,6 @@ #define HTTP_BUFFER_SIZE (8 * 20) // This controls the number of HTTP transactions read from userspace at a time #define HTTP_BATCH_SIZE 15 -// HTTP_BATCH_PAGES controls how many `http_batch_t` instances exist for each CPU core -// It's desirable to set this >= 1 to allow batch insertion and flushing to happen idependently -// without risk of overriding data. -#define HTTP_BATCH_PAGES 3 // HTTP/1.1 XXX // _________^ @@ -39,13 +35,6 @@ typedef enum HTTP_PATCH } http_method_t; -// This struct is used in the map lookup that returns the active batch for a certain CPU core -typedef struct { - __u32 cpu; - // page_num can be obtained from (http_batch_state_t->idx % HTTP_BATCHES_PER_CPU) - __u32 page_num; -} http_batch_key_t; - // HTTP transaction information associated to a certain socket (tuple_t) typedef struct { conn_tuple_t tup; @@ -68,24 +57,6 @@ typedef struct { __u64 tags; } http_transaction_t; -typedef struct { - // idx is a monotonic counter used for uniquely determinng a batch within a CPU core - // this is useful for detecting race conditions that result in a batch being overrriden - // before it gets consumed from userspace - __u64 idx; - // idx_to_flush is used to track which batches were flushed to userspace - // * if idx_to_flush == idx, the current index is still being appended to; - // * if idx_to_flush < idx, the batch at idx_to_notify needs to be sent to userspace; - // (note that idx will never be less than idx_to_flush); - __u64 idx_to_flush; -} http_batch_state_t; - -typedef struct { - __u64 idx; - __u8 pos; - http_transaction_t txs[HTTP_BATCH_SIZE]; -} http_batch_t; - // OpenSSL types typedef struct { void *ctx; diff --git a/pkg/network/ebpf/c/protocols/http.h b/pkg/network/ebpf/c/protocols/http.h index 767c1800f623d..9997c1c739406 100644 --- a/pkg/network/ebpf/c/protocols/http.h +++ b/pkg/network/ebpf/c/protocols/http.h @@ -7,85 +7,16 @@ #include "http-types.h" #include "http-maps.h" #include "https.h" +#include "events.h" #include -static __always_inline http_batch_key_t http_get_batch_key(u64 batch_idx) { - http_batch_key_t key = { 0 }; - key.cpu = bpf_get_smp_processor_id(); - key.page_num = batch_idx % HTTP_BATCH_PAGES; - return key; -} - -static __always_inline void http_flush_batch(struct pt_regs *ctx) { - u32 zero = 0; - http_batch_state_t *batch_state = bpf_map_lookup_elem(&http_batch_state, &zero); - if (batch_state == NULL || batch_state->idx_to_flush == batch_state->idx) { - // batch is not ready to be flushed - return; - } - - http_batch_key_t key = http_get_batch_key(batch_state->idx_to_flush); - http_batch_t *batch = bpf_map_lookup_elem(&http_batches, &key); - if (batch == NULL) { - return; - } - - bpf_perf_event_output_with_telemetry(ctx, &http_batch_events, key.cpu, batch, sizeof(http_batch_t)); - log_debug("http batch flushed: cpu: %d idx: %d\n", key.cpu, batch->idx); - batch->pos = 0; - batch_state->idx_to_flush++; -} +USM_EVENTS_INIT(http, http_transaction_t, HTTP_BATCH_SIZE); static __always_inline int http_responding(http_transaction_t *http) { return (http != NULL && http->response_status_code != 0); } - -static __always_inline bool http_batch_full(http_batch_t *batch) { - return batch && batch->pos == HTTP_BATCH_SIZE; -} - -static __always_inline void http_enqueue(http_transaction_t *http) { - // Retrieve the active batch number for this CPU - u32 zero = 0; - http_batch_state_t *batch_state = bpf_map_lookup_elem(&http_batch_state, &zero); - if (batch_state == NULL) { - return; - } - - // Retrieve the batch object - http_batch_key_t key = http_get_batch_key(batch_state->idx); - http_batch_t *batch = bpf_map_lookup_elem(&http_batches, &key); - if (batch == NULL) { - return; - } - - if (http_batch_full(batch)) { - // this scenario should never happen and indicates a bug - // TODO: turn this into telemetry for release 7.41 - log_debug("http_enqueue error: dropping request because batch is full. cpu=%d batch_idx=%d\n", bpf_get_smp_processor_id(), batch->idx); - return; - } - - // Bounds check to make verifier happy - if (batch->pos < 0 || batch->pos >= HTTP_BATCH_SIZE) { - return; - } - - bpf_memcpy(&batch->txs[batch->pos], http, sizeof(http_transaction_t)); - log_debug("http_enqueue: htx=%llx path=%s\n", http, http->request_fragment); - log_debug("http transaction enqueued: cpu: %d batch_idx: %d pos: %d\n", key.cpu, batch_state->idx, batch->pos); - batch->pos++; - batch->idx = batch_state->idx; - - // If we have filled the batch we move to the next one - // Notice that we don't flush it directly because we can't do so from socket filter programs. - if (http_batch_full(batch)) { - batch_state->idx++; - } -} - static __always_inline void http_begin_request(http_transaction_t *http, http_method_t method, char *buffer) { http->request_method = method; http->request_started = bpf_ktime_get_ns(); @@ -197,7 +128,7 @@ static __always_inline int http_process(http_transaction_t *http_stack, skb_info } if (http_should_flush_previous_state(http, packet_type)) { - http_enqueue(http); + http_batch_enqueue(http); bpf_memcpy(http, http_stack, sizeof(http_transaction_t)); } @@ -217,7 +148,7 @@ static __always_inline int http_process(http_transaction_t *http_stack, skb_info } if (http_closed(http, skb_info, http_stack->owned_by_src_port)) { - http_enqueue(http); + http_batch_enqueue(http); bpf_map_delete_elem(&http_in_flight, &http_stack->tup); } diff --git a/pkg/network/ebpf/c/protocols/http2-defs.h b/pkg/network/ebpf/c/protocols/http2-defs.h new file mode 100644 index 0000000000000..798078e01f97c --- /dev/null +++ b/pkg/network/ebpf/c/protocols/http2-defs.h @@ -0,0 +1,38 @@ +#ifndef __HTTP2_DEFS_H +#define __HTTP2_DEFS_H + +#include + +// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "HTTP/2 Connection Preface" section +#define HTTP2_MARKER_SIZE 24 + +// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "Frame Format" section +#define HTTP2_FRAME_HEADER_SIZE 9 +#define HTTP2_SETTINGS_SIZE 6 + +// All types of http2 frames exist in the protocol. +// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "Frame Type Registry" section. +typedef enum { + kDataFrame = 0, + kHeadersFrame = 1, + kPriorityFrame = 2, + kRSTStreamFrame = 3, + kSettingsFrame = 4, + kPushPromiseFrame = 5, + kPingFrame = 6, + kGoAwayFrame = 7, + kWindowUpdateFrame = 8, + kContinuationFrame = 9, +} __attribute__ ((packed)) frame_type_t; + +// Struct which represent the http2 frame by its fields. +// Checkout https://datatracker.ietf.org/doc/html/rfc7540#section-4.1 for frame format. +struct http2_frame { + __u32 length : 24; + frame_type_t type; + __u8 flags; + __u8 reserved : 1; + __u32 stream_id : 31; +} __attribute__ ((packed)); + +#endif diff --git a/pkg/network/ebpf/c/protocols/http2-helpers.h b/pkg/network/ebpf/c/protocols/http2-helpers.h new file mode 100644 index 0000000000000..f5631a4532e1e --- /dev/null +++ b/pkg/network/ebpf/c/protocols/http2-helpers.h @@ -0,0 +1,70 @@ +#ifndef __HTTP2_HELPERS_H +#define __HTTP2_HELPERS_H + +#include "http2-defs.h" +#include "bpf_endian.h" + +// This function checks if the http2 frame header is empty. +static __always_inline bool is_empty_frame_header(const char *frame) { +#define EMPTY_FRAME_HEADER "\0\0\0\0\0\0\0\0\0" + + return !bpf_memcmp(frame, EMPTY_FRAME_HEADER, sizeof(EMPTY_FRAME_HEADER) - 1); +} + +// This function reads the http2 frame header and validate the frame. +static __always_inline bool read_http2_frame_header(const char *buf, size_t buf_size, struct http2_frame *out) { + if (buf == NULL) { + return false; + } + + if (buf_size < HTTP2_FRAME_HEADER_SIZE) { + return false; + } + + if (is_empty_frame_header(buf)) { + return false; + } + + // We extract the frame by its shape to fields. + // See: https://datatracker.ietf.org/doc/html/rfc7540#section-4.1 + *out = *((struct http2_frame*)buf); + out->length = bpf_ntohl(out->length << 8); + out->stream_id = bpf_ntohl(out->stream_id << 1); + + return true; +} + +// The method checks if the given buffer starts with the HTTP2 marker as defined in https://datatracker.ietf.org/doc/html/rfc7540. +// We check that the given buffer is not empty and its size is at least 24 bytes. +static __always_inline bool is_http2_preface(const char* buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, HTTP2_MARKER_SIZE) + +#define HTTP2_PREFACE "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" + + bool match = !bpf_memcmp(buf, HTTP2_PREFACE, sizeof(HTTP2_PREFACE)-1); + + return match; +} + +// According to the https://www.rfc-editor.org/rfc/rfc7540#section-3.5 +// an HTTP2 server must reply with a settings frame to the preface of HTTP2. +// The settings frame must not be related to the connection (stream_id == 0) and the length should be a multiplication +// of 6 bytes. +static __always_inline bool is_http2_server_settings(const char* buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, HTTP2_FRAME_HEADER_SIZE) + + struct http2_frame frame_header; + if (!read_http2_frame_header(buf, buf_size, &frame_header)) { + return false; + } + + return frame_header.type == kSettingsFrame && frame_header.stream_id == 0 && frame_header.length % HTTP2_SETTINGS_SIZE == 0; +} + +// The method checks if the given buffer starts with the HTTP2 marker as defined in https://datatracker.ietf.org/doc/html/rfc7540. +// We check that the given buffer is not empty and its size is at least 24 bytes. +static __always_inline bool is_http2(const char* buf, __u32 buf_size) { + return is_http2_preface(buf, buf_size) || is_http2_server_settings(buf, buf_size); +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/http2.h b/pkg/network/ebpf/c/protocols/http2.h deleted file mode 100644 index 0f516c3c5946c..0000000000000 --- a/pkg/network/ebpf/c/protocols/http2.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef __HTTP2_H -#define __HTTP2_H - -// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "Frame Format" section -#define HTTP2_FRAME_HEADER_SIZE 9 -#define HTTP2_SETTINGS_SIZE 6 - -// All types of http2 frames exist in the protocol. -// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "Frame Type Registry" section. -typedef enum { - kDataFrame = 0, - kHeadersFrame = 1, - kPriorityFrame = 2, - kRSTStreamFrame = 3, - kSettingsFrame = 4, - kPushPromiseFrame = 5, - kPingFrame = 6, - kGoAwayFrame = 7, - kWindowUpdateFrame = 8, - kContinuationFrame = 9, -} __attribute__ ((packed)) frame_type_t; - -// Struct which represent the http2 frame by its fields. -// Checkout https://datatracker.ietf.org/doc/html/rfc7540#section-4.1 for frame format. -struct http2_frame { - uint32_t length; - frame_type_t type; - uint8_t flags; - uint32_t stream_id; -}; - -static __always_inline uint32_t as_uint32_t(unsigned char input) { - return (uint32_t)input; -} - -// This function checks if the http2 frame header is empty. -static __always_inline bool is_empty_frame_header(const char *frame) { -#pragma unroll - for (uint32_t i = 0; i < HTTP2_FRAME_HEADER_SIZE; i++) { - if (frame[i] != 0) { - return false; - } - } - return true; -} - -// This function reads the http2 frame header and validate the frame. -static __always_inline bool read_http2_frame_header(const char *buf, size_t buf_size, struct http2_frame *out) { - if (buf == NULL) { - return false; - } - - if (buf_size < HTTP2_FRAME_HEADER_SIZE) { - return false; - } - - if (is_empty_frame_header(buf)) { - return false; - } - -// We extract the frame by its shape to fields. -// See: https://datatracker.ietf.org/doc/html/rfc7540#section-4.1 - out->length = as_uint32_t(buf[0])<<16 | as_uint32_t(buf[1])<<8 | as_uint32_t(buf[2]); - out->type = (frame_type_t)buf[3]; - out->flags = (uint8_t)buf[4]; - out->stream_id = (as_uint32_t(buf[5]) << 24 | - as_uint32_t(buf[6]) << 16 | - as_uint32_t(buf[7]) << 8 | - as_uint32_t(buf[8])) & 2147483647; - - return true; -} - -#endif diff --git a/pkg/network/ebpf/c/protocols/https.h b/pkg/network/ebpf/c/protocols/https.h index 0203f820f2d4f..e5f5b7ca5c1d4 100644 --- a/pkg/network/ebpf/c/protocols/https.h +++ b/pkg/network/ebpf/c/protocols/https.h @@ -15,7 +15,7 @@ #include "port_range.h" #include "sockfd.h" #include "tags-types.h" -#include "protocol-classification-helpers.h" +#include "protocol-classification.h" #include "protocol-dispatcher-maps.h" #define HTTPS_PORT 443 @@ -41,7 +41,7 @@ static __always_inline void https_process(conn_tuple_t *t, void *buffer, size_t // try classifying the protocol if no prior identification exists if (cur_fragment_protocol_ptr == NULL) { - classify_protocol(&cur_fragment_protocol, http.request_fragment, len); + classify_protocol(&cur_fragment_protocol, &http.tup, http.request_fragment, len); // If there has been a change in the classification, save the new protocol. if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { bpf_map_update_with_telemetry(dispatcher_connection_protocol, &http.tup, &cur_fragment_protocol, BPF_NOEXIST); diff --git a/pkg/network/ebpf/c/protocols/mongo-defs.h b/pkg/network/ebpf/c/protocols/mongo-defs.h new file mode 100644 index 0000000000000..8e11ff3bfa734 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/mongo-defs.h @@ -0,0 +1,21 @@ +#ifndef __MONGO_DEFS_H +#define __MONGO_DEFS_H + +// Reference: +// https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/#std-label-wp-request-opcodes. +// Note: Response side inference for Mongo is not robust, and is not attempted to avoid +// confusion with other protocols, especially MySQL. +#define MONGO_OP_REPLY 1 +#define MONGO_OP_UPDATE 2001 +#define MONGO_OP_INSERT 2002 +#define MONGO_OP_RESERVED 2003 +#define MONGO_OP_QUERY 2004 +#define MONGO_OP_GET_MORE 2005 +#define MONGO_OP_DELETE 2006 +#define MONGO_OP_KILL_CURSORS 2007 +#define MONGO_OP_COMPRESSED 2012 +#define MONGO_OP_MSG 2013 + +#define MONGO_HEADER_LENGTH 16 + +#endif diff --git a/pkg/network/ebpf/c/protocols/mongo-helpers.h b/pkg/network/ebpf/c/protocols/mongo-helpers.h new file mode 100644 index 0000000000000..a24091593e6ec --- /dev/null +++ b/pkg/network/ebpf/c/protocols/mongo-helpers.h @@ -0,0 +1,72 @@ +#ifndef __MONGO_HELPERS_H +#define __MONGO_HELPERS_H + + +#include "mongo-defs.h" +#include "protocol-classification-common.h" + +static __always_inline void mongo_handle_request(conn_tuple_t *tup, __s32 request_id) { + // mongo_request_id acts as a set, and we only check for existence in that set. + // Thus, the val = true is just a dummy value, as we ignore the value. + const bool val = true; + mongo_key key = {}; + key.tup = *tup; + key.req_id = request_id; + bpf_map_update_elem(&mongo_request_id, &key, &val, BPF_ANY); +} + +static __always_inline bool mongo_have_seen_request(conn_tuple_t *tup, __s32 response_to) { + mongo_key key = {}; + key.tup = *tup; + key.req_id = response_to; + void *exists = bpf_map_lookup_elem(&mongo_request_id, &key); + bpf_map_delete_elem(&mongo_request_id, &key); + return exists != NULL; +} + +// Checks if the given buffer represents a mongo request or a response. +static __always_inline bool is_mongo(conn_tuple_t *tup, const char *buf, __u32 size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, size, MONGO_HEADER_LENGTH) + + mongo_msg_header header = *((mongo_msg_header*)buf); + + // The message length should contain the size of headers + if (header.message_length < MONGO_HEADER_LENGTH) { + return false; + } + + if (header.request_id < 0) { + return false; + } + + switch (header.op_code) { + case MONGO_OP_UPDATE: + case MONGO_OP_INSERT: + case MONGO_OP_DELETE: + // If the response_to is not 0, then it is not a valid mongo request by the RFC. + return header.response_to == 0; + case MONGO_OP_REPLY: + // If the message is a reply, make sure we've seen the request of the response. + // If will eliminate false positives. + return mongo_have_seen_request(tup, header.response_to); + case MONGO_OP_QUERY: + case MONGO_OP_GET_MORE: + if (header.response_to == 0) { + mongo_handle_request(tup, header.request_id); + return true; + } + return false; + case MONGO_OP_COMPRESSED: + case MONGO_OP_MSG: + // If the response_to is not 0, then it is not a valid mongo request by the RFC. + if (header.response_to == 0) { + mongo_handle_request(tup, header.request_id); + return true; + } + return mongo_have_seen_request(tup, header.response_to); + } + + return false; +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-common.h b/pkg/network/ebpf/c/protocols/protocol-classification-common.h new file mode 100644 index 0000000000000..8572be2d17c17 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/protocol-classification-common.h @@ -0,0 +1,97 @@ +#ifndef __PROTOCOL_CLASSIFICATION_COMMON_H +#define __PROTOCOL_CLASSIFICATION_COMMON_H + +#include + +#include "bpf_builtins.h" +#include "bpf_telemetry.h" + +// Patch to support old kernels that don't contain bpf_skb_load_bytes, by adding a dummy implementation to bypass runtime compilation. +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) +long bpf_skb_load_bytes_with_telemetry(const void *skb, u32 offset, void *to, u32 len) {return 0;} +#endif + +#define CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, min_buff_size) \ + if (buf_size < min_buff_size) { \ + return false; \ + } \ + \ + if (buf == NULL) { \ + return false; \ + } \ + +// Returns true if the packet is TCP. +static __always_inline bool is_tcp(conn_tuple_t *tup) { + return tup->metadata & CONN_TYPE_TCP; +} + +// Returns true if the payload is empty. +static __always_inline bool is_payload_empty(struct __sk_buff *skb, skb_info_t *skb_info) { + return skb_info->data_off == skb->len; +} + +// The method is used to read the data buffer from the __sk_buf struct. Similar implementation as `read_into_buffer_skb` +// from http parsing, but uses a different constant (CLASSIFICATION_MAX_BUFFER). +static __always_inline void read_into_buffer_for_classification(char *buffer, struct __sk_buff *skb, skb_info_t *info) { + u64 offset = (u64)info->data_off; + +#define BLK_SIZE (16) + const u32 len = CLASSIFICATION_MAX_BUFFER < (skb->len - (u32)offset) ? (u32)offset + CLASSIFICATION_MAX_BUFFER : skb->len; + + unsigned i = 0; + +#pragma unroll(CLASSIFICATION_MAX_BUFFER / BLK_SIZE) + for (; i < (CLASSIFICATION_MAX_BUFFER / BLK_SIZE); i++) { + if (offset + BLK_SIZE - 1 >= len) { break; } + + bpf_skb_load_bytes_with_telemetry(skb, offset, &buffer[i * BLK_SIZE], BLK_SIZE); + offset += BLK_SIZE; + } + + // This part is very hard to write in a loop and unroll it. + // Indeed, mostly because of older kernel verifiers, we want to make sure the offset into the buffer is not + // stored on the stack, so that the verifier is able to verify that we're not doing out-of-bound on + // the stack. + // Basically, we should get a register from the code block above containing an fp relative address. As + // we are doing `buffer[0]` here, there is not dynamic computation on that said register after this, + // and thus the verifier is able to ensure that we are in-bound. + void *buf = &buffer[i * BLK_SIZE]; + // Check that we have enough room in the request fragment buffer. Even + // though that's not strictly needed here, the verifier does not know that, + // so this check makes it happy. + if (i * BLK_SIZE >= CLASSIFICATION_MAX_BUFFER) { + return; + } else if (offset + 14 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 15); + } else if (offset + 13 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 14); + } else if (offset + 12 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 13); + } else if (offset + 11 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 12); + } else if (offset + 10 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 11); + } else if (offset + 9 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 10); + } else if (offset + 8 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 9); + } else if (offset + 7 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 8); + } else if (offset + 6 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 7); + } else if (offset + 5 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 6); + } else if (offset + 4 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 5); + } else if (offset + 3 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 4); + } else if (offset + 2 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 3); + } else if (offset + 1 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 2); + } else if (offset < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 1); + } +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-defs.h b/pkg/network/ebpf/c/protocols/protocol-classification-defs.h index a4e1dc10049c9..2a13b4e87992d 100644 --- a/pkg/network/ebpf/c/protocols/protocol-classification-defs.h +++ b/pkg/network/ebpf/c/protocols/protocol-classification-defs.h @@ -3,18 +3,17 @@ #include +#include "amqp-defs.h" +#include "http2-defs.h" +#include "http-classification-defs.h" +#include "mongo-defs.h" +#include "redis-defs.h" + // Represents the max buffer size required to classify protocols . // We need to round it to be multiplication of 16 since we are reading blocks of 16 bytes in read_into_buffer_skb_all_kernels. // ATM, it is HTTP2_MARKER_SIZE + 8 bytes for padding, #define CLASSIFICATION_MAX_BUFFER (HTTP2_MARKER_SIZE + 8) -// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "HTTP/2 Connection Preface" section -#define HTTP2_MARKER_SIZE 24 - -// The minimal HTTP response has 17 characters: HTTP/1.1 200 OK\r\n -// The minimal HTTP request has 16 characters: GET x HTTP/1.1\r\n -#define HTTP_MIN_SIZE 16 - // The enum below represents all different protocols we know to classify. // We set the size of the enum to be 8 bits, by adding max value (max uint8 which is 255) and // `__attribute__ ((packed))` to tell the compiler to use as minimum bits as needed. Due to our max @@ -25,6 +24,9 @@ typedef enum { PROTOCOL_HTTP, PROTOCOL_HTTP2, PROTOCOL_TLS, + PROTOCOL_MONGO = 6, + PROTOCOL_AMQP = 8, + PROTOCOL_REDIS = 9, // Add new protocols before that line. MAX_PROTOCOLS, __MAX_UINT8 = 255, diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-helpers.h b/pkg/network/ebpf/c/protocols/protocol-classification-helpers.h deleted file mode 100644 index c8da66862983b..0000000000000 --- a/pkg/network/ebpf/c/protocols/protocol-classification-helpers.h +++ /dev/null @@ -1,214 +0,0 @@ -#ifndef __PROTOCOL_CLASSIFICATION_HELPERS_H -#define __PROTOCOL_CLASSIFICATION_HELPERS_H - -#include - -#include "protocol-classification-defs.h" -#include "protocol-classification-maps.h" -#include "bpf_builtins.h" -#include "bpf_telemetry.h" -#include "ip.h" -#include "http2.h" - -// Patch to support old kernels that don't contain bpf_skb_load_bytes, by adding a dummy implementation to bypass runtime compilation. -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) -long bpf_skb_load_bytes_with_telemetry(const void *skb, u32 offset, void *to, u32 len) {return 0;} -#endif - -#define CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, min_buff_size) \ - if (buf_size < min_buff_size) { \ - return false; \ - } \ - \ - if (buf == NULL) { \ - return false; \ - } \ - -// The method checks if the given buffer starts with the HTTP2 marker as defined in https://datatracker.ietf.org/doc/html/rfc7540. -// We check that the given buffer is not empty and its size is at least 24 bytes. -static __always_inline bool is_http2_preface(const char* buf, __u32 buf_size) { - CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, HTTP2_MARKER_SIZE) - -#define HTTP2_PREFACE "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" - - bool match = !bpf_memcmp(buf, HTTP2_PREFACE, sizeof(HTTP2_PREFACE)-1); - - return match; -} - -// According to the https://www.rfc-editor.org/rfc/rfc7540#section-3.5 -// an HTTP2 server must reply with a settings frame to the preface of HTTP2. -// The settings frame must not be related to the connection (stream_id == 0) and the length should be a multiplication -// of 6 bytes. -static __always_inline bool is_http2_server_settings(const char* buf, __u32 buf_size) { - CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, HTTP2_FRAME_HEADER_SIZE) - - struct http2_frame frame_header; - if (!read_http2_frame_header(buf, buf_size, &frame_header)) { - return false; - } - - return frame_header.type == kSettingsFrame && frame_header.stream_id == 0 && frame_header.length % HTTP2_SETTINGS_SIZE == 0; -} - -// The method checks if the given buffer starts with the HTTP2 marker as defined in https://datatracker.ietf.org/doc/html/rfc7540. -// We check that the given buffer is not empty and its size is at least 24 bytes. -static __always_inline bool is_http2(const char* buf, __u32 buf_size) { - return is_http2_preface(buf, buf_size) || is_http2_server_settings(buf, buf_size); -} - -// Checks if the given buffers start with `HTTP` prefix (represents a response) or starts with ` /` which represents -// a request, where is one of: GET, POST, PUT, DELETE, HEAD, OPTIONS, or PATCH. -static __always_inline bool is_http(const char *buf, __u32 size) { - CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, size, HTTP_MIN_SIZE) - -#define HTTP "HTTP/" -#define GET "GET /" -#define POST "POST /" -#define PUT "PUT /" -#define DELETE "DELETE /" -#define HEAD "HEAD /" -#define OPTIONS1 "OPTIONS /" -#define OPTIONS2 "OPTIONS *" -#define PATCH "PATCH /" - - // memcmp returns - // 0 when s1 == s2, - // !0 when s1 != s2. - bool http = !(bpf_memcmp(buf, HTTP, sizeof(HTTP)-1) - && bpf_memcmp(buf, GET, sizeof(GET)-1) - && bpf_memcmp(buf, POST, sizeof(POST)-1) - && bpf_memcmp(buf, PUT, sizeof(PUT)-1) - && bpf_memcmp(buf, DELETE, sizeof(DELETE)-1) - && bpf_memcmp(buf, HEAD, sizeof(HEAD)-1) - && bpf_memcmp(buf, OPTIONS1, sizeof(OPTIONS1)-1) - && bpf_memcmp(buf, OPTIONS2, sizeof(OPTIONS2)-1) - && bpf_memcmp(buf, PATCH, sizeof(PATCH)-1)); - - return http; -} - -// Determines the protocols of the given buffer. If we already classified the payload (a.k.a protocol out param -// has a known protocol), then we do nothing. -static __always_inline void classify_protocol(protocol_t *protocol, const char *buf, __u32 size) { - if (protocol == NULL || *protocol != PROTOCOL_UNKNOWN) { - return; - } - - if (is_http(buf, size)) { - *protocol = PROTOCOL_HTTP; - } else if (is_http2(buf, size)) { - *protocol = PROTOCOL_HTTP2; - } else { - *protocol = PROTOCOL_UNKNOWN; - } - - log_debug("[protocol classification]: Classified protocol as %d %d; %s\n", *protocol, size, buf); -} - -// Returns true if the packet is TCP. -static __always_inline bool is_tcp(conn_tuple_t *tup) { - return tup->metadata & CONN_TYPE_TCP; -} - -// Returns true if the payload is empty. -static __always_inline bool is_payload_empty(struct __sk_buff *skb, skb_info_t *skb_info) { - return skb_info->data_off == skb->len; -} - -// The method is used to read the data buffer from the __sk_buf struct. Similar implementation as `read_into_buffer_skb` -// from http parsing, but uses a different constant (CLASSIFICATION_MAX_BUFFER). -static __always_inline void read_into_buffer_for_classification(char *buffer, struct __sk_buff *skb, skb_info_t *info) { - u64 offset = (u64)info->data_off; - -#define BLK_SIZE (16) - const u32 len = CLASSIFICATION_MAX_BUFFER < (skb->len - (u32)offset) ? (u32)offset + CLASSIFICATION_MAX_BUFFER : skb->len; - - unsigned i = 0; - -#pragma unroll(CLASSIFICATION_MAX_BUFFER / BLK_SIZE) - for (; i < (CLASSIFICATION_MAX_BUFFER / BLK_SIZE); i++) { - if (offset + BLK_SIZE - 1 >= len) { break; } - - bpf_skb_load_bytes_with_telemetry(skb, offset, &buffer[i * BLK_SIZE], BLK_SIZE); - offset += BLK_SIZE; - } - - // This part is very hard to write in a loop and unroll it. - // Indeed, mostly because of older kernel verifiers, we want to make sure the offset into the buffer is not - // stored on the stack, so that the verifier is able to verify that we're not doing out-of-bound on - // the stack. - // Basically, we should get a register from the code block above containing an fp relative address. As - // we are doing `buffer[0]` here, there is not dynamic computation on that said register after this, - // and thus the verifier is able to ensure that we are in-bound. - void *buf = &buffer[i * BLK_SIZE]; - if (offset + 14 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 15); - } else if (offset + 13 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 14); - } else if (offset + 12 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 13); - } else if (offset + 11 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 12); - } else if (offset + 10 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 11); - } else if (offset + 9 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 10); - } else if (offset + 8 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 9); - } else if (offset + 7 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 8); - } else if (offset + 6 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 7); - } else if (offset + 5 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 6); - } else if (offset + 4 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 5); - } else if (offset + 3 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 4); - } else if (offset + 2 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 3); - } else if (offset + 1 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 2); - } else if (offset < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 1); - } -} - -// A shared implementation for the runtime & prebuilt socket filter that classifies the protocols of the connections. -static __always_inline void protocol_classifier_entrypoint(struct __sk_buff *skb) { - skb_info_t skb_info = {0}; - conn_tuple_t skb_tup = {0}; - - // Exporting the conn tuple from the skb, alongside couple of relevant fields from the skb. - if (!read_conn_tuple_skb(skb, &skb_info, &skb_tup)) { - return; - } - - // We support non empty TCP payloads for classification at the moment. - if (!is_tcp(&skb_tup) || is_payload_empty(skb, &skb_info)) { - return; - } - - protocol_t *cur_fragment_protocol_ptr = bpf_map_lookup_elem(&connection_protocol, &skb_tup); - if (cur_fragment_protocol_ptr) { - return; - } - - protocol_t cur_fragment_protocol = PROTOCOL_UNKNOWN; - char request_fragment[CLASSIFICATION_MAX_BUFFER]; - bpf_memset(request_fragment, 0, sizeof(request_fragment)); - read_into_buffer_for_classification((char *)request_fragment, skb, &skb_info); - const size_t payload_length = skb->len - skb_info.data_off; - const size_t final_fragment_size = payload_length < CLASSIFICATION_MAX_BUFFER ? payload_length : CLASSIFICATION_MAX_BUFFER; - classify_protocol(&cur_fragment_protocol, request_fragment, final_fragment_size); - // If there has been a change in the classification, save the new protocol. - if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { - bpf_map_update_with_telemetry(connection_protocol, &skb_tup, &cur_fragment_protocol, BPF_NOEXIST); - conn_tuple_t inverse_skb_conn_tup = skb_tup; - flip_tuple(&inverse_skb_conn_tup); - bpf_map_update_with_telemetry(connection_protocol, &inverse_skb_conn_tup, &cur_fragment_protocol, BPF_NOEXIST); - } -} - -#endif diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-maps.h b/pkg/network/ebpf/c/protocols/protocol-classification-maps.h index 5214bd3fdac17..0fbf5eb3b2de2 100644 --- a/pkg/network/ebpf/c/protocols/protocol-classification-maps.h +++ b/pkg/network/ebpf/c/protocols/protocol-classification-maps.h @@ -2,6 +2,7 @@ #define __PROTOCOL_CLASSIFICATION_MAPS_H #include "protocol-classification-defs.h" +#include "protocol-classification-structs.h" #include "map-defs.h" // Maps a connection tuple to its classified protocol. Used to reduce redundant classification procedures on the same @@ -22,4 +23,21 @@ BPF_HASH_MAP(conn_tuple_to_socket_skb_conn_tuple, conn_tuple_t, conn_tuple_t, 10 // interfaces or retransmissions. BPF_HASH_MAP(connection_states, conn_tuple_t, u32, 1024) +// Kernels before 4.7 do not know about per-cpu array maps. +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) + +// A per-cpu buffer used to read requests fragments during protocol +// classification and avoid allocating a buffer on the stack. Some protocols +// requires us to read at offset that are not aligned. Such reads are forbidden +// if done on the stack and will make the verifier complain about it, but they +// are allowed on map elements, hence the need for this map. +BPF_PERCPU_ARRAY_MAP(classification_buf, __u32, char [CLASSIFICATION_MAX_BUFFER], 1) +#else +BPF_ARRAY_MAP(classification_buf, __u8, 1) +#endif + +// A set (map from a key to a const bool value, we care only if the key exists in the map, and not its value) to +// mark if we've seen a specific mongo request, so we can eliminate false-positive classification on responses. +BPF_HASH_MAP(mongo_request_id, mongo_key, bool, 1024) + #endif diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-structs.h b/pkg/network/ebpf/c/protocols/protocol-classification-structs.h new file mode 100644 index 0000000000000..27270617ab6b1 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/protocol-classification-structs.h @@ -0,0 +1,20 @@ +#ifndef __PROTOCOL_CLASSIFICATION_STRUCTS_H +#define __PROTOCOL_CLASSIFICATION_STRUCTS_H + +#include +#include "tracer.h" + +typedef struct { + __s32 message_length; // total message size, including this + __s32 request_id; // identifier for this message + __s32 response_to; // requestID from the original request (used in responses from db) + __s32 op_code; // request type - see table below for details +} mongo_msg_header; + +// The key used in mongo_request_id set. +typedef struct { + conn_tuple_t tup; + __s32 req_id; +} mongo_key; + +#endif diff --git a/pkg/network/ebpf/c/protocols/protocol-classification.h b/pkg/network/ebpf/c/protocols/protocol-classification.h new file mode 100644 index 0000000000000..3412c9759660f --- /dev/null +++ b/pkg/network/ebpf/c/protocols/protocol-classification.h @@ -0,0 +1,87 @@ +#ifndef __PROTOCOL_CLASSIFICATION_H +#define __PROTOCOL_CLASSIFICATION_H + +#include "protocol-classification-common.h" +#include "protocol-classification-defs.h" +#include "protocol-classification-maps.h" +#include "protocol-classification-structs.h" +#include "bpf_builtins.h" +#include "bpf_telemetry.h" +#include "ip.h" +#include "amqp-helpers.h" +#include "http-classification-helpers.h" +#include "http2-helpers.h" +#include "mongo-helpers.h" +#include "redis-helpers.h" + +// Determines the protocols of the given buffer. If we already classified the payload (a.k.a protocol out param +// has a known protocol), then we do nothing. +static __always_inline void classify_protocol(protocol_t *protocol, conn_tuple_t *tup, const char *buf, __u32 size) { + if (protocol == NULL || *protocol != PROTOCOL_UNKNOWN) { + return; + } + + if (is_http(buf, size)) { + *protocol = PROTOCOL_HTTP; + } else if (is_http2(buf, size)) { + *protocol = PROTOCOL_HTTP2; + } else if (is_amqp(buf, size)) { + *protocol = PROTOCOL_AMQP; + } else if (is_redis(buf, size)) { + *protocol = PROTOCOL_REDIS; + } else if (is_mongo(tup, buf, size)) { + *protocol = PROTOCOL_MONGO; + } else { + *protocol = PROTOCOL_UNKNOWN; + } + + log_debug("[protocol classification]: Classified protocol as %d %d; %s\n", *protocol, size, buf); +} + +// A shared implementation for the runtime & prebuilt socket filter that classifies the protocols of the connections. +static __always_inline void protocol_classifier_entrypoint(struct __sk_buff *skb) { + skb_info_t skb_info = {0}; + conn_tuple_t skb_tup = {0}; + + // Exporting the conn tuple from the skb, alongside couple of relevant fields from the skb. + if (!read_conn_tuple_skb(skb, &skb_info, &skb_tup)) { + return; + } + + // We support non empty TCP payloads for classification at the moment. + if (!is_tcp(&skb_tup) || is_payload_empty(skb, &skb_info)) { + return; + } + + protocol_t *cur_fragment_protocol_ptr = bpf_map_lookup_elem(&connection_protocol, &skb_tup); + if (cur_fragment_protocol_ptr) { + return; + } + + protocol_t cur_fragment_protocol = PROTOCOL_UNKNOWN; + + // Get the buffer the fragment will be read into from a per-cpu array map. + // This will avoid doing unaligned stack access while parsing the protocols, + // which is forbidden and will make the verifier fail. + const u32 key = 0; + char *request_fragment = bpf_map_lookup_elem(&classification_buf, &key); + if (request_fragment == NULL) { + log_debug("could not get classification buffer from map"); + return; + } + + bpf_memset(request_fragment, 0, sizeof(request_fragment)); + read_into_buffer_for_classification((char *)request_fragment, skb, &skb_info); + const size_t payload_length = skb->len - skb_info.data_off; + const size_t final_fragment_size = payload_length < CLASSIFICATION_MAX_BUFFER ? payload_length : CLASSIFICATION_MAX_BUFFER; + classify_protocol(&cur_fragment_protocol, &skb_tup, request_fragment, final_fragment_size); + // If there has been a change in the classification, save the new protocol. + if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { + bpf_map_update_with_telemetry(connection_protocol, &skb_tup, &cur_fragment_protocol, BPF_NOEXIST); + conn_tuple_t inverse_skb_conn_tup = skb_tup; + flip_tuple(&inverse_skb_conn_tup); + bpf_map_update_with_telemetry(connection_protocol, &inverse_skb_conn_tup, &cur_fragment_protocol, BPF_NOEXIST); + } +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/protocol-dispatcher-helpers.h b/pkg/network/ebpf/c/protocols/protocol-dispatcher-helpers.h index 90c9c86e3495f..048f9e713ff70 100644 --- a/pkg/network/ebpf/c/protocols/protocol-dispatcher-helpers.h +++ b/pkg/network/ebpf/c/protocols/protocol-dispatcher-helpers.h @@ -4,7 +4,7 @@ #include #include "protocol-dispatcher-maps.h" -#include "protocol-classification-helpers.h" +#include "protocol-classification.h" #include "ip.h" // Returns true if the payload represents a TCP termination by checking if the tcp flags contains TCPHDR_FIN or TCPHDR_RST. @@ -12,6 +12,10 @@ static __always_inline bool is_tcp_termination(skb_info_t *skb_info) { return skb_info->tcp_flags & (TCPHDR_FIN | TCPHDR_RST); } +static __always_inline bool is_tcp_ack(skb_info_t *skb_info) { + return skb_info->tcp_flags == TCPHDR_ACK; +} + // checks if we have seen that tcp packet before. It can happen if a packet travels multiple interfaces or retransmissions. static __always_inline bool has_sequence_seen_before(conn_tuple_t *tup, skb_info_t *skb_info) { if (!skb_info || !skb_info->tcp_seq) { @@ -41,8 +45,8 @@ static __always_inline void protocol_dispatcher_entrypoint(struct __sk_buff *skb return; } - // We don't process non tcp packets, nor empty tcp packets which are not tcp termination packets. - if (!is_tcp(&skb_tup) || (is_payload_empty(skb, &skb_info) && !is_tcp_termination(&skb_info))) { + // We don't process non tcp packets, nor empty tcp packets which are not tcp termination packets, nor ACK only packets. + if (!is_tcp(&skb_tup) || is_tcp_ack(&skb_info) || (is_payload_empty(skb, &skb_info) && !is_tcp_termination(&skb_info))) { return; } @@ -56,26 +60,20 @@ static __always_inline void protocol_dispatcher_entrypoint(struct __sk_buff *skb // TODO: Share with protocol classification protocol_t *cur_fragment_protocol_ptr = bpf_map_lookup_elem(&dispatcher_connection_protocol, &skb_tup); if (cur_fragment_protocol_ptr == NULL) { - conn_tuple_t inverse_skb_conn_tup = skb_tup; - flip_tuple(&inverse_skb_conn_tup); - - cur_fragment_protocol_ptr = bpf_map_lookup_elem(&dispatcher_connection_protocol, &inverse_skb_conn_tup); - - // If we've already identified the protocol of the socket, no need to read the buffer and try to classify it. - if (cur_fragment_protocol_ptr == NULL) { - log_debug("[protocol_dispatcher_entrypoint]: %p was not classified\n", skb); - char request_fragment[CLASSIFICATION_MAX_BUFFER]; - bpf_memset(request_fragment, 0, sizeof(request_fragment)); - read_into_buffer_for_classification((char *)request_fragment, skb, &skb_info); - const size_t payload_length = skb->len - skb_info.data_off; - const size_t final_fragment_size = payload_length < CLASSIFICATION_MAX_BUFFER ? payload_length : CLASSIFICATION_MAX_BUFFER; - classify_protocol(&cur_fragment_protocol, request_fragment, final_fragment_size); - log_debug("[protocol_dispatcher_entrypoint]: %p Classifying protocol as: %d\n", skb, cur_fragment_protocol); - // If there has been a change in the classification, save the new protocol. - if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { - bpf_map_update_with_telemetry(dispatcher_connection_protocol, &skb_tup, &cur_fragment_protocol, BPF_NOEXIST); - bpf_map_update_with_telemetry(dispatcher_connection_protocol, &inverse_skb_conn_tup, &cur_fragment_protocol, BPF_NOEXIST); - } + log_debug("[protocol_dispatcher_entrypoint]: %p was not classified\n", skb); + char request_fragment[CLASSIFICATION_MAX_BUFFER]; + bpf_memset(request_fragment, 0, sizeof(request_fragment)); + read_into_buffer_for_classification((char *)request_fragment, skb, &skb_info); + const size_t payload_length = skb->len - skb_info.data_off; + const size_t final_fragment_size = payload_length < CLASSIFICATION_MAX_BUFFER ? payload_length : CLASSIFICATION_MAX_BUFFER; + classify_protocol(&cur_fragment_protocol, &skb_tup, request_fragment, final_fragment_size); + log_debug("[protocol_dispatcher_entrypoint]: %p Classifying protocol as: %d\n", skb, cur_fragment_protocol); + // If there has been a change in the classification, save the new protocol. + if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { + bpf_map_update_with_telemetry(dispatcher_connection_protocol, &skb_tup, &cur_fragment_protocol, BPF_NOEXIST); + conn_tuple_t inverse_skb_conn_tup = skb_tup; + flip_tuple(&inverse_skb_conn_tup); + bpf_map_update_with_telemetry(dispatcher_connection_protocol, &inverse_skb_conn_tup, &cur_fragment_protocol, BPF_NOEXIST); } } else { cur_fragment_protocol = *cur_fragment_protocol_ptr; @@ -85,7 +83,6 @@ static __always_inline void protocol_dispatcher_entrypoint(struct __sk_buff *skb // dispatch if possible bpf_tail_call_compat(skb, &protocols_progs, cur_fragment_protocol); } - } #endif diff --git a/pkg/network/ebpf/c/protocols/redis-defs.h b/pkg/network/ebpf/c/protocols/redis-defs.h new file mode 100644 index 0000000000000..68232fb4414f8 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/redis-defs.h @@ -0,0 +1,6 @@ +#ifndef __REDIS_DEFS_H +#define __REDIS_DEFS_H + +#define REDIS_MIN_FRAME_LENGTH 3 + +#endif diff --git a/pkg/network/ebpf/c/protocols/redis-helpers.h b/pkg/network/ebpf/c/protocols/redis-helpers.h new file mode 100644 index 0000000000000..024044fcb8e40 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/redis-helpers.h @@ -0,0 +1,89 @@ +#ifndef __REDIS_HELPERS_H +#define __REDIS_HELPERS_H + +#include "protocol-classification-common.h" + +// Checks the buffer represent a standard response (OK) or any of redis commands +// https://redis.io/commands/ +static __always_inline bool check_supported_ascii_and_crlf(const char* buf, __u32 buf_size, int index_to_start_from) { + bool found_cr = false; + char current_char; + int i = index_to_start_from; +#pragma unroll(CLASSIFICATION_MAX_BUFFER) + for (; i < CLASSIFICATION_MAX_BUFFER; i++) { + current_char = buf[i]; + if (current_char == '\r') { + found_cr = true; + break; + } else if ('A' <= current_char && current_char <= 'Z') { + continue; + } else if ('a' <= current_char && current_char <= 'z') { + continue; + } else if (current_char == '.' || current_char == ' ' || current_char == '-' || current_char == '_') { + continue; + } + return false; + } + + if (!found_cr || i+1 >= buf_size) { + return false; + } + return buf[i+1] == '\n'; +} + +// Checks the buffer represents an error according to https://redis.io/docs/reference/protocol-spec/#resp-errors +static __always_inline bool check_err_prefix(const char* buf, __u32 buf_size) { +#define ERR "-ERR " +#define WRONGTYPE "-WRONGTYPE " + + // memcmp returns + // 0 when s1 == s2, + // !0 when s1 != s2. + bool match = !(bpf_memcmp(buf, ERR, sizeof(ERR)-1) + && bpf_memcmp(buf, WRONGTYPE, sizeof(WRONGTYPE)-1)); + + return match; +} + +static __always_inline bool check_integer_and_crlf(const char* buf, __u32 buf_size, int index_to_start_from) { + bool found_cr = false; + char current_char; + int i = index_to_start_from; +#pragma unroll(CLASSIFICATION_MAX_BUFFER) + for (; i < CLASSIFICATION_MAX_BUFFER; i++) { + current_char = buf[i]; + if (current_char == '\r') { + found_cr = true; + break; + } else if ('0' <= current_char && current_char <= '9') { + continue; + } + + return false; + } + + if (!found_cr || i+1 >= buf_size) { + return false; + } + return buf[i+1] == '\n'; +} + +static __always_inline bool is_redis(const char* buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, REDIS_MIN_FRAME_LENGTH) + + char first_char = buf[0]; + switch (first_char) { + case '+': + return check_supported_ascii_and_crlf(buf, buf_size, 1); + case '-': + return check_err_prefix(buf, buf_size); + case ':': + case '$': + case '*': + return check_integer_and_crlf(buf, buf_size, 1); + default: + return false; + } +} + +#endif diff --git a/pkg/network/ebpf/c/runtime/conntrack.c b/pkg/network/ebpf/c/runtime/conntrack.c index 707d8e50e9de1..49964716e9d20 100644 --- a/pkg/network/ebpf/c/runtime/conntrack.c +++ b/pkg/network/ebpf/c/runtime/conntrack.c @@ -1,6 +1,7 @@ #include "kconfig.h" #include +#include "bpf_tracing.h" #include "bpf_telemetry.h" #include "bpf_endian.h" #include "conntrack.h" @@ -24,7 +25,7 @@ int kprobe___nf_conntrack_hash_insert(struct pt_regs* ctx) { if (!(status&IPS_CONFIRMED) || !(status&IPS_NAT_MASK)) { return 0; } - + log_debug("kprobe/__nf_conntrack_hash_insert: netns: %u, status: %x\n", get_netns(&ct->ct_net), status); conntrack_tuple_t orig = {}, reply = {}; @@ -56,7 +57,7 @@ int kprobe_ctnetlink_fill_info(struct pt_regs* ctx) { if (!(status&IPS_CONFIRMED) || !(status&IPS_NAT_MASK)) { return 0; } - + log_debug("kprobe/ctnetlink_fill_info: netns: %u, status: %x\n", get_netns(&ct->ct_net), status); conntrack_tuple_t orig = {}, reply = {}; diff --git a/pkg/network/ebpf/c/runtime/http.c b/pkg/network/ebpf/c/runtime/http.c index 03a87e9d05698..d9f2d8c4f77cd 100644 --- a/pkg/network/ebpf/c/runtime/http.c +++ b/pkg/network/ebpf/c/runtime/http.c @@ -1,5 +1,6 @@ #include +#include "bpf_tracing.h" #include "tracer.h" #include "bpf_telemetry.h" #include "bpf_builtins.h" diff --git a/pkg/network/ebpf/c/runtime/tracer.c b/pkg/network/ebpf/c/runtime/tracer.c index e0ed1b90a9780..e90102a9c4747 100644 --- a/pkg/network/ebpf/c/runtime/tracer.c +++ b/pkg/network/ebpf/c/runtime/tracer.c @@ -1,9 +1,10 @@ #include "kconfig.h" #include "bpf_telemetry.h" #include "bpf_builtins.h" +#include "bpf_tracing.h" #include "tracer.h" -#include "protocols/protocol-classification-helpers.h" +#include "protocols/protocol-classification.h" #include "tracer-events.h" #include "tracer-maps.h" #include "tracer-stats.h" @@ -562,27 +563,13 @@ static __always_inline int sys_enter_bind(struct socket *sock, struct sockaddr * return 0; } - u16 sin_port = 0; - sa_family_t family = 0; - bpf_probe_read_kernel_with_telemetry(&family, sizeof(sa_family_t), &addr->sa_family); - if (family == AF_INET) { - bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in *)addr)->sin_port)); - } else if (family == AF_INET6) { - bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in6 *)addr)->sin6_port)); - } - - sin_port = bpf_ntohs(sin_port); - if (sin_port == 0) { - log_debug("ERR(sys_enter_bind): sin_port is 0\n"); - return 0; - } - // write to pending_binds so the retprobe knows we can mark this as binding. bind_syscall_args_t args = {}; - args.port = sin_port; + bpf_probe_read_kernel_with_telemetry(&args.sk, sizeof(args.sk), &sock->sk); + args.addr = addr; bpf_map_update_with_telemetry(pending_bind, &tid, &args, BPF_ANY); - log_debug("sys_enter_bind: started a bind on UDP port=%d sock=%llx tid=%u\n", sin_port, sock, tid); + log_debug("sys_enter_bind: started a bind on UDP sock=%llx tid=%u\n", sock, tid); return 0; } @@ -611,8 +598,7 @@ static __always_inline int sys_exit_bind(__s64 ret) { __u64 tid = bpf_get_current_pid_tgid(); // bail if this bind() is not the one we're instrumenting - bind_syscall_args_t *args; - args = bpf_map_lookup_elem(&pending_bind, &tid); + bind_syscall_args_t *args = bpf_map_lookup_elem(&pending_bind, &tid); log_debug("sys_exit_bind: tid=%u, ret=%d\n", tid, ret); @@ -620,13 +606,34 @@ static __always_inline int sys_exit_bind(__s64 ret) { log_debug("sys_exit_bind: was not a UDP bind, will not process\n"); return 0; } - __u16 sin_port = args->port; + + struct sock * sk = args->sk; + struct sockaddr *addr = args->addr; bpf_map_delete_elem(&pending_bind, &tid); if (ret != 0) { return 0; } + u16 sin_port = 0; + sa_family_t family = 0; + bpf_probe_read_kernel_with_telemetry(&family, sizeof(sa_family_t), &addr->sa_family); + if (family == AF_INET) { + bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in *)addr)->sin_port)); + } else if (family == AF_INET6) { + bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in6 *)addr)->sin6_port)); + } + + sin_port = bpf_ntohs(sin_port); + if (sin_port == 0) { + sin_port = read_sport(sk); + } + + if (sin_port == 0) { + log_debug("ERR(sys_exit_bind): sin_port is 0\n"); + return 0; + } + port_binding_t pb = {}; pb.netns = 0; // don't have net ns info in this context pb.port = sin_port; diff --git a/pkg/network/ebpf/c/tracer-telemetry.h b/pkg/network/ebpf/c/tracer-telemetry.h index c7e781b656b4a..f83db2ef078e5 100644 --- a/pkg/network/ebpf/c/tracer-telemetry.h +++ b/pkg/network/ebpf/c/tracer-telemetry.h @@ -8,6 +8,7 @@ enum telemetry_counter { + tcp_failed_connect, missed_tcp_close, missed_udp_close, udp_send_processed, @@ -24,6 +25,9 @@ static __always_inline void increment_telemetry_count(enum telemetry_counter cou } switch (counter_name) { + case tcp_failed_connect: + __sync_fetch_and_add(&val->tcp_failed_connect, 1); + break; case missed_tcp_close: __sync_fetch_and_add(&val->missed_tcp_close, 1); break; diff --git a/pkg/network/ebpf/c/tracer.h b/pkg/network/ebpf/c/tracer.h index 7ee01ef097aa7..6a68849974002 100644 --- a/pkg/network/ebpf/c/tracer.h +++ b/pkg/network/ebpf/c/tracer.h @@ -103,6 +103,7 @@ typedef struct { #define TCP_FLAGS_OFFSET 13 #define TCPHDR_FIN 0x01 #define TCPHDR_RST 0x04 +#define TCPHDR_ACK 0x10 // skb_info_t embeds a conn_tuple_t extracted from the skb object as well as // some ancillary data such as the data offset (the byte offset pointing to @@ -134,6 +135,7 @@ typedef struct { // Telemetry names typedef struct { + __u64 tcp_failed_connect; __u64 tcp_sent_miscounts; __u64 missed_tcp_close; __u64 missed_udp_close; @@ -143,7 +145,8 @@ typedef struct { } telemetry_t; typedef struct { - __u16 port; + struct sockaddr *addr; + struct sock *sk; } bind_syscall_args_t; typedef struct { diff --git a/pkg/network/ebpf/kprobe_types.go b/pkg/network/ebpf/kprobe_types.go index 077ea727f3282..d8427ad141ad3 100644 --- a/pkg/network/ebpf/kprobe_types.go +++ b/pkg/network/ebpf/kprobe_types.go @@ -29,6 +29,7 @@ type BindSyscallArgs C.bind_syscall_args_t // udp_recv_sock_t have *sock and *msghdr struct members, we make them opaque here type _Ctype_struct_sock uint64 type _Ctype_struct_msghdr uint64 +type _Ctype_struct_sockaddr uint64 type TCPState uint8 diff --git a/pkg/network/ebpf/kprobe_types_linux.go b/pkg/network/ebpf/kprobe_types_linux.go index 366591bfc9ef4..cd0709c6e2b7d 100644 --- a/pkg/network/ebpf/kprobe_types_linux.go +++ b/pkg/network/ebpf/kprobe_types_linux.go @@ -47,6 +47,7 @@ type Batch struct { Id uint64 } type Telemetry struct { + Tcp_failed_connect uint64 Tcp_sent_miscounts uint64 Missed_tcp_close uint64 Missed_udp_close uint64 @@ -68,11 +69,13 @@ type UDPRecvSock struct { Msg *_Ctype_struct_msghdr } type BindSyscallArgs struct { - Port uint16 + Addr *_Ctype_struct_sockaddr + Sk *_Ctype_struct_sock } type _Ctype_struct_sock uint64 type _Ctype_struct_msghdr uint64 +type _Ctype_struct_sockaddr uint64 type TCPState uint8 diff --git a/pkg/network/ebpf/probes/probes.go b/pkg/network/ebpf/probes/probes.go index 5d4d4667425af..d2d211cfe9260 100644 --- a/pkg/network/ebpf/probes/probes.go +++ b/pkg/network/ebpf/probes/probes.go @@ -158,27 +158,28 @@ type BPFMapName string // constants for the map names const ( - ConnMap BPFMapName = "conn_stats" - TCPStatsMap BPFMapName = "tcp_stats" - TCPConnectSockPidMap BPFMapName = "tcp_ongoing_connect_pid" - ConnCloseEventMap BPFMapName = "conn_close_event" - TracerStatusMap BPFMapName = "tracer_status" - PortBindingsMap BPFMapName = "port_bindings" - UDPPortBindingsMap BPFMapName = "udp_port_bindings" - TelemetryMap BPFMapName = "telemetry" - ConnCloseBatchMap BPFMapName = "conn_close_batch" - ConntrackMap BPFMapName = "conntrack" - ConntrackTelemetryMap BPFMapName = "conntrack_telemetry" - SockFDLookupArgsMap BPFMapName = "sockfd_lookup_args" - DoSendfileArgsMap BPFMapName = "do_sendfile_args" - SockByPidFDMap BPFMapName = "sock_by_pid_fd" - PidFDBySockMap BPFMapName = "pid_fd_by_sock" - TagsMap BPFMapName = "conn_tags" - TcpSendMsgArgsMap BPFMapName = "tcp_sendmsg_args" - IpMakeSkbArgsMap BPFMapName = "ip_make_skb_args" - MapErrTelemetryMap BPFMapName = "map_err_telemetry_map" - HelperErrTelemetryMap BPFMapName = "helper_err_telemetry_map" - TcpRecvMsgArgsMap BPFMapName = "tcp_recvmsg_args" + ConnMap BPFMapName = "conn_stats" + TCPStatsMap BPFMapName = "tcp_stats" + TCPConnectSockPidMap BPFMapName = "tcp_ongoing_connect_pid" + ConnCloseEventMap BPFMapName = "conn_close_event" + TracerStatusMap BPFMapName = "tracer_status" + PortBindingsMap BPFMapName = "port_bindings" + UDPPortBindingsMap BPFMapName = "udp_port_bindings" + TelemetryMap BPFMapName = "telemetry" + ConnCloseBatchMap BPFMapName = "conn_close_batch" + ConntrackMap BPFMapName = "conntrack" + ConntrackTelemetryMap BPFMapName = "conntrack_telemetry" + SockFDLookupArgsMap BPFMapName = "sockfd_lookup_args" + DoSendfileArgsMap BPFMapName = "do_sendfile_args" + SockByPidFDMap BPFMapName = "sock_by_pid_fd" + PidFDBySockMap BPFMapName = "pid_fd_by_sock" + TagsMap BPFMapName = "conn_tags" + TcpSendMsgArgsMap BPFMapName = "tcp_sendmsg_args" + IpMakeSkbArgsMap BPFMapName = "ip_make_skb_args" + MapErrTelemetryMap BPFMapName = "map_err_telemetry_map" + HelperErrTelemetryMap BPFMapName = "helper_err_telemetry_map" + TcpRecvMsgArgsMap BPFMapName = "tcp_recvmsg_args" + ProtocolClassificationBufMap BPFMapName = "classification_buf" ) // SectionName returns the SectionName for the given BPF map diff --git a/pkg/network/encoding/encoding_test.go b/pkg/network/encoding/encoding_test.go index 45a0538c80f1f..972ba349b94fa 100644 --- a/pkg/network/encoding/encoding_test.go +++ b/pkg/network/encoding/encoding_test.go @@ -152,14 +152,10 @@ func TestSerialization(t *testing.T) { { Source: util.AddressFromString("10.1.1.1"), Dest: util.AddressFromString("10.2.2.2"), - Monotonic: network.StatCountersByCookie{ - { - StatCounters: network.StatCounters{ - SentBytes: 1, - RecvBytes: 100, - Retransmits: 201, - }, - }, + Monotonic: network.StatCounters{ + SentBytes: 1, + RecvBytes: 100, + Retransmits: 201, }, Last: network.StatCounters{ SentBytes: 2, diff --git a/pkg/network/encoding/format_test.go b/pkg/network/encoding/format_test.go index 490869d274352..b395bbc15b9ac 100644 --- a/pkg/network/encoding/format_test.go +++ b/pkg/network/encoding/format_test.go @@ -6,7 +6,6 @@ package encoding import ( - "github.com/stretchr/testify/assert" "runtime" "testing" @@ -91,44 +90,3 @@ func BenchmarkConnectionReset(b *testing.B) { } runtime.KeepAlive(c) } - -func TestFormatProtocols(t *testing.T) { - tests := []struct { - name string - protocol network.ProtocolType - want *model.ProtocolStack - }{ - { - name: "unknown protocol", - protocol: network.ProtocolUnknown, - want: &model.ProtocolStack{ - Stack: []model.ProtocolType{ - model.ProtocolType_protocolUnknown, - }, - }, - }, - { - name: "unclassified protocol", - protocol: network.ProtocolUnclassified, - want: &model.ProtocolStack{ - Stack: []model.ProtocolType{ - model.ProtocolType_protocolUnknown, - }, - }, - }, - { - name: "http protocol", - protocol: network.ProtocolHTTP, - want: &model.ProtocolStack{ - Stack: []model.ProtocolType{ - model.ProtocolType_protocolHTTP, - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - assert.Equalf(t, tt.want, formatProtocol(tt.protocol), "formatProtocol(%v)", tt.protocol) - }) - } -} diff --git a/pkg/network/encoding/format_usm_test.go b/pkg/network/encoding/format_usm_test.go new file mode 100644 index 0000000000000..5df0344a3a1d3 --- /dev/null +++ b/pkg/network/encoding/format_usm_test.go @@ -0,0 +1,83 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package encoding + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/network" +) + +func TestFormatProtocols(t *testing.T) { + tests := []struct { + name string + protocol network.ProtocolType + want *model.ProtocolStack + }{ + { + name: "unknown protocol", + protocol: network.ProtocolUnknown, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolUnknown, + }, + }, + }, + { + name: "unclassified protocol", + protocol: network.ProtocolUnclassified, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolUnknown, + }, + }, + }, + { + name: "http protocol", + protocol: network.ProtocolHTTP, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolHTTP, + }, + }, + }, + { + name: "amqp protocol", + protocol: network.ProtocolAMQP, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolAMQP, + }, + }, + }, + { + name: "redis protocol", + protocol: network.ProtocolRedis, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolRedis, + }, + }, + }, + { + name: "mongo protocol", + protocol: network.ProtocolMongo, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolMongo, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equalf(t, tt.want, formatProtocol(tt.protocol), "formatProtocol(%v)", tt.protocol) + }) + } +} diff --git a/pkg/network/event_common.go b/pkg/network/event_common.go index cce1ad480f84e..9ababb3eb6bf2 100644 --- a/pkg/network/event_common.go +++ b/pkg/network/event_common.go @@ -18,17 +18,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/process/util" ) -type ProtocolType uint16 - -const ( - ProtocolUnclassified ProtocolType = iota - ProtocolUnknown - ProtocolHTTP - ProtocolHTTP2 - ProtocolTLS - MaxProtocols -) - // ConnectionType will be either TCP or UDP type ConnectionType uint8 @@ -219,41 +208,6 @@ func (s StatCounters) IsZero() bool { return s == StatCounters{} } -// StatCountersByCookie stores StatCounters by unique cookie -type StatCountersByCookie []*struct { - StatCounters - Cookie uint32 -} - -// Get returns a StatCounters object for a cookie -func (s StatCountersByCookie) Get(cookie uint32) (StatCounters, bool) { - for _, c := range s { - if c.Cookie == cookie { - return c.StatCounters, true - } - } - - return StatCounters{}, false -} - -// Put adds or sets a StatCounters object for a cookie -func (s *StatCountersByCookie) Put(cookie uint32, sc StatCounters) { - for _, c := range *s { - if c.Cookie == cookie { - c.StatCounters = sc - return - } - } - - *s = append(*s, &struct { - StatCounters - Cookie uint32 - }{ - StatCounters: sc, - Cookie: cookie, - }) -} - // ConnectionStats stores statistics for a single connection. Field order in the struct should be 8-byte aligned type ConnectionStats struct { Source util.Address @@ -262,23 +216,12 @@ type ConnectionStats struct { IPTranslation *IPTranslation Via *Via - // Monotonic stores a list of StatCounters - // each identified by a unique "cookie" - // - // this is necessary because we use connection - // info like src/dst address/port to uniquely - // identify a connection and port reuse or - // races in the ebpf code may occur that would - // make conflicts in the stats per connection - // impossible to resolve/detect - // - // the "cookie" is generated in the ebpf code - // when we first create counters for a connection; - // see the get_conn_stats() function - Monotonic StatCountersByCookie + Monotonic StatCounters Last StatCounters + Cookie uint32 + // Last time the stats for this connection were updated LastUpdateEpoch uint64 @@ -352,26 +295,6 @@ func (c ConnectionStats) IsShortLived() bool { return c.Last.TCPEstablished >= 1 && c.Last.TCPClosed >= 1 } -// MonotonicSum returns the sum of all the monotonic stats -func (c ConnectionStats) MonotonicSum() StatCounters { - var stc StatCounters - for _, st := range c.Monotonic { - stc = stc.Add(st.StatCounters) - } - - return stc -} - -func (c ConnectionStats) clone() ConnectionStats { - cl := c - cl.Monotonic = make(StatCountersByCookie, 0, len(c.Monotonic)) - for _, s := range c.Monotonic { - cl.Monotonic.Put(s.Cookie, s.StatCounters) - } - - return cl -} - const keyFmt = "p:%d|src:%s:%d|dst:%s:%d|f:%d|t:%d" // BeautifyKey returns a human readable byte key (used for debugging purposes) @@ -397,7 +320,7 @@ func BeautifyKey(key string) string { family := (raw[8] >> 4) & 0xf typ := raw[8] & 0xf - // Finally source addr, dest addr + // source addr, dest addr addrSize := 4 if ConnectionFamily(family) == AFINET6 { addrSize = 16 @@ -431,31 +354,24 @@ func ConnectionSummary(c *ConnectionStats, names map[util.Address][]dns.Hostname ) } - var stc StatCounters - cookies := make([]uint32, 0, len(c.Monotonic)) - for _, st := range c.Monotonic { - stc = stc.Add(st.StatCounters) - cookies = append(cookies, st.Cookie) - } - str += fmt.Sprintf("(%s) %s sent (+%s), %s received (+%s)", c.Direction, - humanize.Bytes(stc.SentBytes), humanize.Bytes(c.Last.SentBytes), - humanize.Bytes(stc.RecvBytes), humanize.Bytes(c.Last.RecvBytes), + humanize.Bytes(c.Monotonic.SentBytes), humanize.Bytes(c.Last.SentBytes), + humanize.Bytes(c.Monotonic.RecvBytes), humanize.Bytes(c.Last.RecvBytes), ) if c.Type == TCP { str += fmt.Sprintf( ", %d retransmits (+%d), RTT %s (± %s), %d established (+%d), %d closed (+%d)", - stc.Retransmits, c.Last.Retransmits, + c.Monotonic.Retransmits, c.Last.Retransmits, time.Duration(c.RTT)*time.Microsecond, time.Duration(c.RTTVar)*time.Microsecond, - stc.TCPEstablished, c.Last.TCPEstablished, - stc.TCPClosed, c.Last.TCPClosed, + c.Monotonic.TCPEstablished, c.Last.TCPEstablished, + c.Monotonic.TCPClosed, c.Last.TCPClosed, ) } - str += fmt.Sprintf(", last update epoch: %d, cookies: %+v", c.LastUpdateEpoch, cookies) + str += fmt.Sprintf(", last update epoch: %d, cookie: %d", c.LastUpdateEpoch, c.Cookie) str += fmt.Sprintf(", protocol: %v", c.Protocol) return str @@ -511,6 +427,7 @@ func generateConnectionKey(c ConnectionStats, buf []byte, useNAT bool) []byte { n += laddr.WriteTo(buf[n:]) // 4 or 16 bytes n += raddr.WriteTo(buf[n:]) // 4 or 16 bytes + return buf[:n] } diff --git a/pkg/network/event_test.go b/pkg/network/event_test.go index d6bbfb9b568c3..ee1dbaabe44a3 100644 --- a/pkg/network/event_test.go +++ b/pkg/network/event_test.go @@ -25,13 +25,9 @@ var ( Dest: util.AddressFromString("192.168.0.103"), SPort: 123, DPort: 35000, - Monotonic: StatCountersByCookie{ - { - StatCounters: StatCounters{ - SentBytes: 123123, - RecvBytes: 312312, - }, - }, + Monotonic: StatCounters{ + SentBytes: 123123, + RecvBytes: 312312, }, } ) @@ -48,6 +44,7 @@ func TestBeautifyKey(t *testing.T) { Dest: util.AddressFromNetIP(net.ParseIP("2001:db8::2:1")), SPort: 4444, DPort: 8888, + Cookie: 1, }, { Pid: 32065, @@ -58,6 +55,7 @@ func TestBeautifyKey(t *testing.T) { Dest: util.AddressFromString("130.211.21.187"), SPort: 52012, DPort: 443, + Cookie: 2, }, } { bk := c.ByteKey(buf) diff --git a/pkg/network/event_usm_common.go b/pkg/network/event_usm_common.go new file mode 100644 index 0000000000000..5667112797e70 --- /dev/null +++ b/pkg/network/event_usm_common.go @@ -0,0 +1,46 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package network + +import ( + model "github.com/DataDog/agent-payload/v5/process" +) + +type ProtocolType uint16 + +const ( + ProtocolUnclassified = ProtocolType(model.ProtocolType_protocolUnclassified) + ProtocolUnknown = ProtocolType(model.ProtocolType_protocolUnknown) + ProtocolHTTP = ProtocolType(model.ProtocolType_protocolHTTP) + ProtocolHTTP2 = ProtocolType(model.ProtocolType_protocolHTTP2) + ProtocolTLS = ProtocolType(model.ProtocolType_protocolTLS) + ProtocolKafka = ProtocolType(model.ProtocolType_protocolKafka) + ProtocolMongo = ProtocolType(model.ProtocolType_protocolMongo) + ProtocolPostgres = ProtocolType(model.ProtocolType_protocolPostgres) + ProtocolAMQP = ProtocolType(model.ProtocolType_protocolAMQP) + ProtocolRedis = ProtocolType(model.ProtocolType_protocolRedis) +) + +var ( + supportedProtocols = map[ProtocolType]struct{}{ + ProtocolUnclassified: {}, + ProtocolUnknown: {}, + ProtocolHTTP: {}, + ProtocolHTTP2: {}, + ProtocolTLS: {}, + ProtocolKafka: {}, + ProtocolMongo: {}, + ProtocolPostgres: {}, + ProtocolAMQP: {}, + ProtocolRedis: {}, + } +) + +// IsValidProtocolValue checks if a given value is a valid protocol. +func IsValidProtocolValue(val uint8) bool { + _, ok := supportedProtocols[ProtocolType(val)] + return ok +} diff --git a/pkg/network/event_windows.go b/pkg/network/event_windows.go index 0b246039967fa..7fd69636aac61 100644 --- a/pkg/network/event_windows.go +++ b/pkg/network/event_windows.go @@ -88,18 +88,17 @@ func FlowToConnStat(cs *ConnectionStats, flow *driver.PerFlowData, enableMonoton srcAddr, dstAddr = convertV6Addr(flow.LocalAddress), convertV6Addr(flow.RemoteAddress) } - *cs = ConnectionStats{Monotonic: make(StatCountersByCookie, 0, 1)} + *cs = ConnectionStats{} cs.Source = srcAddr cs.Dest = dstAddr // after lengthy discussion, use the transport bytes in/out. monotonic // RecvBytes/SentBytes includes the size of the IP header and transport // header, transportBytes is the raw transport data. At present, // the linux probe only reports the raw transport data. So do that by default. - var m StatCounters - m.SentBytes = monotonicOrTransportBytes(enableMonotonicCounts, flow.MonotonicSentBytes, flow.TransportBytesOut) - m.RecvBytes = monotonicOrTransportBytes(enableMonotonicCounts, flow.MonotonicRecvBytes, flow.TransportBytesIn) - m.SentPackets = flow.PacketsOut - m.RecvPackets = flow.PacketsIn + cs.Monotonic.SentBytes = monotonicOrTransportBytes(enableMonotonicCounts, flow.MonotonicSentBytes, flow.TransportBytesOut) + cs.Monotonic.RecvBytes = monotonicOrTransportBytes(enableMonotonicCounts, flow.MonotonicRecvBytes, flow.TransportBytesIn) + cs.Monotonic.SentPackets = flow.PacketsOut + cs.Monotonic.RecvPackets = flow.PacketsIn cs.LastUpdateEpoch = flow.Timestamp cs.Pid = uint32(flow.ProcessId) cs.SPort = flow.LocalPort @@ -108,19 +107,20 @@ func FlowToConnStat(cs *ConnectionStats, flow *driver.PerFlowData, enableMonoton cs.Family = family cs.Direction = connDirection(flow.Flags) cs.SPortIsEphemeral = IsPortInEphemeralRange(cs.Family, cs.Type, cs.SPort) + cs.Cookie = uint32(flow.FlowHandle) if connectionType == TCP { tf := flow.TCPFlow() if tf != nil { - m.Retransmits = uint32(tf.RetransmitCount) + cs.Monotonic.Retransmits = uint32(tf.RetransmitCount) cs.RTT = uint32(tf.SRTT) cs.RTTVar = uint32(tf.RttVariance) } if isTCPFlowEstablished(flow.Flags) { - m.TCPEstablished = 1 + cs.Monotonic.TCPEstablished = 1 } if isFlowClosed(flow.Flags) { - m.TCPClosed = 1 + cs.Monotonic.TCPClosed = 1 } if flow.ClassificationStatus == driver.ClassificationClassified { @@ -164,7 +164,4 @@ func FlowToConnStat(cs *ConnectionStats, flow *driver.PerFlowData, enableMonoton cs.Protocol = ProtocolUnknown } } - - cs.Monotonic.Put(uint32(flow.FlowHandle), m) - } diff --git a/pkg/network/protocols/amqp/client.go b/pkg/network/protocols/amqp/client.go new file mode 100644 index 0000000000000..b69d336bf4488 --- /dev/null +++ b/pkg/network/protocols/amqp/client.go @@ -0,0 +1,124 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package amqp + +import ( + "fmt" + "github.com/streadway/amqp" + "sync" +) + +type Options struct { + ServerAddress string + Username string + Password string +} + +type Client struct { + PublishConn *amqp.Connection + PublishChannel *amqp.Channel + ConsumeConn *amqp.Connection + ConsumeChannel *amqp.Channel +} + +func NewClient(opts Options) (*Client, error) { + user := opts.Username + if user == "" { + user = User + } + + pass := opts.Password + if pass == "" { + pass = Pass + } + + publishConn, err := amqp.Dial(fmt.Sprintf("amqp://%s:%s@%s/", user, pass, opts.ServerAddress)) + if err != nil { + return nil, err + } + publishCh, err := publishConn.Channel() + if err != nil { + return nil, err + } + consumeConn, err := amqp.Dial(fmt.Sprintf("amqp://%s:%s@%s/", user, pass, opts.ServerAddress)) + if err != nil { + return nil, err + } + consumeCh, err := consumeConn.Channel() + if err != nil { + return nil, err + } + return &Client{ + PublishConn: publishConn, + PublishChannel: publishCh, + ConsumeConn: consumeConn, + ConsumeChannel: consumeCh, + }, nil +} + +func (c *Client) Terminate() { + c.PublishChannel.Close() + c.ConsumeChannel.Close() + c.PublishConn.Close() + c.ConsumeConn.Close() +} + +func (c *Client) DeclareQueue(name string, ch *amqp.Channel) error { + _, err := ch.QueueDeclare( + name, // name + false, // durable + false, // delete when unused + false, // exclusive + false, // no-wait + nil, // arguments + ) + return err +} + +func (c *Client) Publish(queue, body string) error { + return c.PublishChannel.Publish( + "", // exchange + queue, // routing key + false, // mandatory + false, // immediate + amqp.Publishing{ + ContentType: "text/plain", + Body: []byte(body), + }) +} + +func (c *Client) Consume(queue string, numberOfMessages int) ([]string, error) { + msgs, err := c.ConsumeChannel.Consume( + queue, + "", // consumer + true, // auto-ack + false, // exclusive + false, // no-local + false, // no-wait + nil, // args + ) + + if err != nil { + return nil, err + } + + res := make([]string, 0, numberOfMessages) + wg := sync.WaitGroup{} + wg.Add(1) + go func() { + defer wg.Done() + for msg := range msgs { + res = append(res, string(msg.Body)) + if len(res) == numberOfMessages { + return + } + } + }() + + wg.Wait() + + return res, nil +} diff --git a/pkg/network/protocols/amqp/server.go b/pkg/network/protocols/amqp/server.go new file mode 100644 index 0000000000000..64a8bdca8fea5 --- /dev/null +++ b/pkg/network/protocols/amqp/server.go @@ -0,0 +1,33 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package amqp + +import ( + "fmt" + "regexp" + "testing" + + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" + protocolsUtils "github.com/DataDog/datadog-agent/pkg/network/protocols/testutil" +) + +const ( + User = "guest" + Pass = "guest" +) + +func RunAmqpServer(t *testing.T, serverAddr, serverPort string) { + env := []string{ + "AMQP_ADDR=" + serverAddr, + "AMQP_PORT=" + serverPort, + "USER=" + User, + "PASS=" + Pass, + } + + t.Helper() + dir, _ := testutil.CurDir() + protocolsUtils.RunDockerServer(t, "amqp", dir+"/testdata/docker-compose.yml", env, regexp.MustCompile(fmt.Sprintf(".*started TCP listener on .*%s.*", serverPort))) +} diff --git a/pkg/network/protocols/amqp/testdata/docker-compose.yml b/pkg/network/protocols/amqp/testdata/docker-compose.yml new file mode 100644 index 0000000000000..4cd98c37079e9 --- /dev/null +++ b/pkg/network/protocols/amqp/testdata/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3' +services: + rabbitmq: + image: rabbitmq:3-management-alpine + ports: + - ${AMQP_ADDR:-127.0.0.1}:${AMQP_PORT:-5672}:5672 + environment: + - "RABBITMQ_DEFAULT_PASS=${PASS:-guest}" + - "RABBITMQ_DEFAULT_USER=${USER:-guest}" diff --git a/pkg/network/protocols/events/README.md b/pkg/network/protocols/events/README.md new file mode 100644 index 0000000000000..6c864a37c81fc --- /dev/null +++ b/pkg/network/protocols/events/README.md @@ -0,0 +1,73 @@ +# `pkg/network/protocols/events` + +## Motivation + +The purpose of this package is to standardize the communication between user and +kernel space across different Universal Service Monitoring (USM) protocols. + +Some technical concerns that were factored in the code and are worth mentioning are: + +* eBPF programs of type `BPF_PROG_TYPE_SOCKET_FILTER` are not (for _most_ Kernel + versions) able to directly write events into perf buffers; +* Reading events off-perf buffers can be quite CPU-intensive. This can be +mitigated by properly configuring the `watermark` option when issuing the +`perf_event_open` syscall. However, there is currently no way to _synchronize_ +(eg. flush all buffered events) at a given moment in time[^1], which is a +requirement for us. + +[^1]: this may be available in the near future since we could probably force +wake-up events on the fly via `ioctl` calls, but this will likely require us to +upstream changes to the `cilium/ebpf` library. There is a Jira card owned by +`ebpf-platform` tracking this, and once this is available we could _greatly_ +simplify this package. + + +## How to use the library + +### Kernel Side + +```c +#include "protocols/events.h" +USM_EVENTS_INIT(, , ); +``` + +This will instantiate the necessary eBPF maps along with two functions: +* `_batch_enqueue`; +* `_batch_flush`; + +Please note that `_batch_flush` requires access to the +`bpf_perf_event_output` helper, which is typically not available to socket +filter programs. Because of that we recommend to call it from +`netif_receive_skb` which is associated to the execution of socket filter programs: + +```c +SEC("tracepoint/net/netif_receive_skb") +int tracepoint__net__netif_receive_skb(struct pt_regs* ctx) { + _flush_batch(ctx); + return 0; +} +``` + +### Userspace Side + +Just create a `event.Consumer` and supply it with a callback argument of type +`func([]byte)` that gets executed once for every eBPF "event". + +The slice of bytes corresponds to the memory layout of the struct used on Kernel +side and it's the caller responsibility to make the unmarshaling/type conversion. +Please also note that the callback *must*: +1) copy the data it wishes to hold since the underlying byte array is reclaimed; +2) be thread-safe, as the callback may be executed concurrently from multiple go-routines; +As an example this is how HTTP integration does it: + +```go +func callback(data []byte) { + event := (*ebpfHttpTx)(unsafe.Pointer(&data[0])) + ... +} + +Aside from that, it is _recommended_ (though not strictly necessary) to call +`Consumer.Sync()` every time there is a connection check in system-probe, so +all buffered USM events can be sent to backend. + +For a complete integration example, please refer to `pkg/network/protocols/http/monitor.go` diff --git a/pkg/network/protocols/events/batch_offsets.go b/pkg/network/protocols/events/batch_offsets.go new file mode 100644 index 0000000000000..7377ce3b10f7a --- /dev/null +++ b/pkg/network/protocols/events/batch_offsets.go @@ -0,0 +1,98 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "sync" +) + +// offsetManager is responsible for keeping track of which chunks of data we +// have consumed from each batch object +type offsetManager struct { + mux sync.Mutex + stateByCPU []*cpuReadState +} + +type cpuReadState struct { + // this is the nextBatchID we're expecting for a particular CPU core. we use + // this when we attempt to retrieve data that hasn't been sent from kernel space + // yet because it belongs to an incomplete batch. + nextBatchID int + + // information associated to partial batch reads + partialBatchID int + partialOffset int +} + +func newOffsetManager(numCPUS int) *offsetManager { + stateByCPU := make([]*cpuReadState, numCPUS) + for i := range stateByCPU { + stateByCPU[i] = new(cpuReadState) + } + + return &offsetManager{stateByCPU: stateByCPU} +} + +// Get returns the data offset that hasn't been consumed yet for a given batch +func (o *offsetManager) Get(cpu int, batch *batch, syncing bool) (begin, end int) { + o.mux.Lock() + defer o.mux.Unlock() + state := o.stateByCPU[cpu] + batchID := int(batch.Idx) + + if batchID < state.nextBatchID { + // we have already consumed this data + return 0, 0 + } + + if batchComplete(batch) { + state.nextBatchID = batchID + 1 + } + + // determining the begin offset + // usually this is 0, but if we've done a partial read of this batch + // we need to take that into account + if int(batch.Idx) == state.partialBatchID { + begin = state.partialOffset + } + + // determining the end offset + // usually this is the full batch size but it can be less + // in the context of a forced (partial) read + end = int(batch.Len) + + // if this is part of a forced read (that is, we're reading a batch before + // it's complete) we need to keep track of which entries we're reading + // so we avoid reading the same entries again + if syncing { + state.partialBatchID = int(batch.Idx) + state.partialOffset = end + } + + return +} + +func (o *offsetManager) NextBatchID(cpu int) int { + o.mux.Lock() + defer o.mux.Unlock() + + return o.stateByCPU[cpu].nextBatchID +} + +func max(a, b int) int { + if a >= b { + return a + } + + return b +} + +func batchComplete(b *batch) bool { + return b.Cap > 0 && b.Len == b.Cap +} diff --git a/pkg/network/protocols/events/batch_offsets_test.go b/pkg/network/protocols/events/batch_offsets_test.go new file mode 100644 index 0000000000000..d3955f2d5aae0 --- /dev/null +++ b/pkg/network/protocols/events/batch_offsets_test.go @@ -0,0 +1,113 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "testing" + + "gotest.tools/assert" +) + +func TestOffsets(t *testing.T) { + const numCPUs = 2 + offsets := newOffsetManager(numCPUs) + + assert.Equal(t, 0, offsets.NextBatchID(0)) + assert.Equal(t, 0, offsets.NextBatchID(1)) + + // reading full batch: cpu=0 batchID=0 + begin, end := offsets.Get(0, &batch{Idx: 0, Len: 10, Cap: 10}, false) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + // nextBatchID is advanced to 1 for cpu=0 + assert.Equal(t, 1, offsets.NextBatchID(0)) + + // reading partial batch: cpu=1 batchID=0 sync=true + begin, end = offsets.Get(1, &batch{Idx: 0, Len: 8, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 8, end) + // nextBatchID remains 0 for cpu=1 since this batch hasn't been filled up yet + assert.Equal(t, 0, offsets.NextBatchID(1)) + + // reading full batch: cpu=1 batchID=0 + begin, end = offsets.Get(1, &batch{Idx: 0, Len: 10, Cap: 10}, false) + // notice we only read now the remaining offsets + assert.Equal(t, 8, begin) + assert.Equal(t, 10, end) + // nextBatchID is advanced to 1 for cpu=1 + assert.Equal(t, 1, offsets.NextBatchID(1)) + + // reading partial batch: cpu=0 batchID=1 sync=true + begin, end = offsets.Get(0, &batch{Idx: 1, Len: 4, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 4, end) + // nextBatchID remains 1 for cpu=0 + assert.Equal(t, 1, offsets.NextBatchID(0)) + + // reading partial batch: cpu=0 batchID=1 sync=true + begin, end = offsets.Get(0, &batch{Idx: 1, Len: 5, Cap: 10}, true) + assert.Equal(t, 4, begin) + assert.Equal(t, 5, end) + // nextBatchID remains 1 for cpu=0 + assert.Equal(t, 1, offsets.NextBatchID(0)) +} + +func TestDelayedBatchReads(t *testing.T) { + const numCPUs = 1 + offsets := newOffsetManager(numCPUs) + + // this emulates the scenario where we preemptively read (sync=true) two + // complete batches in a row before they are read from perf buffer + begin, end := offsets.Get(0, &batch{Idx: 0, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + + begin, end = offsets.Get(0, &batch{Idx: 1, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + + // now the "delayed" batches from perf buffer are read in sequence + begin, end = offsets.Get(0, &batch{Idx: 0, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 0, end) + + begin, end = offsets.Get(0, &batch{Idx: 1, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 0, end) +} + +func TestUnchangedBatchRead(t *testing.T) { + const numCPUs = 1 + offsets := newOffsetManager(numCPUs) + + begin, end := offsets.Get(0, &batch{Idx: 0, Len: 5, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 5, end) + + begin, end = offsets.Get(0, &batch{Idx: 0, Len: 5, Cap: 10}, true) + assert.Equal(t, 5, begin) + assert.Equal(t, 5, end) +} + +func TestReadGap(t *testing.T) { + const numCPUs = 1 + offsets := newOffsetManager(numCPUs) + + // this emulates the scenario where a batch is lost in the perf buffer + begin, end := offsets.Get(0, &batch{Idx: 0, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + assert.Equal(t, 1, offsets.NextBatchID(0)) + + // batch idx=1 was lost + begin, end = offsets.Get(0, &batch{Idx: 2, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + assert.Equal(t, 3, offsets.NextBatchID(0)) +} diff --git a/pkg/network/protocols/events/batch_reader.go b/pkg/network/protocols/events/batch_reader.go new file mode 100644 index 0000000000000..bd6e79fe097eb --- /dev/null +++ b/pkg/network/protocols/events/batch_reader.go @@ -0,0 +1,119 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "sync" + "unsafe" + + "github.com/cilium/ebpf" +) + +var batchPool = sync.Pool{ + New: func() interface{} { + return new(batch) + }, +} + +type batchReader struct { + sync.Mutex + numCPUs int + batchMap *ebpf.Map + offsets *offsetManager + workerPool *workerPool + stopped bool +} + +func newBatchReader(offsetManager *offsetManager, batchMap *ebpf.Map, numCPUs int) (*batchReader, error) { + // initialize eBPF maps + batch := new(batch) + for i := 0; i < numCPUs; i++ { + for j := 0; j < batchPagesPerCPU; j++ { + key := &batchKey{Cpu: uint32(i), Num: uint32(j)} + err := batchMap.Put(unsafe.Pointer(key), unsafe.Pointer(batch)) + if err != nil { + return nil, err + } + } + } + + workerPool, err := newWorkerPool(max(numCPUs, 32)) + if err != nil { + return nil, err + } + + return &batchReader{ + numCPUs: numCPUs, + offsets: offsetManager, + batchMap: batchMap, + workerPool: workerPool, + }, nil +} + +// ReadAll batches from eBPF (concurrently) and execute the given +// callback function for each batch +func (r *batchReader) ReadAll(f func(cpu int, b *batch)) { + // This lock is used only for the purposes of synchronizing termination + // and it's only held while *enqueing* the jobs. + r.Lock() + if r.stopped { + r.Unlock() + return + } + + var wg sync.WaitGroup + wg.Add(r.numCPUs) + + for i := 0; i < r.numCPUs; i++ { + cpu := i // required to properly capture this variable in the function closure + r.workerPool.Do(func() { + defer wg.Done() + batchID, key := r.generateBatchKey(cpu) + + b := batchPool.Get().(*batch) + defer func() { + *b = batch{} + batchPool.Put(b) + }() + + err := r.batchMap.Lookup(unsafe.Pointer(key), unsafe.Pointer(b)) + if err != nil { + return + } + if int(b.Idx) != batchID { + // this means that the batch we were looking for was flushed to the perf buffer + return + } + + f(cpu, b) + }) + } + r.Unlock() + wg.Wait() +} + +// Stop batchReader +func (r *batchReader) Stop() { + r.Lock() + defer r.Unlock() + + if r.stopped { + return + } + r.stopped = true + r.workerPool.Stop() +} + +func (r *batchReader) generateBatchKey(cpu int) (batchID int, key *batchKey) { + batchID = r.offsets.NextBatchID(cpu) + return batchID, &batchKey{ + Cpu: uint32(cpu), + Num: uint32(batchID) % uint32(batchPagesPerCPU), + } +} diff --git a/pkg/network/protocols/events/configuration.go b/pkg/network/protocols/events/configuration.go new file mode 100644 index 0000000000000..b15b003725918 --- /dev/null +++ b/pkg/network/protocols/events/configuration.go @@ -0,0 +1,79 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "os" + "sync" + + ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/util/log" + manager "github.com/DataDog/ebpf-manager" + "github.com/cilium/ebpf" + "github.com/iovisor/gobpf/pkg/cpupossible" +) + +// handlerByProtocol holds a temporary reference to a `ddebpf.PerfHandler` +// instance for a given protocol. This is done to simplify the usage of this +// package a little bit, so a call to `events.Configure` can be later linked +// to a call to `events.NewConsumer` without the need to explicitly propagate +// any values. The map is guarded by `handlerMux`. +var handlerByProtocol map[string]*ddebpf.PerfHandler +var handlerMux sync.Mutex + +// Configure event processing +// Must be called *before* manager.InitWithOptions +func Configure(proto string, m *manager.Manager, o *manager.Options) { + handler := ddebpf.NewPerfHandler(100) + m.PerfMaps = append(m.PerfMaps, &manager.PerfMap{ + Map: manager.Map{Name: proto + eventsMapSuffix}, + PerfMapOptions: manager.PerfMapOptions{ + PerfRingBufferSize: 16 * os.Getpagesize(), + Watermark: 1, + RecordHandler: handler.RecordHandler, + LostHandler: handler.LostHandler, + RecordGetter: handler.RecordGetter, + }, + }) + + handlerMux.Lock() + if handlerByProtocol == nil { + handlerByProtocol = make(map[string]*ddebpf.PerfHandler) + } + handlerByProtocol[proto] = handler + handlerMux.Unlock() + + onlineCPUs, err := cpupossible.Get() + if err != nil { + onlineCPUs = make([]uint, 96) + log.Error("unable to detect number of CPUs. assuming 96 cores") + } + + if o.MapSpecEditors == nil { + o.MapSpecEditors = make(map[string]manager.MapSpecEditor) + } + + o.MapSpecEditors[proto+batchMapSuffix] = manager.MapSpecEditor{ + Type: ebpf.Hash, + MaxEntries: uint32(len(onlineCPUs) * batchPagesPerCPU), + EditorFlag: manager.EditMaxEntries, + } +} + +func getHandler(proto string) *ddebpf.PerfHandler { + handlerMux.Lock() + defer handlerMux.Unlock() + if handlerByProtocol == nil { + return nil + } + + handler := handlerByProtocol[proto] + delete(handlerByProtocol, proto) + return handler +} diff --git a/pkg/network/protocols/events/consumer.go b/pkg/network/protocols/events/consumer.go new file mode 100644 index 0000000000000..2c6388a2575c7 --- /dev/null +++ b/pkg/network/protocols/events/consumer.go @@ -0,0 +1,214 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "fmt" + "sync" + "time" + "unsafe" + + ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/network/telemetry" + "github.com/DataDog/datadog-agent/pkg/util/log" + manager "github.com/DataDog/ebpf-manager" + "go.uber.org/atomic" +) + +const ( + batchMapSuffix = "_batches" + eventsMapSuffix = "_batch_events" +) + +// Consumer provides a standardized abstraction for consuming (batched) events from eBPF +type Consumer struct { + mux sync.Mutex + proto string + syncRequest chan (chan struct{}) + offsets *offsetManager + handler *ddebpf.PerfHandler + batchReader *batchReader + callback func([]byte) + + // termination + eventLoopWG sync.WaitGroup + stopped bool + + // telemetry + then time.Time + eventsCount *telemetry.Metric + missesCount *telemetry.Metric + batchSize *atomic.Int64 +} + +// NewConsumer instantiates a new event Consumer +// `callback` is executed once for every "event" generated on eBPF and must: +// 1) copy the data it wishes to hold since the underlying byte array is reclaimed; +// 2) be thread-safe, as the callback may be executed concurrently from multiple go-routines; +func NewConsumer(proto string, ebpf *manager.Manager, callback func([]byte)) (*Consumer, error) { + batchMapName := proto + batchMapSuffix + batchMap, found, _ := ebpf.GetMap(batchMapName) + if !found { + return nil, fmt.Errorf("unable to find map %s", batchMapName) + } + + eventsMapName := proto + eventsMapSuffix + eventsMap, found, _ := ebpf.GetMap(eventsMapName) + if !found { + return nil, fmt.Errorf("unable to find map %s", eventsMapName) + } + + numCPUs := int(eventsMap.MaxEntries()) + offsets := newOffsetManager(numCPUs) + batchReader, err := newBatchReader(offsets, batchMap, numCPUs) + if err != nil { + return nil, err + } + + handler := getHandler(proto) + if handler == nil { + return nil, fmt.Errorf("unable to detect perf handler. perhaps you forgot to call events.Configure()?") + } + + // setup telemetry + metricGroup := telemetry.NewMetricGroup( + fmt.Sprintf("usm.%s", proto), + telemetry.OptStatsd, + telemetry.OptExpvar, + telemetry.OptMonotonic, + ) + + eventsCount := metricGroup.NewMetric("events_captured") + missesCount := metricGroup.NewMetric("events_missed") + + return &Consumer{ + proto: proto, + callback: callback, + syncRequest: make(chan chan struct{}), + offsets: offsets, + handler: handler, + batchReader: batchReader, + + // telemetry + eventsCount: eventsCount, + missesCount: missesCount, + batchSize: atomic.NewInt64(0), + }, nil +} + +// Start consumption of eBPF events +func (c *Consumer) Start() { + c.then = time.Now() + c.eventLoopWG.Add(1) + go func() { + defer c.eventLoopWG.Done() + for { + select { + case dataEvent, ok := <-c.handler.DataChannel: + if !ok { + return + } + + b := batchFromEventData(dataEvent.Data) + c.process(dataEvent.CPU, b, false) + dataEvent.Done() + case _, ok := <-c.handler.LostChannel: + if !ok { + return + } + + missedEvents := c.batchSize.Load() + c.missesCount.Add(missedEvents) + case done, ok := <-c.syncRequest: + if !ok { + return + } + + c.batchReader.ReadAll(func(cpu int, b *batch) { + c.process(cpu, b, true) + }) + c.log() + close(done) + } + } + }() +} + +// Sync userpace with kernelspace by fetching all buffered data on eBPF +// Calling this will block until all eBPF map data has been fetched and processed +func (c *Consumer) Sync() { + c.mux.Lock() + if c.stopped { + c.mux.Unlock() + return + } + + request := make(chan struct{}) + c.syncRequest <- request + c.mux.Unlock() + + // Wait until all data is fetch from eBPF + <-request +} + +// Stop consuming data from eBPF +func (c *Consumer) Stop() { + c.mux.Lock() + defer c.mux.Unlock() + + if c.stopped { + return + } + + c.stopped = true + c.batchReader.Stop() + c.handler.Stop() + c.eventLoopWG.Wait() + close(c.syncRequest) +} + +func (c *Consumer) process(cpu int, b *batch, syncing bool) { + begin, end := c.offsets.Get(cpu, b, syncing) + + // telemetry stuff + c.batchSize.Store(int64(b.Cap)) + c.eventsCount.Add(int64(end - begin)) + + iter := newIterator(b, begin, end) + for data := iter.Next(); data != nil; data = iter.Next() { + c.callback(data) + } +} + +func (c *Consumer) log() { + var ( + now = time.Now() + elapsed = now.Sub(c.then).Seconds() + captured = c.eventsCount.Delta() + missed = c.missesCount.Delta() + ) + + if elapsed == 0 { + return + } + + log.Infof("usm events summary: name=%q events_captured=%d(%.2f/s) events_missed=%d(%.2f/s)", + c.proto, + captured, + float64(captured)/float64(elapsed), + missed, + float64(missed)/float64(elapsed), + ) + + c.then = now +} + +func batchFromEventData(data []byte) *batch { + return (*batch)(unsafe.Pointer(&data[0])) +} diff --git a/pkg/network/protocols/events/consumer_test.go b/pkg/network/protocols/events/consumer_test.go new file mode 100644 index 0000000000000..151b04349b388 --- /dev/null +++ b/pkg/network/protocols/events/consumer_test.go @@ -0,0 +1,168 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "encoding/binary" + "math" + "os" + "path/filepath" + "testing" + "time" + "unsafe" + + "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" + "github.com/DataDog/datadog-agent/pkg/network/config" + bpftelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" + "github.com/DataDog/datadog-agent/pkg/util/kernel" + manager "github.com/DataDog/ebpf-manager" + "github.com/cilium/ebpf" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "golang.org/x/sys/unix" +) + +func TestConsumer(t *testing.T) { + kversion, err := kernel.HostVersion() + require.NoError(t, err) + if minVersion := kernel.VersionCode(4, 14, 0); kversion < minVersion { + t.Skipf("package not supported by kernels < %s", minVersion) + } + + const numEvents = 100 + c := config.New() + program, err := newEBPFProgram(c) + require.NoError(t, err) + + result := make(map[uint64]int) + callback := func(b []byte) { + // each event is just a uint64 + n := binary.LittleEndian.Uint64(b) + result[n] = +1 + } + + consumer, err := NewConsumer("test", program, callback) + require.NoError(t, err) + consumer.Start() + + err = program.Start() + require.NoError(t, err) + + // generate test events + generator := newEventGenerator(program, t) + for i := 0; i < numEvents; i++ { + generator.Generate(uint64(i)) + } + generator.Stop() + time.Sleep(100 * time.Millisecond) + + // this ensures that any incomplete batch left in eBPF is fully processed + consumer.Sync() + program.Stop(manager.CleanAll) + consumer.Stop() + + // ensure that we have received each event exactly once + for i := 0; i < numEvents; i++ { + actual := result[uint64(i)] + assert.Equalf(t, 1, actual, "eventID=%d should have 1 occurrence. got %d", i, actual) + } +} + +type eventGenerator struct { + // map used for coordinating test with eBPF program space + testMap *ebpf.Map + + // file used for triggering write(2) syscalls + testFile *os.File +} + +func newEventGenerator(program *manager.Manager, t *testing.T) *eventGenerator { + m, _, _ := program.GetMap("test") + require.NotNilf(t, m, "couldn't find test map") + + f, err := os.Create(filepath.Join(t.TempDir(), "foobar")) + require.NoError(t, err) + + return &eventGenerator{ + testMap: m, + testFile: f, + } +} + +func (e *eventGenerator) Generate(eventID uint64) error { + type testCtx struct { + pid uint32 + fd uint64 + eventID uint64 + } + + var ( + fd = uint64(e.testFile.Fd()) + key = uint32(0) + val = testCtx{pid: uint32(os.Getpid()), fd: fd, eventID: eventID} + ) + + // this is done so the eBPF program will echo back an event that is equal to + // eventID once the write syscall is triggered below + err := e.testMap.Put(unsafe.Pointer(&key), unsafe.Pointer(&val)) + if err != nil { + return err + } + + e.testFile.Write([]byte("whatever")) + return nil +} + +func (e *eventGenerator) Stop() { + e.testFile.Close() +} + +func newEBPFProgram(c *config.Config) (*manager.Manager, error) { + bc, err := bytecode.GetReader(c.BPFDir, "usm_events_test-debug.o") + if err != nil { + return nil, err + } + defer bc.Close() + + m := &manager.Manager{ + Probes: []*manager.Probe{ + { + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: "tracepoint/syscalls/sys_enter_write", + EBPFFuncName: "tracepoint__syscalls__sys_enter_write", + }, + }, + }, + } + options := manager.Options{ + RLimit: &unix.Rlimit{ + Cur: math.MaxUint64, + Max: math.MaxUint64, + }, + ActivatedProbes: []manager.ProbesSelector{ + &manager.ProbeSelector{ + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: "tracepoint/syscalls/sys_enter_write", + EBPFFuncName: "tracepoint__syscalls__sys_enter_write", + }, + }, + }, + } + + Configure("test", m, &options) + m.InstructionPatcher = func(m *manager.Manager) error { + return bpftelemetry.PatchEBPFTelemetry(m, true, nil) + } + err = m.InitWithOptions(bc, options) + if err != nil { + return nil, err + } + + return m, nil +} diff --git a/pkg/network/protocols/events/iterator.go b/pkg/network/protocols/events/iterator.go new file mode 100644 index 0000000000000..67a326f8905aa --- /dev/null +++ b/pkg/network/protocols/events/iterator.go @@ -0,0 +1,58 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import "unsafe" + +// iterator provides a small abstraction for walking over the the raw stream of +// bytes represented by the `batch.data` field. +// for example, batch data for an event type of size 4 may look like the +// following: +// +// 0 1 2 3 4 5 +// |aaaa|bbbb|cccc|0000|0000|....| +// 0 4 8 12 16 20 4096 +// +// The purpose of the iterator is to simply return the appropriate chunks of +// data. If we instantiate the iterator with i=1 and j=3, calling Next() +// multiple times will return the following: +// +// Next() => bbbb +// Next() => cccc +// Next() => nil +type iterator struct { + data []byte + b *batch + i, j int // data offsets +} + +// newIterator returns a new `iterator` instance +func newIterator(b *batch, i, j int) *iterator { + data := unsafe.Slice((*byte)(unsafe.Pointer(&b.Data[0])), batchBufferSize) + return &iterator{ + data: data, + b: b, + i: i - 1, + j: j, + } +} + +// Next will advance to the next chunk of data representing an eBPF "event" +// while taking into consideration the bounds of the data. +// In case we run out of bounds `nil` is returned +func (it *iterator) Next() []byte { + it.i++ + + chunkSize := int(it.b.Size) + if it.i >= it.j || it.i > int(it.b.Cap) || (it.i+1)*chunkSize > len(it.b.Data) { + return nil + } + + return it.data[it.i*chunkSize : (it.i+1)*chunkSize] +} diff --git a/pkg/network/protocols/events/types.go b/pkg/network/protocols/events/types.go new file mode 100644 index 0000000000000..7371bc469a110 --- /dev/null +++ b/pkg/network/protocols/events/types.go @@ -0,0 +1,22 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build ignore +// +build ignore + +package events + +/* +#include "../../ebpf/c/protocols/events-types.h" +*/ +import "C" + +type batch C.batch_data_t +type batchKey C.batch_key_t + +const ( + batchPagesPerCPU = C.BATCH_PAGES_PER_CPU + batchBufferSize = C.BATCH_BUFFER_SIZE +) diff --git a/pkg/network/protocols/events/types_linux.go b/pkg/network/protocols/events/types_linux.go new file mode 100644 index 0000000000000..a1fe7ee3abc90 --- /dev/null +++ b/pkg/network/protocols/events/types_linux.go @@ -0,0 +1,22 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -I ../../ebpf/c -fsigned-char types.go + +package events + +type batch struct { + Idx uint64 + Len uint16 + Cap uint16 + Size uint16 + Data [4096]int8 + Pad_cgo_0 [2]byte +} +type batchKey struct { + Cpu uint32 + Num uint32 +} + +const ( + batchPagesPerCPU = 0x3 + batchBufferSize = 0x1000 +) diff --git a/pkg/network/protocols/events/worker_pool.go b/pkg/network/protocols/events/worker_pool.go new file mode 100644 index 0000000000000..534d5ad393b47 --- /dev/null +++ b/pkg/network/protocols/events/worker_pool.go @@ -0,0 +1,55 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "fmt" + "sync" +) + +type workerPool struct { + size int + jobs chan func() + waitGroup sync.WaitGroup + once sync.Once +} + +func newWorkerPool(size int) (*workerPool, error) { + if size <= 0 { + return nil, fmt.Errorf("invalid worker pool size %d", size) + } + + pool := &workerPool{ + size: size, + jobs: make(chan func()), + } + + for i := 0; i < size; i++ { + pool.waitGroup.Add(1) + go func() { + defer pool.waitGroup.Done() + for f := range pool.jobs { + f() + } + }() + } + + return pool, nil +} + +func (wp *workerPool) Do(f func()) { + wp.jobs <- f +} + +func (wp *workerPool) Stop() { + wp.once.Do(func() { + close(wp.jobs) + wp.waitGroup.Wait() + }) +} diff --git a/pkg/network/protocols/http/batch_manager.go b/pkg/network/protocols/http/batch_manager.go deleted file mode 100644 index b7503a10645e7..0000000000000 --- a/pkg/network/protocols/http/batch_manager.go +++ /dev/null @@ -1,127 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build linux_bpf -// +build linux_bpf - -package http - -import ( - "errors" - "unsafe" - - ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" - - "github.com/cilium/ebpf" -) - -var errLostBatch = errors.New("http batch lost (not consumed fast enough)") - -const maxLookupsPerCPU = 2 - -type usrBatchState struct { - idx, pos int -} - -type batchManager struct { - batchMap *ebpf.Map - stateByCPU []usrBatchState - numCPUs int -} - -func newBatchManager(batchMap *ebpf.Map, numCPUs int) (*batchManager, error) { - batch := new(httpBatch) - stateByCPU := make([]usrBatchState, numCPUs) - - for i := 0; i < numCPUs; i++ { - // Initialize eBPF maps - for j := 0; j < HTTPBatchPages; j++ { - key := &httpBatchKey{Cpu: uint32(i), Num: uint32(j)} - err := batchMap.Put(unsafe.Pointer(key), unsafe.Pointer(batch)) - if err != nil { - return nil, err - } - } - } - - return &batchManager{ - batchMap: batchMap, - stateByCPU: stateByCPU, - numCPUs: numCPUs, - }, nil -} - -func (m *batchManager) GetTransactionsFrom(event *ddebpf.DataEvent) ([]httpTX, error) { - state := &m.stateByCPU[event.CPU] - batch := batchFromEventData(event.Data) - - if int(batch.Idx) < state.idx { - // This means this batch was processed via GetPendingTransactions - return nil, nil - } - - offset := state.pos - state.idx = int(batch.Idx) + 1 - state.pos = 0 - - txns := make([]httpTX, len(batch.Transactions()[offset:])) - tocopy := batch.Transactions()[offset:] - for idx := range tocopy { - txns[idx] = &tocopy[idx] - } - return txns, nil -} - -func (m *batchManager) GetPendingTransactions() []httpTX { - transactions := make([]httpTX, 0, HTTPBatchSize*HTTPBatchPages/2) - for i := 0; i < m.numCPUs; i++ { - for lookup := 0; lookup < maxLookupsPerCPU; lookup++ { - var ( - usrState = &m.stateByCPU[i] - pageNum = usrState.idx % HTTPBatchPages - batchKey = &httpBatchKey{Cpu: uint32(i), Num: uint32(pageNum)} - batch = new(httpBatch) - ) - - err := m.batchMap.Lookup(unsafe.Pointer(batchKey), unsafe.Pointer(batch)) - if err != nil { - break - } - - krnStateIDX := int(batch.Idx) - krnStatePos := int(batch.Pos) - if krnStateIDX != usrState.idx || krnStatePos <= usrState.pos { - break - } - - all := batch.Transactions() - pending := all[usrState.pos:krnStatePos] - for _, tx := range pending { - var newtx = tx - transactions = append(transactions, &newtx) - } - - if krnStatePos == HTTPBatchSize { - // We detected a full batch before the http_notification_t was processed. - // In this case we update the userspace state accordingly and try to - // preemptively read the next batch in order to return as many - // completed HTTP transactions as possible - usrState.idx++ - usrState.pos = 0 - continue - } - - usrState.pos = krnStatePos - // Move on to the next CPU core - break - } - } - - return transactions -} - -func batchFromEventData(data []byte) *httpBatch { - return (*httpBatch)(unsafe.Pointer(&data[0])) -} diff --git a/pkg/network/protocols/http/dump.go b/pkg/network/protocols/http/dump.go index 3d50cc528f0aa..b1f01a3cbfd2a 100644 --- a/pkg/network/protocols/http/dump.go +++ b/pkg/network/protocols/http/dump.go @@ -32,24 +32,6 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case httpBatchesMap: // maps/http_batches (BPF_MAP_TYPE_HASH), key httpBatchKey, value httpBatch - output.WriteString("Map: '" + mapName + "', key: 'httpBatchKey', value: 'httpBatch'\n") - iter := currentMap.Iterate() - var key httpBatchKey - var value httpBatch - for iter.Next(unsafe.Pointer(&key), unsafe.Pointer(&value)) { - output.WriteString(spew.Sdump(key, value)) - } - - case httpBatchStateMap: // maps/http_batch_state (BPF_MAP_TYPE_HASH), key C.__u32, value C.http_batch_state_t - output.WriteString("Map: '" + mapName + "', key: 'C.__u32', value: 'C.http_batch_state_t'\n") - iter := currentMap.Iterate() - var key uint32 - var value httpBatchState - for iter.Next(unsafe.Pointer(&key), unsafe.Pointer(&value)) { - output.WriteString(spew.Sdump(key, value)) - } - case sslSockByCtxMap: // maps/ssl_sock_by_ctx (BPF_MAP_TYPE_HASH), key uintptr // C.void *, value C.ssl_sock_t output.WriteString("Map: '" + mapName + "', key: 'uintptr // C.void *', value: 'C.ssl_sock_t'\n") iter := currentMap.Iterate() diff --git a/pkg/network/protocols/http/ebpf_gotls.go b/pkg/network/protocols/http/ebpf_gotls.go index 716c2793d76c0..17b5d5a9e365a 100644 --- a/pkg/network/protocols/http/ebpf_gotls.go +++ b/pkg/network/protocols/http/ebpf_gotls.go @@ -21,7 +21,6 @@ import ( "time" "github.com/cilium/ebpf" - "github.com/vishvananda/netlink" "golang.org/x/sys/unix" "github.com/DataDog/datadog-agent/pkg/network/config" @@ -30,7 +29,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/protocols/http/gotls" "github.com/DataDog/datadog-agent/pkg/network/protocols/http/gotls/lookup" errtelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" - "github.com/DataDog/datadog-agent/pkg/process/util" + "github.com/DataDog/datadog-agent/pkg/process/monitor" "github.com/DataDog/datadog-agent/pkg/util/log" manager "github.com/DataDog/ebpf-manager" ) @@ -131,9 +130,8 @@ type GoTLSProgram struct { // Process monitor channels procMonitor struct { - done chan struct{} - events chan netlink.ProcEvent - errors chan error + cleanupExec func() + cleanupExit func() } lock sync.RWMutex @@ -182,20 +180,12 @@ func newGoTLSProgram(c *config.Config) *GoTLSProgram { processes: make(map[pid]binaryID), } - p.procMonitor.done = make(chan struct{}) - p.procMonitor.events = make(chan netlink.ProcEvent, 1000) - p.procMonitor.errors = make(chan error, 1) - p.binAnalysisMetric = errtelemetry.NewMetric("gotls.analysis_time", errtelemetry.OptStatsd) return p } func (p *GoTLSProgram) ConfigureManager(m *errtelemetry.Manager) { - if p == nil { - return - } - p.manager = m p.manager.Maps = append(p.manager.Maps, []*manager.Map{ {Name: offsetsDataMap}, @@ -205,9 +195,10 @@ func (p *GoTLSProgram) ConfigureManager(m *errtelemetry.Manager) { // Hooks will be added in runtime for each binary } -func (p *GoTLSProgram) ConfigureOptions(options *manager.Options) {} +func (p *GoTLSProgram) ConfigureOptions(_ *manager.Options) {} -func (p *GoTLSProgram) GetAllUndefinedProbes() (probeList []manager.ProbeIdentificationPair) { +func (*GoTLSProgram) GetAllUndefinedProbes() []manager.ProbeIdentificationPair { + probeList := make([]manager.ProbeIdentificationPair, 0) for _, probeInfo := range functionToProbes { if probeInfo.functionInfo != nil { probeList = append(probeList, probeInfo.functionInfo.getIdentificationPair()) @@ -218,14 +209,10 @@ func (p *GoTLSProgram) GetAllUndefinedProbes() (probeList []manager.ProbeIdentif } } - return + return probeList } func (p *GoTLSProgram) Start() { - if p == nil { - return - } - var err error p.offsetsDataMap, _, err = p.manager.GetMap(offsetsDataMap) if err != nil { @@ -233,74 +220,38 @@ func (p *GoTLSProgram) Start() { return } - if err := netlink.ProcEventMonitor(p.procMonitor.events, p.procMonitor.done, p.procMonitor.errors); err != nil { - log.Errorf("could not create process monitor: %s", err) + mon := monitor.GetProcessMonitor() + p.procMonitor.cleanupExec, err = mon.Subscribe(&monitor.ProcessCallback{ + Event: monitor.EXEC, + Metadata: monitor.ANY, + Callback: p.handleProcessStart, + }) + if err != nil { + log.Errorf("failed to subscribe Exec process monitor error: %s", err) return } - - // This channel is used by the process watcher goroutine (just below) to - // wait until we finished scanning for already running Go processes. - // This is needed to avoid a race condition where an exit event is - // processed during the registration of an already running process, - // which would make the possible impossible to unregister afterwards, - // causing a memory leak. - startDone := make(chan interface{}) - - // Process watcher events handling goroutine - go func() { - // Wait for the scanning of already running processes to complete - <-startDone - - for { - select { - case <-p.procMonitor.done: - return - - case event, ok := <-p.procMonitor.events: - if !ok { - return - } - - switch ev := event.Msg.(type) { - case *netlink.ExecProcEvent: - p.handleProcessStart(ev.ProcessPid) - case *netlink.ExitProcEvent: - p.handleProcessStop(ev.ProcessPid) - - // No default case; the watcher has a - // lot of event types, some of which - // (e.g fork) happen all the time even - // on an idle machine. Logging those - // would flood our logs. - } - - case err, ok := <-p.procMonitor.errors: - if !ok { - return - } - - log.Errorf("process watcher error: %s", err) - } - } - }() - - // Scan already running processes. We allow the process watcher to - // process events afterwards. - go func() { - _ = util.WithAllProcs(p.procRoot, func(pid int) error { - p.handleProcessStart(uint32(pid)) - return nil - }) - close(startDone) - }() + p.procMonitor.cleanupExit, err = mon.Subscribe(&monitor.ProcessCallback{ + Event: monitor.EXIT, + Metadata: monitor.ANY, + Callback: p.handleProcessStop, + }) + if err != nil { + log.Errorf("failed to subscribe Exit process monitor error: %s", err) + goto failed + } + return +failed: + if p.procMonitor.cleanupExec != nil { + p.procMonitor.cleanupExec() + } + if p.procMonitor.cleanupExit != nil { + p.procMonitor.cleanupExit() + } } func (p *GoTLSProgram) Stop() { - if p == nil { - return - } - - close(p.procMonitor.done) + p.procMonitor.cleanupExec() + p.procMonitor.cleanupExit() } func (p *GoTLSProgram) handleProcessStart(pid pid) { diff --git a/pkg/network/protocols/http/ebpf_main.go b/pkg/network/protocols/http/ebpf_main.go index 48db53299be04..1df199f305793 100644 --- a/pkg/network/protocols/http/ebpf_main.go +++ b/pkg/network/protocols/http/ebpf_main.go @@ -11,10 +11,8 @@ package http import ( "fmt" "math" - "os" "github.com/cilium/ebpf" - "github.com/iovisor/gobpf/pkg/cpupossible" "golang.org/x/sys/unix" manager "github.com/DataDog/ebpf-manager" @@ -24,15 +22,13 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/config" netebpf "github.com/DataDog/datadog-agent/pkg/network/ebpf" "github.com/DataDog/datadog-agent/pkg/network/ebpf/probes" + "github.com/DataDog/datadog-agent/pkg/network/protocols/events" errtelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" ) const ( - httpInFlightMap = "http_in_flight" - httpBatchesMap = "http_batches" - httpBatchStateMap = "http_batch_state" - httpBatchEvents = "http_batch_events" + httpInFlightMap = "http_in_flight" // ELF section of the BPF_PROG_TYPE_SOCKET_FILTER program used // to classify protocols and dispatch the correct handlers. @@ -47,28 +43,21 @@ const ( // enough for typical workloads (e.g. some amount of processes blocked on // the accept syscall). maxActive = 128 - - // size of the channel containing completed http_notification_objects - batchNotificationsChanSize = 100 - - probeUID = "http" + probeUID = "http" ) type ebpfProgram struct { *errtelemetry.Manager - cfg *config.Config - bytecode bytecode.AssetReader - offsets []manager.ConstantEditor - subprograms []subprogram - mapCleaner *ddebpf.MapCleaner - - batchCompletionHandler *ddebpf.PerfHandler + cfg *config.Config + bytecode bytecode.AssetReader + offsets []manager.ConstantEditor + subprograms []subprogram + probesResolvers []probeResolver + mapCleaner *ddebpf.MapCleaner } -type subprogram interface { - ConfigureManager(*errtelemetry.Manager) - ConfigureOptions(*manager.Options) - +type probeResolver interface { + // GetAllUndefinedProbes returns all undefined probes. // Subprogram probes maybe defined in the same ELF file as the probes // of the main program. The cilium loader loads all programs defined // in an ELF file in to the kernel. Therefore, these programs may be @@ -91,6 +80,11 @@ type subprogram interface { // To reiterate, this is necessary due to the fact that the cilium loader loads // all programs defined in an ELF file regardless if they are later attached or not. GetAllUndefinedProbes() []manager.ProbeIdentificationPair +} + +type subprogram interface { + ConfigureManager(*errtelemetry.Manager) + ConfigureOptions(*manager.Options) Start() Stop() } @@ -112,12 +106,9 @@ func newEBPFProgram(c *config.Config, offsets []manager.ConstantEditor, sockFD * return nil, err } - batchCompletionHandler := ddebpf.NewPerfHandler(batchNotificationsChanSize) mgr := &manager.Manager{ Maps: []*manager.Map{ {Name: httpInFlightMap}, - {Name: httpBatchesMap}, - {Name: httpBatchStateMap}, {Name: sslSockByCtxMap}, {Name: protocolDispatcherProgramsMap}, {Name: "ssl_read_args"}, @@ -125,18 +116,6 @@ func newEBPFProgram(c *config.Config, offsets []manager.ConstantEditor, sockFD * {Name: "fd_by_ssl_bio"}, {Name: "ssl_ctx_by_pid_tgid"}, }, - PerfMaps: []*manager.PerfMap{ - { - Map: manager.Map{Name: httpBatchEvents}, - PerfMapOptions: manager.PerfMapOptions{ - PerfRingBufferSize: 256 * os.Getpagesize(), - Watermark: 1, - RecordHandler: batchCompletionHandler.RecordHandler, - LostHandler: batchCompletionHandler.LostHandler, - RecordGetter: batchCompletionHandler.RecordGetter, - }, - }, - }, Probes: []*manager.Probe{ { ProbeIdentificationPair: manager.ProbeIdentificationPair{ @@ -163,21 +142,27 @@ func newEBPFProgram(c *config.Config, offsets []manager.ConstantEditor, sockFD * }, } - // Add the subprograms even if nil, so that the manager can get the - // undefined probes from them when they are not enabled. Subprograms - // functions do checks for nil before doing anything. - ebpfSubprograms := []subprogram{ - newGoTLSProgram(c), - newSSLProgram(c, sockFD), + subprogramProbesResolvers := make([]probeResolver, 0, 2) + subprograms := make([]subprogram, 0, 2) + + goTLSProg := newGoTLSProgram(c) + subprogramProbesResolvers = append(subprogramProbesResolvers, goTLSProg) + if goTLSProg != nil { + subprograms = append(subprograms, goTLSProg) + } + openSSLProg := newSSLProgram(c, sockFD) + subprogramProbesResolvers = append(subprogramProbesResolvers, openSSLProg) + if openSSLProg != nil { + subprograms = append(subprograms, openSSLProg) } program := &ebpfProgram{ - Manager: errtelemetry.NewManager(mgr, bpfTelemetry), - bytecode: bc, - cfg: c, - offsets: offsets, - batchCompletionHandler: batchCompletionHandler, - subprograms: ebpfSubprograms, + Manager: errtelemetry.NewManager(mgr, bpfTelemetry), + bytecode: bc, + cfg: c, + offsets: offsets, + subprograms: subprograms, + probesResolvers: subprogramProbesResolvers, } return program, nil @@ -191,7 +176,8 @@ func (e *ebpfProgram) Init() error { for _, tc := range tailCalls { undefinedProbes = append(undefinedProbes, tc.ProbeIdentificationPair) } - for _, s := range e.subprograms { + + for _, s := range e.probesResolvers { undefinedProbes = append(undefinedProbes, s.GetAllUndefinedProbes()...) } @@ -203,11 +189,6 @@ func (e *ebpfProgram) Init() error { s.ConfigureManager(e.Manager) } - onlineCPUs, err := cpupossible.Get() - if err != nil { - return fmt.Errorf("couldn't determine number of CPUs: %w", err) - } - kprobeAttachMethod := manager.AttachKprobeWithPerfEventOpen if e.cfg.AttachKprobesWithKprobeEventsABI { kprobeAttachMethod = manager.AttachKprobeWithPerfEventOpen @@ -224,11 +205,6 @@ func (e *ebpfProgram) Init() error { MaxEntries: uint32(e.cfg.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries, }, - httpBatchesMap: { - Type: ebpf.Hash, - MaxEntries: uint32(len(onlineCPUs) * HTTPBatchPages), - EditorFlag: manager.EditMaxEntries, - }, }, TailCallRouter: tailCalls, ActivatedProbes: []manager.ProbesSelector{ @@ -262,7 +238,10 @@ func (e *ebpfProgram) Init() error { s.ConfigureOptions(&options) } - err = e.InitWithOptions(e.bytecode, options) + // configure event stream + events.Configure("http", e.Manager.Manager, &options) + + err := e.InitWithOptions(e.bytecode, options) if err != nil { return err } @@ -288,7 +267,6 @@ func (e *ebpfProgram) Start() error { func (e *ebpfProgram) Close() error { e.mapCleaner.Stop() err := e.Stop(manager.CleanAll) - e.batchCompletionHandler.Stop() for _, s := range e.subprograms { s.Stop() } diff --git a/pkg/network/protocols/http/ebpf_ssl.go b/pkg/network/protocols/http/ebpf_ssl.go index 87c53382d094f..dda6aad6b685e 100644 --- a/pkg/network/protocols/http/ebpf_ssl.go +++ b/pkg/network/protocols/http/ebpf_ssl.go @@ -253,14 +253,11 @@ func newSSLProgram(c *config.Config, sockFDMap *ebpf.Map) *sslProgram { return &sslProgram{ cfg: c, sockFDMap: sockFDMap, - perfHandler: ddebpf.NewPerfHandler(batchNotificationsChanSize), + perfHandler: ddebpf.NewPerfHandler(100), } } func (o *sslProgram) ConfigureManager(m *errtelemetry.Manager) { - if o == nil { - return - } o.manager = m @@ -294,9 +291,6 @@ func (o *sslProgram) ConfigureManager(m *errtelemetry.Manager) { } func (o *sslProgram) ConfigureOptions(options *manager.Options) { - if o == nil { - return - } options.MapSpecEditors[sslSockByCtxMap] = manager.MapSpecEditor{ Type: ebpf.Hash, @@ -328,10 +322,6 @@ func (o *sslProgram) ConfigureOptions(options *manager.Options) { } func (o *sslProgram) Start() { - if o == nil { - return - } - // Setup shared library watcher and configure the appropriate callbacks o.watcher = newSOWatcher(o.cfg.ProcRoot, o.perfHandler, soRule{ @@ -355,10 +345,6 @@ func (o *sslProgram) Start() { } func (o *sslProgram) Stop() { - if o == nil { - return - } - o.perfHandler.Stop() } @@ -441,7 +427,7 @@ func getUID(libPath string) string { return libPath } -func (o *sslProgram) GetAllUndefinedProbes() []manager.ProbeIdentificationPair { +func (*sslProgram) GetAllUndefinedProbes() []manager.ProbeIdentificationPair { var probeList []manager.ProbeIdentificationPair for _, sslProbeList := range [][]manager.ProbesSelector{openSSLProbes, cryptoProbes, gnuTLSProbes} { diff --git a/pkg/network/protocols/http/http_statkeeper.go b/pkg/network/protocols/http/http_statkeeper.go index 94eb4d2b87517..62ac09fbfd7f6 100644 --- a/pkg/network/protocols/http/http_statkeeper.go +++ b/pkg/network/protocols/http/http_statkeeper.go @@ -10,6 +10,7 @@ package http import ( "strconv" + "sync" "time" "github.com/DataDog/datadog-agent/pkg/network/config" @@ -18,6 +19,7 @@ import ( ) type httpStatKeeper struct { + mux sync.Mutex stats map[Key]*RequestStats incomplete *incompleteBuffer maxEntries int @@ -50,19 +52,22 @@ func newHTTPStatkeeper(c *config.Config, telemetry *telemetry) *httpStatKeeper { } } -func (h *httpStatKeeper) Process(transactions []httpTX) { - for i := range transactions { - tx := transactions[i] - if tx.Incomplete() { - h.incomplete.Add(tx) - continue - } +func (h *httpStatKeeper) Process(tx httpTX) { + h.mux.Lock() + defer h.mux.Unlock() - h.add(tx) + if tx.Incomplete() { + h.incomplete.Add(tx) + return } + + h.add(tx) } func (h *httpStatKeeper) GetAndResetAllStats() map[Key]*RequestStats { + h.mux.Lock() + defer h.mux.Unlock() + for _, tx := range h.incomplete.Flush(time.Now()) { h.add(tx) } diff --git a/pkg/network/protocols/http/http_statkeeper_test.go b/pkg/network/protocols/http/http_statkeeper_test.go index cf444cd202699..d6296afd17a2c 100644 --- a/pkg/network/protocols/http/http_statkeeper_test.go +++ b/pkg/network/protocols/http/http_statkeeper_test.go @@ -27,7 +27,6 @@ func TestProcessHTTPTransactions(t *testing.T) { tel, err := newTelemetry() require.NoError(t, err) sk := newHTTPStatkeeper(cfg, tel) - txs := make([]httpTX, 100) srcString := "1.1.1.1" dstString := "2.2.2.2" @@ -43,12 +42,11 @@ func TestProcessHTTPTransactions(t *testing.T) { for j := 0; j < 10; j++ { statusCode := (j%5 + 1) * 100 latency := time.Duration(j%5+1) * time.Millisecond - txs[i*10+j] = generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, path, statusCode, latency) + tx := generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, path, statusCode, latency) + sk.Process(tx) } } - sk.Process(txs) - stats := sk.GetAndResetAllStats() assert.Equal(t, 0, len(sk.stats)) assert.Equal(t, numPaths, len(stats)) @@ -85,12 +83,11 @@ func BenchmarkProcessSameConn(b *testing.B) { 404, 30*time.Millisecond, ) - transactions := []httpTX{tx} b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - sk.Process(transactions) + sk.Process(tx) } } @@ -126,7 +123,9 @@ func TestPathProcessing(t *testing.T) { generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/foobar", statusCode, latency), generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/payment/123", statusCode, latency), } - sk.Process(transactions) + for _, tx := range transactions { + sk.Process(tx) + } stats := sk.GetAndResetAllStats() require.Len(t, stats, 1) @@ -149,7 +148,9 @@ func TestPathProcessing(t *testing.T) { generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/prefix/users/2", statusCode, latency), generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/prefix/users/3", statusCode, latency), } - sk.Process(transactions) + for _, tx := range transactions { + sk.Process(tx) + } stats := sk.GetAndResetAllStats() require.Len(t, stats, 1) @@ -178,7 +179,9 @@ func TestPathProcessing(t *testing.T) { generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/users/ana/payment/123", statusCode, latency), generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/users/bob/payment/456", statusCode, latency), } - sk.Process(transactions) + for _, tx := range transactions { + sk.Process(tx) + } stats := sk.GetAndResetAllStats() require.Len(t, stats, 1) @@ -208,9 +211,8 @@ func TestHTTPCorrectness(t *testing.T) { 404, 30*time.Millisecond, ) - transactions := []httpTX{tx} - sk.Process(transactions) + sk.Process(tx) tel.log() require.Equal(t, int64(1), tel.malformed.Get()) @@ -235,9 +237,8 @@ func TestHTTPCorrectness(t *testing.T) { 30*time.Millisecond, ) tx.SetRequestMethod(0) /* This is MethodUnknown */ - transactions := []httpTX{tx} - sk.Process(transactions) + sk.Process(tx) tel.log() require.Equal(t, int64(1), tel.malformed.Get()) @@ -261,9 +262,8 @@ func TestHTTPCorrectness(t *testing.T) { 404, 0, ) - transactions := []httpTX{tx} - sk.Process(transactions) + sk.Process(tx) tel.log() require.Equal(t, int64(1), tel.malformed.Get()) diff --git a/pkg/network/protocols/http/http_types.go b/pkg/network/protocols/http/http_types.go index d5a21db466c45..b5019b30d8ea7 100644 --- a/pkg/network/protocols/http/http_types.go +++ b/pkg/network/protocols/http/http_types.go @@ -17,29 +17,28 @@ package http import "C" type httpConnTuple C.conn_tuple_t -type httpBatchState C.http_batch_state_t type sslSock C.ssl_sock_t type sslReadArgs C.ssl_read_args_t type ebpfHttpTx C.http_transaction_t -type httpBatch C.http_batch_t -type httpBatchKey C.http_batch_key_t type libPath C.lib_path_t type ProtocolType C.protocol_t +// Add tests to TestProtocolValue const ( ProtocolUnknown ProtocolType = C.PROTOCOL_UNKNOWN ProtocolHTTP ProtocolType = C.PROTOCOL_HTTP ProtocolHTTP2 ProtocolType = C.PROTOCOL_HTTP2 ProtocolTLS ProtocolType = C.PROTOCOL_TLS + ProtocolMONGO ProtocolType = C.PROTOCOL_MONGO + ProtocolAMQP ProtocolType = C.PROTOCOL_AMQP + ProtocolRedis ProtocolType = C.PROTOCOL_REDIS ProtocolMax ProtocolType = C.MAX_PROTOCOLS ) const ( - HTTPBatchSize = C.HTTP_BATCH_SIZE - HTTPBatchPages = C.HTTP_BATCH_PAGES HTTPBufferSize = C.HTTP_BUFFER_SIZE libPathMaxSize = C.LIB_PATH_MAX_SIZE diff --git a/pkg/network/protocols/http/http_types_linux.go b/pkg/network/protocols/http/http_types_linux.go index 07755fea139d1..465a5f229e236 100644 --- a/pkg/network/protocols/http/http_types_linux.go +++ b/pkg/network/protocols/http/http_types_linux.go @@ -14,10 +14,6 @@ type httpConnTuple struct { Pid uint32 Metadata uint32 } -type httpBatchState struct { - Idx uint64 - To_flush uint64 -} type sslSock struct { Tup httpConnTuple Fd uint32 @@ -39,15 +35,6 @@ type ebpfHttpTx struct { Tcp_seq uint32 Tags uint64 } -type httpBatch struct { - Idx uint64 - Pos uint8 - Txs [15]ebpfHttpTx -} -type httpBatchKey struct { - Cpu uint32 - Num uint32 -} type libPath struct { Pid uint32 @@ -62,12 +49,13 @@ const ( ProtocolHTTP ProtocolType = 0x2 ProtocolHTTP2 ProtocolType = 0x3 ProtocolTLS ProtocolType = 0x4 - ProtocolMax ProtocolType = 0x5 + ProtocolMONGO ProtocolType = 0x6 + ProtocolAMQP ProtocolType = 0x8 + ProtocolRedis ProtocolType = 0x9 + ProtocolMax ProtocolType = 0xa ) const ( - HTTPBatchSize = 0xf - HTTPBatchPages = 0x3 HTTPBufferSize = 0xa0 libPathMaxSize = 0x78 diff --git a/pkg/network/protocols/http/model_linux.go b/pkg/network/protocols/http/model_linux.go index bf05d4ef8e30a..ef5d1068e906a 100644 --- a/pkg/network/protocols/http/model_linux.go +++ b/pkg/network/protocols/http/model_linux.go @@ -149,11 +149,6 @@ func (tx *ebpfHttpTx) String() string { return output.String() } -// Transactions returns the slice of HTTP transactions embedded in the batch -func (batch *httpBatch) Transactions() []ebpfHttpTx { - return batch.Txs[:] -} - // below is copied from pkg/trace/stats/statsraw.go // 10 bits precision (any value will be +/- 1/1024) const roundMask uint64 = 1 << 10 diff --git a/pkg/network/protocols/http/model_windows.go b/pkg/network/protocols/http/model_windows.go index 5debdb3c3ac5b..6ff12d9d3e3c6 100644 --- a/pkg/network/protocols/http/model_windows.go +++ b/pkg/network/protocols/http/model_windows.go @@ -12,8 +12,6 @@ import ( "bytes" "encoding/binary" - //"encoding/hex" - "errors" "fmt" "strconv" "strings" @@ -23,9 +21,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/driver" ) -// errLostBatch isn't a valid error in windows -var errLostBatch = errors.New("invalid error") - // StatusClass returns an integer representing the status code class // Example: a 404 would return 400 func statusClass(statusCode uint16) int { diff --git a/pkg/network/protocols/http/monitor.go b/pkg/network/protocols/http/monitor.go index fe6440afd9971..3a6c848c7e97d 100644 --- a/pkg/network/protocols/http/monitor.go +++ b/pkg/network/protocols/http/monitor.go @@ -10,39 +10,32 @@ package http import ( "fmt" - "sync" + "unsafe" "github.com/cilium/ebpf" manager "github.com/DataDog/ebpf-manager" - ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/network/config" filterpkg "github.com/DataDog/datadog-agent/pkg/network/filter" + "github.com/DataDog/datadog-agent/pkg/network/protocols/events" errtelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" + "github.com/DataDog/datadog-agent/pkg/process/monitor" ) // Monitor is responsible for: // * Creating a raw socket and attaching an eBPF filter to it; -// * Polling a perf buffer that contains notifications about HTTP transaction batches ready to be read; -// * Querying these batches by doing a map lookup; +// * Consuming HTTP transaction "events" that are sent from Kernel space; // * Aggregating and emitting metrics based on the received HTTP transactions; type Monitor struct { - handler func([]httpTX) - - ebpfProgram *ebpfProgram - batchManager *batchManager - batchCompletionHandler *ddebpf.PerfHandler - telemetry *telemetry - - pollRequests chan chan map[Key]*RequestStats - statkeeper *httpStatKeeper + consumer *events.Consumer + ebpfProgram *ebpfProgram + telemetry *telemetry + statkeeper *httpStatKeeper + processMonitor *monitor.ProcessMonitor // termination - mux sync.Mutex - eventLoopWG sync.WaitGroup closeFilterFn func() - stopped bool } // NewMonitor returns a new Monitor instance @@ -66,43 +59,21 @@ func NewMonitor(c *config.Config, offsets []manager.ConstantEditor, sockFD *ebpf return nil, fmt.Errorf("error enabling HTTP traffic inspection: %s", err) } - batchMap, _, err := mgr.GetMap(httpBatchesMap) - if err != nil { - closeFilterFn() - return nil, err - } - - batchEventsMap, _, _ := mgr.GetMap(httpBatchEvents) - numCPUs := int(batchEventsMap.MaxEntries()) - telemetry, err := newTelemetry() if err != nil { closeFilterFn() return nil, err } - statkeeper := newHTTPStatkeeper(c, telemetry) - - handler := func(transactions []httpTX) { - if statkeeper != nil { - statkeeper.Process(transactions) - } - } - batchManager, err := newBatchManager(batchMap, numCPUs) - if err != nil { - closeFilterFn() - return nil, fmt.Errorf("couldn't instantiate batch manager: %w", err) - } + statkeeper := newHTTPStatkeeper(c, telemetry) + processMonitor := monitor.GetProcessMonitor() return &Monitor{ - handler: handler, - ebpfProgram: mgr, - batchManager: batchManager, - batchCompletionHandler: mgr.batchCompletionHandler, - telemetry: telemetry, - pollRequests: make(chan chan map[Key]*RequestStats), - closeFilterFn: closeFilterFn, - statkeeper: statkeeper, + ebpfProgram: mgr, + telemetry: telemetry, + closeFilterFn: closeFilterFn, + statkeeper: statkeeper, + processMonitor: processMonitor, }, nil } @@ -112,44 +83,22 @@ func (m *Monitor) Start() error { return nil } + var err error + m.consumer, err = events.NewConsumer( + "http", + m.ebpfProgram.Manager.Manager, + m.process, + ) + if err != nil { + return err + } + m.consumer.Start() + if err := m.ebpfProgram.Start(); err != nil { return err } - m.eventLoopWG.Add(1) - go func() { - defer m.eventLoopWG.Done() - for { - select { - case dataEvent, ok := <-m.batchCompletionHandler.DataChannel: - if !ok { - return - } - - transactions, err := m.batchManager.GetTransactionsFrom(dataEvent) - m.process(transactions, err) - dataEvent.Done() - case _, ok := <-m.batchCompletionHandler.LostChannel: - if !ok { - return - } - - m.process(nil, errLostBatch) - case reply, ok := <-m.pollRequests: - if !ok { - return - } - - transactions := m.batchManager.GetPendingTransactions() - m.process(transactions, nil) - - m.telemetry.log() - reply <- m.statkeeper.GetAndResetAllStats() - } - } - }() - - return nil + return m.processMonitor.Initialize() } // GetHTTPStats returns a map of HTTP stats stored in the following format: @@ -159,16 +108,9 @@ func (m *Monitor) GetHTTPStats() map[Key]*RequestStats { return nil } - m.mux.Lock() - defer m.mux.Unlock() - if m.stopped { - return nil - } - - reply := make(chan map[Key]*RequestStats, 1) - defer close(reply) - m.pollRequests <- reply - return <-reply + m.consumer.Sync() + m.telemetry.log() + return m.statkeeper.GetAndResetAllStats() } // Stop HTTP monitoring @@ -177,25 +119,16 @@ func (m *Monitor) Stop() { return } - m.mux.Lock() - defer m.mux.Unlock() - if m.stopped { - return - } - + m.processMonitor.Stop() m.ebpfProgram.Close() + m.consumer.Stop() m.closeFilterFn() - close(m.pollRequests) - m.eventLoopWG.Wait() - m.stopped = true } -func (m *Monitor) process(transactions []httpTX, err error) { - m.telemetry.aggregate(transactions, err) - - if m.handler != nil && len(transactions) > 0 { - m.handler(transactions) - } +func (m *Monitor) process(data []byte) { + tx := (*ebpfHttpTx)(unsafe.Pointer(&data[0])) + m.telemetry.count(tx) + m.statkeeper.Process(tx) } // DumpMaps dumps the maps associated with the monitor diff --git a/pkg/network/protocols/http/monitor_windows.go b/pkg/network/protocols/http/monitor_windows.go index d106f1a850b7c..1adad624744b7 100644 --- a/pkg/network/protocols/http/monitor_windows.go +++ b/pkg/network/protocols/http/monitor_windows.go @@ -81,7 +81,7 @@ func (m *WindowsMonitor) Start() { // the linux side has an error code potentially, that // gets aggregated under the hood. Do we need somthing // analogous - m.process(transactionBatch, nil) + m.process(transactionBatch) case transactions, ok := <-m.hei.dataChannel: if !ok { return @@ -91,40 +91,24 @@ func (m *WindowsMonitor) Start() { // gets aggregated under the hood. Do we need somthing // analogous if len(transactions) > 0 { - m.processEtw(transactions, nil) + m.process(transactions) } } - } }() return } -func (m *WindowsMonitor) processEtw(transactionBatch []WinHttpTransaction, err error) { - transactions := make([]httpTX, len(transactionBatch)) - for i := range transactionBatch { - transactions[i] = &transactionBatch[i] - } - +func (m *WindowsMonitor) process(transactionBatch []WinHttpTransaction) { m.mux.Lock() defer m.mux.Unlock() - m.telemetry.aggregate(transactions, err) - m.statkeeper.Process(transactions) -} -func (m *WindowsMonitor) process(transactionBatch []WinHttpTransaction, err error) { - transactions := make([]httpTX, len(transactionBatch)) for i := range transactionBatch { - transactions[i] = &transactionBatch[i] - + tx := httpTX(&transactionBatch[i]) + m.telemetry.count(tx) + m.statkeeper.Process(tx) } - - m.mux.Lock() - defer m.mux.Unlock() - - m.telemetry.aggregate(transactions, err) - m.statkeeper.Process(transactions) } // GetHTTPStats returns a map of HTTP stats stored in the following format: diff --git a/pkg/network/protocols/http/telemetry.go b/pkg/network/protocols/http/telemetry.go index cd68c8651b851..485854a0f9693 100644 --- a/pkg/network/protocols/http/telemetry.go +++ b/pkg/network/protocols/http/telemetry.go @@ -23,7 +23,6 @@ type telemetry struct { hits1XX, hits2XX, hits3XX, hits4XX, hits5XX *libtelemetry.Metric totalHits *libtelemetry.Metric - misses *libtelemetry.Metric // this happens when we can't cope with the rate of events dropped *libtelemetry.Metric // this happens when httpStatKeeper reaches capacity rejected *libtelemetry.Metric // this happens when an user-defined reject-filter matches a request malformed *libtelemetry.Metric // this happens when the request doesn't have the expected format @@ -48,7 +47,6 @@ func newTelemetry() (*telemetry, error) { // these metrics are also exported as statsd metrics totalHits: metricGroup.NewMetric("total_hits", libtelemetry.OptStatsd), - misses: metricGroup.NewMetric("misses", libtelemetry.OptStatsd), dropped: metricGroup.NewMetric("dropped", libtelemetry.OptStatsd), rejected: metricGroup.NewMetric("rejected", libtelemetry.OptStatsd), malformed: metricGroup.NewMetric("malformed", libtelemetry.OptStatsd), @@ -57,26 +55,20 @@ func newTelemetry() (*telemetry, error) { return t, nil } -func (t *telemetry) aggregate(txs []httpTX, err error) { - for _, tx := range txs { - switch tx.StatusClass() { - case 100: - t.hits1XX.Add(1) - case 200: - t.hits2XX.Add(1) - case 300: - t.hits3XX.Add(1) - case 400: - t.hits4XX.Add(1) - case 500: - t.hits5XX.Add(1) - } - t.totalHits.Add(1) - } - - if err == errLostBatch { - t.misses.Add(int64(len(txs))) +func (t *telemetry) count(tx httpTX) { + switch tx.StatusClass() { + case 100: + t.hits1XX.Add(1) + case 200: + t.hits2XX.Add(1) + case 300: + t.hits3XX.Add(1) + case 400: + t.hits4XX.Add(1) + case 500: + t.hits5XX.Add(1) } + t.totalHits.Add(1) } func (t *telemetry) log() { @@ -84,7 +76,6 @@ func (t *telemetry) log() { then := t.then.Swap(now) totalRequests := t.totalHits.Delta() - misses := t.misses.Delta() dropped := t.dropped.Delta() rejected := t.rejected.Delta() malformed := t.malformed.Delta() @@ -92,11 +83,9 @@ func (t *telemetry) log() { elapsed := now - then log.Debugf( - "http stats summary: requests_processed=%d(%.2f/s) requests_missed=%d(%.2f/s) requests_dropped=%d(%.2f/s) requests_rejected=%d(%.2f/s) requests_malformed=%d(%.2f/s) aggregations=%d", + "http stats summary: requests_processed=%d(%.2f/s) requests_dropped=%d(%.2f/s) requests_rejected=%d(%.2f/s) requests_malformed=%d(%.2f/s) aggregations=%d", totalRequests, float64(totalRequests)/float64(elapsed), - misses, - float64(misses)/float64(elapsed), dropped, float64(dropped)/float64(elapsed), rejected, diff --git a/pkg/network/protocols/mongo/client.go b/pkg/network/protocols/mongo/client.go new file mode 100644 index 0000000000000..1104bf48533c1 --- /dev/null +++ b/pkg/network/protocols/mongo/client.go @@ -0,0 +1,78 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package mongo + +import ( + "context" + "fmt" + "net" + "time" + + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" +) + +const ( + defaultConnectionTimeout = time.Second * 10 +) + +type Options struct { + ClientDialer *net.Dialer + ServerAddress string + Username string + Password string + ConnectionTimout time.Duration +} + +type Client struct { + C *mongo.Client +} + +func NewClient(opts Options) (*Client, error) { + clientOptions := options.Client().ApplyURI(fmt.Sprintf("mongodb://%s", opts.ServerAddress)) + if opts.Username == "" { + opts.Username = User + } + if opts.Password == "" { + opts.Password = Pass + } + creds := options.Credential{ + Username: opts.Username, + Password: opts.Password, + AuthSource: "admin", + } + clientOptions.SetAuth(creds) + clientOptions.SetDirect(true) + + if opts.ConnectionTimout == 0 { + opts.ConnectionTimout = defaultConnectionTimeout + } + + if opts.ClientDialer != nil { + clientOptions.SetDialer(opts.ClientDialer) + } + + timedCtx, cancel := context.WithTimeout(context.Background(), opts.ConnectionTimout) + defer cancel() + client, err := mongo.Connect(timedCtx, clientOptions) + if err != nil { + return nil, err + } + + timedCtx, cancel = context.WithTimeout(context.Background(), opts.ConnectionTimout) + defer cancel() + if err := client.Ping(timedCtx, nil); err != nil { + return nil, err + } + + return &Client{ + C: client, + }, nil +} + +func (c *Client) Stop() error { + return c.C.Disconnect(context.Background()) +} diff --git a/pkg/network/protocols/mongo/server.go b/pkg/network/protocols/mongo/server.go new file mode 100644 index 0000000000000..7885685e70b8f --- /dev/null +++ b/pkg/network/protocols/mongo/server.go @@ -0,0 +1,31 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package mongo + +import ( + "fmt" + "regexp" + "testing" + + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" + protocolsUtils "github.com/DataDog/datadog-agent/pkg/network/protocols/testutil" +) + +const ( + User = "root" + Pass = "password" +) + +func RunMongoServer(t *testing.T, serverAddress, serverPort string) { + env := []string{ + "MONGO_ADDR=" + serverAddress, + "MONGO_PORT=" + serverPort, + "MONGO_USER=" + User, + "MONGO_PASSWORD=" + Pass, + } + dir, _ := testutil.CurDir() + protocolsUtils.RunDockerServer(t, "mongo", dir+"/testdata/docker-compose.yml", env, regexp.MustCompile(fmt.Sprintf(".*Waiting for connections.*port.*:%s.*", serverPort))) +} diff --git a/pkg/network/protocols/mongo/testdata/docker-compose.yml b/pkg/network/protocols/mongo/testdata/docker-compose.yml new file mode 100644 index 0000000000000..0d02a59a979e6 --- /dev/null +++ b/pkg/network/protocols/mongo/testdata/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3' +services: + mongodb-primary: + image: 'mongo:5.0.14' + ports: + - ${MONGO_ADDR:-127.0.0.1}:${MONGO_PORT:-27017}:27017 + environment: + - MONGO_INITDB_ROOT_USERNAME=${MONGO_USER:-root} + - MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD:-password} diff --git a/pkg/network/protocols/protocols_linux_test.go b/pkg/network/protocols/protocols_linux_test.go new file mode 100644 index 0000000000000..87e6ab5523414 --- /dev/null +++ b/pkg/network/protocols/protocols_linux_test.go @@ -0,0 +1,64 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package protocols + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/network" + "github.com/DataDog/datadog-agent/pkg/network/protocols/http" +) + +func TestProtocolValue(t *testing.T) { + tests := []struct { + name string + kernelValue http.ProtocolType + expected network.ProtocolType + }{ + { + name: "ProtocolUnknown", + kernelValue: http.ProtocolUnknown, + expected: network.ProtocolUnknown, + }, + { + name: "ProtocolHTTP", + kernelValue: http.ProtocolHTTP, + expected: network.ProtocolHTTP, + }, + { + name: "ProtocolHTTP2", + kernelValue: http.ProtocolHTTP2, + expected: network.ProtocolHTTP2, + }, + { + name: "ProtocolTLS", + kernelValue: http.ProtocolTLS, + expected: network.ProtocolTLS, + }, + { + name: "ProtocolAMQP", + kernelValue: http.ProtocolAMQP, + expected: network.ProtocolAMQP, + }, + { + name: "ProtocolRedis", + kernelValue: http.ProtocolRedis, + expected: network.ProtocolRedis, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + require.Equal(t, int(test.expected), int(test.kernelValue)) + require.True(t, network.IsValidProtocolValue(uint8(test.kernelValue))) + }) + } +} diff --git a/pkg/network/protocols/redis/client.go b/pkg/network/protocols/redis/client.go new file mode 100644 index 0000000000000..4dfcaef34fef6 --- /dev/null +++ b/pkg/network/protocols/redis/client.go @@ -0,0 +1,19 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package redis + +import ( + "net" + + "github.com/go-redis/redis/v9" +) + +func NewClient(serverAddress string, dialer *net.Dialer) *redis.Client { + return redis.NewClient(&redis.Options{ + Addr: serverAddress, + Dialer: dialer.DialContext, + }) +} diff --git a/pkg/network/protocols/redis/server.go b/pkg/network/protocols/redis/server.go new file mode 100644 index 0000000000000..3616105855a29 --- /dev/null +++ b/pkg/network/protocols/redis/server.go @@ -0,0 +1,25 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package redis + +import ( + "regexp" + "testing" + + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" + protocolsUtils "github.com/DataDog/datadog-agent/pkg/network/protocols/testutil" +) + +func RunRedisServer(t *testing.T, serverAddr, serverPort string) { + env := []string{ + "REDIS_ADDR=" + serverAddr, + "REDIS_PORT=" + serverPort, + } + + t.Helper() + dir, _ := testutil.CurDir() + protocolsUtils.RunDockerServer(t, "redis", dir+"/testdata/docker-compose.yml", env, regexp.MustCompile(".*Ready to accept connections")) +} diff --git a/pkg/network/protocols/redis/testdata/docker-compose.yml b/pkg/network/protocols/redis/testdata/docker-compose.yml new file mode 100644 index 0000000000000..3af8592a1c0b0 --- /dev/null +++ b/pkg/network/protocols/redis/testdata/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3' +services: + redis: + image: redis:7 + entrypoint: redis-server --ignore-warnings ARM64-COW-BUG + ports: + - ${REDIS_ADDR:-127.0.0.1}:${REDIS_PORT:-6379}:6379 + environment: + - "ALLOW_EMPTY_PASSWORD=yes" diff --git a/pkg/network/protocols/testutil/patternscanner.go b/pkg/network/protocols/testutil/patternscanner.go new file mode 100644 index 0000000000000..440d4ed375858 --- /dev/null +++ b/pkg/network/protocols/testutil/patternscanner.go @@ -0,0 +1,47 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package testutil + +import ( + "regexp" + "sync" +) + +type PatternScanner struct { + // The log pattern to match on + pattern *regexp.Regexp + // Once we've found the correct log, we should notify the caller. + DoneChan chan struct{} + // A sync.Once instance to ensure we notify the caller only once, and stop the operation. + stopOnce sync.Once + // A helper to spare redundant calls to the analyzer once we've found the relevant log. + stopped bool +} + +func NewScanner(pattern *regexp.Regexp, doneChan chan struct{}) *PatternScanner { + return &PatternScanner{ + pattern: pattern, + DoneChan: doneChan, + stopOnce: sync.Once{}, + stopped: false, + } +} + +// Write implemented io.Writer to be used as a callback for log/string writing. +// Once we find a match in for the given pattern, we notify the caller. +func (ps *PatternScanner) Write(p []byte) (n int, err error) { + n = len(p) + err = nil + + if !ps.stopped && ps.pattern.Match(p) { + ps.stopOnce.Do(func() { + ps.DoneChan <- struct{}{} + ps.stopped = true + }) + } + + return +} diff --git a/pkg/network/protocols/testutil/serverutils.go b/pkg/network/protocols/testutil/serverutils.go new file mode 100644 index 0000000000000..66228cc8be0c9 --- /dev/null +++ b/pkg/network/protocols/testutil/serverutils.go @@ -0,0 +1,50 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package testutil + +import ( + "os/exec" + "regexp" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +// RunDockerServer is a template for running a protocols server in a docker. +// - serverName is a friendly name of the server we are setting (AMQP, mongo, etc.). +// - dockerPath is the path for the docker-compose. +// - env is any environment variable required for running the server. +// - serverStartRegex is a regex to be matched on the server logs to ensure it started correctly. +func RunDockerServer(t *testing.T, serverName, dockerPath string, env []string, serverStartRegex *regexp.Regexp) { + t.Helper() + + cmd := exec.Command("docker-compose", "-f", dockerPath, "up") + patternScanner := NewScanner(serverStartRegex, make(chan struct{}, 1)) + + cmd.Stdout = patternScanner + cmd.Env = append(cmd.Env, env...) + go func() { + require.NoErrorf(t, cmd.Run(), "could not start %s with docker-compose", serverName) + }() + + t.Cleanup(func() { + c := exec.Command("docker-compose", "-f", dockerPath, "down", "--remove-orphans") + c.Env = append(c.Env, env...) + _ = c.Run() + }) + + for { + select { + case <-patternScanner.DoneChan: + t.Logf("%s server is ready", serverName) + return + case <-time.After(time.Second * 60): + t.Fatalf("failed to start %s server", serverName) + return + } + } +} diff --git a/pkg/network/state.go b/pkg/network/state.go index 7d9ddec356cd0..403dd7d89f4c0 100644 --- a/pkg/network/state.go +++ b/pkg/network/state.go @@ -6,6 +6,9 @@ package network import ( + "bytes" + "fmt" + "strconv" "sync" "time" @@ -82,13 +85,14 @@ type Delta struct { } type telemetry struct { - closedConnDropped int64 - connDropped int64 - statsUnderflows int64 - timeSyncCollisions int64 - dnsStatsDropped int64 - httpStatsDropped int64 - dnsPidCollisions int64 + closedConnDropped int64 + connDropped int64 + statsUnderflows int64 + statsCookieCollisions int64 + timeSyncCollisions int64 + dnsStatsDropped int64 + httpStatsDropped int64 + dnsPidCollisions int64 } const minClosedCapacity = 1024 @@ -96,35 +100,34 @@ const minClosedCapacity = 1024 type client struct { lastFetch time.Time - // generated via `ByteKey` and used exclusively to roll up closed connections - closedConnectionsKeys map[string]int + closedConnectionsKeys map[uint32]int closedConnections []ConnectionStats - stats map[string]StatCountersByCookie + stats map[uint32]StatCounters // maps by dns key the domain (string) to stats structure dnsStats dns.StatsByKeyByNameByType httpStatsDelta map[http.Key]*http.RequestStats lastTelemetries map[ConnTelemetryType]int64 } -func (c *client) Reset(active map[string]*ConnectionStats) { +func (c *client) Reset(active map[uint32]*ConnectionStats) { half := cap(c.closedConnections) / 2 if closedLen := len(c.closedConnections); closedLen > minClosedCapacity && closedLen < half { c.closedConnections = make([]ConnectionStats, half) } c.closedConnections = c.closedConnections[:0] - c.closedConnectionsKeys = make(map[string]int) + c.closedConnectionsKeys = make(map[uint32]int) c.dnsStats = make(dns.StatsByKeyByNameByType) c.httpStatsDelta = make(map[http.Key]*http.RequestStats) // XXX: we should change the way we clean this map once // https://github.com/golang/go/issues/20135 is solved - newStats := make(map[string]StatCountersByCookie, len(c.stats)) - for key, st := range c.stats { + newStats := make(map[uint32]StatCounters, len(c.stats)) + for cookie, st := range c.stats { // Only keep active connections stats - if _, isActive := active[key]; isActive { - newStats[key] = st + if _, isActive := active[cookie]; isActive { + newStats[cookie] = st } } c.stats = newStats @@ -138,7 +141,6 @@ type networkState struct { telemetry telemetry // Monotonic state telemetry lastTelemetry telemetry // Old telemetry state; used for logging - buf []byte // Shared buffer latestTimeEpoch uint64 // Network state configuration @@ -159,7 +161,6 @@ func NewState(clientExpiry time.Duration, maxClosedConns, maxClientStats int, ma maxClientStats: maxClientStats, maxDNSStats: maxDNSStats, maxHTTPStats: maxHTTPStats, - buf: make([]byte, ConnectionByteKeyMaxLen), } } @@ -206,7 +207,7 @@ func (ns *networkState) GetDelta( // Update the latest known time ns.latestTimeEpoch = latestTime - connsByKey := getConnsByKey(active, ns.buf) + connsByKey := ns.getConnsByCookie(active) clientBuffer := clientPool.Get(id) client := ns.getClient(id) @@ -275,20 +276,22 @@ func (ns *networkState) getTelemetryDelta(id string, telemetry map[ConnTelemetry func (ns *networkState) logTelemetry() { delta := telemetry{ - closedConnDropped: ns.telemetry.closedConnDropped - ns.lastTelemetry.closedConnDropped, - connDropped: ns.telemetry.connDropped - ns.lastTelemetry.connDropped, - statsUnderflows: ns.telemetry.statsUnderflows - ns.lastTelemetry.statsUnderflows, - timeSyncCollisions: ns.telemetry.timeSyncCollisions - ns.lastTelemetry.timeSyncCollisions, - dnsStatsDropped: ns.telemetry.dnsStatsDropped - ns.lastTelemetry.dnsStatsDropped, - httpStatsDropped: ns.telemetry.httpStatsDropped - ns.lastTelemetry.httpStatsDropped, - dnsPidCollisions: ns.telemetry.dnsPidCollisions - ns.lastTelemetry.dnsPidCollisions, + closedConnDropped: ns.telemetry.closedConnDropped - ns.lastTelemetry.closedConnDropped, + connDropped: ns.telemetry.connDropped - ns.lastTelemetry.connDropped, + statsUnderflows: ns.telemetry.statsUnderflows - ns.lastTelemetry.statsUnderflows, + statsCookieCollisions: ns.telemetry.statsCookieCollisions - ns.lastTelemetry.statsCookieCollisions, + timeSyncCollisions: ns.telemetry.timeSyncCollisions - ns.lastTelemetry.timeSyncCollisions, + dnsStatsDropped: ns.telemetry.dnsStatsDropped - ns.lastTelemetry.dnsStatsDropped, + httpStatsDropped: ns.telemetry.httpStatsDropped - ns.lastTelemetry.httpStatsDropped, + dnsPidCollisions: ns.telemetry.dnsPidCollisions - ns.lastTelemetry.dnsPidCollisions, } // Flush log line if any metric is non-zero - if delta.statsUnderflows > 0 || delta.closedConnDropped > 0 || delta.connDropped > 0 || delta.timeSyncCollisions > 0 || + if delta.statsUnderflows > 0 || delta.statsCookieCollisions > 0 || delta.closedConnDropped > 0 || delta.connDropped > 0 || delta.timeSyncCollisions > 0 || delta.dnsStatsDropped > 0 || delta.httpStatsDropped > 0 || delta.dnsPidCollisions > 0 { s := "state telemetry: " s += " [%d stats stats_underflows]" + s += " [%d stats cookie collisions]" s += " [%d connections dropped due to stats]" s += " [%d closed connections dropped]" s += " [%d dns stats dropped]" @@ -297,6 +300,7 @@ func (ns *networkState) logTelemetry() { s += " [%d time sync collisions]" log.Warnf(s, delta.statsUnderflows, + delta.statsCookieCollisions, delta.connDropped, delta.closedConnDropped, delta.dnsStatsDropped, @@ -321,19 +325,24 @@ func (ns *networkState) RegisterClient(id string) { _ = ns.getClient(id) } -// getConnsByKey returns a mapping of byte-key -> connection for easier access + manipulation -func getConnsByKey(conns []ConnectionStats, buf []byte) map[string]*ConnectionStats { - connsByKey := make(map[string]*ConnectionStats, len(conns)) +// getConnsByCookie returns a mapping of cookie -> connection for easier access + manipulation +func (ns *networkState) getConnsByCookie(conns []ConnectionStats) map[uint32]*ConnectionStats { + connsByKey := make(map[uint32]*ConnectionStats, len(conns)) for i := range conns { - key := string(conns[i].ByteKey(buf)) var c *ConnectionStats - if c = connsByKey[key]; c == nil { - connsByKey[key] = &conns[i] + if c = connsByKey[conns[i].Cookie]; c == nil { + connsByKey[conns[i].Cookie] = &conns[i] continue } - log.Tracef("duplicate connection in collection: key: %s, c1: %+v, c2: %+v", BeautifyKey(key), *c, conns[i]) - mergeConnectionStats(c, &conns[i]) + log.TraceFunc(func() string { + return fmt.Sprintf("duplicate connection in collection: cookie: %d, c1: %+v, c2: %+v", c.Cookie, *c, conns[i]) + }) + + if mergeConnectionStats(c, &conns[i]) { + // cookie collision + ns.telemetry.statsCookieCollisions++ + } } return connsByKey @@ -346,14 +355,14 @@ func (ns *networkState) StoreClosedConnections(closed []ConnectionStats) { ns.storeClosedConnections(closed) } -// StoreClosedConnection stores the given connection for every client +// storeClosedConnection stores the given connection for every client func (ns *networkState) storeClosedConnections(conns []ConnectionStats) { for _, client := range ns.clients { for _, c := range conns { - key := string(c.ByteKeyNAT(ns.buf)) - - if i, ok := client.closedConnectionsKeys[key]; ok { - mergeConnectionStats(&client.closedConnections[i], &c) + if i, ok := client.closedConnectionsKeys[c.Cookie]; ok { + if mergeConnectionStats(&client.closedConnections[i], &c) { + ns.telemetry.statsCookieCollisions++ + } continue } @@ -363,7 +372,7 @@ func (ns *networkState) storeClosedConnections(conns []ConnectionStats) { } client.closedConnections = append(client.closedConnections, c) - client.closedConnectionsKeys[key] = len(client.closedConnections) - 1 + client.closedConnectionsKeys[c.Cookie] = len(client.closedConnections) - 1 } } } @@ -472,9 +481,9 @@ func (ns *networkState) getClient(clientID string) *client { c := &client{ lastFetch: time.Now(), - stats: make(map[string]StatCountersByCookie), + stats: make(map[uint32]StatCounters), closedConnections: make([]ConnectionStats, 0, minClosedCapacity), - closedConnectionsKeys: make(map[string]int), + closedConnectionsKeys: make(map[uint32]int), dnsStats: dns.StatsByKeyByNameByType{}, httpStatsDelta: map[http.Key]*http.RequestStats{}, lastTelemetries: make(map[ConnTelemetryType]int64), @@ -484,95 +493,88 @@ func (ns *networkState) getClient(clientID string) *client { } // mergeConnections return the connections and takes care of updating their last stat counters -func (ns *networkState) mergeConnections(id string, active map[string]*ConnectionStats, buffer *clientBuffer) { +func (ns *networkState) mergeConnections(id string, active map[uint32]*ConnectionStats, buffer *clientBuffer) { now := time.Now() client := ns.clients[id] client.lastFetch = now + // connections aggregated by tuple closed := client.closedConnections - closedKeys := make(map[string]struct{}, len(closed)) + aggrConns := newConnectionAggregator(len(closed)) for i := range closed { closedConn := &closed[i] - key := string(closedConn.ByteKey(ns.buf)) - closedKeys[key] = struct{}{} - - var activeConn *ConnectionStats - if activeConn = active[key]; activeConn != nil { - mergeConnectionStats(closedConn, activeConn) - ns.createStatsForKey(client, key) + cookie := closedConn.Cookie + if activeConn := active[cookie]; activeConn != nil { + if mergeConnectionStats(closedConn, activeConn) { + ns.telemetry.statsCookieCollisions++ + } + // not an active connection + delete(active, cookie) } - ns.updateConnWithStats(client, key, closedConn) + ns.updateConnWithStats(client, cookie, closedConn) if closedConn.Last.IsZero() { continue } - *buffer.Next() = *closedConn - } - // Active connections - for key, c := range active { - // If the connection was closed, it has already been processed so skip it - if _, ok := closedKeys[key]; ok { - continue + if !aggrConns.Aggregate(closedConn) { + *buffer.Next() = *closedConn } + } - ns.createStatsForKey(client, key) - ns.updateConnWithStats(client, key, c) + aggrConns.WriteTo(buffer) + + aggrConns = newConnectionAggregator(len(active)) + // Active connections + for cookie, c := range active { + ns.createStatsForCookie(client, cookie) + ns.updateConnWithStats(client, cookie, c) if c.Last.IsZero() { continue } - *buffer.Next() = *c + + if !aggrConns.Aggregate(c) { + *buffer.Next() = *c + } } + + aggrConns.WriteTo(buffer) } -func (ns *networkState) updateConnWithStats(client *client, key string, c *ConnectionStats) { +func (ns *networkState) updateConnWithStats(client *client, cookie uint32, c *ConnectionStats) { c.Last = StatCounters{} - if sts, ok := client.stats[key]; ok { - for _, cm := range c.Monotonic { - cookie := cm.Cookie - counters := cm.StatCounters - - st, ok := sts.Get(cookie) - if !ok { - c.Last = c.Last.Add(counters) - sts.Put(cookie, counters) - client.stats[key] = sts - continue - } - - var last StatCounters - var underflow bool - if last, underflow = counters.Sub(st); underflow { - ns.telemetry.statsUnderflows++ - log.Debugf("Stats underflow for key:%s, stats:%+v, connection:%+v", BeautifyKey(key), st, *c) - - counters = counters.Max(st) - last, _ = counters.Sub(st) - } - - c.Last = c.Last.Add(last) - - sts.Put(cookie, counters) - client.stats[key] = sts + if sts, ok := client.stats[cookie]; ok { + var last StatCounters + var underflow bool + if last, underflow = c.Monotonic.Sub(sts); underflow { + ns.telemetry.statsUnderflows++ + log.DebugFunc(func() string { + return fmt.Sprintf("Stats underflow for cookie:%d, stats counters:%+v, connection counters:%+v", c.Cookie, sts, c.Monotonic) + }) + + c.Monotonic = c.Monotonic.Max(sts) + last, _ = c.Monotonic.Sub(sts) } + + c.Last = c.Last.Add(last) + client.stats[cookie] = c.Monotonic } else { - for _, counters := range c.Monotonic { - c.Last = c.Last.Add(counters.StatCounters) - } + c.Last = c.Last.Add(c.Monotonic) } } -// createStatsForKey will create a new stats object for a key if it doesn't already exist. -func (ns *networkState) createStatsForKey(client *client, key string) { - if _, ok := client.stats[key]; !ok { +// createStatsForCookie will create a new stats object for a key if it doesn't already exist. +func (ns *networkState) createStatsForCookie(client *client, cookie uint32) { + if _, ok := client.stats[cookie]; !ok { if len(client.stats) >= ns.maxClientStats { ns.telemetry.connDropped++ return } - client.stats[key] = make(StatCountersByCookie, 0, 3) + + client.stats[cookie] = StatCounters{} } } @@ -602,8 +604,7 @@ func (ns *networkState) RemoveConnections(conns []*ConnectionStats) { for _, cl := range ns.clients { for _, c := range conns { - key := c.ByteKey(ns.buf) - delete(cl.stats, string(key)) + delete(cl.stats, c.Cookie) } } } @@ -625,13 +626,14 @@ func (ns *networkState) GetStats() map[string]interface{} { return map[string]interface{}{ "clients": clientInfo, "telemetry": map[string]int64{ - "stats_underflows": ns.telemetry.statsUnderflows, - "closed_conn_dropped": ns.telemetry.closedConnDropped, - "conn_dropped": ns.telemetry.connDropped, - "time_sync_collisions": ns.telemetry.timeSyncCollisions, - "dns_stats_dropped": ns.telemetry.dnsStatsDropped, - "http_stats_dropped": ns.telemetry.httpStatsDropped, - "dns_pid_collisions": ns.telemetry.dnsPidCollisions, + "stats_underflows": ns.telemetry.statsUnderflows, + "stats_cookie_collisions": ns.telemetry.statsCookieCollisions, + "closed_conn_dropped": ns.telemetry.closedConnDropped, + "conn_dropped": ns.telemetry.connDropped, + "time_sync_collisions": ns.telemetry.timeSyncCollisions, + "dns_stats_dropped": ns.telemetry.dnsStatsDropped, + "http_stats_dropped": ns.telemetry.httpStatsDropped, + "dns_pid_collisions": ns.telemetry.dnsPidCollisions, }, "current_time": time.Now().Unix(), "latest_bpf_time_ns": ns.latestTimeEpoch, @@ -645,19 +647,14 @@ func (ns *networkState) DumpState(clientID string) map[string]interface{} { data := map[string]interface{}{} if client, ok := ns.clients[clientID]; ok { - for connKey, s := range client.stats { - byCookie := map[uint32]interface{}{} - for _, st := range s { - byCookie[st.Cookie] = map[string]uint64{ - "total_sent": st.SentBytes, - "total_recv": st.RecvBytes, - "total_retransmits": uint64(st.Retransmits), - "total_tcp_established": uint64(st.TCPEstablished), - "total_tcp_closed": uint64(st.TCPClosed), - } + for cookie, s := range client.stats { + data[strconv.Itoa(int(cookie))] = map[string]uint64{ + "total_sent": s.SentBytes, + "total_recv": s.RecvBytes, + "total_retransmits": uint64(s.Retransmits), + "total_tcp_established": uint64(s.TCPEstablished), + "total_tcp_closed": uint64(s.TCPClosed), } - - data[BeautifyKey(connKey)] = byCookie } } return data @@ -721,16 +718,99 @@ func (ns *networkState) determineConnectionIntraHost(connections []ConnectionSta } } -func mergeConnectionStats(a, b *ConnectionStats) { - for _, bm := range b.Monotonic { - if ams, ok := a.Monotonic.Get(bm.Cookie); ok { - a.Monotonic.Put(bm.Cookie, ams.Max(bm.StatCounters)) - continue +type connectionAggregator struct { + conns map[string]*struct { + *ConnectionStats + rttSum, rttVarSum uint64 + count uint32 + } + buf []byte +} + +func newConnectionAggregator(size int) *connectionAggregator { + return &connectionAggregator{ + conns: make(map[string]*struct { + *ConnectionStats + rttSum uint64 + rttVarSum uint64 + count uint32 + }, size), + buf: make([]byte, ConnectionByteKeyMaxLen), + } +} + +// Aggregate aggregates a connection. The connection is only +// aggregated if: +// - it is not in the collection +// - it is in the collection and: +// - the ip translation is nil OR +// - the other connection's ip translation is nil OR +// - the other connection's ip translation is not nil AND the nat info is the same +func (a *connectionAggregator) Aggregate(c *ConnectionStats) bool { + key := string(c.ByteKey(a.buf)) + aggrConn, ok := a.conns[key] + if !ok { + a.conns[key] = &struct { + *ConnectionStats + rttSum uint64 + rttVarSum uint64 + count uint32 + }{ + ConnectionStats: c, + rttSum: uint64(c.RTT), + rttVarSum: uint64(c.RTTVar), + count: 1, } - a.Monotonic.Put(bm.Cookie, bm.StatCounters) + return true + } + + if !(aggrConn.IPTranslation == nil || + c.IPTranslation == nil || + *c.IPTranslation == *aggrConn.IPTranslation) { + return false + } + + aggrConn.Monotonic = aggrConn.Monotonic.Add(c.Monotonic) + aggrConn.Last = aggrConn.Last.Add(c.Last) + aggrConn.rttSum += uint64(c.RTT) + aggrConn.rttVarSum += uint64(c.RTTVar) + aggrConn.count++ + if aggrConn.LastUpdateEpoch < c.LastUpdateEpoch { + aggrConn.LastUpdateEpoch = c.LastUpdateEpoch + } + if aggrConn.IPTranslation == nil { + aggrConn.IPTranslation = c.IPTranslation } + return true +} + +// WriteTo writes the aggregated connections to a clientBuffer, +// computing an average for RTT and RTTVar for each +// connection +func (a connectionAggregator) WriteTo(buffer *clientBuffer) { + for _, c := range a.conns { + c.RTT = uint32(c.rttSum / uint64(c.count)) + c.RTTVar = uint32(c.rttVarSum / uint64(c.count)) + *buffer.Next() = *c.ConnectionStats + } +} + +var mergeConnectionStatsBuffer = make([]byte, ConnectionByteKeyMaxLen) + +func mergeConnectionStats(a, b *ConnectionStats) (collision bool) { + if a.Cookie != b.Cookie { + return false + } + + if bytes.Compare(a.ByteKey(mergeConnectionStatsBuffer), b.ByteKey(mergeConnectionStatsBuffer)) != 0 { + // cookie collision + return true + } + + a.Monotonic = a.Monotonic.Max(b.Monotonic) + if b.LastUpdateEpoch > a.LastUpdateEpoch { a.LastUpdateEpoch = b.LastUpdateEpoch } @@ -744,4 +824,6 @@ func mergeConnectionStats(a, b *ConnectionStats) { } else if b.Protocol == ProtocolUnknown && a.Protocol != ProtocolUnknown { b.Protocol = a.Protocol } + + return false } diff --git a/pkg/network/state_test.go b/pkg/network/state_test.go index ad220c4441eaa..d71d209f4312d 100644 --- a/pkg/network/state_test.go +++ b/pkg/network/state_test.go @@ -109,22 +109,22 @@ func TestRemoveConnections(t *testing.T) { Dest: util.AddressFromString("127.0.0.1"), SPort: 31890, DPort: 80, + Monotonic: StatCounters{ + SentBytes: 12345, + RecvBytes: 6789, + Retransmits: 2, + }, Last: StatCounters{ SentBytes: 12345, RecvBytes: 6789, Retransmits: 2, }, IntraHost: true, + Cookie: 0, } - conn.Monotonic.Put(0, StatCounters{ - SentBytes: 12345, - RecvBytes: 6789, - Retransmits: 2, - }) - clientID := "1" - state := newDefaultState().(*networkState) + state := newDefaultState() conns := state.GetDelta(clientID, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 0, len(conns)) @@ -148,14 +148,10 @@ func TestRetrieveClosedConnection(t *testing.T) { Dest: util.AddressFromString("127.0.0.1"), SPort: 31890, DPort: 80, - Monotonic: StatCountersByCookie{ - { - StatCounters: StatCounters{ - SentBytes: 12345, - RecvBytes: 6789, - Retransmits: 2, - }, - }, + Monotonic: StatCounters{ + SentBytes: 12345, + RecvBytes: 6789, + Retransmits: 2, }, Last: StatCounters{ SentBytes: 12345, @@ -163,6 +159,7 @@ func TestRetrieveClosedConnection(t *testing.T) { Retransmits: 2, }, IntraHost: true, + Cookie: 0, } clientID := "1" @@ -273,13 +270,10 @@ func TestNoPriorRegistrationActiveConnections(t *testing.T) { Dest: util.AddressFromString("127.0.0.1"), SPort: 9000, DPort: 1234, - Monotonic: StatCountersByCookie{ - { - StatCounters: StatCounters{ - SentBytes: 1, - }, - }, + Monotonic: StatCounters{ + SentBytes: 1, }, + Cookie: 0, } delta := state.GetDelta(clientID, latestEpochTime(), []ConnectionStats{conn}, nil, nil) @@ -326,32 +320,25 @@ func TestLastStats(t *testing.T) { } conn := ConnectionStats{ - Pid: 123, - Type: TCP, - Family: AFINET, - Source: util.AddressFromString("127.0.0.1"), - Dest: util.AddressFromString("127.0.0.1"), - SPort: 31890, - DPort: 80, - Monotonic: StatCountersByCookie{ - { - Cookie: 0, - StatCounters: m, - }, - }, + Pid: 123, + Type: TCP, + Family: AFINET, + Source: util.AddressFromString("127.0.0.1"), + Dest: util.AddressFromString("127.0.0.1"), + SPort: 31890, + DPort: 80, + Monotonic: m, } - conn2 := conn.clone() - m.SentBytes += dSent - m.RecvBytes += dRecv - m.Retransmits += dRetransmits - conn2.Monotonic.Put(0, m) + conn2 := conn + conn2.Monotonic.SentBytes += dSent + conn2.Monotonic.RecvBytes += dRecv + conn2.Monotonic.Retransmits += dRetransmits - conn3 := conn2.clone() - m.SentBytes += dSent - m.RecvBytes += dRecv - m.Retransmits += dRetransmits - conn3.Monotonic.Put(0, m) + conn3 := conn2 + conn3.Monotonic.SentBytes += dSent + conn3.Monotonic.RecvBytes += dRecv + conn3.Monotonic.Retransmits += dRetransmits // Start by registering the two clients state.RegisterClient(client1) @@ -368,22 +355,22 @@ func TestLastStats(t *testing.T) { // We should have only one connection but with last stats equal to monotonic conns = state.GetDelta(client1, latestEpochTime(), []ConnectionStats{conn}, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, conn.Monotonic[0].SentBytes, conns[0].Last.SentBytes) - assert.Equal(t, conn.Monotonic[0].RecvBytes, conns[0].Last.RecvBytes) - assert.Equal(t, conn.Monotonic[0].Retransmits, conns[0].Last.Retransmits) - assert.Equal(t, conn.Monotonic[0].SentBytes, conns[0].Monotonic[0].SentBytes) - assert.Equal(t, conn.Monotonic[0].RecvBytes, conns[0].Monotonic[0].RecvBytes) - assert.Equal(t, conn.Monotonic[0].Retransmits, conns[0].Monotonic[0].Retransmits) + assert.Equal(t, conn.Monotonic.SentBytes, conns[0].Last.SentBytes) + assert.Equal(t, conn.Monotonic.RecvBytes, conns[0].Last.RecvBytes) + assert.Equal(t, conn.Monotonic.Retransmits, conns[0].Last.Retransmits) + assert.Equal(t, conn.Monotonic.SentBytes, conns[0].Monotonic.SentBytes) + assert.Equal(t, conn.Monotonic.RecvBytes, conns[0].Monotonic.RecvBytes) + assert.Equal(t, conn.Monotonic.Retransmits, conns[0].Monotonic.Retransmits) // This client didn't collect the first connection so last stats = monotonic conns = state.GetDelta(client2, latestEpochTime(), []ConnectionStats{conn2}, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, conn2.Monotonic[0].SentBytes, conns[0].Last.SentBytes) - assert.Equal(t, conn2.Monotonic[0].RecvBytes, conns[0].Last.RecvBytes) - assert.Equal(t, conn2.Monotonic[0].Retransmits, conns[0].Last.Retransmits) - assert.Equal(t, conn2.Monotonic[0].SentBytes, conns[0].Monotonic[0].SentBytes) - assert.Equal(t, conn2.Monotonic[0].RecvBytes, conns[0].Monotonic[0].RecvBytes) - assert.Equal(t, conn2.Monotonic[0].Retransmits, conns[0].Monotonic[0].Retransmits) + assert.Equal(t, conn2.Monotonic.SentBytes, conns[0].Last.SentBytes) + assert.Equal(t, conn2.Monotonic.RecvBytes, conns[0].Last.RecvBytes) + assert.Equal(t, conn2.Monotonic.Retransmits, conns[0].Last.Retransmits) + assert.Equal(t, conn2.Monotonic.SentBytes, conns[0].Monotonic.SentBytes) + assert.Equal(t, conn2.Monotonic.RecvBytes, conns[0].Monotonic.RecvBytes) + assert.Equal(t, conn2.Monotonic.Retransmits, conns[0].Monotonic.Retransmits) // client 1 should have conn3 - conn1 since it did not collected conn2 conns = state.GetDelta(client1, latestEpochTime(), []ConnectionStats{conn3}, nil, nil).Conns @@ -391,9 +378,9 @@ func TestLastStats(t *testing.T) { assert.Equal(t, 2*dSent, conns[0].Last.SentBytes) assert.Equal(t, 2*dRecv, conns[0].Last.RecvBytes) assert.Equal(t, 2*dRetransmits, conns[0].Last.Retransmits) - assert.Equal(t, conn3.Monotonic[0].SentBytes, conns[0].Monotonic[0].SentBytes) - assert.Equal(t, conn3.Monotonic[0].RecvBytes, conns[0].Monotonic[0].RecvBytes) - assert.Equal(t, conn3.Monotonic[0].Retransmits, conns[0].Monotonic[0].Retransmits) + assert.Equal(t, conn3.Monotonic.SentBytes, conns[0].Monotonic.SentBytes) + assert.Equal(t, conn3.Monotonic.RecvBytes, conns[0].Monotonic.RecvBytes) + assert.Equal(t, conn3.Monotonic.Retransmits, conns[0].Monotonic.Retransmits) // client 2 should have conn3 - conn2 conns = state.GetDelta(client2, latestEpochTime(), []ConnectionStats{conn3}, nil, nil).Conns @@ -401,9 +388,9 @@ func TestLastStats(t *testing.T) { assert.Equal(t, dSent, conns[0].Last.SentBytes) assert.Equal(t, dRecv, conns[0].Last.RecvBytes) assert.Equal(t, dRetransmits, conns[0].Last.Retransmits) - assert.Equal(t, conn3.Monotonic[0].SentBytes, conns[0].Monotonic[0].SentBytes) - assert.Equal(t, conn3.Monotonic[0].RecvBytes, conns[0].Monotonic[0].RecvBytes) - assert.Equal(t, conn3.Monotonic[0].Retransmits, conns[0].Monotonic[0].Retransmits) + assert.Equal(t, conn3.Monotonic.SentBytes, conns[0].Monotonic.SentBytes) + assert.Equal(t, conn3.Monotonic.RecvBytes, conns[0].Monotonic.RecvBytes) + assert.Equal(t, conn3.Monotonic.Retransmits, conns[0].Monotonic.Retransmits) } func TestLastStatsForClosedConnection(t *testing.T) { @@ -421,26 +408,20 @@ func TestLastStatsForClosedConnection(t *testing.T) { } conn := ConnectionStats{ - Pid: 123, - Type: TCP, - Family: AFINET, - Source: util.AddressFromString("127.0.0.1"), - Dest: util.AddressFromString("127.0.0.1"), - SPort: 31890, - DPort: 80, - Monotonic: StatCountersByCookie{ - { - Cookie: 0, - StatCounters: m, - }, - }, + Pid: 123, + Type: TCP, + Family: AFINET, + Source: util.AddressFromString("127.0.0.1"), + Dest: util.AddressFromString("127.0.0.1"), + SPort: 31890, + DPort: 80, + Monotonic: m, } - conn2 := conn.clone() - m.SentBytes += dSent - m.RecvBytes += dRecv - m.Retransmits += dRetransmits - conn2.Monotonic.Put(0, m) + conn2 := conn + conn2.Monotonic.SentBytes += dSent + conn2.Monotonic.RecvBytes += dRecv + conn2.Monotonic.Retransmits += dRetransmits state.RegisterClient(clientID) @@ -451,12 +432,12 @@ func TestLastStatsForClosedConnection(t *testing.T) { // We should have one connection with last stats equal to monotonic stats conns = state.GetDelta(clientID, latestEpochTime(), []ConnectionStats{conn}, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, conn.Monotonic[0].SentBytes, conns[0].Last.SentBytes) - assert.Equal(t, conn.Monotonic[0].RecvBytes, conns[0].Last.RecvBytes) - assert.Equal(t, conn.Monotonic[0].Retransmits, conns[0].Last.Retransmits) - assert.Equal(t, conn.Monotonic[0].SentBytes, conns[0].Monotonic[0].SentBytes) - assert.Equal(t, conn.Monotonic[0].RecvBytes, conns[0].Monotonic[0].RecvBytes) - assert.Equal(t, conn.Monotonic[0].Retransmits, conns[0].Monotonic[0].Retransmits) + assert.Equal(t, conn.Monotonic.SentBytes, conns[0].Last.SentBytes) + assert.Equal(t, conn.Monotonic.RecvBytes, conns[0].Last.RecvBytes) + assert.Equal(t, conn.Monotonic.Retransmits, conns[0].Last.Retransmits) + assert.Equal(t, conn.Monotonic.SentBytes, conns[0].Monotonic.SentBytes) + assert.Equal(t, conn.Monotonic.RecvBytes, conns[0].Monotonic.RecvBytes) + assert.Equal(t, conn.Monotonic.Retransmits, conns[0].Monotonic.Retransmits) state.StoreClosedConnections([]ConnectionStats{conn2}) @@ -467,9 +448,9 @@ func TestLastStatsForClosedConnection(t *testing.T) { assert.Equal(t, dSent, conns[0].Last.SentBytes) assert.Equal(t, dRecv, conns[0].Last.RecvBytes) assert.Equal(t, dRetransmits, conns[0].Last.Retransmits) - assert.Equal(t, conn2.Monotonic[0].SentBytes, conns[0].Monotonic[0].SentBytes) - assert.Equal(t, conn2.Monotonic[0].RecvBytes, conns[0].Monotonic[0].RecvBytes) - assert.Equal(t, conn2.Monotonic[0].Retransmits, conns[0].Monotonic[0].Retransmits) + assert.Equal(t, conn2.Monotonic.SentBytes, conns[0].Monotonic.SentBytes) + assert.Equal(t, conn2.Monotonic.RecvBytes, conns[0].Monotonic.RecvBytes) + assert.Equal(t, conn2.Monotonic.Retransmits, conns[0].Monotonic.Retransmits) } func TestRaceConditions(t *testing.T) { @@ -487,14 +468,10 @@ func TestRaceConditions(t *testing.T) { Dest: util.AddressFromString("127.0.0.1"), SPort: uint16(rand.Int()), DPort: uint16(rand.Int()), - Monotonic: StatCountersByCookie{ - { - StatCounters: StatCounters{ - SentBytes: uint64(rand.Int()), - RecvBytes: uint64(rand.Int()), - Retransmits: uint32(rand.Int()), - }, - }, + Monotonic: StatCounters{ + SentBytes: uint64(rand.Int()), + RecvBytes: uint64(rand.Int()), + Retransmits: uint32(rand.Int()), }, }) } @@ -534,17 +511,13 @@ func TestSameKeyEdgeCases(t *testing.T) { client := "c" conn := ConnectionStats{ - Pid: 123, - Type: TCP, - Family: AFINET, - Source: util.AddressFromString("127.0.0.1"), - Dest: util.AddressFromString("127.0.0.1"), - Monotonic: StatCountersByCookie{ - { - Cookie: 1, - StatCounters: StatCounters{SentBytes: 3}, - }, - }, + Pid: 123, + Type: TCP, + Family: AFINET, + Source: util.AddressFromString("127.0.0.1"), + Dest: util.AddressFromString("127.0.0.1"), + Monotonic: StatCounters{SentBytes: 3}, + Cookie: 1, } t.Run("ShortlivedConnection", func(t *testing.T) { @@ -574,8 +547,11 @@ func TestSameKeyEdgeCases(t *testing.T) { // Second get, we should have monotonic and last stats = 3 conns = state.GetDelta(client, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 3, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 3, int(conns[0].Last.SentBytes)) + + // should not hold on to closed connection stats + assert.Empty(t, state.clients["c"].stats) }) t.Run("TwoShortlivedConnections", func(t *testing.T) { @@ -589,7 +565,7 @@ func TestSameKeyEdgeCases(t *testing.T) { // We expect: // c0: Nothing - // c1: Monotonic: 8 bytes, Last seenL 8 bytes + // c1: Monotonic: 8 bytes, Last seen 8 bytes state := newDefaultState() @@ -600,13 +576,12 @@ func TestSameKeyEdgeCases(t *testing.T) { conns := state.GetDelta(client, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 0, len(conns)) - conn := conn.clone() // Store the connection as closed state.StoreClosedConnections([]ConnectionStats{conn}) conn2 := conn - conn2.Monotonic = make(StatCountersByCookie, 0) - conn2.Monotonic.Put(2, StatCounters{SentBytes: 5}) + conn2.Cookie = 2 + conn2.Monotonic = StatCounters{SentBytes: 5} conn2.LastUpdateEpoch++ // Store the connection another time state.StoreClosedConnections([]ConnectionStats{conn2}) @@ -614,8 +589,11 @@ func TestSameKeyEdgeCases(t *testing.T) { // Second get, we should have monotonic and last stats = 8 conns = state.GetDelta(client, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 8, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 8, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 8, int(conns[0].Last.SentBytes)) + + // should not hold on to closed connection stats + assert.Empty(t, state.clients["c"].stats) }) t.Run("TwoShortlivedConnectionsCrossing-1", func(t *testing.T) { @@ -650,35 +628,38 @@ func TestSameKeyEdgeCases(t *testing.T) { Dest: util.AddressFromString("127.0.0.1"), SPort: 9000, DPort: 1234, - Monotonic: StatCountersByCookie{{Cookie: 1, StatCounters: StatCounters{SentBytes: 1}}}, + Monotonic: StatCounters{SentBytes: 1}, + Cookie: 1, } // Simulate this connection starting conns = state.GetDelta(client, latestEpochTime(), []ConnectionStats{conn}, nil, nil).Conns require.Len(t, conns, 1) assert.EqualValues(t, 1, conns[0].Last.SentBytes) - assert.EqualValues(t, 1, conns[0].MonotonicSum().SentBytes) + assert.EqualValues(t, 1, conns[0].Monotonic.SentBytes) + + // should not hold on to closed connection stats + assert.Len(t, state.clients["c"].stats, 1) // Store the connection as closed - m, _ := conn.Monotonic.Get(1) - m.SentBytes++ - conn.Monotonic.Put(1, m) + conn.Monotonic.SentBytes++ conn.LastUpdateEpoch = latestEpochTime() state.StoreClosedConnections([]ConnectionStats{conn}) conn2 := conn - conn2.Monotonic = make(StatCountersByCookie, 0) - m.SentBytes = 1 - conn2.Monotonic.Put(2, m) + conn2.Monotonic.SentBytes = 1 + conn2.Cookie = 2 conn2.LastUpdateEpoch = latestEpochTime() // Retrieve the connections conns = state.GetDelta(client, latestEpochTime(), []ConnectionStats{conn2}, nil, nil).Conns - require.Len(t, conns, 1) - assert.EqualValues(t, uint64(2), conns[0].Last.SentBytes) - assert.EqualValues(t, uint64(3), conns[0].MonotonicSum().SentBytes) - - m.SentBytes++ - conn2.Monotonic.Put(2, m) + require.Len(t, conns, 2) + assert.EqualValues(t, uint64(1), conns[0].Last.SentBytes) + assert.EqualValues(t, uint64(2), conns[0].Monotonic.SentBytes) + // should not hold on to active connection stats + assert.Len(t, state.clients["c"].stats, 1) + assert.Contains(t, state.clients["c"].stats, conn2.Cookie) + + conn2.Monotonic.SentBytes++ conn.LastUpdateEpoch = latestEpochTime() // Store the connection as closed state.StoreClosedConnections([]ConnectionStats{conn2}) @@ -686,7 +667,9 @@ func TestSameKeyEdgeCases(t *testing.T) { conns = state.GetDelta(client, latestEpochTime(), nil, nil, nil).Conns require.Len(t, conns, 1) assert.EqualValues(t, 1, conns[0].Last.SentBytes) - assert.EqualValues(t, 2, conns[0].MonotonicSum().SentBytes) + assert.EqualValues(t, 2, conns[0].Monotonic.SentBytes) + // should not hold on to closed connection stats + assert.Len(t, state.clients["c"].stats, 0) }) t.Run("TwoShortlivedConnectionsCrossing-2", func(t *testing.T) { @@ -713,54 +696,61 @@ func TestSameKeyEdgeCases(t *testing.T) { conns := state.GetDelta(client, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 0, len(conns)) - conn := conn.clone() // Store the connection as closed state.StoreClosedConnections([]ConnectionStats{conn}) - m := StatCounters{SentBytes: 2} conn2 := conn - conn2.Monotonic = make(StatCountersByCookie, 0) - conn2.Monotonic.Put(2, m) + conn2.Cookie = 2 + conn2.Monotonic = StatCounters{SentBytes: 2} conn2.LastUpdateEpoch++ // Store the connection as an opened connection cs := []ConnectionStats{conn2} // Second get, we should have monotonic and last stats = 5 conns = state.GetDelta(client, latestEpochTime(), cs, nil, nil).Conns - require.Equal(t, 1, len(conns)) - assert.Equal(t, 5, int(conns[0].MonotonicSum().SentBytes)) - assert.Equal(t, 5, int(conns[0].Last.SentBytes)) + require.Equal(t, 2, len(conns)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) + assert.Equal(t, 3, int(conns[0].Last.SentBytes)) + assert.Equal(t, 2, int(conns[1].Monotonic.SentBytes)) + assert.Equal(t, 2, int(conns[1].Last.SentBytes)) + // should not hold on to closed connection stats + assert.Len(t, state.clients["c"].stats, 1) + assert.Contains(t, state.clients["c"].stats, conn2.Cookie) // Store the connection as closed - m.SentBytes += 3 - conn2.Monotonic.Put(2, m) + conn2.Monotonic.SentBytes += 3 conn2.LastUpdateEpoch++ state.StoreClosedConnections([]ConnectionStats{conn2}) // Store the connection again - conn3 := conn2.clone() - conn3.Monotonic = make(StatCountersByCookie, 0) - m.SentBytes = 1 - conn3.Monotonic.Put(3, m) + conn3 := conn2 + conn3.Monotonic.SentBytes = 1 + conn3.Cookie = 3 conn3.LastUpdateEpoch++ cs = []ConnectionStats{conn3} // Third get, we should have monotonic = 6 and last stats = 4 conns = state.GetDelta(client, latestEpochTime(), cs, nil, nil).Conns - assert.Equal(t, 1, len(conns)) - assert.Equal(t, 6, int(conns[0].MonotonicSum().SentBytes)) - assert.Equal(t, 4, int(conns[0].Last.SentBytes)) + assert.Equal(t, 2, len(conns)) + assert.Equal(t, 5, int(conns[0].Monotonic.SentBytes)) + assert.Equal(t, 3, int(conns[0].Last.SentBytes)) + assert.Equal(t, 1, int(conns[1].Monotonic.SentBytes)) + assert.Equal(t, 1, int(conns[1].Last.SentBytes)) + // should not hold on to closed connection stats + assert.Len(t, state.clients["c"].stats, 1) + assert.Contains(t, state.clients["c"].stats, conn3.Cookie) // Store the connection as closed - m.SentBytes += 2 - conn3.Monotonic.Put(3, m) + conn3.Monotonic.SentBytes += 2 state.StoreClosedConnections([]ConnectionStats{conn3}) // 4th get, we should have monotonic = 3 and last stats = 2 conns = state.GetDelta(client, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 3, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 2, int(conns[0].Last.SentBytes)) + // should not hold on to closed connection stats + assert.Empty(t, state.clients["c"].stats) }) t.Run("ConnectionCrossing", func(t *testing.T) { @@ -785,25 +775,28 @@ func TestSameKeyEdgeCases(t *testing.T) { conns := state.GetDelta(client, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 0, len(conns)) - conn := conn.clone() // Store the connection as opened cs := []ConnectionStats{conn} // First get, we should have monotonic = 3 and last seen = 3 conns = state.GetDelta(client, latestEpochTime(), cs, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 3, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 3, int(conns[0].Last.SentBytes)) + assert.Len(t, state.clients["c"].stats, 1) + assert.Contains(t, state.clients["c"].stats, conn.Cookie) // Store the connection as closed - conn.Monotonic.Put(1, StatCounters{SentBytes: 8}) - state.StoreClosedConnections([]ConnectionStats{conn}) + conn2 := conn + conn2.Monotonic = StatCounters{SentBytes: 8} + state.StoreClosedConnections([]ConnectionStats{conn2}) // Second get, we should have monotonic = 8 and last stats = 5 conns = state.GetDelta(client, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 8, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 8, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 5, int(conns[0].Last.SentBytes)) + assert.Empty(t, state.clients["c"].stats) }) t.Run("TwoShortlivedConnectionsCrossingWithTwoClients", func(t *testing.T) { @@ -851,91 +844,100 @@ func TestSameKeyEdgeCases(t *testing.T) { assert.Equal(t, 0, len(conns)) // Store the connection as closed - conn := conn.clone() state.StoreClosedConnections([]ConnectionStats{conn}) // Second get for client d we should have monotonic and last stats = 3 conns = state.GetDelta(clientD, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 3, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 3, int(conns[0].Last.SentBytes)) + assert.Empty(t, state.clients["d"].stats) // Store the connection as an opened connection conn2 := conn - conn2.Monotonic = make(StatCountersByCookie, 0) - m, _ := conn2.Monotonic.Get(2) - m.SentBytes = 2 - conn2.Monotonic.Put(2, m) + conn2.Monotonic.SentBytes = 2 + conn2.Cookie = 2 conn2.LastUpdateEpoch++ cs := []ConnectionStats{conn2} // Second get, for client c we should have monotonic and last stats = 5 conns = state.GetDelta(client, latestEpochTime(), cs, nil, nil).Conns - assert.Equal(t, 1, len(conns)) - assert.Equal(t, 5, int(conns[0].MonotonicSum().SentBytes)) - assert.Equal(t, 5, int(conns[0].Last.SentBytes)) + assert.Equal(t, 2, len(conns)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) + assert.Equal(t, 3, int(conns[0].Last.SentBytes)) + assert.Equal(t, 2, int(conns[1].Monotonic.SentBytes)) + assert.Equal(t, 2, int(conns[1].Last.SentBytes)) + assert.Len(t, state.clients["c"].stats, 1) + assert.Contains(t, state.clients["c"].stats, conn2.Cookie) // Store the connection as an opened connection - m.SentBytes++ - conn2.Monotonic.Put(2, m) + conn2.Monotonic.SentBytes++ conn2.LastUpdateEpoch++ cs = []ConnectionStats{conn2} // Third get, for client d we should have monotonic = 3 and last stats = 3 conns = state.GetDelta(clientD, latestEpochTime(), cs, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 3, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 3, int(conns[0].Last.SentBytes)) + assert.Len(t, state.clients["d"].stats, 1) + assert.Contains(t, state.clients["d"].stats, conn2.Cookie) // Store the connection as closed - m.SentBytes += 2 - conn2.Monotonic.Put(2, m) + conn2.Monotonic.SentBytes += 2 conn2.LastUpdateEpoch++ state.StoreClosedConnections([]ConnectionStats{conn2}) // Store the connection again conn3 := conn2 - conn3.Monotonic = make(StatCountersByCookie, 0) - m.SentBytes = 1 - conn3.Monotonic.Put(3, m) + conn3.Monotonic.SentBytes = 1 + conn3.Cookie = 3 conn3.LastUpdateEpoch++ cs = []ConnectionStats{conn3} // Third get, for client c, we should have monotonic = 6 and last stats = 4 conns = state.GetDelta(client, latestEpochTime(), cs, nil, nil).Conns - assert.Equal(t, 1, len(conns)) - assert.Equal(t, 6, int(conns[0].MonotonicSum().SentBytes)) - assert.Equal(t, 4, int(conns[0].Last.SentBytes)) + assert.Equal(t, 2, len(conns)) + assert.Equal(t, 5, int(conns[0].Monotonic.SentBytes)) + assert.Equal(t, 3, int(conns[0].Last.SentBytes)) + assert.Equal(t, 1, int(conns[1].Monotonic.SentBytes)) + assert.Equal(t, 1, int(conns[1].Last.SentBytes)) + assert.Len(t, state.clients["c"].stats, 1) + assert.Contains(t, state.clients["c"].stats, conn3.Cookie) // Store the connection again - m.SentBytes++ - conn3.Monotonic.Put(3, m) + conn3.Monotonic.SentBytes++ conn3.LastUpdateEpoch++ cs = []ConnectionStats{conn3} // 4th get, for client d, we should have monotonic = 7 and last stats = 4 conns = state.GetDelta(clientD, latestEpochTime(), cs, nil, nil).Conns - assert.Equal(t, 1, len(conns)) - assert.Equal(t, 7, int(conns[0].MonotonicSum().SentBytes)) - assert.Equal(t, 4, int(conns[0].Last.SentBytes)) + assert.Equal(t, 2, len(conns)) + assert.Equal(t, 5, int(conns[0].Monotonic.SentBytes)) + assert.Equal(t, 2, int(conns[0].Last.SentBytes)) + assert.Equal(t, 2, int(conns[1].Monotonic.SentBytes)) + assert.Equal(t, 2, int(conns[1].Last.SentBytes)) + assert.Len(t, state.clients["d"].stats, 1) + assert.Contains(t, state.clients["d"].stats, conn3.Cookie) // Store the connection as closed - m.SentBytes++ - conn3.Monotonic.Put(3, m) + conn3.Monotonic.SentBytes++ conn3.LastUpdateEpoch++ state.StoreClosedConnections([]ConnectionStats{conn3}) // 4th get, for client c we should have monotonic = 3 and last stats = 2 conns = state.GetDelta(client, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 3, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 2, int(conns[0].Last.SentBytes)) + assert.Empty(t, state.clients["c"].stats) // 5th get, for client d we should have monotonic = 3 and last stats = 1 conns = state.GetDelta(clientD, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 3, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 1, int(conns[0].Last.SentBytes)) + assert.Empty(t, state.clients["d"].stats) }) t.Run("ShortlivedConnectionCrossingWithThreeClients", func(t *testing.T) { @@ -997,74 +999,78 @@ func TestSameKeyEdgeCases(t *testing.T) { assert.Equal(t, 0, len(conns)) // Store the connection - conn := conn.clone() - m, _ := conn.Monotonic.Get(1) - m.SentBytes = 2 - conn.Monotonic.Put(1, m) + conn.Monotonic.SentBytes = 2 conn.LastUpdateEpoch++ cs := []ConnectionStats{conn} // Second get for client e we should have monotonic and last stats = 2 conns = state.GetDelta(clientE, latestEpochTime(), cs, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 2, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 2, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 2, int(conns[0].Last.SentBytes)) + assert.Len(t, state.clients["e"].stats, 1) + assert.Contains(t, state.clients["e"].stats, conn.Cookie) // Store the connection as closed - m.SentBytes++ - conn.Monotonic.Put(1, m) + conn.Monotonic.SentBytes++ conn.LastUpdateEpoch++ state.StoreClosedConnections([]ConnectionStats{conn}) // Second get for client d we should have monotonic and last stats = 3 conns = state.GetDelta(clientD, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 3, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 3, int(conns[0].Last.SentBytes)) + assert.Empty(t, state.clients["d"].stats) // Third get for client e we should have monotonic = 3and last stats = 1 conns = state.GetDelta(clientE, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 3, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 1, int(conns[0].Last.SentBytes)) + assert.Empty(t, state.clients["e"].stats) // Store the connection as an opened connection conn2 := conn - conn2.Monotonic = make(StatCountersByCookie, 0) - m.SentBytes = 2 - conn2.Monotonic.Put(2, m) + conn2.Monotonic.SentBytes = 2 + conn2.Cookie = 2 conn2.LastUpdateEpoch++ cs = []ConnectionStats{conn2} // Second get, for client c we should have monotonic and last stats = 5 conns = state.GetDelta(client, latestEpochTime(), cs, nil, nil).Conns - assert.Equal(t, 1, len(conns)) - assert.Equal(t, 5, int(conns[0].MonotonicSum().SentBytes)) - assert.Equal(t, 5, int(conns[0].Last.SentBytes)) + assert.Equal(t, 2, len(conns)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) + assert.Equal(t, 3, int(conns[0].Last.SentBytes)) + assert.Equal(t, 2, int(conns[1].Monotonic.SentBytes)) + assert.Equal(t, 2, int(conns[1].Last.SentBytes)) + assert.Len(t, state.clients["c"].stats, 1) + assert.Contains(t, state.clients["c"].stats, conn2.Cookie) // Store the connection as an opened connection - m.SentBytes++ - conn2.Monotonic.Put(2, m) + conn2.Monotonic.SentBytes++ conn2.LastUpdateEpoch++ cs = []ConnectionStats{conn2} // Third get, for client d we should have monotonic = 3 and last stats = 3 conns = state.GetDelta(clientD, latestEpochTime(), cs, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 3, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 3, int(conns[0].Last.SentBytes)) + assert.Len(t, state.clients["d"].stats, 1) + assert.Contains(t, state.clients["d"].stats, conn2.Cookie) // Store the connection as closed - m.SentBytes += 2 - conn2.Monotonic.Put(2, m) + conn2.Monotonic.SentBytes += 2 conn2.LastUpdateEpoch++ state.StoreClosedConnections([]ConnectionStats{conn2}) // 4th get, for client e we should have monotonic = 5 and last stats = 5 conns = state.GetDelta(clientE, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 1, len(conns)) - assert.Equal(t, 5, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 5, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 5, int(conns[0].Last.SentBytes)) + assert.Empty(t, state.clients["e"].stats) }) t.Run("LonglivedConnectionWithTwoClientsJoiningAtDifferentTimes", func(t *testing.T) { @@ -1100,46 +1106,49 @@ func TestSameKeyEdgeCases(t *testing.T) { conns := state.GetDelta(client, latestEpochTime(), nil, nil, nil).Conns assert.Equal(t, 0, len(conns)) - conn := conn.clone() // Second get for client c we should have monotonic and last stats = 3 conns = state.GetDelta(client, latestEpochTime(), []ConnectionStats{conn}, nil, nil).Conns assert.Len(t, conns, 1) - assert.Equal(t, 3, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 3, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 3, int(conns[0].Last.SentBytes)) + assert.Len(t, state.clients["c"].stats, 1) + assert.Contains(t, state.clients["c"].stats, conn.Cookie) conn2 := conn - m, _ := conn.Monotonic.Get(1) - m.SentBytes++ - conn.Monotonic.Put(1, m) + conn2.Monotonic.SentBytes++ conn2.LastUpdateEpoch++ // First get for client d we should have monotonic = 4 and last bytes = 4 conns = state.GetDelta(clientD, latestEpochTime(), []ConnectionStats{conn2}, nil, nil).Conns assert.Len(t, conns, 1) - assert.Equal(t, 4, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 4, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 4, int(conns[0].Last.SentBytes)) + assert.Len(t, state.clients["d"].stats, 1) + assert.Contains(t, state.clients["d"].stats, conn2.Cookie) conn3 := conn2 - m.SentBytes += 3 - conn3.Monotonic.Put(1, m) + conn3.Monotonic.SentBytes += 3 conn3.LastUpdateEpoch++ // Third get for client c we should have monotonic = 7 and last bytes = 4 conns = state.GetDelta(client, latestEpochTime(), []ConnectionStats{conn3}, nil, nil).Conns assert.Len(t, conns, 1) - assert.Equal(t, 7, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 7, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 4, int(conns[0].Last.SentBytes)) + assert.Len(t, state.clients["c"].stats, 1) + assert.Contains(t, state.clients["c"].stats, conn3.Cookie) conn4 := conn3 - m.SentBytes += 2 - conn4.Monotonic.Put(1, m) + conn4.Monotonic.SentBytes += 2 conn4.LastUpdateEpoch++ // Second get for client d we should have monotonic = 9 and last bytes = 5 conns = state.GetDelta(clientD, latestEpochTime(), []ConnectionStats{conn4}, nil, nil).Conns assert.Len(t, conns, 1) - assert.Equal(t, 9, int(conns[0].MonotonicSum().SentBytes)) + assert.Equal(t, 9, int(conns[0].Monotonic.SentBytes)) assert.Equal(t, 5, int(conns[0].Last.SentBytes)) + assert.Len(t, state.clients["c"].stats, 1) + assert.Contains(t, state.clients["c"].stats, conn4.Cookie) }) } @@ -1150,7 +1159,7 @@ func TestStatsResetOnUnderflow(t *testing.T) { Family: AFINET, Source: util.AddressFromString("127.0.0.1"), Dest: util.AddressFromString("127.0.0.1"), - Monotonic: StatCountersByCookie{{Cookie: 0, StatCounters: StatCounters{SentBytes: 3}}}, + Monotonic: StatCounters{SentBytes: 3}, IntraHost: true, } @@ -1170,17 +1179,10 @@ func TestStatsResetOnUnderflow(t *testing.T) { assert.Equal(t, conn, conns[0]) // Get the connections again but by simulating an underflow - m := conn.Monotonic[0] - m.SentBytes-- - conn.Monotonic.Put(0, m.StatCounters) - conn.Monotonic.Put(1, StatCounters{SentBytes: 1}) + conn.Monotonic.SentBytes-- conns = state.GetDelta(client, latestEpochTime(), []ConnectionStats{conn}, nil, nil).Conns - require.Len(t, conns, 1) - expected := conn - expected.Last.SentBytes = 1 - // We expect the LastStats to be 0 - assert.Equal(t, expected, conns[0]) + require.Len(t, conns, 0) // dropped because last stats are zero } func TestDoubleCloseOnTwoClients(t *testing.T) { @@ -1190,19 +1192,11 @@ func TestDoubleCloseOnTwoClients(t *testing.T) { Family: AFINET, Source: util.AddressFromString("127.0.0.1"), Dest: util.AddressFromString("127.0.0.1"), - Monotonic: StatCountersByCookie{{StatCounters: StatCounters{SentBytes: 3}}}, - Last: StatCounters{ - SentBytes: 3, - }, + Monotonic: StatCounters{SentBytes: 3}, + Last: StatCounters{SentBytes: 3}, IntraHost: true, } - expectedConn := conn - m := expectedConn.Monotonic[0] - m.SentBytes *= 2 - expectedConn.Monotonic.Put(0, m.StatCounters) - expectedConn.Last.SentBytes *= 2 - client1 := "1" client2 := "2" @@ -1217,16 +1211,15 @@ func TestDoubleCloseOnTwoClients(t *testing.T) { conn.LastUpdateEpoch++ state.StoreClosedConnections([]ConnectionStats{conn}) - expectedConn.LastUpdateEpoch = conn.LastUpdateEpoch - // Get the connections for client1 we should have only one with stats = 2*conn + // Get the connections for client1 we should have only one with stats counted only once conns := state.GetDelta(client1, latestEpochTime(), nil, nil, nil).Conns require.Len(t, conns, 1) - assert.Equal(t, expectedConn, conns[0]) + assert.Equal(t, conn, conns[0]) // Same for client2 conns = state.GetDelta(client2, latestEpochTime(), nil, nil, nil).Conns require.Len(t, conns, 1) - assert.Equal(t, expectedConn, conns[0]) + assert.Equal(t, conn, conns[0]) } func TestUnorderedCloseEvent(t *testing.T) { @@ -1236,7 +1229,7 @@ func TestUnorderedCloseEvent(t *testing.T) { Family: AFINET, Source: util.AddressFromString("127.0.0.1"), Dest: util.AddressFromString("127.0.0.1"), - Monotonic: StatCountersByCookie{{StatCounters: StatCounters{SentBytes: 3}}}, + Monotonic: StatCounters{SentBytes: 3}, } client := "client" @@ -1248,17 +1241,13 @@ func TestUnorderedCloseEvent(t *testing.T) { // Simulate storing a closed connection while we were reading from the eBPF map // in this case the closed conn will have an earlier epoch conn.LastUpdateEpoch = latestEpochTime() + 1 - m, _ := conn.Monotonic.Get(0) - m.SentBytes++ - m.RecvBytes = 1 - conn.Monotonic.Put(0, m) + conn.Monotonic.SentBytes++ + conn.Monotonic.RecvBytes = 1 state.StoreClosedConnections([]ConnectionStats{conn}) conn.LastUpdateEpoch-- - m.SentBytes-- - m.RecvBytes = 0 - conn.Monotonic = make(StatCountersByCookie, 0) - conn.Monotonic.Put(0, m) + conn.Monotonic.SentBytes-- + conn.Monotonic.RecvBytes = 0 conns := state.GetDelta(client, latestEpochTime(), []ConnectionStats{conn}, nil, nil).Conns require.Len(t, conns, 1) assert.EqualValues(t, 4, conns[0].Last.SentBytes) @@ -1271,8 +1260,7 @@ func TestUnorderedCloseEvent(t *testing.T) { // Simulate having the connection getting active again conn.LastUpdateEpoch = latestEpochTime() - m.SentBytes-- - conn.Monotonic.Put(0, m) + conn.Monotonic.SentBytes-- state.StoreClosedConnections([]ConnectionStats{conn}) conns = state.GetDelta(client, latestEpochTime(), nil, nil, nil).Conns @@ -1281,7 +1269,7 @@ func TestUnorderedCloseEvent(t *testing.T) { assert.EqualValues(t, 0, conns[0].Last.RecvBytes) // Ensure we don't have underflows / unordered conns - assert.Zero(t, state.(*networkState).telemetry.statsUnderflows) + assert.Zero(t, state.telemetry.statsUnderflows) assert.Len(t, state.GetDelta(client, latestEpochTime(), nil, nil, nil).Conns, 0) } @@ -1293,7 +1281,7 @@ func TestAggregateClosedConnectionsTimestamp(t *testing.T) { Family: AFINET, Source: util.AddressFromString("127.0.0.1"), Dest: util.AddressFromString("127.0.0.1"), - Monotonic: StatCountersByCookie{{StatCounters: StatCounters{SentBytes: 3}}}, + Monotonic: StatCounters{SentBytes: 3}, } client := "client" @@ -1368,7 +1356,8 @@ func TestDNSStatsWithMultipleClients(t *testing.T) { assert.Len(t, state.GetDelta(client1, latestEpochTime(), nil, nil, nil).Conns, 0) assert.Len(t, state.GetDelta(client2, latestEpochTime(), nil, nil, nil).Conns, 0) - c.Monotonic.Put(1, StatCounters{SentBytes: 100, RecvBytes: 200}) + c.Monotonic = StatCounters{SentBytes: 100, RecvBytes: 200} + c.Cookie = 1 c.LastUpdateEpoch = latestEpochTime() delta := state.GetDelta(client1, latestEpochTime(), []ConnectionStats{c}, getStats(), nil) @@ -1641,7 +1630,7 @@ func TestDetermineConnectionIntraHost(t *testing.T) { for _, te := range tests { conns = append(conns, te.conn) } - state := newDefaultState().(*networkState) + state := newDefaultState() state.determineConnectionIntraHost(conns) for i, te := range tests { if i >= len(conns) { @@ -1660,7 +1649,7 @@ func TestDetermineConnectionIntraHost(t *testing.T) { } } -func TestClosedMergingWithAddressColision(t *testing.T) { +func TestClosedMergingWithAddressCollision(t *testing.T) { const client = "foo" c1 := ConnectionStats{ @@ -1671,14 +1660,10 @@ func TestClosedMergingWithAddressColision(t *testing.T) { Dest: util.AddressFromString("127.0.0.1"), SPort: 1000, DPort: 8080, - Monotonic: StatCountersByCookie{ - { - StatCounters: StatCounters{ - SentBytes: 100, - }, - Cookie: 1, - }, + Monotonic: StatCounters{ + SentBytes: 100, }, + Cookie: 1, IPTranslation: &IPTranslation{ ReplSrcIP: util.AddressFromString("1.1.1.1"), ReplDstIP: util.AddressFromString("2.2.2.2"), @@ -1694,14 +1679,10 @@ func TestClosedMergingWithAddressColision(t *testing.T) { Dest: util.AddressFromString("127.0.0.1"), SPort: 1000, DPort: 8080, - Monotonic: StatCountersByCookie{ - { - StatCounters: StatCounters{ - SentBytes: 150, - }, - Cookie: 2, - }, + Monotonic: StatCounters{ + SentBytes: 150, }, + Cookie: 2, IPTranslation: &IPTranslation{ ReplSrcIP: util.AddressFromString("3.3.3.3"), ReplDstIP: util.AddressFromString("4.4.4.4"), @@ -1733,14 +1714,10 @@ func TestClosedMergingWithAddressColision(t *testing.T) { Dest: util.AddressFromString("127.0.0.1"), SPort: 1000, DPort: 8080, - Monotonic: StatCountersByCookie{ - { - StatCounters: StatCounters{ - SentBytes: 150, - }, - Cookie: 3, - }, + Monotonic: StatCounters{ + SentBytes: 150, }, + Cookie: 1, IPTranslation: &IPTranslation{ ReplSrcIP: util.AddressFromString("5.5.5.5"), ReplDstIP: util.AddressFromString("6.6.6.6"), @@ -1760,7 +1737,7 @@ func TestClosedMergingWithAddressColision(t *testing.T) { // assert c1 is present for _, c := range connections { if c.IPTranslation != nil && c.IPTranslation.ReplSrcIP == util.AddressFromString("1.1.1.1") { - return c.Last.SentBytes == 250 // 100 + 150, c1 + active + return c.Last.SentBytes == 150 // max(c1, active) } } return false @@ -1789,7 +1766,7 @@ func TestClosedMergingWithAddressColision(t *testing.T) { // once we find a way to reliably get the NAT translation the *first* // time a connection is seen _ = state.GetDelta(client, latestEpochTime(), []ConnectionStats{c1}, nil, nil) - c2.Monotonic[0].Cookie = c1.Monotonic[0].Cookie + c2.Cookie = c1.Cookie state.StoreClosedConnections([]ConnectionStats{c2}) // assert that the value returned by the second call to `GetDelta` represents c2 - c1 @@ -1811,14 +1788,10 @@ func generateRandConnections(n int) []ConnectionStats { Dest: util.AddressFromString("127.0.0.1"), SPort: uint16(rand.Intn(math.MaxUint16)), DPort: uint16(rand.Intn(math.MaxUint16)), - Monotonic: StatCountersByCookie{ - { - StatCounters: StatCounters{ - RecvBytes: rand.Uint64(), - SentBytes: rand.Uint64(), - Retransmits: rand.Uint32(), - }, - }, + Monotonic: StatCounters{ + RecvBytes: rand.Uint64(), + SentBytes: rand.Uint64(), + Retransmits: rand.Uint32(), }, }) } @@ -1831,9 +1804,9 @@ func latestEpochTime() uint64 { return latestTime.Inc() } -func newDefaultState() State { +func newDefaultState() *networkState { // Using values from ebpf.NewConfig() - return NewState(2*time.Minute, 50000, 75000, 75000, 7500) + return NewState(2*time.Minute, 50000, 75000, 75000, 7500).(*networkState) } func getIPProtocol(nt ConnectionType) uint8 { diff --git a/pkg/network/tracer/connection/kprobe/tracer.go b/pkg/network/tracer/connection/kprobe/tracer.go index 4cae934891e86..3465e70dc02c2 100644 --- a/pkg/network/tracer/connection/kprobe/tracer.go +++ b/pkg/network/tracer/connection/kprobe/tracer.go @@ -181,6 +181,15 @@ func New(config *config.Config, constants []manager.ConstantEditor, bpfTelemetry if err != nil { return nil, fmt.Errorf("error enabling protocol classifier: %s", err) } + } else { + // Kernels < 4.7.0 do not know about the per-cpu array map used + // in classification, preventing the program to load even though + // we won't use it. We change the type to a simple array map to + // circumvent that. + mgrOptions.MapSpecEditors[string(probes.ProtocolClassificationBufMap)] = manager.MapSpecEditor{ + Type: ebpf.Array, + EditorFlag: manager.EditType, + } } currKernelVersion, err := kernel.HostVersion() @@ -451,6 +460,7 @@ func (t *kprobeTracer) GetTelemetry() map[string]int64 { "closed_conn_polling_received": closeStats[perfReceivedStat], "pid_collisions": pidCollisions, + "tcp_failed_connects": int64(telemetry.Tcp_failed_connect), "tcp_sent_miscounts": int64(telemetry.Tcp_sent_miscounts), "missed_tcp_close": int64(telemetry.Missed_tcp_close), "missed_udp_close": int64(telemetry.Missed_udp_close), @@ -516,11 +526,9 @@ func updateTCPStats(conn *network.ConnectionStats, cookie uint32, tcpStats *nete return } - m, _ := conn.Monotonic.Get(cookie) - m.Retransmits = tcpStats.Retransmits - m.TCPEstablished = uint32(tcpStats.State_transitions >> netebpf.Established & 1) - m.TCPClosed = uint32(tcpStats.State_transitions >> netebpf.Close & 1) - conn.Monotonic.Put(cookie, m) + conn.Monotonic.Retransmits = tcpStats.Retransmits + conn.Monotonic.TCPEstablished = uint32(tcpStats.State_transitions >> netebpf.Established & 1) + conn.Monotonic.TCPClosed = uint32(tcpStats.State_transitions >> netebpf.Close & 1) conn.RTT = tcpStats.Rtt conn.RTTVar = tcpStats.Rtt_var } @@ -561,23 +569,23 @@ func populateConnStats(stats *network.ConnectionStats, t *netebpf.ConnTuple, s * SPort: t.Sport, DPort: t.Dport, SPortIsEphemeral: network.IsPortInEphemeralRange(t.Sport), - Monotonic: make(network.StatCountersByCookie, 0, 3), LastUpdateEpoch: s.Timestamp, IsAssured: s.IsAssured(), + Cookie: s.Cookie, } - if s.Protocol < uint8(network.MaxProtocols) { + if network.IsValidProtocolValue(s.Protocol) { stats.Protocol = network.ProtocolType(s.Protocol) } else { log.Warnf("got protocol %d which is not recognized by the agent", s.Protocol) } - stats.Monotonic.Put(s.Cookie, network.StatCounters{ + stats.Monotonic = network.StatCounters{ SentBytes: s.Sent_bytes, RecvBytes: s.Recv_bytes, SentPackets: s.Sent_packets, RecvPackets: s.Recv_packets, - }) + } if t.Type() == netebpf.TCP { stats.Type = network.TCP diff --git a/pkg/network/tracer/tracer.go b/pkg/network/tracer/tracer.go index c63c56f0a1a2a..24fd2122a1e18 100644 --- a/pkg/network/tracer/tracer.go +++ b/pkg/network/tracer/tracer.go @@ -78,9 +78,6 @@ type Tracer struct { activeBuffer *network.ConnectionBuffer bufferLock sync.Mutex - // Internal buffer used to compute bytekeys - buf []byte - // Connections for the tracer to exclude sourceExcludes []*network.ConnectionFilter destExcludes []*network.ConnectionFilter @@ -180,7 +177,6 @@ func NewTracer(config *config.Config) (*Tracer, error) { conntracker: conntracker, sourceExcludes: network.ParseConnectionFilters(config.ExcludedSourceConnections), destExcludes: network.ParseConnectionFilters(config.ExcludedDestinationConnections), - buf: make([]byte, network.ConnectionByteKeyMaxLen), sysctlUDPConnTimeout: sysctl.NewInt(config.ProcRoot, "net/netfilter/nf_conntrack_udp_timeout", time.Minute), sysctlUDPConnStreamTimeout: sysctl.NewInt(config.ProcRoot, "net/netfilter/nf_conntrack_udp_timeout_stream", time.Minute), gwLookup: gwLookup, diff --git a/pkg/network/tracer/tracer_classification_test.go b/pkg/network/tracer/tracer_classification_test.go index 41584941d2f01..e0db00952035b 100644 --- a/pkg/network/tracer/tracer_classification_test.go +++ b/pkg/network/tracer/tracer_classification_test.go @@ -15,21 +15,49 @@ import ( "io" "net" nethttp "net/http" + "runtime" "testing" "time" + redis2 "github.com/go-redis/redis/v9" + "github.com/stretchr/testify/require" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "github.com/DataDog/datadog-agent/pkg/network" "github.com/DataDog/datadog-agent/pkg/network/config" + "github.com/DataDog/datadog-agent/pkg/network/protocols/amqp" + protocolsmongo "github.com/DataDog/datadog-agent/pkg/network/protocols/mongo" + "github.com/DataDog/datadog-agent/pkg/network/protocols/redis" "github.com/DataDog/datadog-agent/pkg/network/tracer/testutil/grpc" - "github.com/stretchr/testify/require" ) -func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) { +// testContext shares the context of a given test. +// It contains common variable used by all tests, and allows extending the context dynamically by setting more +// attributes to the `extras` map. +type testContext struct { + // The address of the server to listen on. + serverAddress string + serverPort string + // The address for the client to communicate with. + targetAddress string + // optional - A custom dialer to set the ip/port/socket attributes for the client. + clientDialer *net.Dialer + expectedProtocol network.ProtocolType + // A channel to mark goroutines (like servers) to halt. + done chan struct{} + // A dynamic map that allows extending the context easily between phases of the test. + extras map[string]interface{} +} + +func setupTracer(t *testing.T, cfg *config.Config) *Tracer { tr, err := NewTracer(cfg) if err != nil { t.Fatal(err) } - defer tr.Stop() + t.Cleanup(func() { + tr.Stop() + }) initTracerState(t, tr) require.NoError(t, err) @@ -37,7 +65,50 @@ func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, ta // Giving the tracer time to run time.Sleep(time.Second) - dialer := &net.Dialer{ + return tr +} + +func validateProtocolConnection(t *testing.T, ctx testContext, tr *Tracer) { + waitForConnectionsWithProtocol(t, tr, ctx.targetAddress, ctx.serverAddress, ctx.expectedProtocol) +} + +func defaultTeardown(_ *testing.T, ctx testContext) { + close(ctx.done) +} + +// skipIfNotLinux skips the test if we are not on a linux machine +func skipIfNotLinux(ctx testContext) (bool, string) { + if runtime.GOOS != "linux" { + return true, "test is supported on linux machine only" + } + + return false, "" +} + +// skipIfUsingNAT skips the test if we have a NAT rules applied. +func skipIfUsingNAT(ctx testContext) (bool, string) { + if ctx.targetAddress != ctx.serverAddress { + return true, "test is not supported when NAT is applied" + } + + return false, "" +} + +// composeSkips skips if one of the given filters is matched. +func composeSkips(filters ...func(ctx testContext) (bool, string)) func(ctx testContext) (bool, string) { + return func(ctx testContext) (bool, string) { + for _, filter := range filters { + if skip, err := filter(ctx); skip { + return skip, err + } + } + + return false, "" + } +} + +func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) { + defaultDialer := &net.Dialer{ LocalAddr: &net.TCPAddr{ IP: net.ParseIP(clientHost), Port: 0, @@ -45,42 +116,44 @@ func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, ta } tests := []struct { - name string - clientRun func(t *testing.T, serverAddr string) - serverRun func(t *testing.T, serverAddr string, done chan struct{}) string - want network.ProtocolType + name string + context testContext + shouldSkip func(ctx testContext) (bool, string) + preTracerSetup func(t *testing.T, ctx testContext) + postTracerSetup func(t *testing.T, ctx testContext) + validation func(t *testing.T, ctx testContext, tr *Tracer) + teardown func(t *testing.T, ctx testContext) }{ { name: "tcp client without sending data", - clientRun: func(t *testing.T, serverAddr string) { + context: testContext{ + serverPort: "8080", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolUnknown, + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + server := NewTCPServerOnAddress(ctx.serverAddress, func(c net.Conn) { + c.Close() + }) + require.NoError(t, server.Run(ctx.done)) timedContext, cancel := context.WithTimeout(context.Background(), time.Second) - c, err := dialer.DialContext(timedContext, "tcp", serverAddr) + c, err := ctx.clientDialer.DialContext(timedContext, "tcp", ctx.targetAddress) cancel() require.NoError(t, err) defer c.Close() }, - serverRun: func(t *testing.T, serverAddr string, done chan struct{}) string { - server := NewTCPServerOnAddress(serverAddr, func(c net.Conn) { - c.Close() - }) - require.NoError(t, server.Run(done)) - return server.address - }, - want: network.ProtocolUnknown, + teardown: defaultTeardown, + validation: validateProtocolConnection, }, { name: "tcp client with sending random data", - clientRun: func(t *testing.T, serverAddr string) { - timedContext, cancel := context.WithTimeout(context.Background(), time.Second) - c, err := dialer.DialContext(timedContext, "tcp", serverAddr) - cancel() - require.NoError(t, err) - defer c.Close() - c.Write([]byte("hello\n")) - io.ReadAll(c) + context: testContext{ + serverPort: "8080", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolUnknown, }, - serverRun: func(t *testing.T, serverAddr string, done chan struct{}) string { - server := NewTCPServerOnAddress(serverAddr, func(c net.Conn) { + postTracerSetup: func(t *testing.T, ctx testContext) { + server := NewTCPServerOnAddress(ctx.serverAddress, func(c net.Conn) { r := bufio.NewReader(c) input, err := r.ReadBytes(byte('\n')) if err == nil { @@ -88,26 +161,28 @@ func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, ta } c.Close() }) - require.NoError(t, server.Run(done)) - return server.address + require.NoError(t, server.Run(ctx.done)) + + timedContext, cancel := context.WithTimeout(context.Background(), time.Second) + c, err := ctx.clientDialer.DialContext(timedContext, "tcp", ctx.targetAddress) + cancel() + require.NoError(t, err) + defer c.Close() + c.Write([]byte("hello\n")) + io.ReadAll(c) }, - want: network.ProtocolUnknown, + teardown: defaultTeardown, + validation: validateProtocolConnection, }, { name: "tcp client with sending HTTP request", - clientRun: func(t *testing.T, serverAddr string) { - client := nethttp.Client{ - Transport: &nethttp.Transport{ - DialContext: dialer.DialContext, - }, - } - resp, err := client.Get("http://" + serverAddr + "/test") - require.NoError(t, err) - io.Copy(io.Discard, resp.Body) - resp.Body.Close() + context: testContext{ + serverPort: "8080", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolHTTP, }, - serverRun: func(t *testing.T, serverAddr string, done chan struct{}) string { - ln, err := net.Listen("tcp", serverAddr) + postTracerSetup: func(t *testing.T, ctx testContext) { + ln, err := net.Listen("tcp", ctx.serverAddress) require.NoError(t, err) srv := &nethttp.Server{ @@ -124,64 +199,205 @@ func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, ta _ = srv.Serve(ln) }() go func() { - <-done + <-ctx.done srv.Shutdown(context.Background()) }() - return srv.Addr + + client := nethttp.Client{ + Transport: &nethttp.Transport{ + DialContext: ctx.clientDialer.DialContext, + }, + } + resp, err := client.Get("http://" + ctx.targetAddress + "/test") + require.NoError(t, err) + io.Copy(io.Discard, resp.Body) + resp.Body.Close() }, - want: network.ProtocolHTTP, + teardown: defaultTeardown, + validation: validateProtocolConnection, }, { - name: "gRPC traffic - unary call", - clientRun: func(t *testing.T, serverAddr string) { - c, err := grpc.NewClient(serverAddr, grpc.Options{ - CustomDialer: dialer, + name: "http2 traffic using gRPC - unary call", + context: testContext{ + serverPort: "8080", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolHTTP2, + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + server, err := grpc.NewServer(ctx.serverAddress) + require.NoError(t, err) + server.Run() + go func() { + <-ctx.done + server.Stop() + }() + + c, err := grpc.NewClient(ctx.targetAddress, grpc.Options{ + CustomDialer: ctx.clientDialer, }) require.NoError(t, err) defer c.Close() require.NoError(t, c.HandleUnary(context.Background(), "test")) }, - serverRun: func(t *testing.T, serverAddr string, done chan struct{}) string { - server, err := grpc.NewServer(serverAddr) + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "http2 traffic using gRPC - stream call", + context: testContext{ + serverPort: "8080", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolHTTP2, + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + server, err := grpc.NewServer(ctx.serverAddress) require.NoError(t, err) server.Run() go func() { - <-done + <-ctx.done server.Stop() }() - return server.Address + + c, err := grpc.NewClient(ctx.targetAddress, grpc.Options{ + CustomDialer: ctx.clientDialer, + }) + require.NoError(t, err) + defer c.Close() + require.NoError(t, c.HandleStream(context.Background(), 5)) }, - want: network.ProtocolHTTP2, + teardown: defaultTeardown, + validation: validateProtocolConnection, }, { - name: "gRPC traffic - stream call", - clientRun: func(t *testing.T, serverAddr string) { - c, err := grpc.NewClient(serverAddr, grpc.Options{ - CustomDialer: dialer, + name: "amqp connect", + context: testContext{ + serverPort: "5672", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolAMQP, + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + amqp.RunAmqpServer(t, host, port) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client, err := amqp.NewClient(amqp.Options{ + ServerAddress: ctx.serverAddress, }) require.NoError(t, err) - defer c.Close() - require.NoError(t, c.HandleStream(context.Background(), 5)) + defer client.Terminate() }, - serverRun: func(t *testing.T, serverAddr string, done chan struct{}) string { - server, err := grpc.NewServer(serverAddr) + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + validation: validateProtocolConnection, + }, + { + name: "amqp declare channel", + context: testContext{ + serverPort: "5672", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolUnknown, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + amqp.RunAmqpServer(t, host, port) + + client, err := amqp.NewClient(amqp.Options{ + ServerAddress: ctx.serverAddress, + }) require.NoError(t, err) - server.Run() - go func() { - <-done - server.Stop() - }() - return server.Address + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*amqp.Client) + defer client.Terminate() + + require.NoError(t, client.DeclareQueue("test", client.PublishChannel)) + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + validation: validateProtocolConnection, + }, + { + name: "amqp publish", + context: testContext{ + serverPort: "5672", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolAMQP, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + amqp.RunAmqpServer(t, host, port) + + client, err := amqp.NewClient(amqp.Options{ + ServerAddress: ctx.serverAddress, + }) + require.NoError(t, err) + require.NoError(t, client.DeclareQueue("test", client.PublishChannel)) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*amqp.Client) + defer client.Terminate() + + require.NoError(t, client.Publish("test", "my msg")) }, - want: network.ProtocolHTTP2, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + validation: validateProtocolConnection, + }, + { + name: "amqp consume", + context: testContext{ + serverPort: "5672", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolAMQP, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + amqp.RunAmqpServer(t, host, port) + + client, err := amqp.NewClient(amqp.Options{ + ServerAddress: ctx.serverAddress, + }) + require.NoError(t, err) + require.NoError(t, client.DeclareQueue("test", client.PublishChannel)) + require.NoError(t, client.DeclareQueue("test", client.ConsumeChannel)) + require.NoError(t, client.Publish("test", "my msg")) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*amqp.Client) + defer client.Terminate() + + res, err := client.Consume("test", 1) + require.NoError(t, err) + require.Equal(t, []string{"my msg"}, res) + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + validation: validateProtocolConnection, }, { // A case where we see multiple protocols on the same socket. In that case, we expect to classify the connection // with the first protocol we've found. name: "mixed protocols", - clientRun: func(t *testing.T, serverAddr string) { + context: testContext{ + serverPort: "8080", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolHTTP, + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + server := NewTCPServerOnAddress(ctx.serverAddress, func(c net.Conn) { + r := bufio.NewReader(c) + input, err := r.ReadBytes(byte('\n')) + if err == nil { + c.Write(input) + } + c.Close() + }) + require.NoError(t, server.Run(ctx.done)) + timedContext, cancel := context.WithTimeout(context.Background(), time.Second) - c, err := dialer.DialContext(timedContext, "tcp", serverAddr) + c, err := ctx.clientDialer.DialContext(timedContext, "tcp", ctx.targetAddress) cancel() require.NoError(t, err) defer c.Close() @@ -191,35 +407,289 @@ func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, ta c.Write([]byte("PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n")) io.ReadAll(c) }, - serverRun: func(t *testing.T, serverAddr string, done chan struct{}) string { - server := NewTCPServerOnAddress(serverAddr, func(c net.Conn) { - r := bufio.NewReader(c) - input, err := r.ReadBytes(byte('\n')) - if err == nil { - c.Write(input) - } - c.Close() + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "redis set", + context: testContext{ + serverPort: "6379", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolRedis, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + redis.RunRedisServer(t, host, port) + + client := redis.NewClient(ctx.targetAddress, ctx.clientDialer) + client.Ping(context.Background()) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*redis2.Client) + client.Set(context.Background(), "key", "value", time.Minute) + }, + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "redis get", + context: testContext{ + serverPort: "6379", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolRedis, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + redis.RunRedisServer(t, host, port) + + client := redis.NewClient(ctx.targetAddress, ctx.clientDialer) + client.Set(context.Background(), "key", "value", time.Minute) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*redis2.Client) + res := client.Get(context.Background(), "key") + val, err := res.Result() + require.NoError(t, err) + require.Equal(t, "value", val) + }, + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "redis get unknown key", + context: testContext{ + serverPort: "6379", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolRedis, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + redis.RunRedisServer(t, host, port) + + client := redis.NewClient(ctx.targetAddress, ctx.clientDialer) + client.Ping(context.Background()) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*redis2.Client) + res := client.Get(context.Background(), "unknown") + require.Error(t, res.Err()) + }, + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "redis err response", + context: testContext{ + serverPort: "6379", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolRedis, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + redis.RunRedisServer(t, host, port) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + conn, err := ctx.clientDialer.DialContext(context.Background(), "tcp", ctx.targetAddress) + require.NoError(t, err) + _, err = conn.Write([]byte("+dummy\r\n")) + require.NoError(t, err) + }, + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "redis client id", + context: testContext{ + serverPort: "6379", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolRedis, + extras: make(map[string]interface{}), + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + redis.RunRedisServer(t, host, port) + + client := redis.NewClient(ctx.targetAddress, ctx.clientDialer) + client.Ping(context.Background()) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*redis2.Client) + res := client.ClientID(context.Background()) + require.NoError(t, res.Err()) + }, + teardown: defaultTeardown, + validation: validateProtocolConnection, + }, + { + name: "mongo - classify by connect", + context: testContext{ + serverPort: "27017", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolMongo, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + protocolsmongo.RunMongoServer(t, host, port) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client, err := protocolsmongo.NewClient(protocolsmongo.Options{ + ServerAddress: ctx.targetAddress, + ClientDialer: ctx.clientDialer, + }) + require.NoError(t, err) + client.Stop() + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + validation: validateProtocolConnection, + }, + { + name: "mongo - classify by collection creation", + context: testContext{ + serverPort: "27017", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolMongo, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + protocolsmongo.RunMongoServer(t, host, port) + + client, err := protocolsmongo.NewClient(protocolsmongo.Options{ + ServerAddress: ctx.targetAddress, + ClientDialer: ctx.clientDialer, + }) + require.NoError(t, err) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*protocolsmongo.Client) + db := client.C.Database("test") + require.NoError(t, db.CreateCollection(context.Background(), "collection")) + }, + teardown: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*protocolsmongo.Client) + client.Stop() + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + validation: validateProtocolConnection, + }, + { + name: "mongo - classify by insertion", + context: testContext{ + serverPort: "27017", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolMongo, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + protocolsmongo.RunMongoServer(t, host, port) + + client, err := protocolsmongo.NewClient(protocolsmongo.Options{ + ServerAddress: ctx.targetAddress, + ClientDialer: ctx.clientDialer, }) - require.NoError(t, server.Run(done)) - return server.address + require.NoError(t, err) + ctx.extras["client"] = client + db := client.C.Database("test") + require.NoError(t, db.CreateCollection(context.Background(), "collection")) + ctx.extras["collection"] = db.Collection("collection") }, - want: network.ProtocolHTTP, + postTracerSetup: func(t *testing.T, ctx testContext) { + collection := ctx.extras["collection"].(*mongo.Collection) + input := map[string]string{"test": "test"} + _, err := collection.InsertOne(context.Background(), input) + require.NoError(t, err) + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + teardown: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*protocolsmongo.Client) + client.Stop() + }, + validation: validateProtocolConnection, + }, + { + name: "mongo - classify by find", + context: testContext{ + serverPort: "27017", + clientDialer: defaultDialer, + expectedProtocol: network.ProtocolMongo, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + host, port, _ := net.SplitHostPort(ctx.serverAddress) + protocolsmongo.RunMongoServer(t, host, port) + + client, err := protocolsmongo.NewClient(protocolsmongo.Options{ + ServerAddress: ctx.targetAddress, + ClientDialer: ctx.clientDialer, + }) + require.NoError(t, err) + ctx.extras["client"] = client + db := client.C.Database("test") + require.NoError(t, db.CreateCollection(context.Background(), "collection")) + + collection := db.Collection("collection") + ctx.extras["input"] = map[string]string{"test": "test"} + _, err = collection.InsertOne(context.Background(), ctx.extras["input"]) + require.NoError(t, err) + + ctx.extras["collection"] = db.Collection("collection") + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + collection := ctx.extras["collection"].(*mongo.Collection) + res := collection.FindOne(context.Background(), bson.M{"test": "test"}) + require.NoError(t, res.Err()) + var output map[string]string + require.NoError(t, res.Decode(&output)) + delete(output, "_id") + require.EqualValues(t, output, ctx.extras["input"]) + }, + shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), + teardown: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*protocolsmongo.Client) + client.Stop() + }, + validation: validateProtocolConnection, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - done := make(chan struct{}) - defer close(done) - serverAddr := tt.serverRun(t, serverHost, done) - _, port, err := net.SplitHostPort(serverAddr) - require.NoError(t, err) - targetAddr := net.JoinHostPort(targetHost, port) - - // Letting the server time to start - time.Sleep(500 * time.Millisecond) - tt.clientRun(t, targetAddr) - - waitForConnectionsWithProtocol(t, tr, targetAddr, serverAddr, tt.want) + tt.context.serverAddress = net.JoinHostPort(serverHost, tt.context.serverPort) + tt.context.targetAddress = net.JoinHostPort(targetHost, tt.context.serverPort) + + if tt.shouldSkip != nil { + if skip, msg := tt.shouldSkip(tt.context); skip { + t.Skip(msg) + } + } + + tt.context.done = make(chan struct{}) + if tt.teardown != nil { + t.Cleanup(func() { + tt.teardown(t, tt.context) + }) + } + if tt.preTracerSetup != nil { + tt.preTracerSetup(t, tt.context) + } + tr := setupTracer(t, cfg) + tt.postTracerSetup(t, tt.context) + tt.validation(t, tt.context, tr) }) } } diff --git a/pkg/network/tracer/tracer_classification_windows_test.go b/pkg/network/tracer/tracer_classification_windows_test.go index cc69e64d927d5..c27fecea24057 100644 --- a/pkg/network/tracer/tracer_classification_windows_test.go +++ b/pkg/network/tracer/tracer_classification_windows_test.go @@ -16,6 +16,6 @@ func TestProtocolClassification(t *testing.T) { t.Skip("Classification is not supported") } t.Run("without nat", func(t *testing.T) { - testProtocolClassification(t, cfg, "localhost", "127.0.0.1", "127.0.0.1:0") + testProtocolClassification(t, cfg, "localhost", "127.0.0.1", "127.0.0.1") }) } diff --git a/pkg/network/tracer/tracer_linux_test.go b/pkg/network/tracer/tracer_linux_test.go index d7a7edfd21a0e..175723bc42f95 100644 --- a/pkg/network/tracer/tracer_linux_test.go +++ b/pkg/network/tracer/tracer_linux_test.go @@ -116,10 +116,9 @@ func TestTCPRemoveEntries(t *testing.T) { conn, ok := findConnection(c2.LocalAddr(), c2.RemoteAddr(), connections) require.True(t, ok) - m := conn.MonotonicSum() - assert.Equal(t, clientMessageSize, int(m.SentBytes)) - assert.Equal(t, 0, int(m.RecvBytes)) - assert.Equal(t, 0, int(m.Retransmits)) + assert.Equal(t, clientMessageSize, int(conn.Monotonic.SentBytes)) + assert.Equal(t, 0, int(conn.Monotonic.RecvBytes)) + assert.Equal(t, 0, int(conn.Monotonic.Retransmits)) assert.Equal(t, os.Getpid(), int(conn.Pid)) assert.Equal(t, addrPort(server.address), int(conn.DPort)) } @@ -172,9 +171,8 @@ func TestTCPRetransmit(t *testing.T) { conn, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), connections) require.True(t, ok) - m := conn.MonotonicSum() - assert.Equal(t, 100*clientMessageSize, int(m.SentBytes)) - assert.True(t, int(m.Retransmits) > 0) + assert.Equal(t, 100*clientMessageSize, int(conn.Monotonic.SentBytes)) + assert.True(t, int(conn.Monotonic.Retransmits) > 0) assert.Equal(t, os.Getpid(), int(conn.Pid)) assert.Equal(t, addrPort(server.address), int(conn.DPort)) } @@ -223,7 +221,7 @@ func TestTCPRetransmitSharedSocket(t *testing.T) { totalSent := 0 for _, c := range conns { - totalSent += int(c.MonotonicSum().SentBytes) + totalSent += int(c.Monotonic.SentBytes) } assert.Equal(t, numProcesses*clientMessageSize, totalSent) @@ -232,7 +230,7 @@ func TestTCPRetransmitSharedSocket(t *testing.T) { // same socket connsWithRetransmits := 0 for _, c := range conns { - if c.MonotonicSum().Retransmits > 0 { + if c.Monotonic.Retransmits > 0 { connsWithRetransmits++ } } @@ -339,7 +337,7 @@ func TestTCPMiscount(t *testing.T) { // TODO this should not happen but is expected for now // we don't have the correct count since retries happened - assert.False(t, uint64(len(x)) == conn.MonotonicSum().SentBytes) + assert.False(t, uint64(len(x)) == conn.Monotonic.SentBytes) tel := tr.ebpfTracer.GetTelemetry() assert.NotZero(t, tel["tcp_sent_miscounts"]) @@ -566,7 +564,7 @@ func TestUnconnectedUDPSendIPv6(t *testing.T) { require.Len(t, outgoing, 1) assert.Equal(t, remoteAddr.IP.String(), outgoing[0].Dest.String()) - assert.Equal(t, bytesSent, int(outgoing[0].MonotonicSum().SentBytes)) + assert.Equal(t, bytesSent, int(outgoing[0].Monotonic.SentBytes)) } func TestGatewayLookupNotEnabled(t *testing.T) { @@ -912,7 +910,7 @@ func TestConnectionAssured(t *testing.T) { conns := getConnections(t, tr) var ok bool conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), conns) - m := conn.MonotonicSum() + m := conn.Monotonic return ok && m.SentBytes > 0 && m.RecvBytes > 0 }, 3*time.Second, 500*time.Millisecond, "could not find udp connection") @@ -953,7 +951,7 @@ func TestConnectionNotAssured(t *testing.T) { conns := getConnections(t, tr) var ok bool conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), conns) - m := conn.MonotonicSum() + m := conn.Monotonic return ok && m.SentBytes > 0 && m.RecvBytes == 0 }, 3*time.Second, 500*time.Millisecond, "could not find udp connection") @@ -1166,13 +1164,13 @@ func TestUDPPeekCount(t *testing.T) { return outgoing != nil && incoming != nil }, 3*time.Second, 100*time.Millisecond, "couldn't find incoming and outgoing connections matching") - m := outgoing.MonotonicSum() + m := outgoing.Monotonic require.Equal(t, len(msg), int(m.SentBytes)) require.Equal(t, 0, int(m.RecvBytes)) require.True(t, outgoing.IntraHost) // make sure the inverse values are seen for the other message - m = incoming.MonotonicSum() + m = incoming.Monotonic require.Equal(t, 0, int(m.SentBytes)) require.Equal(t, len(msg), int(m.RecvBytes)) require.True(t, incoming.IntraHost) @@ -1242,8 +1240,8 @@ func TestUDPPythonReusePort(t *testing.T) { assert.Equal(t, network.INCOMING, c.Direction, "incoming direction") // make sure the inverse values are seen for the other message - assert.Equal(t, serverBytes, int(c.MonotonicSum().SentBytes), "incoming sent") - assert.Equal(t, clientBytes, int(c.MonotonicSum().RecvBytes), "incoming recv") + assert.Equal(t, serverBytes, int(c.Monotonic.SentBytes), "incoming sent") + assert.Equal(t, clientBytes, int(c.Monotonic.RecvBytes), "incoming recv") assert.True(t, c.IntraHost, "incoming intrahost") } } @@ -1252,8 +1250,8 @@ func TestUDPPythonReusePort(t *testing.T) { for _, c := range outgoing { assert.Equal(t, network.OUTGOING, c.Direction, "outgoing direction") - assert.Equal(t, clientBytes, int(c.MonotonicSum().SentBytes), "outgoing sent") - assert.Equal(t, serverBytes, int(c.MonotonicSum().RecvBytes), "outgoing recv") + assert.Equal(t, clientBytes, int(c.Monotonic.SentBytes), "outgoing sent") + assert.Equal(t, serverBytes, int(c.Monotonic.RecvBytes), "outgoing recv") assert.True(t, c.IntraHost, "outgoing intrahost") } } @@ -1335,8 +1333,8 @@ func testUDPReusePort(t *testing.T, udpnet string, ip string) { assert.Equal(t, network.INCOMING, incoming.Direction) // make sure the inverse values are seen for the other message - assert.Equal(t, serverMessageSize, int(incoming.MonotonicSum().SentBytes), "incoming sent") - assert.Equal(t, clientMessageSize, int(incoming.MonotonicSum().RecvBytes), "incoming recv") + assert.Equal(t, serverMessageSize, int(incoming.Monotonic.SentBytes), "incoming sent") + assert.Equal(t, clientMessageSize, int(incoming.Monotonic.RecvBytes), "incoming recv") assert.True(t, incoming.IntraHost, "incoming intrahost") } @@ -1344,8 +1342,8 @@ func testUDPReusePort(t *testing.T, udpnet string, ip string) { if assert.True(t, ok, "unable to find outgoing connection") { assert.Equal(t, network.OUTGOING, outgoing.Direction) - assert.Equal(t, clientMessageSize, int(outgoing.MonotonicSum().SentBytes), "outgoing sent") - assert.Equal(t, serverMessageSize, int(outgoing.MonotonicSum().RecvBytes), "outgoing recv") + assert.Equal(t, clientMessageSize, int(outgoing.Monotonic.SentBytes), "outgoing sent") + assert.Equal(t, serverMessageSize, int(outgoing.Monotonic.RecvBytes), "outgoing recv") assert.True(t, outgoing.IntraHost, "outgoing intrahost") } } @@ -1499,10 +1497,10 @@ func TestSendfileRegression(t *testing.T) { t.Logf("%+v", conns.Conns) var ok bool conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), conns) - return ok && conn.MonotonicSum().SentBytes > 0 + return ok && conn.Monotonic.SentBytes > 0 }, 3*time.Second, 500*time.Millisecond, "couldn't find connection used by sendfile(2)") - assert.Equalf(t, int64(clientMessageSize), int64(conn.MonotonicSum().SentBytes), "sendfile data wasn't properly traced") + assert.Equalf(t, int64(clientMessageSize), int64(conn.Monotonic.SentBytes), "sendfile data wasn't properly traced") } func TestSendfileError(t *testing.T) { @@ -1550,7 +1548,7 @@ func TestSendfileError(t *testing.T) { return ok }, 3*time.Second, 500*time.Millisecond, "couldn't find connection used by sendfile(2)") - assert.Equalf(t, int64(0), int64(conn.MonotonicSum().SentBytes), "sendfile data wasn't properly traced") + assert.Equalf(t, int64(0), int64(conn.Monotonic.SentBytes), "sendfile data wasn't properly traced") } func sendFile(t *testing.T, c net.Conn, f *os.File, offset *int64, count int) (int, error) { @@ -1653,7 +1651,7 @@ func TestShortWrite(t *testing.T) { return ok }, 3*time.Second, 500*time.Millisecond, "couldn't find connection used by short write") - assert.Equal(t, sent, conn.MonotonicSum().SentBytes) + assert.Equal(t, sent, conn.Monotonic.SentBytes) } func TestKprobeAttachWithKprobeEvents(t *testing.T) { @@ -1714,7 +1712,7 @@ func TestBlockingReadCounts(t *testing.T) { return found }, 3*time.Second, 500*time.Millisecond) - assert.Equal(t, uint64(n), conn.MonotonicSum().RecvBytes) + assert.Equal(t, uint64(n), conn.Monotonic.RecvBytes) } func TestTCPDirectionWithPreexistingConnection(t *testing.T) { @@ -1813,7 +1811,7 @@ func TestPreexistingConnectionDirection(t *testing.T) { conn, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), connections) require.True(t, ok) - m := conn.MonotonicSum() + m := conn.Monotonic assert.Equal(t, clientMessageSize, int(m.SentBytes)) assert.Equal(t, serverMessageSize, int(m.RecvBytes)) assert.Equal(t, 0, int(m.Retransmits)) diff --git a/pkg/network/tracer/tracer_test.go b/pkg/network/tracer/tracer_test.go index afe1016ea4229..748d0abba272c 100644 --- a/pkg/network/tracer/tracer_test.go +++ b/pkg/network/tracer/tracer_test.go @@ -33,6 +33,7 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" + coreConfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/network" "github.com/DataDog/datadog-agent/pkg/network/config" "github.com/DataDog/datadog-agent/pkg/process/util" @@ -47,6 +48,12 @@ var ( payloadSizesUDP = []int{2 << 5, 2 << 8, 2 << 12, 2 << 14} ) +// Some tests try to detect if they're running on Fargate. We'll get a panic +// when checking that if the auto-detected features have not been initialized. +func init() { + coreConfig.SetDetectedFeatures(coreConfig.FeatureMap{}) +} + func TestMain(m *testing.M) { logLevel := os.Getenv("DD_LOG_LEVEL") if logLevel == "" { @@ -115,6 +122,7 @@ func TestGetStats(t *testing.T) { "tcp_conns4": 1, "tcp_conns6": 0, "tcp_sent_miscounts": 0, + "tcp_failed_connects": 0, "udp_conns4": 4, "udp_conns6": 0, "udp_sends_missed": 0, @@ -251,7 +259,7 @@ func TestTCPSendAndReceive(t *testing.T) { conn, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), connections) require.True(t, ok) - m := conn.MonotonicSum() + m := conn.Monotonic assert.Equal(t, 10*clientMessageSize, int(m.SentBytes)) assert.Equal(t, 10*serverMessageSize, int(m.RecvBytes)) assert.Equal(t, 0, int(m.Retransmits)) @@ -307,7 +315,7 @@ func TestTCPShortlived(t *testing.T) { return ok }, 3*time.Second, time.Second, "connection not found") - m := conn.MonotonicSum() + m := conn.Monotonic assert.Equal(t, clientMessageSize, int(m.SentBytes)) assert.Equal(t, serverMessageSize, int(m.RecvBytes)) assert.Equal(t, 0, int(m.Retransmits)) @@ -378,7 +386,7 @@ func TestTCPOverIPv6(t *testing.T) { conn, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), connections) require.True(t, ok) - m := conn.MonotonicSum() + m := conn.Monotonic assert.Equal(t, clientMessageSize, int(m.SentBytes)) assert.Equal(t, serverMessageSize, int(m.RecvBytes)) assert.Equal(t, 0, int(m.Retransmits)) @@ -473,10 +481,20 @@ func TestTCPConnsReported(t *testing.T) { func TestUDPSendAndReceive(t *testing.T) { t.Run("v4", func(t *testing.T) { - testUDPSendAndReceive(t, "127.0.0.1:8001") + t.Run("fixed port", func(t *testing.T) { + testUDPSendAndReceive(t, "127.0.0.1:8081") + }) + t.Run("random port", func(t *testing.T) { + testUDPSendAndReceive(t, "127.0.0.1:0") + }) }) t.Run("v6", func(t *testing.T) { - testUDPSendAndReceive(t, "[::1]:8001") + t.Run("fixed port", func(t *testing.T) { + testUDPSendAndReceive(t, "[::1]:8081") + }) + t.Run("random port", func(t *testing.T) { + testUDPSendAndReceive(t, "[::1]:0") + }) }) } @@ -519,8 +537,8 @@ func testUDPSendAndReceive(t *testing.T, addr string) { assert.Equal(t, network.INCOMING, incoming.Direction) // make sure the inverse values are seen for the other message - assert.Equal(t, serverMessageSize, int(incoming.MonotonicSum().SentBytes), "incoming sent") - assert.Equal(t, clientMessageSize, int(incoming.MonotonicSum().RecvBytes), "incoming recv") + assert.Equal(t, serverMessageSize, int(incoming.Monotonic.SentBytes), "incoming sent") + assert.Equal(t, clientMessageSize, int(incoming.Monotonic.RecvBytes), "incoming recv") assert.True(t, incoming.IntraHost, "incoming intrahost") } @@ -528,8 +546,8 @@ func testUDPSendAndReceive(t *testing.T, addr string) { if assert.True(t, ok, "unable to find outgoing connection") { assert.Equal(t, network.OUTGOING, outgoing.Direction) - assert.Equal(t, clientMessageSize, int(outgoing.MonotonicSum().SentBytes), "outgoing sent") - assert.Equal(t, serverMessageSize, int(outgoing.MonotonicSum().RecvBytes), "outgoing recv") + assert.Equal(t, clientMessageSize, int(outgoing.Monotonic.SentBytes), "outgoing sent") + assert.Equal(t, serverMessageSize, int(outgoing.Monotonic.RecvBytes), "outgoing recv") assert.True(t, outgoing.IntraHost, "outgoing intrahost") } } @@ -1152,7 +1170,7 @@ func testDNSStats(t *testing.T, domain string, success int, failure int, timeout conn, ok := findConnection(dnsClientAddr, dnsServerAddr, connections) require.True(t, ok) - assert.Equal(t, queryMsg.Len(), int(conn.MonotonicSum().SentBytes)) + assert.Equal(t, queryMsg.Len(), int(conn.Monotonic.SentBytes)) assert.Equal(t, os.Getpid(), int(conn.Pid)) assert.Equal(t, dnsServerAddr.Port, int(conn.DPort)) @@ -1271,7 +1289,7 @@ func TestTCPEstablishedPreExistingConn(t *testing.T) { conn, ok := findConnection(laddr, raddr, connections) require.True(t, ok) - m := conn.MonotonicSum() + m := conn.Monotonic assert.Equal(t, uint32(0), m.TCPEstablished) assert.Equal(t, uint32(1), m.TCPClosed) } @@ -1299,7 +1317,7 @@ func TestUnconnectedUDPSendIPv4(t *testing.T) { }) require.Len(t, outgoing, 1) - assert.Equal(t, bytesSent, int(outgoing[0].MonotonicSum().SentBytes)) + assert.Equal(t, bytesSent, int(outgoing[0].Monotonic.SentBytes)) } func TestConnectedUDPSendIPv6(t *testing.T) { @@ -1330,7 +1348,7 @@ func TestConnectedUDPSendIPv6(t *testing.T) { require.Len(t, outgoing, 1) assert.Equal(t, remoteAddr.IP.String(), outgoing[0].Dest.String()) - assert.Equal(t, bytesSent, int(outgoing[0].MonotonicSum().SentBytes)) + assert.Equal(t, bytesSent, int(outgoing[0].Monotonic.SentBytes)) } func TestConnectionClobber(t *testing.T) { diff --git a/pkg/network/tracer/tracer_usm_linux_test.go b/pkg/network/tracer/tracer_usm_linux_test.go index bb418503d8a4c..15af7b57d4a43 100644 --- a/pkg/network/tracer/tracer_usm_linux_test.go +++ b/pkg/network/tracer/tracer_usm_linux_test.go @@ -492,19 +492,19 @@ func TestProtocolClassification(t *testing.T) { t.Run("with dnat", func(t *testing.T) { // SetupDNAT sets up a NAT translation from 2.2.2.2 to 1.1.1.1 netlink.SetupDNAT(t) - testProtocolClassification(t, cfg, "localhost", "2.2.2.2", "1.1.1.1:0") + testProtocolClassification(t, cfg, "localhost", "2.2.2.2", "1.1.1.1") testProtocolClassificationMapCleanup(t, cfg, "localhost", "2.2.2.2", "1.1.1.1:0") }) t.Run("with snat", func(t *testing.T) { // SetupDNAT sets up a NAT translation from 6.6.6.6 to 7.7.7.7 netlink.SetupSNAT(t) - testProtocolClassification(t, cfg, "6.6.6.6", "127.0.0.1", "127.0.0.1:0") + testProtocolClassification(t, cfg, "6.6.6.6", "127.0.0.1", "127.0.0.1") testProtocolClassificationMapCleanup(t, cfg, "6.6.6.6", "127.0.0.1", "127.0.0.1:0") }) t.Run("without nat", func(t *testing.T) { - testProtocolClassification(t, cfg, "localhost", "127.0.0.1", "127.0.0.1:0") + testProtocolClassification(t, cfg, "localhost", "127.0.0.1", "127.0.0.1") testProtocolClassificationMapCleanup(t, cfg, "localhost", "127.0.0.1", "127.0.0.1:0") }) } diff --git a/pkg/obfuscate/obfuscate.go b/pkg/obfuscate/obfuscate.go index caf90167c5f6a..aad3f47fb2e8a 100644 --- a/pkg/obfuscate/obfuscate.go +++ b/pkg/obfuscate/obfuscate.go @@ -176,6 +176,7 @@ func NewObfuscator(cfg Config) *Obfuscator { opts: &cfg, queryCache: newMeasuredCache(cacheOptions{On: cfg.SQL.Cache, Statsd: cfg.Statsd}), sqlLiteralEscapes: atomic.NewBool(false), + log: cfg.Logger, } if cfg.ES.Enabled { o.es = newJSONObfuscator(&cfg.ES, &o) diff --git a/pkg/obfuscate/sql_test.go b/pkg/obfuscate/sql_test.go index 4bf3a311f9690..1989c39d8f970 100644 --- a/pkg/obfuscate/sql_test.go +++ b/pkg/obfuscate/sql_test.go @@ -384,6 +384,10 @@ func TestSQLUTF8(t *testing.T) { "SELECT Cli_Establiments.CODCLI, Cli_Establiments.Id_ESTAB_CLI As [Código Centro Trabajo], Cli_Establiments.CODIGO_CENTRO_AXAPTA As [Código C. Axapta], Cli_Establiments.NOMESTAB As [Nombre], Cli_Establiments.ADRECA As [Dirección], Cli_Establiments.CodPostal As [Código Postal], Cli_Establiments.Poblacio as [Población], Cli_Establiments.Provincia, Cli_Establiments.TEL As [Tel], Cli_Establiments.EMAIL As [EMAIL], Cli_Establiments.PERS_CONTACTE As [Contacto], Cli_Establiments.PERS_CONTACTE_CARREC As [Cargo Contacto], Cli_Establiments.NumTreb As [Plantilla], Cli_Establiments.Localitzacio As [Localización], Tipus_Activitat.CNAE, Tipus_Activitat.Nom_ES As [Nombre Actividad], ACTIVO AS [Activo] FROM Cli_Establiments LEFT OUTER JOIN Tipus_Activitat ON Cli_Establiments.Id_ACTIVITAT = Tipus_Activitat.IdActivitat Where CODCLI = '01234' AND CENTRE_CORRECTE = 3 AND ACTIVO = 5 ORDER BY Cli_Establiments.CODIGO_CENTRO_AXAPTA ", "SELECT Cli_Establiments.CODCLI, Cli_Establiments.Id_ESTAB_CLI, Cli_Establiments.CODIGO_CENTRO_AXAPTA, Cli_Establiments.NOMESTAB, Cli_Establiments.ADRECA, Cli_Establiments.CodPostal, Cli_Establiments.Poblacio, Cli_Establiments.Provincia, Cli_Establiments.TEL, Cli_Establiments.EMAIL, Cli_Establiments.PERS_CONTACTE, Cli_Establiments.PERS_CONTACTE_CARREC, Cli_Establiments.NumTreb, Cli_Establiments.Localitzacio, Tipus_Activitat.CNAE, Tipus_Activitat.Nom_ES, ACTIVO FROM Cli_Establiments LEFT OUTER JOIN Tipus_Activitat ON Cli_Establiments.Id_ACTIVITAT = Tipus_Activitat.IdActivitat Where CODCLI = ? AND CENTRE_CORRECTE = ? AND ACTIVO = ? ORDER BY Cli_Establiments.CODIGO_CENTRO_AXAPTA", }, + { + `select * from dollarField$ as df from some$dollar$filled_thing$$;`, + `select * from dollarField$ from some$dollar$filled_thing$$`, + }, { "select * from `構わない`;", "select * from 構わない", @@ -1172,6 +1176,14 @@ LIMIT 1 query: `SELECT * FROM Items WHERE id = -1 OR id = -01 OR id = -108 OR id = -.018 OR id = -.08 OR id = -908129`, expected: `SELECT * FROM Items WHERE id = ? OR id = ? OR id = ? OR id = ? OR id = ? OR id = ?`, }, + { + query: "USING $09 SELECT", + expected: `USING ? SELECT`, + }, + { + query: "USING - SELECT", + expected: `USING - SELECT`, + }, } o := NewObfuscator(Config{}) for _, c := range cases { @@ -1608,11 +1620,6 @@ func TestSQLErrors(t *testing.T) { `at position 20: unexpected EOF in string`, }, - { - "USING $09 SELECT", - `at position 9: invalid number`, - }, - { "INSERT VALUES (1, 2) INTO {ABC", `at position 30: unexpected EOF in escape sequence`, @@ -1667,7 +1674,7 @@ func TestSQLErrors(t *testing.T) { for _, tc := range cases { t.Run("", func(t *testing.T) { _, err := NewObfuscator(Config{}).ObfuscateSQLString(tc.query) - assert.Error(t, err) + require.Error(t, err) assert.Equal(t, tc.expected, err.Error()) }) } @@ -1943,6 +1950,32 @@ func TestUnicodeDigit(t *testing.T) { o.ObfuscateSQLString(hangStr) } +func TestParseNumber(t *testing.T) { + var testCases = []string{ + "1234", + "-1234", + "1234e12", + "0xfa", + "01234567", + "09", + // Negatives are always parsed as decimals (not octal). + "-01234567", + "-012345678", + } + + o := NewObfuscator(Config{}) + for _, testCase := range testCases { + t.Run(testCase, func(t *testing.T) { + assert := assert.New(t) + oq, err := o.ObfuscateSQLString(testCase) + require.NoError(t, err) + if assert.NotNil(oq) { + assert.Equal("?", oq.Query) + } + }) + } +} + // TestToUpper contains test data lifted from Go's bytes/bytes_test.go, but we test // that our toUpper returns the same values as bytes.ToUpper. func TestToUpper(t *testing.T) { diff --git a/pkg/obfuscate/sql_tokenizer.go b/pkg/obfuscate/sql_tokenizer.go index e50f8d2ce4277..419c57e92f205 100644 --- a/pkg/obfuscate/sql_tokenizer.go +++ b/pkg/obfuscate/sql_tokenizer.go @@ -8,6 +8,7 @@ package obfuscate import ( "bytes" "fmt" + "strings" "unicode" "unicode/utf8" ) @@ -572,7 +573,7 @@ func toUpper(src, dst []byte) []byte { func (tkn *SQLTokenizer) scanIdentifier() (TokenKind, []byte) { tkn.advance() - for isLetter(tkn.lastChar) || isDigit(tkn.lastChar) || tkn.lastChar == '.' || tkn.lastChar == '*' { + for isLetter(tkn.lastChar) || isDigit(tkn.lastChar) || strings.ContainsRune(".*$", tkn.lastChar) { tkn.advance() } @@ -723,21 +724,13 @@ func (tkn *SQLTokenizer) scanNumber(seenDecimalPoint bool) (TokenKind, []byte) { tkn.scanMantissa(16) } else { // octal int or float - seenDecimalDigit := false tkn.scanMantissa(8) if tkn.lastChar == '8' || tkn.lastChar == '9' { - // illegal octal int or float - seenDecimalDigit = true tkn.scanMantissa(10) } if tkn.lastChar == '.' || tkn.lastChar == 'e' || tkn.lastChar == 'E' { goto fraction } - // octal int - if seenDecimalDigit { - // tkn.setErr called in caller - return LexError, tkn.bytes() - } } goto exit } @@ -763,6 +756,7 @@ exponent: exit: t := tkn.bytes() if len(t) == 0 { + tkn.setErr("Parse error: ended up with zero-length number.") return LexError, nil } return Number, t diff --git a/pkg/orchestrator/config/config.go b/pkg/orchestrator/config/config.go index 74eafc5ba0b66..ceca95358d71f 100644 --- a/pkg/orchestrator/config/config.go +++ b/pkg/orchestrator/config/config.go @@ -105,14 +105,7 @@ func (oc *OrchestratorConfig) Load() error { } // Orchestrator Explorer - if config.Datadog.GetBool(key(orchestratorNS, "enabled")) { - oc.OrchestrationCollectionEnabled = true - // Set clustername - hname, _ := hostname.Get(context.TODO()) - if clusterName := clustername.GetClusterName(context.TODO(), hname); clusterName != "" { - oc.KubeClusterName = clusterName - } - } + oc.OrchestrationCollectionEnabled, oc.KubeClusterName = IsOrchestratorEnabled() oc.CollectorDiscoveryEnabled = config.Datadog.GetBool(key(orchestratorNS, "collector_discovery.enabled")) oc.IsScrubbingEnabled = config.Datadog.GetBool(key(orchestratorNS, "container_scrubbing.enabled")) @@ -202,3 +195,15 @@ func setBoundedConfigIntValue(configKey string, upperBound int, setter func(v in setter(val) } + +// IsOrchestratorEnabled checks if orchestrator explorer features are enabled, it returns the boolean and the cluster name +func IsOrchestratorEnabled() (bool, string) { + enabled := config.Datadog.GetBool(key(orchestratorNS, "enabled")) + var clusterName string + if enabled { + // Set clustername + hname, _ := hostname.Get(context.TODO()) + clusterName = clustername.GetClusterName(context.TODO(), hname) + } + return enabled, clusterName +} diff --git a/pkg/orchestrator/config/config_test.go b/pkg/orchestrator/config/config_test.go index 0f581721f5811..a37e590116197 100644 --- a/pkg/orchestrator/config/config_test.go +++ b/pkg/orchestrator/config/config_test.go @@ -122,7 +122,7 @@ func (suite *YamlConfigTestSuite) TestExtractOrchestratorEndpointsPrecedence() { } func (suite *YamlConfigTestSuite) TestEnvConfigDDURL() { - ddOrchestratorURL := "DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_DD_URL" + ddOrchestratorURL := "DD_ORCHESTRATOR_URL" expectedValue := "123.datadoghq.com" suite.T().Setenv(ddOrchestratorURL, expectedValue) @@ -131,6 +131,50 @@ func (suite *YamlConfigTestSuite) TestEnvConfigDDURL() { suite.NoError(err) suite.Equal(expectedValue, orchestratorCfg.OrchestratorEndpoints[0].Endpoint.Path) + + // Override to make sure the precedence + ddOrchestratorURL = "DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_DD_URL" + expectedValue = "456.datadoghq.com" + suite.T().Setenv(ddOrchestratorURL, expectedValue) + err = orchestratorCfg.Load() + suite.NoError(err) + + suite.Equal(expectedValue, orchestratorCfg.OrchestratorEndpoints[0].Endpoint.Path) +} + +func (suite *YamlConfigTestSuite) TestEnvConfigAdditionalEndpoints() { + suite.T().Setenv("DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS", `{"https://process1.com": ["key1"], "https://process2.com": ["key2"]}`) + + expected := map[string]string{ + "key1": "process1.com", + "key2": "process2.com", + } + + actualEndpoints := []apicfg.Endpoint{} + err := extractOrchestratorAdditionalEndpoints(&url.URL{}, &actualEndpoints) + suite.NoError(err) + + suite.Len(actualEndpoints, len(expected)) + for _, actual := range actualEndpoints { + suite.Equal(expected[actual.APIKey], actual.Endpoint.Hostname()) + } + + // Override to make sure the precedence + suite.T().Setenv("DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_ADDITIONAL_ENDPOINTS", `{"https://orchestrator1.com": ["key1"], "https://orchestrator2.com": ["key2", "key3"]}`) + + expected = map[string]string{ + "key1": "orchestrator1.com", + "key2": "orchestrator2.com", + "key3": "orchestrator2.com", + } + + actualEndpoints = []apicfg.Endpoint{} + err = extractOrchestratorAdditionalEndpoints(&url.URL{}, &actualEndpoints) + suite.NoError(err) + suite.Len(actualEndpoints, len(expected)) + for _, actual := range actualEndpoints { + suite.Equal(expected[actual.APIKey], actual.Endpoint.Hostname()) + } } func (suite *YamlConfigTestSuite) TestEnvConfigMessageSize() { diff --git a/pkg/orchestrator/redact/pod.go b/pkg/orchestrator/redact/pod.go index f1492488eba43..84bdfd2a678c4 100644 --- a/pkg/orchestrator/redact/pod.go +++ b/pkg/orchestrator/redact/pod.go @@ -79,7 +79,7 @@ func ScrubContainer(c *v1.Container, scrubber *DataScrubber) { // RemoveLastAppliedConfigurationAnnotation redacts the whole "kubectl.kubernetes.io/last-applied-configuration" annotation. As it may contain duplicate information and secrets. func RemoveLastAppliedConfigurationAnnotation(annotations map[string]string) { - if _, found := annotations["kubectl.kubernetes.io/last-applied-configuration"]; found { - annotations["kubectl.kubernetes.io/last-applied-configuration"] = replacedValue + if _, found := annotations[v1.LastAppliedConfigAnnotation]; found { + annotations[v1.LastAppliedConfigAnnotation] = replacedValue } } diff --git a/pkg/orchestrator/util.go b/pkg/orchestrator/util.go index cc099d20b3de8..b723ec7376c07 100644 --- a/pkg/orchestrator/util.go +++ b/pkg/orchestrator/util.go @@ -58,6 +58,12 @@ const ( K8sDeployment // K8sNamespace represents a Kubernetes Namespace K8sNamespace + // K8sCRD represents a Kubernetes CRD + K8sCRD + // K8sCR represents a Kubernetes CR + K8sCR + // K8sVerticalPodAutoscaler represents a Kubernetes VerticalPod Autoscaler + K8sVerticalPodAutoscaler ) // NodeTypes returns the current existing NodesTypes as a slice to iterate over. @@ -82,6 +88,9 @@ func NodeTypes() []NodeType { K8sServiceAccount, K8sIngress, K8sNamespace, + K8sCR, + K8sCRD, + K8sVerticalPodAutoscaler, } } @@ -125,10 +134,16 @@ func (n NodeType) String() string { return "Ingress" case K8sNamespace: return "Namespace" + case K8sCRD: + return "CustomResourceDefinition" + case K8sCR: + return "CustomResource" + case K8sVerticalPodAutoscaler: + return "VerticalPodAutoscaler" case K8sUnsetType: return "UnsetType" default: - log.Errorf("Trying to convert unknown NodeType iota: %d", n) + _ = log.Errorf("Trying to convert unknown NodeType iota: %d", n) return "Unknown" } } @@ -154,7 +169,10 @@ func (n NodeType) Orchestrator() string { K8sClusterRoleBinding, K8sServiceAccount, K8sIngress, + K8sCRD, + K8sCR, K8sNamespace, + K8sVerticalPodAutoscaler, K8sUnsetType: return "k8s" default: @@ -180,28 +198,6 @@ func getTelemetryTags(n NodeType) []string { } } -// ChunkRange returns the chunk start and end for an iteration. -func ChunkRange(numberOfElements, chunkCount, chunkSize, counter int) (int, int) { - var ( - chunkStart = chunkSize * (counter - 1) - chunkEnd = chunkSize * (counter) - ) - // last chunk may be smaller than the chunk size - if counter == chunkCount { - chunkEnd = numberOfElements - } - return chunkStart, chunkEnd -} - -// GroupSize returns the GroupSize/number of chunks. -func GroupSize(msgs, maxPerMessage int) int { - groupSize := msgs / maxPerMessage - if msgs%maxPerMessage > 0 { - groupSize++ - } - return groupSize -} - // SetCacheStats sets the cache stats for each resource func SetCacheStats(resourceListLen int, resourceMsgLen int, nodeType NodeType) { stats := CheckStats{ diff --git a/pkg/orchestrator/util_test.go b/pkg/orchestrator/util_test.go deleted file mode 100644 index 1b96e647ef381..0000000000000 --- a/pkg/orchestrator/util_test.go +++ /dev/null @@ -1,90 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package orchestrator - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -// TestChunkRange tests the chunking function. Note that the chunkCount is actually not given but calculated by the function GroupSize -func TestChunkRange(t *testing.T) { - type want struct { - start int - end int - } - tests := []struct { - name string - chunkCount int - chunkSize int - elements int - want []want - }{ - { - name: "no chunks", - chunkCount: 0, - chunkSize: 0, - elements: 10, - want: []want{{}}, - }, - { - name: "3 chunks, size 1, 10 elements", - chunkCount: 3, - chunkSize: 1, - elements: 10, - want: []want{{0, 1}, {1, 2}, {2, 10}}, - }, { - - name: "2 chunks, size 2, 5 elements", - chunkCount: 2, - chunkSize: 2, - elements: 5, - want: []want{{0, 2}, {2, 5}}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - for counter := 1; counter <= tt.chunkCount; counter++ { - chunkStart, chunkEnd := ChunkRange(tt.elements, tt.chunkCount, tt.chunkSize, counter) - assert.Equal(t, tt.want[counter-1].start, chunkStart) - assert.Equal(t, tt.want[counter-1].end, chunkEnd) - } - }) - } -} - -func TestGroupSize(t *testing.T) { - tests := []struct { - name string - msgs int - maxPerMessage int - want int - }{ - { - name: "10 groups", - msgs: 100, - maxPerMessage: 10, - want: 10, - }, { - name: "1 group because max>msgs", - msgs: 100, - maxPerMessage: 10000, - want: 1, - }, { - name: "3 groups to account leftover chunks", - msgs: 5, - maxPerMessage: 2, - want: 3, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - groupSize := GroupSize(tt.msgs, tt.maxPerMessage) - assert.Equal(t, tt.want, groupSize) - }) - } -} diff --git a/pkg/otlp/collector.go b/pkg/otlp/collector.go index 6025abb43be5a..6906f5ead7611 100644 --- a/pkg/otlp/collector.go +++ b/pkg/otlp/collector.go @@ -13,11 +13,14 @@ import ( "fmt" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/loggingexporter" "go.opentelemetry.io/collector/exporter/otlpexporter" + "go.opentelemetry.io/collector/extension" + "go.opentelemetry.io/collector/otelcol" "go.opentelemetry.io/collector/processor/batchprocessor" + "go.opentelemetry.io/collector/receiver" "go.opentelemetry.io/collector/receiver/otlpreceiver" - "go.opentelemetry.io/collector/service" "go.uber.org/atomic" "go.uber.org/multierr" "go.uber.org/zap" @@ -42,19 +45,19 @@ func getComponents(s serializer.MetricSerializer) ( ) { var errs []error - extensions, err := component.MakeExtensionFactoryMap() + extensions, err := extension.MakeFactoryMap() if err != nil { errs = append(errs, err) } - receivers, err := component.MakeReceiverFactoryMap( + receivers, err := receiver.MakeFactoryMap( otlpreceiver.NewFactory(), ) if err != nil { errs = append(errs, err) } - exporters, err := component.MakeExporterFactoryMap( + exporters, err := exporter.MakeFactoryMap( otlpexporter.NewFactory(), serializerexporter.NewFactory(s), loggingexporter.NewFactory(), @@ -132,7 +135,7 @@ func (p *PipelineConfig) shouldSetLoggingSection() bool { // Pipeline is an OTLP pipeline. type Pipeline struct { - col *service.Collector + col *otelcol.Collector } // CollectorStatus is the status struct for an OTLP pipeline's collector @@ -164,7 +167,7 @@ func NewPipeline(cfg PipelineConfig, s serializer.MetricSerializer) (*Pipeline, return nil, fmt.Errorf("failed to build configuration provider: %w", err) } - col, err := service.New(service.CollectorSettings{ + col, err := otelcol.NewCollector(otelcol.CollectorSettings{ Factories: factories, BuildInfo: buildInfo, DisableGracefulShutdown: true, diff --git a/pkg/otlp/collector_test.go b/pkg/otlp/collector_test.go index 6ed27b5d82752..92f9eb69b3135 100644 --- a/pkg/otlp/collector_test.go +++ b/pkg/otlp/collector_test.go @@ -14,13 +14,12 @@ import ( "testing" "time" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/service" - "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/otlp/internal/testutil" "github.com/DataDog/datadog-agent/pkg/serializer" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/otelcol" ) func TestGetComponents(t *testing.T) { @@ -42,7 +41,7 @@ func AssertSucessfulRun(t *testing.T, pcfg PipelineConfig) { }() assert.Eventually(t, func() bool { - return service.Running == p.col.GetState() + return otelcol.StateRunning == p.col.GetState() }, time.Second*2, time.Millisecond*200) p.Stop() @@ -50,7 +49,7 @@ func AssertSucessfulRun(t *testing.T, pcfg PipelineConfig) { <-colDone assert.Eventually(t, func() bool { - return service.StateClosed == p.col.GetState() + return otelcol.StateClosed == p.col.GetState() }, time.Second*2, time.Millisecond*200) } @@ -96,13 +95,13 @@ func TestStartPipelineFromConfig(t *testing.T) { }{ { path: "receiver/noprotocols.yaml", - err: "receiver \"otlp\" has invalid configuration: must specify at least one protocol when using the OTLP receiver", + err: "invalid configuration: receivers::otlp: must specify at least one protocol when using the OTLP receiver", }, {path: "receiver/simple.yaml"}, {path: "receiver/advanced.yaml"}, { path: "receiver/typo.yaml", - err: "error decoding 'receivers': error reading receivers configuration for \"otlp\": 1 error(s) decoding:\n\n* 'protocols' has invalid keys: htttp", + err: "error decoding 'receivers': error reading configuration for \"otlp\": 1 error(s) decoding:\n\n* 'protocols' has invalid keys: htttp", }, } diff --git a/pkg/otlp/example/metric/README.md b/pkg/otlp/example/metric/README.md new file mode 100644 index 0000000000000..8a05d0e4de5ae --- /dev/null +++ b/pkg/otlp/example/metric/README.md @@ -0,0 +1,16 @@ +# OTLP Metric Exporter Sample App + +This sample application exports 1 count metric, 1 sum metric and 1 histogram metric via OTLP metric exporter. +It can be configured to export to either Datadog Agent OTLP metric intake or OpenTelemtry Collector OTLP receiver. + +## Usage + +``` +go build . +./metric [http | grpc] [endpoint] [delta | cumulative] +``` + +All arguments are optional. +- The 1st arg specifies which protocol to use, default is gRPC. +- The 2nd arg specifies the metric intake endpoint. Default is `localhost:4317` for gRPC and `localhost:4318` for HTTP. +- The 3rd arg specifies the metric aggregation temporality, default is `cumulative`. \ No newline at end of file diff --git a/pkg/otlp/example/metric/doc.go b/pkg/otlp/example/metric/doc.go new file mode 100644 index 0000000000000..f3292257edc59 --- /dev/null +++ b/pkg/otlp/example/metric/doc.go @@ -0,0 +1,7 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2021-present Datadog, Inc. + +// Package main provides a code sample of using otlpmetric exporter. +package main diff --git a/pkg/otlp/example/metric/go.mod b/pkg/otlp/example/metric/go.mod new file mode 100644 index 0000000000000..acb28f03dde6b --- /dev/null +++ b/pkg/otlp/example/metric/go.mod @@ -0,0 +1,30 @@ +module github.com/DataDog/datadog-agent/pkg/otlp/example/metric + +go 1.19 + +require ( + go.opentelemetry.io/otel v1.11.2 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.34.0 + go.opentelemetry.io/otel/metric v0.34.0 + go.opentelemetry.io/otel/sdk v1.11.2 + go.opentelemetry.io/otel/sdk/metric v0.34.0 +) + +require ( + github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 // indirect + go.opentelemetry.io/otel/trace v1.11.2 // indirect + go.opentelemetry.io/proto/otlp v0.19.0 // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect + golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 // indirect + golang.org/x/text v0.4.0 // indirect + google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 // indirect + google.golang.org/grpc v1.51.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect +) diff --git a/pkg/otlp/example/metric/go.sum b/pkg/otlp/example/metric/go.sum new file mode 100644 index 0000000000000..5f1452a9c173a --- /dev/null +++ b/pkg/otlp/example/metric/go.sum @@ -0,0 +1,446 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= +go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 h1:htgM8vZIF8oPSCxa341e3IZ4yr/sKxgu8KZYllByiVY= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 h1:kpskzLZ60cJ48SJ4uxWa6waBL+4kSV6nVK8rP+QM8Wg= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0/go.mod h1:4+x3i62TEegDHuzNva0bMcAN8oUi5w4liGb1d/VgPYo= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 h1:e7kFb4pJLbhJgAwUdoVTHzB9pGujs5O8/7gFyZL88fg= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0/go.mod h1:3x00m9exjIbhK+zTO4MsCSlfbVmgvLP0wjDgDKa/8bw= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.34.0 h1:t4Ajxj8JGjxkqoBtbkCOY2cDUl9RwiNE9LPQavooi9U= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.34.0/go.mod h1:WO7omosl4P7JoanH9NgInxDxEn2F2M5YinIh8EyeT8w= +go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= +go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= +go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= +go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= +go.opentelemetry.io/otel/sdk/metric v0.34.0 h1:7ElxfQpXCFZlRTvVRTkcUvK8Gt5DC8QzmzsLsO2gdzo= +go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= +go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= +go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 h1:b9mVrqYfq3P4bCdaLg1qtBnPzUYgglsIdjZkL/fQVOE= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/pkg/otlp/example/metric/main.go b/pkg/otlp/example/metric/main.go new file mode 100644 index 0000000000000..0c3e55b9cafd9 --- /dev/null +++ b/pkg/otlp/example/metric/main.go @@ -0,0 +1,148 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2021-present Datadog, Inc. + +package main + +import ( + "context" + "log" + "os" + "time" + + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc" + "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp" + "go.opentelemetry.io/otel/metric/global" + "go.opentelemetry.io/otel/metric/unit" + "go.opentelemetry.io/otel/sdk/instrumentation" + "go.opentelemetry.io/otel/sdk/metric" + "go.opentelemetry.io/otel/sdk/metric/metricdata" + "go.opentelemetry.io/otel/sdk/resource" + semconv "go.opentelemetry.io/otel/semconv/v1.4.0" +) + +var ( + now = time.Now() + + res = resource.NewSchemaless( + semconv.ServiceNameKey.String("otlpmetric-example"), + ) + + min = 0.6 + max = 77.7 + + mockData = metricdata.ResourceMetrics{ + Resource: res, + ScopeMetrics: []metricdata.ScopeMetrics{ + { + Scope: instrumentation.Scope{Name: "example", Version: "v0.0.1"}, + Metrics: []metricdata.Metrics{ + { + Name: "otlp.test.request", + Description: "Number of requests received", + Unit: unit.Dimensionless, + Data: metricdata.Sum[int64]{ + IsMonotonic: true, + Temporality: metricdata.DeltaTemporality, + DataPoints: []metricdata.DataPoint[int64]{ + { + Attributes: attribute.NewSet(attribute.String("server", "central")), + StartTime: now, + Time: now.Add(1 * time.Second), + Value: 5, + }, + }, + }, + }, + { + Name: "otlp.test.latency", + Description: "Time spend processing received requests", + Unit: unit.Milliseconds, + Data: metricdata.Histogram{ + Temporality: metricdata.DeltaTemporality, + DataPoints: []metricdata.HistogramDataPoint{ + { + Attributes: attribute.NewSet(attribute.String("server", "central")), + StartTime: now, + Time: now.Add(1 * time.Second), + Count: 10, + Bounds: []float64{1, 5, 10}, + BucketCounts: []uint64{1, 3, 6, 0}, + Sum: 57, + Min: &min, + Max: &max, + }, + }, + }, + }, + { + Name: "otlp.test.temperature", + Description: "CPU global temperature", + Unit: unit.Unit("cel(1 K)"), + Data: metricdata.Gauge[float64]{ + DataPoints: []metricdata.DataPoint[float64]{ + { + Attributes: attribute.NewSet(attribute.String("server", "central")), + Time: now.Add(1 * time.Second), + Value: 32.4, + }, + }, + }, + }, + }, + }, + }, + } +) + +func deltaSelector(metric.InstrumentKind) metricdata.Temporality { + return metricdata.DeltaTemporality +} + +func main() { + var protocol string + if len(os.Args) > 1 { + protocol = os.Args[1] + } + grpcExpOpt := []otlpmetricgrpc.Option{otlpmetricgrpc.WithInsecure()} + httpExpOpt := []otlpmetrichttp.Option{otlpmetrichttp.WithInsecure()} + if len(os.Args) > 2 { + grpcExpOpt = append(grpcExpOpt, otlpmetricgrpc.WithEndpoint(os.Args[2])) + httpExpOpt = append(httpExpOpt, otlpmetrichttp.WithEndpoint(os.Args[2])) + } + if len(os.Args) > 3 && os.Args[3] == "delta" { + grpcExpOpt = append(grpcExpOpt, otlpmetricgrpc.WithTemporalitySelector(deltaSelector)) + httpExpOpt = append(httpExpOpt, otlpmetrichttp.WithTemporalitySelector(deltaSelector)) + } + + ctx := context.Background() + var exp metric.Exporter + var err error + if protocol == "http" { + exp, err = otlpmetrichttp.New(ctx, httpExpOpt...) + } else { + exp, err = otlpmetricgrpc.New(ctx, grpcExpOpt...) + } + if err != nil { + log.Fatal(err) + } + + sdk := metric.NewMeterProvider(metric.WithReader(metric.NewPeriodicReader(exp))) + global.SetMeterProvider(sdk) + + // This is where the sdk would be used to create a Meter and from that + // instruments that would make measurments of your code. To simulate that + // behavior, call export directly with mocked data. + err = exp.Export(ctx, mockData) + if err != nil { + panic(err) + } + + // Ensure the periodic reader is cleaned up by shutting down the sdk. + err = sdk.Shutdown(ctx) + if err != nil { + panic(err) + } +} diff --git a/pkg/otlp/internal/configutils/utils.go b/pkg/otlp/internal/configutils/utils.go index 68084f43e7d95..b2f90bd133447 100644 --- a/pkg/otlp/internal/configutils/utils.go +++ b/pkg/otlp/internal/configutils/utils.go @@ -12,7 +12,7 @@ import ( "strings" "go.opentelemetry.io/collector/confmap" - "go.opentelemetry.io/collector/service" + "go.opentelemetry.io/collector/otelcol" "gopkg.in/yaml.v2" ) @@ -62,9 +62,9 @@ func (m *mapProvider) Shutdown(context.Context) error { } // NewConfigProviderFromMap creates a service.ConfigProvider with a single constant provider `map`, built from a given *confmap.Conf. -func NewConfigProviderFromMap(cfg *confmap.Conf) service.ConfigProvider { +func NewConfigProviderFromMap(cfg *confmap.Conf) otelcol.ConfigProvider { provider := &mapProvider{cfg} - settings := service.ConfigProviderSettings{ + settings := otelcol.ConfigProviderSettings{ ResolverSettings: confmap.ResolverSettings{ URIs: []string{mapLocation}, Providers: map[string]confmap.Provider{ @@ -72,7 +72,7 @@ func NewConfigProviderFromMap(cfg *confmap.Conf) service.ConfigProvider { }, Converters: []confmap.Converter{}, }} - cp, err := service.NewConfigProvider(settings) + cp, err := otelcol.NewConfigProvider(settings) if err != nil { panic(err) } diff --git a/pkg/otlp/internal/configutils/utils_test.go b/pkg/otlp/internal/configutils/utils_test.go index ecc2adcbef65c..0a05ceddd20b1 100644 --- a/pkg/otlp/internal/configutils/utils_test.go +++ b/pkg/otlp/internal/configutils/utils_test.go @@ -13,30 +13,33 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/confmap/converter/expandconverter" "go.opentelemetry.io/collector/confmap/provider/envprovider" "go.opentelemetry.io/collector/confmap/provider/fileprovider" "go.opentelemetry.io/collector/confmap/provider/yamlprovider" + "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/otlpexporter" + "go.opentelemetry.io/collector/extension" + "go.opentelemetry.io/collector/otelcol" + "go.opentelemetry.io/collector/processor" + "go.opentelemetry.io/collector/receiver" "go.opentelemetry.io/collector/receiver/otlpreceiver" - "go.opentelemetry.io/collector/service" ) const testPath = "./testdata/pipeline.yaml" -func buildTestFactories(t *testing.T) component.Factories { - extensions, err := component.MakeExtensionFactoryMap() +func buildTestFactories(t *testing.T) otelcol.Factories { + extensions, err := extension.MakeFactoryMap() require.NoError(t, err) - processors, err := component.MakeProcessorFactoryMap() + processors, err := processor.MakeFactoryMap() require.NoError(t, err) - exporters, err := component.MakeExporterFactoryMap(otlpexporter.NewFactory()) + exporters, err := exporter.MakeFactoryMap(otlpexporter.NewFactory()) require.NoError(t, err) - receivers, err := component.MakeReceiverFactoryMap(otlpreceiver.NewFactory()) + receivers, err := receiver.MakeFactoryMap(otlpreceiver.NewFactory()) require.NoError(t, err) - return component.Factories{ + return otelcol.Factories{ Extensions: extensions, Receivers: receivers, Processors: processors, @@ -53,14 +56,14 @@ func TestNewConfigProviderFromMap(t *testing.T) { mapProvider := NewConfigProviderFromMap(cfgMap) // build default provider from same data - settings := service.ConfigProviderSettings{ + settings := otelcol.ConfigProviderSettings{ ResolverSettings: confmap.ResolverSettings{ URIs: []string{fmt.Sprintf("file:%s", testPath)}, Providers: makeConfigMapProviderMap(fileprovider.New(), envprovider.New(), yamlprovider.New()), Converters: []confmap.Converter{expandconverter.New()}, }, } - defaultProvider, err := service.NewConfigProvider(settings) + defaultProvider, err := otelcol.NewConfigProvider(settings) require.NoError(t, err) // Get config.Config from both diff --git a/pkg/otlp/internal/serializerexporter/consumer.go b/pkg/otlp/internal/serializerexporter/consumer.go index 8557eee793cbf..6a546f717dad1 100644 --- a/pkg/otlp/internal/serializerexporter/consumer.go +++ b/pkg/otlp/internal/serializerexporter/consumer.go @@ -6,21 +6,26 @@ package serializerexporter import ( + "bytes" "context" "fmt" + "io" + "net/http" "time" "go.uber.org/multierr" + "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/metrics" - "github.com/DataDog/datadog-agent/pkg/otlp/model/translator" "github.com/DataDog/datadog-agent/pkg/quantile" "github.com/DataDog/datadog-agent/pkg/serializer" "github.com/DataDog/datadog-agent/pkg/tagger" "github.com/DataDog/datadog-agent/pkg/tagger/collectors" "github.com/DataDog/datadog-agent/pkg/tagset" + "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/tinylib/msgp/msgp" ) var _ translator.Consumer = (*serializerConsumer)(nil) @@ -30,6 +35,7 @@ type serializerConsumer struct { extraTags []string series metrics.Series sketches metrics.SketchSeriesList + apmstats []io.Reader } // enrichedTags of a given dimension. @@ -56,6 +62,17 @@ func (c *serializerConsumer) enrichedTags(dimensions *translator.Dimensions) []s return enrichedTags } +func (c *serializerConsumer) ConsumeAPMStats(ss pb.ClientStatsPayload) { + log.Tracef("Serializing %d client stats buckets.", len(ss.Stats)) + ss.Tags = append(ss.Tags, c.extraTags...) + body := new(bytes.Buffer) + if err := msgp.Encode(body, &ss); err != nil { + log.Errorf("Error encoding ClientStatsPayload: %v", err) + return + } + c.apmstats = append(c.apmstats, body) +} + func (c *serializerConsumer) ConsumeSketch(_ context.Context, dimensions *translator.Dimensions, ts uint64, qsketch *quantile.Sketch) { c.sketches = append(c.sketches, &metrics.SketchSeries{ Name: dimensions.Name(), @@ -104,10 +121,9 @@ func (c *serializerConsumer) addTelemetryMetric(hostname string) { }) } -// flush all metrics and sketches in consumer. -func (c *serializerConsumer) flush(s serializer.MetricSerializer) error { - var serieErr error - var sketchesErr error +// Send exports all data recorded by the consumer. It does not reset the consumer. +func (c *serializerConsumer) Send(s serializer.MetricSerializer) error { + var serieErr, sketchesErr error metrics.Serialize( metrics.NewIterableSeries(func(se *metrics.Serie) {}, 200, 4000), metrics.NewIterableSketches(func(se *metrics.SketchSeries) {}, 200, 4000), @@ -122,7 +138,27 @@ func (c *serializerConsumer) flush(s serializer.MetricSerializer) error { serieErr = s.SendIterableSeries(serieSource) }, func(sketchesSource metrics.SketchesSource) { sketchesErr = s.SendSketch(sketchesSource) - }) + }, + ) + + apmErr := c.sendAPMStats() + return multierr.Combine(serieErr, sketchesErr, apmErr) +} - return multierr.Append(serieErr, sketchesErr) +func (c *serializerConsumer) sendAPMStats() error { + addr := fmt.Sprintf("http://localhost:%s/v0.6/stats", config.Datadog.GetString("apm_config.receiver_port")) + log.Debugf("Exporting %d APM stats payloads", len(c.apmstats)) + for _, body := range c.apmstats { + resp, err := http.Post(addr, "application/msgpack", body) + if err != nil { + return fmt.Errorf("could not flush StatsPayload: %v", err) + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + peek := make([]byte, 1024) + n, _ := resp.Body.Read(peek) + return fmt.Errorf("could not flush StatsPayload: HTTP Status code == %s %s", resp.Status, string(peek[:n])) + } + } + return nil } diff --git a/pkg/otlp/internal/serializerexporter/consumer_test.go b/pkg/otlp/internal/serializerexporter/consumer_test.go new file mode 100644 index 0000000000000..2bb9dc92975f7 --- /dev/null +++ b/pkg/otlp/internal/serializerexporter/consumer_test.go @@ -0,0 +1,213 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package serializerexporter + +import ( + "bytes" + "io" + "net" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/metrics" + "github.com/DataDog/datadog-agent/pkg/serializer" + "github.com/DataDog/datadog-agent/pkg/serializer/marshaler" + "github.com/DataDog/datadog-agent/pkg/trace/pb" + "github.com/stretchr/testify/require" + "github.com/tinylib/msgp/msgp" +) + +var statsPayloads = []pb.ClientStatsPayload{ + { + Hostname: "host", + Env: "prod", + Version: "v1.2", + Lang: "go", + TracerVersion: "v44", + RuntimeID: "123jkl", + Sequence: 2, + AgentAggregation: "blah", + Service: "mysql", + ContainerID: "abcdef123456", + Tags: []string{"a:b", "c:d"}, + Stats: []pb.ClientStatsBucket{ + { + Start: 10, + Duration: 1, + Stats: []pb.ClientGroupedStats{ + { + Service: "kafka", + Name: "queue.add", + Resource: "append", + HTTPStatusCode: 220, + Type: "queue", + Hits: 15, + Errors: 3, + Duration: 143, + OkSummary: []byte{1, 2, 3}, + ErrorSummary: []byte{4, 5, 6}, + TopLevelHits: 5, + }, + }, + }, + }, + }, + { + Hostname: "host2", + Env: "prod2", + Version: "v1.22", + Lang: "go2", + TracerVersion: "v442", + RuntimeID: "123jkl2", + Sequence: 22, + AgentAggregation: "blah2", + Service: "mysql2", + ContainerID: "abcdef1234562", + Tags: []string{"a:b2", "c:d2"}, + Stats: []pb.ClientStatsBucket{ + { + Start: 102, + Duration: 12, + Stats: []pb.ClientGroupedStats{ + { + Service: "kafka2", + Name: "queue.add2", + Resource: "append2", + HTTPStatusCode: 2202, + Type: "queue2", + Hits: 152, + Errors: 32, + Duration: 1432, + OkSummary: []byte{1, 2, 3}, + ErrorSummary: []byte{4, 5, 6}, + TopLevelHits: 52, + }, + }, + }, + }, + }, +} + +func TestConsumeAPMStats(t *testing.T) { + sc := serializerConsumer{extraTags: []string{"k:v"}} + sc.ConsumeAPMStats(statsPayloads[0]) + require.Len(t, sc.apmstats, 1) + sc.ConsumeAPMStats(statsPayloads[1]) + require.Len(t, sc.apmstats, 2) + + var one, two pb.ClientStatsPayload + err := msgp.Decode(sc.apmstats[0], &one) + require.NoError(t, err) + err = msgp.Decode(sc.apmstats[1], &two) + require.NoError(t, err) + // We add back the tags to the originally added statsPayloads because that's + // what we need to compare against: ConsumeAPMStats adds the extraTags + statsPayloads[0].Tags = append(statsPayloads[0].Tags, sc.extraTags...) + statsPayloads[1].Tags = append(statsPayloads[1].Tags, sc.extraTags...) + require.Equal(t, one, statsPayloads[0]) + require.Equal(t, two, statsPayloads[1]) +} + +func TestSendAPMStats(t *testing.T) { + withHandler := func(response http.Handler) *httptest.Server { + srv := httptest.NewServer(response) + _, port, err := net.SplitHostPort(srv.Listener.Addr().String()) + require.NoError(t, err) + const cfgkey = "apm_config.receiver_port" + config.Datadog.Set(cfgkey, port) + defer func(old string) { config.Datadog.Set(cfgkey, old) }(config.Datadog.GetString(cfgkey)) + return srv + } + + t.Run("ok", func(t *testing.T) { + var called int + srv := withHandler(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + require.Equal(t, req.URL.Path, "/v0.6/stats") + var in pb.ClientStatsPayload + err := msgp.Decode(req.Body, &in) + defer req.Body.Close() + require.NoError(t, err) + require.Equal(t, statsPayloads[called], in) + called++ + })) + defer srv.Close() + + var sc serializerConsumer + sc.ConsumeAPMStats(statsPayloads[0]) + sc.ConsumeAPMStats(statsPayloads[1]) + err := sc.Send(&MockSerializer{}) + require.NoError(t, err) + require.Equal(t, called, 2) + }) + + t.Run("error", func(t *testing.T) { + var called int + srv := withHandler(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + io.Copy(io.Discard, req.Body) + req.Body.Close() + w.WriteHeader(http.StatusInternalServerError) + called++ + })) + defer srv.Close() + + var sc serializerConsumer + sc.ConsumeAPMStats(statsPayloads[0]) + err := sc.Send(&MockSerializer{}) + require.ErrorContains(t, err, "HTTP Status code == 500 Internal Server Error") + require.Equal(t, called, 1) + }) + + t.Run("error-msg", func(t *testing.T) { + var called int + srv := withHandler(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + io.Copy(io.Discard, req.Body) + req.Body.Close() + w.WriteHeader(http.StatusInternalServerError) + w.Write(bytes.Repeat([]byte{'A'}, 2000)) + called++ + })) + defer srv.Close() + + var sc serializerConsumer + sc.ConsumeAPMStats(statsPayloads[0]) + err := sc.Send(&MockSerializer{}) + require.ErrorContains(t, err, "HTTP Status code == 500 Internal Server Error "+strings.Repeat("A", 1024)) + require.Equal(t, called, 1) + }) +} + +// MockSerializer implements a no-op serializer.MetricSerializer. +type MockSerializer struct{} + +func (m *MockSerializer) SendEvents(_ metrics.Events) error { return nil } +func (m *MockSerializer) SendServiceChecks(_ metrics.ServiceChecks) error { return nil } +func (m *MockSerializer) SendIterableSeries(_ metrics.SerieSource) error { return nil } +func (m *MockSerializer) AreSeriesEnabled() bool { return true } +func (m *MockSerializer) SendSketch(_ metrics.SketchesSource) error { return nil } +func (m *MockSerializer) AreSketchesEnabled() bool { return true } +func (m *MockSerializer) SendMetadata(_ marshaler.JSONMarshaler) error { return nil } +func (m *MockSerializer) SendHostMetadata(_ marshaler.JSONMarshaler) error { return nil } +func (m *MockSerializer) SendProcessesMetadata(_ interface{}) error { return nil } +func (m *MockSerializer) SendAgentchecksMetadata(_ marshaler.JSONMarshaler) error { return nil } + +func (m *MockSerializer) SendOrchestratorMetadata(_ []serializer.ProcessMessageBody, _, _ string, _ int) error { + return nil +} + +func (m *MockSerializer) SendOrchestratorManifests(_ []serializer.ProcessMessageBody, _, _ string) error { + return nil +} + +func (m *MockSerializer) SendContainerLifecycleEvent(_ []serializer.ContainerLifecycleMessage, _ string) error { + return nil +} + +func (m *MockSerializer) SendContainerImage(_ []serializer.ContainerImageMessage, _ string) error { + return nil +} diff --git a/pkg/otlp/internal/serializerexporter/exporter.go b/pkg/otlp/internal/serializerexporter/exporter.go index 7166282521053..d109e59ab33d1 100644 --- a/pkg/otlp/internal/serializerexporter/exporter.go +++ b/pkg/otlp/internal/serializerexporter/exporter.go @@ -10,7 +10,6 @@ import ( "fmt" "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/exporter/exporterhelper" "go.opentelemetry.io/collector/pdata/pmetric" "go.uber.org/zap" @@ -23,11 +22,10 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/hostname" ) -var _ component.ExporterConfig = (*exporterConfig)(nil) +var _ component.Config = (*exporterConfig)(nil) -func newDefaultConfig() component.ExporterConfig { +func newDefaultConfig() component.Config { return &exporterConfig{ - ExporterSettings: config.NewExporterSettings(component.NewID(TypeStr)), // Disable timeout; we don't really do HTTP requests on the ConsumeMetrics call. TimeoutSettings: exporterhelper.TimeoutSettings{Timeout: 0}, // TODO (AP-1294): Fine-tune queue settings and look into retry settings. @@ -174,7 +172,7 @@ func (e *exporter) ConsumeMetrics(ctx context.Context, ld pmetric.Metrics) error } consumer.addTelemetryMetric(e.hostname) - if err := consumer.flush(e.s); err != nil { + if err := consumer.Send(e.s); err != nil { return fmt.Errorf("failed to flush metrics: %w", err) } return nil diff --git a/pkg/otlp/internal/serializerexporter/exporter_test.go b/pkg/otlp/internal/serializerexporter/exporter_test.go index 90665e63d44f6..5984734044079 100644 --- a/pkg/otlp/internal/serializerexporter/exporter_test.go +++ b/pkg/otlp/internal/serializerexporter/exporter_test.go @@ -77,6 +77,12 @@ func Test_ConsumeMetrics_Tags(t *testing.T) { n.SetIntValue(777) return newMetrics(histogramMetricName, h, numberMetricName, n) }, + setConfig: func(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + t.Cleanup(func() { + defer config.SetDetectedFeatures(nil) + }) + }, wantSketchTags: tagset.NewCompositeTags([]string{}, nil), wantSerieTags: tagset.NewCompositeTags([]string{}, nil), }, @@ -101,10 +107,10 @@ func Test_ConsumeMetrics_Tags(t *testing.T) { return newMetrics(histogramMetricName, h, numberMetricName, n) }, setConfig: func(t *testing.T) { - config.Datadog.SetDefault("eks_fargate", true) + config.SetDetectedFeatures(config.FeatureMap{config.EKSFargate: struct{}{}}) config.Datadog.SetDefault("tags", []string{"serverless_tag1:test1", "serverless_tag2:test2", "serverless_tag3:test3"}) t.Cleanup(func() { - config.Datadog.SetDefault("eks_fargate", false) + defer config.SetDetectedFeatures(nil) config.Datadog.SetDefault("tags", []string{}) }) }, diff --git a/pkg/otlp/internal/serializerexporter/factory.go b/pkg/otlp/internal/serializerexporter/factory.go index 252253487d13c..871d8e4c9ef13 100644 --- a/pkg/otlp/internal/serializerexporter/factory.go +++ b/pkg/otlp/internal/serializerexporter/factory.go @@ -10,6 +10,7 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry" "go.opentelemetry.io/collector/component" + exp "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/exporterhelper" "github.com/DataDog/datadog-agent/pkg/serializer" @@ -26,25 +27,25 @@ type factory struct { } // NewFactory creates a new serializer exporter factory. -func NewFactory(s serializer.MetricSerializer) component.ExporterFactory { +func NewFactory(s serializer.MetricSerializer) exp.Factory { f := &factory{s} - return component.NewExporterFactory( + return exp.NewFactory( TypeStr, newDefaultConfig, - component.WithMetricsExporter(f.createMetricExporter, stability), + exp.WithMetrics(f.createMetricExporter, stability), ) } -func (f *factory) createMetricExporter(ctx context.Context, params component.ExporterCreateSettings, c component.ExporterConfig) (component.MetricsExporter, error) { +func (f *factory) createMetricExporter(ctx context.Context, params exp.CreateSettings, c component.Config) (exp.Metrics, error) { cfg := c.(*exporterConfig) - exp, err := newExporter(params.Logger, f.s, cfg) + newExp, err := newExporter(params.Logger, f.s, cfg) if err != nil { return nil, err } - exporter, err := exporterhelper.NewMetricsExporter(ctx, params, cfg, exp.ConsumeMetrics, + exporter, err := exporterhelper.NewMetricsExporter(ctx, params, cfg, newExp.ConsumeMetrics, exporterhelper.WithQueue(cfg.QueueSettings), exporterhelper.WithTimeout(cfg.TimeoutSettings), ) diff --git a/pkg/otlp/internal/serializerexporter/factory_test.go b/pkg/otlp/internal/serializerexporter/factory_test.go index cb94602a19bd5..90ae564e08d47 100644 --- a/pkg/otlp/internal/serializerexporter/factory_test.go +++ b/pkg/otlp/internal/serializerexporter/factory_test.go @@ -12,8 +12,10 @@ import ( "context" "testing" + "github.com/DataDog/datadog-agent/pkg/config" "github.com/stretchr/testify/assert" "go.opentelemetry.io/collector/component/componenttest" + "go.opentelemetry.io/collector/exporter/exportertest" "github.com/DataDog/datadog-agent/pkg/serializer" ) @@ -27,22 +29,28 @@ func TestNewFactory(t *testing.T) { } func TestNewMetricsExporter(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + factory := NewFactory(&serializer.MockSerializer{}) cfg := factory.CreateDefaultConfig() - set := componenttest.NewNopExporterCreateSettings() + set := exportertest.NewNopCreateSettings() exp, err := factory.CreateMetricsExporter(context.Background(), set, cfg) assert.NoError(t, err) assert.NotNil(t, exp) } func TestNewMetricsExporterInvalid(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + factory := NewFactory(&serializer.MockSerializer{}) cfg := factory.CreateDefaultConfig() expCfg := cfg.(*exporterConfig) expCfg.Metrics.HistConfig.Mode = "InvalidMode" - set := componenttest.NewNopExporterCreateSettings() + set := exportertest.NewNopCreateSettings() _, err := factory.CreateMetricsExporter(context.Background(), set, cfg) assert.Error(t, err) } @@ -51,7 +59,7 @@ func TestNewTracesExporter(t *testing.T) { factory := NewFactory(&serializer.MockSerializer{}) cfg := factory.CreateDefaultConfig() - set := componenttest.NewNopExporterCreateSettings() + set := exportertest.NewNopCreateSettings() _, err := factory.CreateTracesExporter(context.Background(), set, cfg) assert.Error(t, err) } @@ -60,7 +68,7 @@ func TestNewLogsExporter(t *testing.T) { factory := NewFactory(&serializer.MockSerializer{}) cfg := factory.CreateDefaultConfig() - set := componenttest.NewNopExporterCreateSettings() + set := exportertest.NewNopCreateSettings() _, err := factory.CreateLogsExporter(context.Background(), set, cfg) assert.Error(t, err) } diff --git a/pkg/otlp/map_provider.go b/pkg/otlp/map_provider.go index 0b3fe6a73add1..62d936098aec8 100644 --- a/pkg/otlp/map_provider.go +++ b/pkg/otlp/map_provider.go @@ -13,7 +13,7 @@ import ( "strings" "go.opentelemetry.io/collector/confmap" - "go.opentelemetry.io/collector/service" + "go.opentelemetry.io/collector/otelcol" "go.uber.org/multierr" "github.com/DataDog/datadog-agent/pkg/otlp/internal/configutils" @@ -154,7 +154,7 @@ func buildMap(cfg PipelineConfig) (*confmap.Conf, error) { } // newMapProvider creates a service.ConfigProvider with the fixed configuration. -func newMapProvider(cfg PipelineConfig) (service.ConfigProvider, error) { +func newMapProvider(cfg PipelineConfig) (otelcol.ConfigProvider, error) { cfgMap, err := buildMap(cfg) if err != nil { return nil, err diff --git a/pkg/otlp/model/go.mod b/pkg/otlp/model/go.mod index b4ecd0ce9047a..4cfbfc0b26b8e 100644 --- a/pkg/otlp/model/go.mod +++ b/pkg/otlp/model/go.mod @@ -2,15 +2,20 @@ module github.com/DataDog/datadog-agent/pkg/otlp/model go 1.18 -replace github.com/DataDog/datadog-agent/pkg/quantile => ../../quantile +replace ( + github.com/DataDog/datadog-agent/pkg/quantile => ../../quantile + github.com/DataDog/datadog-agent/pkg/trace => ../../trace +) require ( - github.com/DataDog/datadog-agent/pkg/quantile v0.41.0-rc.3 + github.com/DataDog/datadog-agent/pkg/quantile v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/trace v0.42.0-rc.3 github.com/DataDog/sketches-go v1.4.1 + github.com/golang/protobuf v1.5.2 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/stretchr/testify v1.8.1 - go.opentelemetry.io/collector/pdata v0.66.0 - go.opentelemetry.io/collector/semconv v0.66.0 + go.opentelemetry.io/collector/pdata v1.0.0-rc2 + go.opentelemetry.io/collector/semconv v0.68.0 go.uber.org/zap v1.23.0 ) @@ -19,17 +24,18 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.2 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/philhofer/fwd v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.8.0 // indirect + github.com/tinylib/msgp v1.1.6 // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.9.0 // indirect golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect - golang.org/x/sys v0.2.0 // indirect + golang.org/x/sys v0.3.0 // indirect golang.org/x/text v0.4.0 // indirect - google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa // indirect + google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd // indirect google.golang.org/grpc v1.51.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/otlp/model/go.sum b/pkg/otlp/model/go.sum index 32ca08a70ed32..352cca016c330 100644 --- a/pkg/otlp/model/go.sum +++ b/pkg/otlp/model/go.sum @@ -3,16 +3,18 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/sketches-go v1.4.1 h1:j5G6as+9FASM2qC36lvpvQAj9qsv/jUs3FtO8CwZNAY= github.com/DataDog/sketches-go v1.4.1/go.mod h1:xJIXldczJyyjnbDop7ZZcLxJdV3+7Kra7H1KMgpgkLk= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -22,7 +24,7 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -50,6 +52,7 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -59,18 +62,20 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/philhofer/fwd v1.1.1 h1:GdGcTjf5RNAxwS4QLsiMzJYj5KEvPJD3Abr261yRQXQ= +github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -82,19 +87,22 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/tinylib/msgp v1.1.6 h1:i+SbKraHhnrf9M5MYmvQhFnbLhAXSDWF8WWsuyRdocw= +github.com/tinylib/msgp v1.1.6/go.mod h1:75BAfg2hauQhs3qedfdDZmWAPcFMAvJE5b9rGOMufyw= +github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U= +github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opentelemetry.io/collector/pdata v0.66.0 h1:UdE5U6MsDNzuiWaXdjGx2lC3ElVqWmN/hiUE8vyvSuM= -go.opentelemetry.io/collector/pdata v0.66.0/go.mod h1:pqyaznLzk21m+1KL6fwOsRryRELL+zNM0qiVSn0MbVc= -go.opentelemetry.io/collector/semconv v0.66.0 h1:gz4fYzOVOt1EQCcOL6pbSmTRj93pZErjHD+H100pH+4= -go.opentelemetry.io/collector/semconv v0.66.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= +go.opentelemetry.io/collector/pdata v1.0.0-rc2 h1:sNWuA5wlrT578sv+DhADQ3DCRFG+5+H0D2xCHtQmnis= +go.opentelemetry.io/collector/pdata v1.0.0-rc2/go.mod h1:3gknzI1BqPVbEprOIbtaPQgPAYvjRf8kdkpGMJjv14E= +go.opentelemetry.io/collector/semconv v0.68.0 h1:DUDowH6l4OFlecQg8zyffTmUrhu3N9qwr3wtS9Oy6pE= +go.opentelemetry.io/collector/semconv v0.68.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -133,10 +141,11 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -150,6 +159,7 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -158,19 +168,20 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1N golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -193,7 +204,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/pkg/otlp/model/translator/consumer.go b/pkg/otlp/model/translator/consumer.go index 993a62259c4d4..9677efdc7eb20 100644 --- a/pkg/otlp/model/translator/consumer.go +++ b/pkg/otlp/model/translator/consumer.go @@ -20,6 +20,7 @@ import ( "fmt" "github.com/DataDog/datadog-agent/pkg/quantile" + "github.com/DataDog/datadog-agent/pkg/trace/pb" ) // MetricDataType is a timeseries-style metric type. @@ -87,6 +88,14 @@ type SketchConsumer interface { type Consumer interface { TimeSeriesConsumer SketchConsumer + APMStatsConsumer +} + +// APMStatsConsumer implementations are able to consume APM Stats generated by +// a Translator. +type APMStatsConsumer interface { + // ConsumeAPMStats consumes the given StatsPayload. + ConsumeAPMStats(pb.ClientStatsPayload) } // HostConsumer is a hostname consumer. diff --git a/pkg/otlp/model/translator/metrics_translator.go b/pkg/otlp/model/translator/metrics_translator.go index b10b6ecf83257..1436bf822dc46 100644 --- a/pkg/otlp/model/translator/metrics_translator.go +++ b/pkg/otlp/model/translator/metrics_translator.go @@ -16,11 +16,13 @@ package translator import ( "context" + "errors" "fmt" "math" "strconv" "time" + "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" "go.uber.org/zap" @@ -70,13 +72,13 @@ func New(logger *zap.Logger, options ...Option) (*Translator, error) { } if cfg.HistMode == HistogramModeNoBuckets && !cfg.SendCountSum { - return nil, fmt.Errorf("no buckets mode and no send count sum are incompatible") + return nil, errors.New("no buckets mode and no send count sum are incompatible") } cache := newTTLCache(cfg.sweepInterval, cfg.deltaTTL) return &Translator{ prevPts: cache, - logger: logger, + logger: logger.With(zap.String("component", "metrics translator")), cfg: cfg, }, nil } @@ -421,23 +423,36 @@ func (t *Translator) mapSummaryMetrics( } } +func (t *Translator) source(m pcommon.Map) (source.Source, error) { + src, ok := attributes.SourceFromAttributes(m, t.cfg.previewHostnameFromAttributes) + if !ok { + var err error + src, err = t.cfg.fallbackSourceProvider.Source(context.Background()) + if err != nil { + return source.Source{}, fmt.Errorf("failed to get fallback source: %w", err) + } + } + return src, nil +} + // MapMetrics maps OTLP metrics into the DataDog format func (t *Translator) MapMetrics(ctx context.Context, md pmetric.Metrics, consumer Consumer) error { rms := md.ResourceMetrics() for i := 0; i < rms.Len(); i++ { rm := rms.At(i) - - // Fetch tags from attributes. - attributeTags := attributes.TagsFromAttributes(rm.Resource().Attributes()) - src, ok := attributes.SourceFromAttributes(rm.Resource().Attributes(), t.cfg.previewHostnameFromAttributes) - if !ok { - var err error - src, err = t.cfg.fallbackSourceProvider.Source(context.Background()) + if v, ok := rm.Resource().Attributes().Get(keyAPMStats); ok && v.Bool() { + // these resource metrics are an APM Stats payload; consume it as such + sp, err := t.statsPayloadFromMetrics(rm) if err != nil { - return fmt.Errorf("failed to get fallback source: %w", err) + return fmt.Errorf("error extracting APM Stats from Metrics: %w", err) } + consumer.ConsumeAPMStats(sp) + continue + } + src, err := t.source(rm.Resource().Attributes()) + if err != nil { + return err } - var host string switch src.Kind { case source.HostnameKind: @@ -451,6 +466,8 @@ func (t *Translator) MapMetrics(ctx context.Context, md pmetric.Metrics, consume } } + // Fetch tags from attributes. + attributeTags := attributes.TagsFromAttributes(rm.Resource().Attributes()) ilms := rm.ScopeMetrics() for j := 0; j < ilms.Len(); j++ { ilm := ilms.At(j) diff --git a/pkg/otlp/model/translator/metrics_translator_test.go b/pkg/otlp/model/translator/metrics_translator_test.go index 920028e609702..ccc667467731d 100644 --- a/pkg/otlp/model/translator/metrics_translator_test.go +++ b/pkg/otlp/model/translator/metrics_translator_test.go @@ -29,6 +29,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/otlp/model/source" "github.com/DataDog/datadog-agent/pkg/quantile" "github.com/DataDog/datadog-agent/pkg/quantile/summary" + "github.com/DataDog/datadog-agent/pkg/trace/pb" ) func TestIsCumulativeMonotonic(t *testing.T) { @@ -530,6 +531,20 @@ func TestMapDoubleMonotonicReportFirstValue(t *testing.T) { ) } +func TestMapAPMStats(t *testing.T) { + consumer := &mockFullConsumer{} + logger, err := zap.NewDevelopment() + require.NoError(t, err) + tr := newTranslator(t, logger) + md := tr.StatsPayloadToMetrics(pb.StatsPayload{ + Stats: []pb.ClientStatsPayload{statsPayloads[0], statsPayloads[1]}, + }) + + ctx := context.Background() + tr.MapMetrics(ctx, md, consumer) + require.Equal(t, consumer.apmstats, statsPayloads) +} + func TestMapDoubleMonotonicReportDiffForFirstValue(t *testing.T) { ctx := context.Background() tr := newTranslator(t, zap.NewNop()) @@ -580,6 +595,11 @@ var _ SketchConsumer = (*mockFullConsumer)(nil) type mockFullConsumer struct { mockTimeSeriesConsumer sketches []sketch + apmstats []pb.ClientStatsPayload +} + +func (c *mockFullConsumer) ConsumeAPMStats(p pb.ClientStatsPayload) { + c.apmstats = append(c.apmstats, p) } func (c *mockFullConsumer) ConsumeSketch(_ context.Context, dimensions *Dimensions, ts uint64, sk *quantile.Sketch) { @@ -709,3 +729,74 @@ func newSketchWithHostname(name string, summary summary.Summary, tags []string) s.host = testHostname return s } + +var statsPayloads = []pb.ClientStatsPayload{ + { + Hostname: "host", + Env: "prod", + Version: "v1.2", + Lang: "go", + TracerVersion: "v44", + RuntimeID: "123jkl", + Sequence: 2, + AgentAggregation: "blah", + Service: "mysql", + ContainerID: "abcdef123456", + Tags: []string{"a:b", "c:d"}, + Stats: []pb.ClientStatsBucket{ + { + Start: 10, + Duration: 1, + Stats: []pb.ClientGroupedStats{ + { + Service: "kafka", + Name: "queue.add", + Resource: "append", + HTTPStatusCode: 220, + Type: "queue", + Hits: 15, + Errors: 3, + Duration: 143, + OkSummary: testSketchBytes(1, 4, 5), + ErrorSummary: testSketchBytes(2, 3, 9), + TopLevelHits: 5, + }, + }, + }, + }, + }, + { + Hostname: "host2", + Env: "prod2", + Version: "v1.22", + Lang: "go2", + TracerVersion: "v442", + RuntimeID: "123jkl2", + Sequence: 22, + AgentAggregation: "blah2", + Service: "mysql2", + ContainerID: "abcdef1234562", + Tags: []string{"a:b2", "c:d2"}, + Stats: []pb.ClientStatsBucket{ + { + Start: 102, + Duration: 12, + Stats: []pb.ClientGroupedStats{ + { + Service: "kafka2", + Name: "queue.add2", + Resource: "append2", + HTTPStatusCode: 2202, + Type: "queue2", + Hits: 152, + Errors: 32, + Duration: 1432, + OkSummary: testSketchBytes(10, 11, 12), + ErrorSummary: testSketchBytes(14, 15, 16), + TopLevelHits: 52, + }, + }, + }, + }, + }, +} diff --git a/pkg/otlp/model/translator/sketches_test.go b/pkg/otlp/model/translator/sketches_test.go index b59fcfd185d4e..db934e1a84dad 100644 --- a/pkg/otlp/model/translator/sketches_test.go +++ b/pkg/otlp/model/translator/sketches_test.go @@ -25,6 +25,7 @@ import ( "go.uber.org/zap" "github.com/DataDog/datadog-agent/pkg/quantile" + "github.com/DataDog/datadog-agent/pkg/trace/pb" ) var _ SketchConsumer = (*sketchConsumer)(nil) @@ -34,6 +35,12 @@ type sketchConsumer struct { sk *quantile.Sketch } +func (c *sketchConsumer) ConsumeAPMStats(_ pb.ClientStatsPayload) { + // not used for this consumer, but do warn the user if they + // try to use it + panic("(*sketchConsumer).ConsumeAPMStats not implemented") +} + // ConsumeSketch implements the translator.Consumer interface. func (c *sketchConsumer) ConsumeSketch( _ context.Context, diff --git a/pkg/otlp/model/translator/statspayload.go b/pkg/otlp/model/translator/statspayload.go new file mode 100644 index 0000000000000..4f9f87200a480 --- /dev/null +++ b/pkg/otlp/model/translator/statspayload.go @@ -0,0 +1,474 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package translator + +import ( + "fmt" + "strings" + + "github.com/DataDog/sketches-go/ddsketch" + "github.com/DataDog/sketches-go/ddsketch/mapping" + "github.com/DataDog/sketches-go/ddsketch/pb/sketchpb" + "github.com/DataDog/sketches-go/ddsketch/store" + "github.com/golang/protobuf/proto" + "go.opentelemetry.io/collector/pdata/pcommon" + "go.opentelemetry.io/collector/pdata/pmetric" + "go.uber.org/zap" + + "github.com/DataDog/datadog-agent/pkg/otlp/model/source" + "github.com/DataDog/datadog-agent/pkg/trace/pb" +) + +// keyAPMStats specifies the key name of the resource attribute which identifies resource metrics +// as being an APM Stats Payload. The presence of the key results in them being treated and consumed +// differently by the Translator. +const keyAPMStats = "_dd.apm_stats" + +// This group of constants specifies the metric attribute keys used for APM Stats aggregation keys. +const ( + statsKeyHostname = "dd.hostname" + statsKeyEnv = "dd.env" + statsKeyVersion = "dd.version" + statsKeyLang = "dd.lang" + statsKeyTracerVersion = "dd.tracer_version" + statsKeyRuntimeID = "dd.runtime_id" + statsKeySequence = "dd.sequence" + statsKeyAgentAggregation = "dd.agent_aggregation" + statsKeyService = "dd.service" + statsKeyContainerID = "dd.container_id" + statsKeyTags = "dd.tags" + statsKeySynthetics = "dd.synthetics" + statsKeySpanName = "dd.name" + statsKeySpanResource = "dd.resource" + statsKeyHTTPStatusCode = "dd.http_status_code" + statsKeySpanType = "dd.type" + statsKeySpanDBType = "dd.db_type" +) + +// This group of constants specifies the metric names used to store APM Stats as metrics. +const ( + metricNameHits = "dd.apm_stats.hits" + metricNameErrors = "dd.apm_stats.errors" + metricNameDuration = "dd.apm_stats.duration" + metricNameTopLevelHits = "dd.apm_stats.top_level_hits" + metricNameOkSummary = "dd.apm_stats.ok_summary" + metricNameErrorSummary = "dd.apm_stats.error_summary" +) + +// StatsPayloadToMetrics converts an APM Stats Payload to a set of OTLP Metrics. +func (t *Translator) StatsPayloadToMetrics(sp pb.StatsPayload) pmetric.Metrics { + mmx := pmetric.NewMetrics() + // We ignore Agent{Hostname,Env,Version} and fill those in later. We want those + // values to be consistent with the ones that appear on traces and logs. They are + // only known in the Datadog exporter or the Datadog Agent OTLP Ingest. + var npayloads, nbuckets, ngroups int + for _, cp := range sp.Stats { + npayloads++ + rmx := mmx.ResourceMetrics().AppendEmpty() + attr := rmx.Resource().Attributes() + attr.PutBool(keyAPMStats, true) + putStr(attr, statsKeyHostname, cp.Hostname) + putStr(attr, statsKeyEnv, cp.Env) + putStr(attr, statsKeyVersion, cp.Version) + putStr(attr, statsKeyLang, cp.Lang) + putStr(attr, statsKeyTracerVersion, cp.TracerVersion) + putStr(attr, statsKeyRuntimeID, cp.RuntimeID) + putInt(attr, statsKeySequence, int64(cp.Sequence)) + putStr(attr, statsKeyAgentAggregation, cp.AgentAggregation) + putStr(attr, statsKeyService, cp.Service) + putStr(attr, statsKeyContainerID, cp.ContainerID) + putStr(attr, statsKeyTags, strings.Join(cp.Tags, ",")) + + for _, sb := range cp.Stats { + nbuckets++ + smx := rmx.ScopeMetrics().AppendEmpty() + for _, cgs := range sb.Stats { + ngroups++ + mxs := smx.Metrics() + for name, val := range map[string]uint64{ + metricNameHits: cgs.Hits, + metricNameErrors: cgs.Errors, + metricNameDuration: cgs.Duration, + metricNameTopLevelHits: cgs.TopLevelHits, + } { + appendSum(mxs, name, int64(val), sb.Start, sb.Start+sb.Duration, &cgs) + } + if err := appendSketch(mxs, metricNameOkSummary, cgs.OkSummary, sb.Start, sb.Start+sb.Duration, &cgs); err != nil { + t.logger.Error("Error exporting APM Stats ok_summary", zap.Error(err)) + } + if err := appendSketch(mxs, metricNameErrorSummary, cgs.ErrorSummary, sb.Start, sb.Start+sb.Duration, &cgs); err != nil { + t.logger.Error("Error exporting APM Stats error_summary", zap.Error(err)) + } + } + } + } + return mmx +} + +// appendSum appends the value val as a sum with the given name to the metric slice. It uses the appropriate fields +// from tags to set attributes. +func appendSum(mslice pmetric.MetricSlice, name string, val int64, start, end uint64, tags *pb.ClientGroupedStats) { + mx := mslice.AppendEmpty() + mx.SetName(name) + sum := mx.SetEmptySum() + sum.SetAggregationTemporality(pmetric.AggregationTemporalityDelta) + sum.SetIsMonotonic(true) + + dp := sum.DataPoints().AppendEmpty() + dp.SetStartTimestamp(pcommon.Timestamp(start)) + dp.SetTimestamp(pcommon.Timestamp(end)) + dp.SetIntValue(int64(val)) + putGroupedStatsAttr(dp.Attributes(), tags) +} + +// appendSketch appends the proto-encoded DDSketch from sketchBytes to the given metric slice as an ExponentialHistogram +// with the given name, start, and end timestamps. The fields from tags are set as attributes. +// It is assumed that the DDSketch was created by the trace-agent as a "LogCollapsingLowestDenseDDSketch" with a relative +// accuracy of 0.001. +func appendSketch(mslice pmetric.MetricSlice, name string, sketchBytes []byte, start, end uint64, tags *pb.ClientGroupedStats) error { + if sketchBytes == nil { + // no error, just nothing to do + return nil + } + var msg sketchpb.DDSketch + if err := proto.Unmarshal(sketchBytes, &msg); err != nil { + return err + } + dds, err := ddsketch.FromProto(&msg) + if err != nil { + return err + } + if dds.IsEmpty() { + // no error, just nothing to do + return nil + } + mx := mslice.AppendEmpty() + mx.SetName(name) + hist := mx.SetEmptyExponentialHistogram() + hist.SetAggregationTemporality(pmetric.AggregationTemporalityDelta) + + dp := hist.DataPoints().AppendEmpty() + dp.SetStartTimestamp(pcommon.Timestamp(start)) + dp.SetTimestamp(pcommon.Timestamp(end)) + putGroupedStatsAttr(dp.Attributes(), tags) + dp.SetCount(uint64(dds.GetCount())) + if max, err := dds.GetMaxValue(); err == nil { + dp.SetMax(max) + } + if min, err := dds.GetMinValue(); err == nil { + dp.SetMin(min) + } + dp.SetSum(dds.GetSum()) + dp.SetZeroCount(uint64(dds.GetZeroCount())) + // Relative accuracy (ra) in the trace-agent is 0.001. See: + // https://github.com/DataDog/datadog-agent/blob/198e1a/pkg/trace/stats/statsraw.go#L19-L21 + // Gamma is computed as (1+ra)/(1-ra), which results in 1.02020202. Another formula for gamma + // is 2^2^-scale. Using that formula, we conclude that a scale of 5 should be suitable, which + // is equal to a gamma of 1.0218971486541166. + // + // It will not be equally accurate, but the error margin is negligible. Generally, the + // ExponentialHistogram is simply a data recipient being converted back to the original DDSketch, + // at which point we know the original gamma and the resulting sketch will be equivalent. The + // only scenario when the histogram could be used is if someone exports it using a non-Datadog + // exporter. + dp.SetScale(5) + storeToBuckets(dds.GetNegativeValueStore(), dp.Negative()) + storeToBuckets(dds.GetPositiveValueStore(), dp.Positive()) + return nil +} + +// storeToBuckets converts a DDSketch store to an ExponentialHistogram data point buckets. +func storeToBuckets(s store.Store, b pmetric.ExponentialHistogramDataPointBuckets) { + offset, err := s.MinIndex() + if err != nil { + return + } + max, err := s.MaxIndex() + if err != nil { + return + } + b.SetOffset(int32(offset)) + counts := make([]uint64, max-offset+1) + s.ForEach(func(index int, count float64) bool { + counts[index-offset] = uint64(count) + return false + }) + b.BucketCounts().FromRaw(counts) +} + +func putGroupedStatsAttr(m pcommon.Map, cgs *pb.ClientGroupedStats) { + putStr(m, statsKeyService, cgs.Service) + putStr(m, statsKeySpanName, cgs.Name) + putStr(m, statsKeySpanResource, cgs.Resource) + putInt(m, statsKeyHTTPStatusCode, int64(cgs.HTTPStatusCode)) + putStr(m, statsKeySpanType, cgs.Type) + putStr(m, statsKeySpanDBType, cgs.DBType) + if cgs.Synthetics { + m.PutBool(statsKeySynthetics, true) + } +} + +func putStr(m pcommon.Map, k, v string) { + if v == "" { + return + } + m.PutStr(k, v) +} + +func putInt(m pcommon.Map, k string, v int64) { + if v == 0 { + return + } + m.PutInt(k, v) +} + +// aggregationKey specifies a set of values by which a certain aggregationMetric is grouped. +type aggregationKey struct { + Service string + Name string + Resource string + HTTPStatusCode uint32 + Type string + DBType string + Synthetics bool +} + +// aggregationValue specifies the set of metrics corresponding to a certain aggregationKey. +type aggregationValue struct { + Hits uint64 + Errors uint64 + Duration uint64 + OkSummary []byte + ErrorSummary []byte + TopLevelHits uint64 +} + +// aggregations stores aggregation values (stats) grouped by their corresponding keys. +type aggregations struct { + agg map[aggregationKey]*aggregationValue +} + +// Value returns the aggregation value corresponding to the key found in map m. +func (a *aggregations) Value(m pcommon.Map) *aggregationValue { + var sntx bool + if v, ok := m.Get(statsKeySynthetics); ok { + sntx = v.Bool() + } + key := aggregationKey{ + Service: getStr(m, statsKeyService), + Name: getStr(m, statsKeySpanName), + Resource: getStr(m, statsKeySpanResource), + HTTPStatusCode: uint32(getInt(m, statsKeyHTTPStatusCode)), + Type: getStr(m, statsKeySpanType), + DBType: getStr(m, statsKeySpanDBType), + Synthetics: sntx, + } + if a.agg == nil { + a.agg = make(map[aggregationKey]*aggregationValue) + } + if _, ok := a.agg[key]; !ok { + a.agg[key] = new(aggregationValue) + } + return a.agg[key] +} + +// Stats returns the set of pb.ClientGroupedStats based on all the aggregated key/value +// pairs. +func (a *aggregations) Stats() []pb.ClientGroupedStats { + cgs := make([]pb.ClientGroupedStats, 0, len(a.agg)) + for k, v := range a.agg { + cgs = append(cgs, pb.ClientGroupedStats{ + Service: k.Service, + Name: k.Name, + Resource: k.Resource, + HTTPStatusCode: k.HTTPStatusCode, + Type: k.Type, + DBType: k.DBType, + Synthetics: k.Synthetics, + Hits: v.Hits, + Errors: v.Errors, + Duration: v.Duration, + OkSummary: v.OkSummary, + ErrorSummary: v.ErrorSummary, + TopLevelHits: v.TopLevelHits, + }) + } + return cgs +} + +// UnsetHostnamePlaceholder is the string used as a hostname when the hostname can not be extracted from span attributes +// by the processor. Upon decoding the metrics, the Translator will use its configured fallback SourceProvider to replace +// it with the correct hostname. +// +// This isn't the most ideal approach to the problem, but provides the better user experience by avoiding the need to +// duplicate the "exporter::datadog::hostname" configuration field as "processor::datadog::hostname". The hostname can +// also not be left empty in case of failure to obtain it, because empty has special meaning. An empty hostname means +// that we are in a Lambda environment. Thus, we must use a placeholder. +const UnsetHostnamePlaceholder = "__unset__" + +// statsPayloadFromMetrics converts Resource Metrics to an APM Client Stats Payload. +func (t *Translator) statsPayloadFromMetrics(rmx pmetric.ResourceMetrics) (pb.ClientStatsPayload, error) { + attr := rmx.Resource().Attributes() + if v, ok := attr.Get(keyAPMStats); !ok || !v.Bool() { + return pb.ClientStatsPayload{}, fmt.Errorf("was asked to convert metrics to stats payload, but identifier key %q was not present. Skipping.", keyAPMStats) + } + hostname := getStr(attr, statsKeyHostname) + tags := strings.Split(getStr(attr, statsKeyTags), ",") + if hostname == UnsetHostnamePlaceholder { + src, err := t.source(attr) + if err != nil { + return pb.ClientStatsPayload{}, err + } + switch src.Kind { + case source.HostnameKind: + hostname = src.Identifier + case source.AWSECSFargateKind: + hostname = "" + tags = append(tags, src.Tag()) + } + } + cp := pb.ClientStatsPayload{ + Hostname: hostname, + Env: getStr(attr, statsKeyEnv), + Version: getStr(attr, statsKeyVersion), + Lang: getStr(attr, statsKeyLang), + TracerVersion: getStr(attr, statsKeyTracerVersion), + RuntimeID: getStr(attr, statsKeyRuntimeID), + Sequence: getInt(attr, statsKeySequence), + AgentAggregation: getStr(attr, statsKeyAgentAggregation), + Service: getStr(attr, statsKeyService), + ContainerID: getStr(attr, statsKeyContainerID), + Tags: tags, + } + smxs := rmx.ScopeMetrics() + for j := 0; j < smxs.Len(); j++ { + mxs := smxs.At(j).Metrics() + var ( + buck pb.ClientStatsBucket + agg aggregations + ) + for k := 0; k < mxs.Len(); k++ { + m := mxs.At(k) + switch m.Type() { + case pmetric.MetricTypeSum: + key, val := t.extractSum(m.Sum(), &buck) + switch m.Name() { + case metricNameHits: + agg.Value(key).Hits = val + case metricNameErrors: + agg.Value(key).Errors = val + case metricNameDuration: + agg.Value(key).Duration = val + case metricNameTopLevelHits: + agg.Value(key).TopLevelHits = val + } + case pmetric.MetricTypeExponentialHistogram: + key, val := t.extractSketch(m.ExponentialHistogram(), &buck) + switch m.Name() { + case metricNameOkSummary: + agg.Value(key).OkSummary = val + case metricNameErrorSummary: + agg.Value(key).ErrorSummary = val + } + default: + return pb.ClientStatsPayload{}, fmt.Errorf(`metric named %q in Stats Payload should be of type "Sum" or "ExponentialHistogram" but is %q instead`, m.Name(), m.Type()) + } + } + buck.Stats = agg.Stats() + cp.Stats = append(cp.Stats, buck) + } + return cp, nil +} + +// extractSketch extracts a proto-encoded version of the DDSketch found in the first data point of the given +// ExponentialHistogram along with its attributes and updates the timestamps in the provided stats bucket. +func (t *Translator) extractSketch(eh pmetric.ExponentialHistogram, buck *pb.ClientStatsBucket) (pcommon.Map, []byte) { + dps := eh.DataPoints() + if dps.Len() == 0 { + t.logger.Debug("Stats payload exponential histogram with no data points.") + return pcommon.NewMap(), nil + } + if dps.Len() > 1 { + t.logger.Debug("Stats payload metrics should not have more than one data point. This could be an error.") + } + dp := dps.At(0) + t.recordStatsBucketTimestamp(buck, dp.StartTimestamp(), dp.Timestamp()) + positive := toStore(dp.Positive()) + negative := toStore(dp.Negative()) + // use relative accuracy 0.01; same as pkg/trace/stats/statsraw.go + index, err := mapping.NewLogarithmicMapping(0.01) + if err != nil { + t.logger.Debug("Error creating LogarithmicMapping.", zap.Error(err)) + return dp.Attributes(), nil + } + sketch := ddsketch.NewDDSketch(index, positive, negative) + if err := sketch.AddWithCount(0, float64(dp.ZeroCount())); err != nil { + t.logger.Debug("Error adding zero counts.", zap.Error(err)) + return dp.Attributes(), nil + } + pb := sketch.ToProto() + b, err := proto.Marshal(pb) + if err != nil { + t.logger.Debug("Error marshalling stats payload sketch into proto.", zap.Error(err)) + return dp.Attributes(), nil + } + return dp.Attributes(), b +} + +// extractSum extracts the attributes and the integer value found in the first data point of the given sum +// and updates the given buckets timestamps. +func (t *Translator) extractSum(sum pmetric.Sum, buck *pb.ClientStatsBucket) (pcommon.Map, uint64) { + dps := sum.DataPoints() + if dps.Len() == 0 { + t.logger.Debug("APM stats payload sum with no data points.") + return pcommon.NewMap(), 0 + } + if dps.Len() > 1 { + t.logger.Debug("APM stats metrics should not have more than one data point. This could be an error.") + } + dp := dps.At(0) + t.recordStatsBucketTimestamp(buck, dp.StartTimestamp(), dp.Timestamp()) + return dp.Attributes(), uint64(dp.IntValue()) // more than one makes no sense +} + +// recordStatsBucketTimestamp records the start & end timestamps from the given data point into the given stats bucket. +func (t *Translator) recordStatsBucketTimestamp(buck *pb.ClientStatsBucket, startt, endt pcommon.Timestamp) { + start := uint64(startt) + if buck.Start != 0 && buck.Start != start { + t.logger.Debug("APM stats data point start timestamp did not match bucket. This could be an error.") + } + buck.Start = start + duration := uint64(endt) - uint64(startt) + buck.Duration = duration + if buck.Duration != 0 && buck.Duration != duration { + t.logger.Debug("APM Stats data point duration did not match bucket. This could be an error.") + } +} + +func getStr(m pcommon.Map, k string) string { + v, ok := m.Get(k) + if !ok { + return "" + } + return v.Str() +} + +func getInt(m pcommon.Map, k string) uint64 { + v, ok := m.Get(k) + if !ok { + return 0 + } + return uint64(v.Int()) +} diff --git a/pkg/otlp/model/translator/statspayload_test.go b/pkg/otlp/model/translator/statspayload_test.go new file mode 100644 index 0000000000000..13d207ad2eaf2 --- /dev/null +++ b/pkg/otlp/model/translator/statspayload_test.go @@ -0,0 +1,517 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package translator + +import ( + "testing" + + "github.com/DataDog/datadog-agent/pkg/trace/pb" + "github.com/DataDog/sketches-go/ddsketch" + "github.com/DataDog/sketches-go/ddsketch/store" + "github.com/golang/protobuf/proto" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/pdata/pcommon" + "go.opentelemetry.io/collector/pdata/pmetric" + "go.uber.org/zap" +) + +// The sketch's relative accuracy and maximum number of bins is identical +// to the one used in the trace-agent for consistency: +// https://github.com/DataDog/datadog-agent/blob/cbac965/pkg/trace/stats/statsraw.go#L18-L26 +const ( + sketchRelativeAccuracy = 0.01 + sketchMaxBins = 2048 +) + +func TestHelpers(t *testing.T) { + t.Run("putStr", func(t *testing.T) { + t.Run("ok", func(t *testing.T) { + m := pcommon.NewMap() + putStr(m, "key", "value") + v, ok := m.Get("key") + require.True(t, ok) + require.Equal(t, v.Str(), "value") + }) + + t.Run("empty", func(t *testing.T) { + m := pcommon.NewMap() + putStr(m, "key", "") + _, ok := m.Get("key") + require.False(t, ok) + }) + }) + + t.Run("putInt", func(t *testing.T) { + t.Run("ok", func(t *testing.T) { + m := pcommon.NewMap() + putInt(m, "key", 1) + v, ok := m.Get("key") + require.True(t, ok) + require.EqualValues(t, v.Int(), 1) + }) + + t.Run("empty", func(t *testing.T) { + m := pcommon.NewMap() + putInt(m, "key", 0) + _, ok := m.Get("key") + require.False(t, ok) + }) + }) + + t.Run("getInt", func(t *testing.T) { + m := pcommon.NewMap() + m.PutInt("key", 1) + require.Equal(t, getInt(m, "key"), uint64(1)) + require.Equal(t, getInt(m, "invalid"), uint64(0)) + }) + + t.Run("getStr", func(t *testing.T) { + m := pcommon.NewMap() + m.PutStr("key", "value") + require.Equal(t, getStr(m, "key"), "value") + require.Equal(t, getStr(m, "invalid"), "") + }) + + t.Run("putGroupedStatsAttr", func(t *testing.T) { + for _, tt := range []struct { + attr map[string]interface{} + cgs *pb.ClientGroupedStats + }{ + { + cgs: &pb.ClientGroupedStats{ + Service: "my-service", + Name: "my-name", + Resource: "my-resource", + HTTPStatusCode: 220, + Type: "my-type", + DBType: "my-db-type", + Synthetics: true, + }, + attr: map[string]interface{}{ + statsKeyService: "my-service", + statsKeySpanName: "my-name", + statsKeySpanResource: "my-resource", + statsKeyHTTPStatusCode: int64(220), + statsKeySpanType: "my-type", + statsKeySpanDBType: "my-db-type", + statsKeySynthetics: true, + }, + }, + { + cgs: &pb.ClientGroupedStats{ + Service: "my-service", + Synthetics: false, + }, + attr: map[string]interface{}{ + statsKeyService: "my-service", + }, + }, + { + cgs: &pb.ClientGroupedStats{ + Service: "my-service", + }, + attr: map[string]interface{}{ + statsKeyService: "my-service", + }, + }, + } { + m := pcommon.NewMap() + putGroupedStatsAttr(m, tt.cgs) + require.EqualValues(t, m.AsRaw(), tt.attr) + } + }) +} + +func TestAggregations(t *testing.T) { + m1 := pcommon.NewMap() + m1.FromRaw(map[string]interface{}{ + statsKeyService: "my-service", + statsKeySpanName: "my-name", + statsKeySpanResource: "my-resource", + statsKeyHTTPStatusCode: int64(220), + statsKeySpanType: "my-type", + statsKeySpanDBType: "my-db-type", + statsKeySynthetics: true, + }) + var agg aggregations + val1 := agg.Value(m1) + val1.TopLevelHits = 5 + require.True(t, val1 == agg.Value(m1)) // same key should return same pointer + require.Equal(t, val1, agg.Value(m1)) // ...and same contents + + m2 := pcommon.NewMap() + m2.FromRaw(map[string]interface{}{ + statsKeyService: "my-service", + statsKeySpanName: "my-name", + statsKeySpanResource: "my-resource", + statsKeyHTTPStatusCode: int64(220), + statsKeySpanType: "my-type", + statsKeySpanDBType: "my-db-type", + }) + val2 := agg.Value(m2) + val2.Hits = 10 + val2.Errors++ + require.True(t, val2 == agg.Value(m2)) + require.Equal(t, val2, agg.Value(m2)) + require.True(t, val1 != agg.Value(m2)) + require.NotEqual(t, val1, agg.Value(m2)) + + require.ElementsMatch(t, agg.Stats(), []pb.ClientGroupedStats{ + { + Service: "my-service", + Name: "my-name", + Resource: "my-resource", + HTTPStatusCode: 0xdc, + Type: "my-type", + DBType: "my-db-type", + Hits: 0x0, + OkSummary: []uint8(nil), + ErrorSummary: []uint8(nil), + Synthetics: true, + TopLevelHits: 5, + }, + { + Service: "my-service", + Name: "my-name", + Resource: "my-resource", + HTTPStatusCode: 0xdc, + Type: "my-type", + DBType: "my-db-type", + OkSummary: []uint8(nil), + ErrorSummary: []uint8(nil), + Synthetics: false, + Hits: 10, + Errors: 1, + }, + }) +} + +func TestSum(t *testing.T) { + ms := pmetric.NewMetricSlice() + appendSum(ms, "hits", 23, 100, 150, &pb.ClientGroupedStats{ + Service: "mysql", + Resource: "SELECT * FROM users", + }) + + t.Run("appendSum", func(t *testing.T) { + require.Equal(t, ms.Len(), 1) + require.Equal(t, ms.At(0).Type(), pmetric.MetricTypeSum) + sum := ms.At(0).Sum() + require.Equal(t, sum.AggregationTemporality(), pmetric.AggregationTemporalityDelta) + require.Equal(t, sum.IsMonotonic(), true) + require.Equal(t, sum.DataPoints().Len(), 1) + dp := sum.DataPoints().At(0) + require.Equal(t, dp.StartTimestamp(), pcommon.Timestamp(100)) + require.Equal(t, dp.Timestamp(), pcommon.Timestamp(150)) + require.Equal(t, dp.IntValue(), int64(23)) + require.EqualValues(t, dp.Attributes().AsRaw(), map[string]interface{}{ + statsKeyService: "mysql", + statsKeySpanResource: "SELECT * FROM users", + }) + }) + + t.Run("extractSum", func(t *testing.T) { + buck := &pb.ClientStatsBucket{} + m, out := (&Translator{logger: zap.NewNop()}).extractSum(ms.At(0).Sum(), buck) + require.Equal(t, out, uint64(23)) + require.Equal(t, m.AsRaw(), map[string]interface{}{statsKeySpanResource: "SELECT * FROM users", statsKeyService: "mysql"}) + require.EqualValues(t, buck.Start, 100) + require.EqualValues(t, buck.Duration, 50) + }) +} + +func TestStoreToBuckets(t *testing.T) { + s := store.NewDenseStore() + s.AddWithCount(-3, 12) + s.AddWithCount(5, 10) + s.AddWithCount(6, 11) + s.AddWithCount(10, 15) + b := pmetric.NewExponentialHistogramDataPointBuckets() + storeToBuckets(s, b) + require.EqualValues(t, b.Offset(), -3) + require.EqualValues(t, b.BucketCounts().Len(), 14) + require.EqualValues(t, b.BucketCounts().AsRaw(), []uint64{12, 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, 15}) +} + +func TestSketchPoint(t *testing.T) { + ms := pmetric.NewMetricSlice() + sketch, err := ddsketch.LogCollapsingLowestDenseDDSketch(sketchRelativeAccuracy, sketchMaxBins) + if err != nil { + t.Fatal(err) + } + sketch.AddWithCount(-1, 4) + sketch.AddWithCount(1, 1) + sketch.AddWithCount(2, 5) + sketch.AddWithCount(5, 10) + buf, err := proto.Marshal(sketch.ToProto()) + if err != nil { + t.Fatal(err) + } + require.NotEmpty(t, buf) + if err := appendSketch(ms, "hits", buf, 200, 250, &pb.ClientGroupedStats{ + Service: "my-service", + Name: "my-name", + Resource: "my-resource", + HTTPStatusCode: 0xdc, + Type: "my-type", + DBType: "my-db-type", + Hits: 0x0, + OkSummary: []uint8(nil), + ErrorSummary: []uint8(nil), + Synthetics: true, + TopLevelHits: 5, + }); err != nil { + t.Fatal(err) + } + + t.Run("appendSketch", func(t *testing.T) { + require.Equal(t, ms.Len(), 1) + require.Equal(t, ms.At(0).Type(), pmetric.MetricTypeExponentialHistogram) + sum := ms.At(0).ExponentialHistogram() + require.Equal(t, sum.AggregationTemporality(), pmetric.AggregationTemporalityDelta) + require.Equal(t, sum.DataPoints().Len(), 1) + dp := sum.DataPoints().At(0) + require.Equal(t, dp.StartTimestamp(), pcommon.Timestamp(200)) + require.Equal(t, dp.Timestamp(), pcommon.Timestamp(250)) + require.EqualValues(t, dp.Attributes().AsRaw(), map[string]interface{}{ + statsKeySpanDBType: "my-db-type", + statsKeyHTTPStatusCode: int64(220), + statsKeySpanName: "my-name", + statsKeySpanResource: "my-resource", + statsKeyService: "my-service", + statsKeySynthetics: true, + statsKeySpanType: "my-type", + }) + require.EqualValues(t, dp.Count(), sketch.GetCount()) + if max, err := sketch.GetMaxValue(); err == nil { + require.EqualValues(t, dp.Max(), max) + } + if min, err := sketch.GetMinValue(); err == nil { + require.EqualValues(t, dp.Min(), min) + } + require.EqualValues(t, dp.Sum(), sketch.GetSum()) + require.EqualValues(t, dp.ZeroCount(), sketch.GetZeroCount()) + require.EqualValues(t, dp.Scale(), 5) + + b := dp.Positive() + require.EqualValues(t, b.Offset(), 0) + require.EqualValues(t, b.BucketCounts().Len(), 81) + require.EqualValues(t, b.BucketCounts().AsRaw(), []uint64{0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa}) + + b = dp.Negative() + require.EqualValues(t, b.Offset(), 0) + require.EqualValues(t, b.BucketCounts().Len(), 1) + require.EqualValues(t, b.BucketCounts().AsRaw(), []uint64{0x4}) + }) + + t.Run("extractSketch", func(t *testing.T) { + buck := &pb.ClientStatsBucket{} + m, out := (&Translator{logger: zap.NewNop()}).extractSketch(ms.At(0).ExponentialHistogram(), buck) + require.NotEmpty(t, out) + require.Equal(t, out, buf) + require.EqualValues(t, map[string]interface{}{ + statsKeySpanDBType: "my-db-type", + statsKeyHTTPStatusCode: int64(220), + statsKeySpanName: "my-name", + statsKeySpanResource: "my-resource", + statsKeyService: "my-service", + statsKeySynthetics: true, + statsKeySpanType: "my-type", + }, m.AsRaw()) + require.EqualValues(t, buck.Start, 200) + require.EqualValues(t, buck.Duration, 50) + }) +} + +func testSketchBytes(nums ...float64) []byte { + sketch, err := ddsketch.LogCollapsingLowestDenseDDSketch(sketchRelativeAccuracy, sketchMaxBins) + if err != nil { + // the only possible error is if the relative accuracy is < 0 or > 1; + // we know that's not the case because it's a constant defined as 0.01 + panic(err) + } + for _, num := range nums { + sketch.Add(num) + } + buf, err := proto.Marshal(sketch.ToProto()) + if err != nil { + // there should be no error under any circumstances here + panic(err) + } + return buf +} + +func TestConversion(t *testing.T) { + want := pb.StatsPayload{ + Stats: []pb.ClientStatsPayload{ + { + Hostname: "host", + Env: "prod", + Version: "v1.2", + Lang: "go", + TracerVersion: "v44", + RuntimeID: "123jkl", + Sequence: 2, + AgentAggregation: "blah", + Service: "mysql", + ContainerID: "abcdef123456", + Tags: []string{"a:b", "c:d"}, + Stats: []pb.ClientStatsBucket{ + { + Start: 10, + Duration: 1, + Stats: []pb.ClientGroupedStats{ + { + Service: "mysql", + Name: "db.query", + Resource: "UPDATE name", + HTTPStatusCode: 100, + Type: "sql", + DBType: "postgresql", + Synthetics: true, + Hits: 5, + Errors: 2, + Duration: 100, + OkSummary: testSketchBytes(1, 2, 3), + ErrorSummary: testSketchBytes(4, 5, 6), + TopLevelHits: 3, + }, + { + Service: "kafka", + Name: "queue.add", + Resource: "append", + HTTPStatusCode: 220, + Type: "queue", + Hits: 15, + Errors: 3, + Duration: 143, + OkSummary: nil, + ErrorSummary: nil, + TopLevelHits: 5, + }, + }, + }, + { + Start: 20, + Duration: 3, + Stats: []pb.ClientGroupedStats{ + { + Service: "php-go", + Name: "http.post", + Resource: "user_profile", + HTTPStatusCode: 440, + Type: "web", + Hits: 11, + Errors: 3, + Duration: 987, + OkSummary: testSketchBytes(7, 8), + ErrorSummary: testSketchBytes(9, 10, 11), + TopLevelHits: 1, + }, + }, + }, + }, + }, + { + Hostname: "host2", + Env: "staging", + Version: "v1.3", + Lang: "java", + TracerVersion: "v12", + RuntimeID: "12#12@", + Sequence: 2, + AgentAggregation: "blur", + Service: "sprint", + ContainerID: "kljdsfalk32", + Tags: []string{"x:y", "z:w"}, + Stats: []pb.ClientStatsBucket{ + { + Start: 30, + Duration: 5, + Stats: []pb.ClientGroupedStats{ + { + Service: "spring-web", + Name: "http.get", + Resource: "login", + HTTPStatusCode: 200, + Type: "web", + Hits: 12, + Errors: 2, + Duration: 13, + OkSummary: testSketchBytes(9, 7, 5), + ErrorSummary: testSketchBytes(9, 5, 2), + TopLevelHits: 9, + }, + }, + }, + }, + }, + }, + } + + t.Run("same", func(t *testing.T) { + trans := &Translator{logger: zap.NewNop()} + var got pb.StatsPayload + mx := trans.StatsPayloadToMetrics(want) + for i := 0; i < mx.ResourceMetrics().Len(); i++ { + rm := mx.ResourceMetrics().At(i) + out, err := trans.statsPayloadFromMetrics(rm) + if err != nil { + t.Fatal(err) + } + got.Stats = append(got.Stats, out) + } + var found int + outer: + for _, wants := range want.Stats { + for _, gots := range got.Stats { + if equalStats(wants, gots) { + found++ + continue outer + } + } + } + if found != len(want.Stats) { + t.Fatalf("Found %d/%d", found, len(want.Stats)) + } + }) +} + +func equalStats(want, got pb.ClientStatsPayload) bool { + cpwant, cpgot := want, got + cpwant.Stats = nil + cpgot.Stats = nil + if !assert.ObjectsAreEqual(cpwant, cpgot) { + return false + } + var found int +outer: + for _, wantb := range want.Stats { + for _, gotb := range got.Stats { + props := wantb.Start == gotb.Start && wantb.Duration == gotb.Duration && wantb.AgentTimeShift == gotb.AgentTimeShift + if props && assert.ElementsMatch(&fakeT{}, wantb.Stats, gotb.Stats) { + found++ + continue outer + } + } + } + return found == len(want.Stats) +} + +// fakeT implements testing.T +type fakeT struct{} + +func (*fakeT) Errorf(_ string, _ ...interface{}) {} diff --git a/pkg/otlp/model/translator/testhelper_test.go b/pkg/otlp/model/translator/testhelper_test.go index 6d223b500082f..2c2470bca89d5 100644 --- a/pkg/otlp/model/translator/testhelper_test.go +++ b/pkg/otlp/model/translator/testhelper_test.go @@ -16,6 +16,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/quantile" "github.com/DataDog/datadog-agent/pkg/quantile/summary" + "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/pdata/pmetric" @@ -117,6 +118,12 @@ type testConsumer struct { testMetrics TestMetrics } +func (t *testConsumer) ConsumeAPMStats(_ pb.ClientStatsPayload) { + // not used for this consumer, but do warn the user if they + // try to use it + panic("(*testConsumer).ConsumeAPMStats not implemented") +} + func (t *testConsumer) ConsumeTimeSeries( _ context.Context, dimensions *Dimensions, diff --git a/pkg/process/checks/checks.go b/pkg/process/checks/checks.go index fe9c8962021c4..b16a929597d97 100644 --- a/pkg/process/checks/checks.go +++ b/pkg/process/checks/checks.go @@ -7,19 +7,37 @@ package checks import ( model "github.com/DataDog/agent-payload/v5/process" +) - "github.com/DataDog/datadog-agent/pkg/process/config" +// Name for check performed by process-agent or system-probe +const ( + ProcessCheckName = "process" + RTProcessCheckName = "rtprocess" + ContainerCheckName = "container" + RTContainerCheckName = "rtcontainer" + ConnectionsCheckName = "connections" + PodCheckName = "pod" + PodCheckManifestName = "pod_manifest" + DiscoveryCheckName = "process_discovery" + ProcessEventsCheckName = "process_events" ) +// SysProbeConfig provides access to system probe configuration +type SysProbeConfig struct { + MaxConnsPerMessage int + // System probe collection configuration + SystemProbeAddress string +} + // Check is an interface for Agent checks that collect data. Each check returns // a specific MessageBody type that will be published to the intake endpoint or // processed in another way (e.g. printed for debugging). // Before checks are used you must called Init. type Check interface { - Init(cfg *config.AgentConfig, info *model.SystemInfo) + Init(syscfg *SysProbeConfig, info *HostInfo) error Name() string RealTime() bool - Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) + Run(groupID int32) ([]model.MessageBody, error) Cleanup() ShouldSaveLastRun() bool } @@ -40,7 +58,7 @@ type RunResult struct { type CheckWithRealTime interface { Check RealTimeName() string - RunWithOptions(cfg *config.AgentConfig, nextGroupID func() int32, options RunOptions) (*RunResult, error) + RunWithOptions(nextGroupID func() int32, options RunOptions) (*RunResult, error) } // All is a list of all runnable checks. Putting a check in here does not guarantee it will be run, diff --git a/pkg/process/checks/container.go b/pkg/process/checks/container.go index b6929ca95b6dd..4fd05986697db 100644 --- a/pkg/process/checks/container.go +++ b/pkg/process/checks/container.go @@ -12,7 +12,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders" @@ -30,7 +29,7 @@ var Container = &ContainerCheck{} type ContainerCheck struct { sync.Mutex - sysInfo *model.SystemInfo + hostInfo *HostInfo containerProvider util.ContainerProvider lastRates map[string]*util.ContainerRateMetrics networkID string @@ -41,9 +40,9 @@ type ContainerCheck struct { } // Init initializes a ContainerCheck instance. -func (c *ContainerCheck) Init(cfg *config.AgentConfig, info *model.SystemInfo) { +func (c *ContainerCheck) Init(_ *SysProbeConfig, info *HostInfo) error { c.containerProvider = util.GetSharedContainerProvider() - c.sysInfo = info + c.hostInfo = info networkID, err := cloudproviders.GetNetworkID(context.TODO()) if err != nil { @@ -53,10 +52,11 @@ func (c *ContainerCheck) Init(cfg *config.AgentConfig, info *model.SystemInfo) { c.containerFailedLogLimit = util.NewLogLimit(10, time.Minute*10) c.maxBatchSize = getMaxBatchSize() + return nil } // Name returns the name of the ProcessCheck. -func (c *ContainerCheck) Name() string { return config.ContainerCheckName } +func (c *ContainerCheck) Name() string { return ContainerCheckName } // RealTime indicates if this check only runs in real-time mode. func (c *ContainerCheck) RealTime() bool { return false } @@ -66,7 +66,7 @@ func (c *ContainerCheck) ShouldSaveLastRun() bool { return true } // Run runs the ContainerCheck to collect a list of running ctrList and the // stats for each container. -func (c *ContainerCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (c *ContainerCheck) Run(groupID int32) ([]model.MessageBody, error) { c.Lock() defer c.Unlock() startTime := time.Now() @@ -98,13 +98,13 @@ func (c *ContainerCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.Me messages := make([]model.MessageBody, 0, groupSize) for i := 0; i < groupSize; i++ { messages = append(messages, &model.CollectorContainer{ - HostName: cfg.HostName, + HostName: c.hostInfo.HostName, NetworkId: c.networkID, - Info: c.sysInfo, + Info: c.hostInfo.SystemInfo, Containers: chunked[i], GroupId: groupID, GroupSize: int32(groupSize), - ContainerHostType: cfg.ContainerHostType, + ContainerHostType: c.hostInfo.ContainerHostType, }) } diff --git a/pkg/process/checks/container_rt.go b/pkg/process/checks/container_rt.go index 43248b9988b72..cf923c9a9da38 100644 --- a/pkg/process/checks/container_rt.go +++ b/pkg/process/checks/container_rt.go @@ -10,7 +10,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/system" @@ -26,20 +25,21 @@ var RTContainer = &RTContainerCheck{} // RTContainerCheck collects numeric statistics about live ctrList. type RTContainerCheck struct { maxBatchSize int - sysInfo *model.SystemInfo + hostInfo *HostInfo containerProvider util.ContainerProvider lastRates map[string]*util.ContainerRateMetrics } // Init initializes a RTContainerCheck instance. -func (r *RTContainerCheck) Init(_ *config.AgentConfig, sysInfo *model.SystemInfo) { +func (r *RTContainerCheck) Init(_ *SysProbeConfig, hostInfo *HostInfo) error { r.maxBatchSize = getMaxBatchSize() - r.sysInfo = sysInfo + r.hostInfo = hostInfo r.containerProvider = util.GetSharedContainerProvider() + return nil } // Name returns the name of the RTContainerCheck. -func (r *RTContainerCheck) Name() string { return config.RTContainerCheckName } +func (r *RTContainerCheck) Name() string { return RTContainerCheckName } // RealTime indicates if this check only runs in real-time mode. func (r *RTContainerCheck) RealTime() bool { return true } @@ -48,7 +48,7 @@ func (r *RTContainerCheck) RealTime() bool { return true } func (r *RTContainerCheck) ShouldSaveLastRun() bool { return true } // Run runs the real-time container check getting container-level stats from the Cgroups and Docker APIs. -func (r *RTContainerCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (r *RTContainerCheck) Run(groupID int32) ([]model.MessageBody, error) { var err error var containers []*model.Container var lastRates map[string]*util.ContainerRateMetrics @@ -72,13 +72,13 @@ func (r *RTContainerCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model. messages := make([]model.MessageBody, 0, groupSize) for i := 0; i < groupSize; i++ { messages = append(messages, &model.CollectorContainerRealTime{ - HostName: cfg.HostName, + HostName: r.hostInfo.HostName, Stats: chunked[i], NumCpus: int32(system.HostCPUCount()), - TotalMemory: r.sysInfo.TotalMemory, + TotalMemory: r.hostInfo.SystemInfo.TotalMemory, GroupId: groupID, GroupSize: int32(groupSize), - ContainerHostType: cfg.ContainerHostType, + ContainerHostType: r.hostInfo.ContainerHostType, }) } diff --git a/pkg/process/checks/format.go b/pkg/process/checks/format.go index 5da717f165537..8710aac5961a0 100644 --- a/pkg/process/checks/format.go +++ b/pkg/process/checks/format.go @@ -18,8 +18,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" - "github.com/dustin/go-humanize" ) @@ -70,17 +68,17 @@ var ( // HumanFormat takes the messages produced by a check run and outputs them in a human-readable format func HumanFormat(check string, msgs []model.MessageBody, w io.Writer) error { switch check { - case config.ProcessCheckName: + case ProcessCheckName: return humanFormatProcess(msgs, w) - case config.RTProcessCheckName: + case RTProcessCheckName: return humanFormatRealTimeProcess(msgs, w) - case config.ContainerCheckName: + case ContainerCheckName: return humanFormatContainer(msgs, w) - case config.RTContainerCheckName: + case RTContainerCheckName: return humanFormatRealTimeContainer(msgs, w) - case config.DiscoveryCheckName: + case DiscoveryCheckName: return humanFormatProcessDiscovery(msgs, w) - case config.ProcessEventsCheckName: + case ProcessEventsCheckName: return HumanFormatProcessEvents(msgs, w, true) } return ErrNoHumanFormat diff --git a/pkg/process/checks/host_info.go b/pkg/process/checks/host_info.go new file mode 100644 index 0000000000000..46ca91fc60c45 --- /dev/null +++ b/pkg/process/checks/host_info.go @@ -0,0 +1,158 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package checks + +import ( + "bytes" + "context" + "fmt" + "os" + "os/exec" + "strings" + "time" + + model "github.com/DataDog/agent-payload/v5/process" + "google.golang.org/grpc" + + "github.com/DataDog/datadog-agent/pkg/config" + pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" + "github.com/DataDog/datadog-agent/pkg/util/fargate" + ddgrpc "github.com/DataDog/datadog-agent/pkg/util/grpc" + "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// HostInfo describes details of host information shared between various checks +type HostInfo struct { + SystemInfo *model.SystemInfo + HostName string + // host type of the agent, used to populate container payload with additional host information + ContainerHostType model.ContainerHostType +} + +// CollectHostInfo collects host information +func CollectHostInfo() (*HostInfo, error) { + sysInfo, err := CollectSystemInfo() + if err != nil { + return nil, err + } + + hostName, err := resolveHostName() + if err != nil { + return nil, err + } + + return &HostInfo{ + SystemInfo: sysInfo, + HostName: hostName, + ContainerHostType: getContainerHostType(), + }, nil +} + +func resolveHostName() (string, error) { + var hostName string + if config.Datadog.IsSet("hostname") { + hostName = config.Datadog.GetString("hostname") + } + + if err := validate.ValidHostname(hostName); err != nil { + // lookup hostname if there is no config override or if the override is invalid + agentBin := config.Datadog.GetString("process_config.dd_agent_bin") + connectionTimeout := config.Datadog.GetDuration("process_config.grpc_connection_timeout_secs") * time.Second + var err error + hostName, err = getHostname(context.Background(), agentBin, connectionTimeout) + if err != nil { + return "", log.Errorf("cannot get hostname: %v", err) + } + } + return hostName, nil +} + +// getHostname attempts to resolve the hostname in the following order: the main datadog agent via grpc, the main agent +// via cli and lastly falling back to os.Hostname() if it is unavailable +func getHostname(ctx context.Context, ddAgentBin string, grpcConnectionTimeout time.Duration) (string, error) { + // Fargate is handled as an exceptional case (there is no concept of a host, so we use the ARN in-place). + if fargate.IsFargateInstance() { + hostname, err := fargate.GetFargateHost(ctx) + if err == nil { + return hostname, nil + } + log.Errorf("failed to get Fargate host: %v", err) + } + + // Get the hostname via gRPC from the main agent if a hostname has not been set either from config/fargate + hostname, err := getHostnameFromGRPC(ctx, ddgrpc.GetDDAgentClient, grpcConnectionTimeout) + if err == nil { + return hostname, nil + } + log.Errorf("failed to get hostname from grpc: %v", err) + + // If the hostname is not set then we fallback to use the agent binary + hostname, err = getHostnameFromCmd(ddAgentBin, exec.Command) + if err == nil { + return hostname, nil + } + log.Errorf("failed to get hostname from cmd: %v", err) + + return os.Hostname() +} + +type cmdFunc = func(name string, arg ...string) *exec.Cmd + +// getHostnameCmd shells out to obtain the hostname used by the infra agent +func getHostnameFromCmd(ddAgentBin string, cmdFn cmdFunc) (string, error) { + cmd := cmdFn(ddAgentBin, "hostname") + + // Copying all environment variables to child process + // Windows: Required, so the child process can load DLLs, etc. + // Linux: Optional, but will make use of DD_HOSTNAME and DOCKER_DD_AGENT if they exist + cmd.Env = append(cmd.Env, os.Environ()...) + + var stdout, stderr bytes.Buffer + cmd.Stdout = &stdout + cmd.Stderr = &stderr + + err := cmd.Run() + if err != nil { + return "", err + } + + hostname := strings.TrimSpace(stdout.String()) + if hostname == "" { + return "", fmt.Errorf("error retrieving dd-agent hostname %s", stderr.String()) + } + + return hostname, nil +} + +// getHostnameFromGRPC retrieves the hostname from the main datadog agent via GRPC +func getHostnameFromGRPC(ctx context.Context, grpcClientFn func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error), grpcConnectionTimeout time.Duration) (string, error) { + ctx, cancel := context.WithTimeout(ctx, grpcConnectionTimeout) + defer cancel() + + ddAgentClient, err := grpcClientFn(ctx) + if err != nil { + return "", fmt.Errorf("cannot connect to datadog agent via grpc: %w", err) + } + reply, err := ddAgentClient.GetHostname(ctx, &pb.HostnameRequest{}) + if err != nil { + return "", fmt.Errorf("cannot get hostname from datadog agent via grpc: %w", err) + } + + log.Debugf("retrieved hostname:%s from datadog agent via grpc", reply.Hostname) + return reply.Hostname, nil +} + +// getContainerHostType uses the fargate library to detect container environment and returns the protobuf version of it +func getContainerHostType() model.ContainerHostType { + switch fargate.GetOrchestrator() { + case fargate.ECS: + return model.ContainerHostType_fargateECS + case fargate.EKS: + return model.ContainerHostType_fargateEKS + } + return model.ContainerHostType_notSpecified +} diff --git a/pkg/process/checks/host_info_test.go b/pkg/process/checks/host_info_test.go new file mode 100644 index 0000000000000..ba87c0fcb32b0 --- /dev/null +++ b/pkg/process/checks/host_info_test.go @@ -0,0 +1,137 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package checks + +import ( + "context" + "errors" + "fmt" + "os" + "os/exec" + "testing" + "time" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" + "google.golang.org/grpc" + + "github.com/DataDog/datadog-agent/pkg/config" + pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" + mocks "github.com/DataDog/datadog-agent/pkg/proto/pbgo/mocks" +) + +func TestGetHostname(t *testing.T) { + ctx := context.Background() + h, err := getHostname(ctx, config.Datadog.GetString("process_config.dd_agent_bin"), 0) + assert.Nil(t, err) + // verify we fall back to getting os hostname + expectedHostname, _ := os.Hostname() + assert.Equal(t, expectedHostname, h) +} + +func TestGetHostnameFromGRPC(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + mockClient := mocks.NewMockAgentClient(ctrl) + + mockClient.EXPECT().GetHostname( + gomock.Any(), + &pb.HostnameRequest{}, + ).Return(&pb.HostnameReply{Hostname: "unit-test-hostname"}, nil) + + t.Run("hostname returns from grpc", func(t *testing.T) { + hostname, err := getHostnameFromGRPC(ctx, func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error) { + return mockClient, nil + }, config.DefaultGRPCConnectionTimeoutSecs*time.Second) + + assert.Nil(t, err) + assert.Equal(t, "unit-test-hostname", hostname) + }) + + t.Run("grpc client is unavailable", func(t *testing.T) { + grpcErr := errors.New("no grpc client") + hostname, err := getHostnameFromGRPC(ctx, func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error) { + return nil, grpcErr + }, config.DefaultGRPCConnectionTimeoutSecs*time.Second) + + assert.NotNil(t, err) + assert.Equal(t, grpcErr, errors.Unwrap(err)) + assert.Empty(t, hostname) + }) +} + +func TestGetHostnameFromCmd(t *testing.T) { + t.Run("valid hostname", func(t *testing.T) { + h, err := getHostnameFromCmd("agent-success", fakeExecCommand) + assert.Nil(t, err) + assert.Equal(t, "unit_test_hostname", h) + }) + + t.Run("no hostname returned", func(t *testing.T) { + h, err := getHostnameFromCmd("agent-empty_hostname", fakeExecCommand) + assert.NotNil(t, err) + assert.Equal(t, "", h) + }) +} + +func TestInvalidHostname(t *testing.T) { + // Lower the GRPC timeout, otherwise the test will time out in CI + config.Datadog.Set("process_config.grpc_connection_timeout_secs", 1) + config.Datadog.Set("hostname", "localhost") + + expectedHostname, _ := os.Hostname() + + hostName, err := resolveHostName() + assert.NoError(t, err) + + assert.Equal(t, expectedHostname, hostName) +} + +// TestGetHostnameShellCmd is a method that is called as a substitute for a dd-agent shell command, +// the GO_TEST_PROCESS flag ensures that if it is called as part of the test suite, it is skipped. +func TestGetHostnameShellCmd(t *testing.T) { + if os.Getenv("GO_TEST_PROCESS") != "1" { + return + } + defer os.Exit(0) + + args := os.Args + for len(args) > 0 { + if args[0] == "--" { + args = args[1:] + break + } + args = args[1:] + } + + if len(args) == 0 { + fmt.Fprintf(os.Stderr, "No command\n") + os.Exit(2) + } + + cmd, args := args[0], args[1:] + switch cmd { + case "agent-success": + assert.EqualValues(t, []string{"hostname"}, args) + fmt.Fprintf(os.Stdout, "unit_test_hostname") + case "agent-empty_hostname": + assert.EqualValues(t, []string{"hostname"}, args) + fmt.Fprintf(os.Stdout, "") + } +} + +// fakeExecCommand is a function that initialises a new exec.Cmd, one which will +// simply call TestShellProcessSuccess rather than the command it is provided. It will +// also pass through the command and its arguments as an argument to TestShellProcessSuccess +func fakeExecCommand(command string, args ...string) *exec.Cmd { + cs := []string{"-test.run=TestGetHostnameShellCmd", "--", command} + cs = append(cs, args...) + cmd := exec.Command(os.Args[0], cs...) + cmd.Env = []string{"GO_TEST_PROCESS=1"} + return cmd +} diff --git a/pkg/process/checks/interval.go b/pkg/process/checks/interval.go new file mode 100644 index 0000000000000..b4255ad9db4ad --- /dev/null +++ b/pkg/process/checks/interval.go @@ -0,0 +1,99 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package checks + +import ( + "time" + + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +const ( + ProcessCheckDefaultInterval = 10 * time.Second + RTProcessCheckDefaultInterval = 2 * time.Second + ContainerCheckDefaultInterval = 10 * time.Second + RTContainerCheckDefaultInterval = 2 * time.Second + ConnectionsCheckDefaultInterval = 30 * time.Second + PodCheckDefaultInterval = 10 * time.Second + ProcessDiscoveryCheckDefaultInterval = 4 * time.Hour + + discoveryMinInterval = 10 * time.Minute + + configIntervals = configPrefix + "intervals." + + // The interval, in seconds, at which we will run each check. If you want consistent + // behavior between real-time you may set the Container/ProcessRT intervals to 10. + // Defaults to 10s for normal checks and 2s for others. + configProcessInterval = configIntervals + "process" + configRTProcessInterval = configIntervals + "process_realtime" + configContainerInterval = configIntervals + "container" + configRTContainerInterval = configIntervals + "container_realtime" + configConnectionsInterval = configIntervals + "connections" +) + +var ( + defaultIntervals = map[string]time.Duration{ + ProcessCheckName: ProcessCheckDefaultInterval, + RTProcessCheckName: RTProcessCheckDefaultInterval, + ContainerCheckName: ContainerCheckDefaultInterval, + RTContainerCheckName: RTContainerCheckDefaultInterval, + ConnectionsCheckName: ConnectionsCheckDefaultInterval, + PodCheckName: PodCheckDefaultInterval, + DiscoveryCheckName: ProcessDiscoveryCheckDefaultInterval, + ProcessEventsCheckName: config.DefaultProcessEventsCheckInterval, + } + + configKeys = map[string]string{ + ProcessCheckName: configProcessInterval, + RTProcessCheckName: configRTProcessInterval, + ContainerCheckName: configContainerInterval, + RTContainerCheckName: configRTContainerInterval, + ConnectionsCheckName: configConnectionsInterval, + } +) + +// GetDefaultInterval returns the default check interval value +func GetDefaultInterval(checkName string) time.Duration { + return defaultIntervals[checkName] +} + +// GetInterval returns the configured check interval value +func GetInterval(checkName string) time.Duration { + switch checkName { + case DiscoveryCheckName: + // We don't need to check if the key exists since we already bound it to a default in InitConfig. + // We use a minimum of 10 minutes for this value. + discoveryInterval := config.Datadog.GetDuration("process_config.process_discovery.interval") + if discoveryInterval < discoveryMinInterval { + discoveryInterval = discoveryMinInterval + _ = log.Warnf("Invalid interval for process discovery (< %s) using minimum value of %[1]s", discoveryMinInterval.String()) + } + return discoveryInterval + + case ProcessEventsCheckName: + eventsInterval := config.Datadog.GetDuration("process_config.event_collection.interval") + if eventsInterval < config.DefaultProcessEventsMinCheckInterval { + eventsInterval = config.DefaultProcessEventsCheckInterval + _ = log.Warnf("Invalid interval for process_events check (< %s) using default value of %s", + config.DefaultProcessEventsMinCheckInterval.String(), config.DefaultProcessEventsCheckInterval.String()) + } + return eventsInterval + + default: + defaultInterval := defaultIntervals[checkName] + configKey, ok := configKeys[checkName] + if !ok || !config.Datadog.IsSet(configKey) { + return defaultInterval + } + + if seconds := config.Datadog.GetInt(configKey); seconds != 0 { + log.Infof("Overriding %s check interval to %ds", configKey, seconds) + return time.Duration(seconds) * time.Second + } + return defaultInterval + } +} diff --git a/pkg/process/checks/interval_test.go b/pkg/process/checks/interval_test.go new file mode 100644 index 0000000000000..b9f427bfa57c2 --- /dev/null +++ b/pkg/process/checks/interval_test.go @@ -0,0 +1,156 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package checks + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" + + "github.com/DataDog/datadog-agent/pkg/config" +) + +func TestLegacyIntervalDefault(t *testing.T) { + for _, tc := range []struct { + name string + checkName string + expectedInterval time.Duration + }{ + { + name: "container default", + checkName: ContainerCheckName, + expectedInterval: ContainerCheckDefaultInterval, + }, + { + name: "container rt default", + checkName: RTContainerCheckName, + expectedInterval: RTContainerCheckDefaultInterval, + }, + { + name: "process default", + checkName: ProcessCheckName, + expectedInterval: ProcessCheckDefaultInterval, + }, + { + name: "process rt default", + checkName: RTProcessCheckName, + expectedInterval: RTProcessCheckDefaultInterval, + }, + { + name: "connections default", + checkName: ConnectionsCheckName, + expectedInterval: ConnectionsCheckDefaultInterval, + }, + { + name: "pod default", + checkName: PodCheckName, + expectedInterval: PodCheckDefaultInterval, + }, + } { + t.Run(tc.name, func(t *testing.T) { + _ = config.Mock(t) + assert.Equal(t, tc.expectedInterval, GetInterval(tc.checkName)) + }) + } +} + +func TestLegacyIntervalOverride(t *testing.T) { + override := 600 + for _, tc := range []struct { + name string + checkName string + setting string + expectedInterval time.Duration + }{ + { + name: "container default", + setting: "process_config.intervals.container", + checkName: ContainerCheckName, + }, + { + name: "container rt default", + setting: "process_config.intervals.container_realtime", + checkName: RTContainerCheckName, + }, + { + name: "process default", + setting: "process_config.intervals.process", + checkName: ProcessCheckName, + }, + { + name: "process rt default", + setting: "process_config.intervals.process_realtime", + checkName: RTProcessCheckName, + }, + { + name: "connections default", + setting: "process_config.intervals.connections", + checkName: ConnectionsCheckName, + }, + // Note: non-default overridden handling of pod check interval is in pkg/orhestrator/config + } { + t.Run(tc.name, func(t *testing.T) { + _ = config.Mock(t) + cfg := config.Mock(t) + cfg.Set(tc.setting, override) + assert.Equal(t, time.Duration(override)*time.Second, GetInterval(tc.checkName)) + }) + } +} + +// TestProcessDiscoveryInterval tests to make sure that the process discovery interval validation works properly +func TestProcessDiscoveryInterval(t *testing.T) { + for _, tc := range []struct { + name string + interval time.Duration + expectedInterval time.Duration + }{ + { + name: "allowed interval", + interval: 8 * time.Hour, + expectedInterval: 8 * time.Hour, + }, + { + name: "below minimum", + interval: 0, + expectedInterval: discoveryMinInterval, + }, + } { + t.Run(tc.name, func(t *testing.T) { + cfg := config.Mock(t) + cfg.Set("process_config.process_discovery.interval", tc.interval) + + assert.Equal(t, tc.expectedInterval, GetInterval(DiscoveryCheckName)) + }) + } +} + +func TestProcessEventsInterval(t *testing.T) { + for _, tc := range []struct { + name string + interval time.Duration + expectedInterval time.Duration + }{ + { + name: "allowed interval", + interval: 30 * time.Second, + expectedInterval: 30 * time.Second, + }, + { + name: "below minimum", + interval: 0, + expectedInterval: config.DefaultProcessEventsCheckInterval, + }, + } { + t.Run(tc.name, func(t *testing.T) { + cfg := config.Mock(t) + cfg.Set("process_config.event_collection.interval", tc.interval) + + assert.Equal(t, tc.expectedInterval, GetInterval(ProcessEventsCheckName)) + }) + } +} diff --git a/pkg/process/checks/mocks/check.go b/pkg/process/checks/mocks/check.go index 62ab63d9af59e..6f613d6f5e9fd 100644 --- a/pkg/process/checks/mocks/check.go +++ b/pkg/process/checks/mocks/check.go @@ -1,9 +1,9 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks import ( - config "github.com/DataDog/datadog-agent/pkg/process/config" + checks "github.com/DataDog/datadog-agent/pkg/process/checks" mock "github.com/stretchr/testify/mock" process "github.com/DataDog/agent-payload/v5/process" @@ -19,9 +19,18 @@ func (_m *Check) Cleanup() { _m.Called() } -// Init provides a mock function with given fields: cfg, info -func (_m *Check) Init(cfg *config.AgentConfig, info *process.SystemInfo) { - _m.Called(cfg, info) +// Init provides a mock function with given fields: syscfg, info +func (_m *Check) Init(syscfg *checks.SysProbeConfig, info *checks.HostInfo) error { + ret := _m.Called(syscfg, info) + + var r0 error + if rf, ok := ret.Get(0).(func(*checks.SysProbeConfig, *checks.HostInfo) error); ok { + r0 = rf(syscfg, info) + } else { + r0 = ret.Error(0) + } + + return r0 } // Name provides a mock function with given fields: @@ -52,13 +61,13 @@ func (_m *Check) RealTime() bool { return r0 } -// Run provides a mock function with given fields: cfg, groupID -func (_m *Check) Run(cfg *config.AgentConfig, groupID int32) ([]process.MessageBody, error) { - ret := _m.Called(cfg, groupID) +// Run provides a mock function with given fields: groupID +func (_m *Check) Run(groupID int32) ([]process.MessageBody, error) { + ret := _m.Called(groupID) var r0 []process.MessageBody - if rf, ok := ret.Get(0).(func(*config.AgentConfig, int32) []process.MessageBody); ok { - r0 = rf(cfg, groupID) + if rf, ok := ret.Get(0).(func(int32) []process.MessageBody); ok { + r0 = rf(groupID) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]process.MessageBody) @@ -66,8 +75,8 @@ func (_m *Check) Run(cfg *config.AgentConfig, groupID int32) ([]process.MessageB } var r1 error - if rf, ok := ret.Get(1).(func(*config.AgentConfig, int32) error); ok { - r1 = rf(cfg, groupID) + if rf, ok := ret.Get(1).(func(int32) error); ok { + r1 = rf(groupID) } else { r1 = ret.Error(1) } diff --git a/pkg/process/checks/mocks/check_with_real_time.go b/pkg/process/checks/mocks/check_with_real_time.go index 9d473782c2d5f..5437021c20ea7 100644 --- a/pkg/process/checks/mocks/check_with_real_time.go +++ b/pkg/process/checks/mocks/check_with_real_time.go @@ -1,11 +1,9 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks import ( checks "github.com/DataDog/datadog-agent/pkg/process/checks" - config "github.com/DataDog/datadog-agent/pkg/process/config" - mock "github.com/stretchr/testify/mock" process "github.com/DataDog/agent-payload/v5/process" @@ -21,9 +19,18 @@ func (_m *CheckWithRealTime) Cleanup() { _m.Called() } -// Init provides a mock function with given fields: cfg, info -func (_m *CheckWithRealTime) Init(cfg *config.AgentConfig, info *process.SystemInfo) { - _m.Called(cfg, info) +// Init provides a mock function with given fields: syscfg, info +func (_m *CheckWithRealTime) Init(syscfg *checks.SysProbeConfig, info *checks.HostInfo) error { + ret := _m.Called(syscfg, info) + + var r0 error + if rf, ok := ret.Get(0).(func(*checks.SysProbeConfig, *checks.HostInfo) error); ok { + r0 = rf(syscfg, info) + } else { + r0 = ret.Error(0) + } + + return r0 } // Name provides a mock function with given fields: @@ -68,13 +75,13 @@ func (_m *CheckWithRealTime) RealTimeName() string { return r0 } -// Run provides a mock function with given fields: cfg, groupID -func (_m *CheckWithRealTime) Run(cfg *config.AgentConfig, groupID int32) ([]process.MessageBody, error) { - ret := _m.Called(cfg, groupID) +// Run provides a mock function with given fields: groupID +func (_m *CheckWithRealTime) Run(groupID int32) ([]process.MessageBody, error) { + ret := _m.Called(groupID) var r0 []process.MessageBody - if rf, ok := ret.Get(0).(func(*config.AgentConfig, int32) []process.MessageBody); ok { - r0 = rf(cfg, groupID) + if rf, ok := ret.Get(0).(func(int32) []process.MessageBody); ok { + r0 = rf(groupID) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]process.MessageBody) @@ -82,8 +89,8 @@ func (_m *CheckWithRealTime) Run(cfg *config.AgentConfig, groupID int32) ([]proc } var r1 error - if rf, ok := ret.Get(1).(func(*config.AgentConfig, int32) error); ok { - r1 = rf(cfg, groupID) + if rf, ok := ret.Get(1).(func(int32) error); ok { + r1 = rf(groupID) } else { r1 = ret.Error(1) } @@ -91,13 +98,13 @@ func (_m *CheckWithRealTime) Run(cfg *config.AgentConfig, groupID int32) ([]proc return r0, r1 } -// RunWithOptions provides a mock function with given fields: cfg, nextGroupID, options -func (_m *CheckWithRealTime) RunWithOptions(cfg *config.AgentConfig, nextGroupID func() int32, options checks.RunOptions) (*checks.RunResult, error) { - ret := _m.Called(cfg, nextGroupID, options) +// RunWithOptions provides a mock function with given fields: nextGroupID, options +func (_m *CheckWithRealTime) RunWithOptions(nextGroupID func() int32, options checks.RunOptions) (*checks.RunResult, error) { + ret := _m.Called(nextGroupID, options) var r0 *checks.RunResult - if rf, ok := ret.Get(0).(func(*config.AgentConfig, func() int32, checks.RunOptions) *checks.RunResult); ok { - r0 = rf(cfg, nextGroupID, options) + if rf, ok := ret.Get(0).(func(func() int32, checks.RunOptions) *checks.RunResult); ok { + r0 = rf(nextGroupID, options) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*checks.RunResult) @@ -105,8 +112,8 @@ func (_m *CheckWithRealTime) RunWithOptions(cfg *config.AgentConfig, nextGroupID } var r1 error - if rf, ok := ret.Get(1).(func(*config.AgentConfig, func() int32, checks.RunOptions) error); ok { - r1 = rf(cfg, nextGroupID, options) + if rf, ok := ret.Get(1).(func(func() int32, checks.RunOptions) error); ok { + r1 = rf(nextGroupID, options) } else { r1 = ret.Error(1) } diff --git a/pkg/process/checks/net.go b/pkg/process/checks/net.go index 54914a1a85810..603fc9e226dad 100644 --- a/pkg/process/checks/net.go +++ b/pkg/process/checks/net.go @@ -17,11 +17,9 @@ import ( "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/network/dns" - "github.com/DataDog/datadog-agent/pkg/process/config" - "github.com/DataDog/datadog-agent/pkg/process/dockerproxy" + "github.com/DataDog/datadog-agent/pkg/process/metadata/parser" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/process/net/resolver" - "github.com/DataDog/datadog-agent/pkg/process/procutil" putil "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -45,25 +43,30 @@ var ( // ConnectionsCheck collects statistics about live TCP and UDP connections. type ConnectionsCheck struct { + hostInfo *HostInfo + maxConnsPerMessage int tracerClientID string networkID string notInitializedLogLimit *putil.LogLimit // store the last collection result by PID, currently used to populate network data for processes // it's in format map[int32][]*model.Connections - lastConnsByPID *atomic.Value - probe procutil.Probe + lastConnsByPID *atomic.Value + dockerFilter *parser.DockerProxy + serviceExtractor *parser.ServiceExtractor + processData *ProcessData } // Init initializes a ConnectionsCheck instance. -func (c *ConnectionsCheck) Init(cfg *config.AgentConfig, _ *model.SystemInfo) { - c.probe = newProcessProbe() +func (c *ConnectionsCheck) Init(syscfg *SysProbeConfig, hostInfo *HostInfo) error { + c.hostInfo = hostInfo + c.maxConnsPerMessage = syscfg.MaxConnsPerMessage c.notInitializedLogLimit = putil.NewLogLimit(1, time.Minute*10) // We use the current process PID as the system-probe client ID c.tracerClientID = ProcessAgentClientID // Calling the remote tracer will cause it to initialize and check connectivity - net.SetSystemProbePath(cfg.SystemProbeAddress) + net.SetSystemProbePath(syscfg.SystemProbeAddress) tu, err := net.GetRemoteSystemProbeUtil() if err != nil { @@ -82,10 +85,16 @@ func (c *ConnectionsCheck) Init(cfg *config.AgentConfig, _ *model.SystemInfo) { log.Infof("no network ID detected: %s", err) } c.networkID = networkID + c.processData = NewProcessData() + c.dockerFilter = parser.NewDockerProxy() + c.serviceExtractor = parser.NewServiceExtractor() + c.processData.Register(c.dockerFilter) + c.processData.Register(c.serviceExtractor) + return nil } // Name returns the name of the ConnectionsCheck. -func (c *ConnectionsCheck) Name() string { return config.ConnectionsCheckName } +func (c *ConnectionsCheck) Name() string { return ConnectionsCheckName } // RealTime indicates if this check only runs in real-time mode. func (c *ConnectionsCheck) RealTime() bool { return false } @@ -98,7 +107,7 @@ func (c *ConnectionsCheck) ShouldSaveLastRun() bool { return false } // For each connection we'll return a `model.Connection` // that will be bundled up into a `CollectorConnections`. // See agent.proto for the schema of the message and models. -func (c *ConnectionsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (c *ConnectionsCheck) Run(groupID int32) ([]model.MessageBody, error) { start := time.Now() conns, err := c.getConnections() @@ -111,11 +120,11 @@ func (c *ConnectionsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model. } // Filter out (in-place) connection data associated with docker-proxy - procs, err := c.probe.ProcessesByPID(time.Now(), false) + err = c.processData.Fetch() if err != nil { - log.Warnf("error collecting processes for proxy filter: %s", err) + log.Warnf("error collecting processes for filter and extraction: %s", err) } else { - dockerproxy.NewFilter(procs).Filter(conns) + c.dockerFilter.Filter(conns) } // Resolve the Raddr side of connections for local containers LocalResolver.Resolve(conns) @@ -123,7 +132,7 @@ func (c *ConnectionsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model. c.lastConnsByPID.Store(getConnectionsByPID(conns)) log.Debugf("collected connections in %s", time.Since(start)) - return batchConnections(cfg, groupID, conns.Conns, conns.Dns, c.networkID, conns.ConnTelemetryMap, conns.CompilationTelemetryByAsset, conns.Domains, conns.Routes, conns.Tags, conns.AgentConfiguration), nil + return batchConnections(c.hostInfo, c.maxConnsPerMessage, groupID, conns.Conns, conns.Dns, c.networkID, conns.ConnTelemetryMap, conns.CompilationTelemetryByAsset, conns.KernelHeaderFetchResult, conns.CORETelemetryByAsset, conns.Domains, conns.Routes, conns.Tags, conns.AgentConfiguration, c.serviceExtractor), nil } // Cleanup frees any resource held by the ConnectionsCheck before the agent exits @@ -239,24 +248,28 @@ func remapDNSStatsByOffset(c *model.Connection, indexToOffset []int32) { // Connections are split up into a chunks of a configured size conns per message to limit the message size on intake. func batchConnections( - cfg *config.AgentConfig, + hostInfo *HostInfo, + maxConnsPerMessage int, groupID int32, cxs []*model.Connection, dns map[string]*model.DNSEntry, networkID string, connTelemetryMap map[string]int64, compilationTelemetry map[string]*model.RuntimeCompilationTelemetry, + kernelHeaderFetchResult model.KernelHeaderFetchResult, + coreTelemetry map[string]model.COREResult, domains []string, routes []*model.Route, tags []string, agentCfg *model.AgentConfiguration, + serviceExtractor *parser.ServiceExtractor, ) []model.MessageBody { - groupSize := groupSize(len(cxs), cfg.MaxConnsPerMessage) + groupSize := groupSize(len(cxs), maxConnsPerMessage) batches := make([]model.MessageBody, 0, groupSize) dnsEncoder := model.NewV2DNSEncoder() - if len(cxs) > cfg.MaxConnsPerMessage { + if len(cxs) > maxConnsPerMessage { // Sort connections by remote IP/PID for more efficient resolution sort.Slice(cxs, func(i, j int) bool { if cxs[i].Raddr.Ip != cxs[j].Raddr.Ip { @@ -267,7 +280,7 @@ func batchConnections( } for len(cxs) > 0 { - batchSize := min(cfg.MaxConnsPerMessage, len(cxs)) + batchSize := min(maxConnsPerMessage, len(cxs)) batchConns := cxs[:batchSize] // Connections for this particular batch ctrIDForPID := make(map[int32]string) @@ -296,17 +309,15 @@ func batchConnections( remapDNSStatsByDomainByQueryType(c, namemap, &namedb, domains) // tags remap - if len(c.Tags) > 0 { - var tagsStr []string - for _, t := range c.Tags { - tagsStr = append(tagsStr, tags[t]) - } + serviceCtx := serviceExtractor.GetServiceContext(c.Pid) + tagsStr := convertAndEnrichWithServiceCtx(tags, c.Tags, serviceCtx) + + if len(tagsStr) > 0 { c.Tags = nil c.TagsIdx = int32(tagsEncoder.Encode(tagsStr)) } else { c.TagsIdx = -1 } - } // remap route indices @@ -357,7 +368,7 @@ func batchConnections( } cc := &model.CollectorConnections{ AgentConfiguration: agentCfg, - HostName: cfg.HostName, + HostName: hostInfo.HostName, NetworkId: networkID, Connections: batchConns, GroupId: groupID, @@ -365,7 +376,7 @@ func batchConnections( ContainerForPid: ctrIDForPID, EncodedDomainDatabase: encodedNameDb, EncodedDnsLookups: mappedDNSLookups, - ContainerHostType: cfg.ContainerHostType, + ContainerHostType: hostInfo.ContainerHostType, Routes: batchRoutes, EncodedConnectionsTags: tagsEncoder.Buffer(), } @@ -382,6 +393,8 @@ func batchConnections( if len(batches) == 0 { cc.ConnTelemetryMap = connTelemetryMap cc.CompilationTelemetryByAsset = compilationTelemetry + cc.KernelHeaderFetchResult = kernelHeaderFetchResult + cc.CORETelemetryByAsset = coreTelemetry } batches = append(batches, cc) @@ -404,3 +417,17 @@ func groupSize(total, maxBatchSize int) int32 { } return int32(groupSize) } + +// converts the tags based on the tagOffsets for encoding. It also enriches it with service context if any +func convertAndEnrichWithServiceCtx(tags []string, tagOffsets []uint32, serviceCtx string) []string { + tagCount := len(tagOffsets) + len(serviceCtx) + tagsStr := make([]string, 0, tagCount) + for _, t := range tagOffsets { + tagsStr = append(tagsStr, tags[t]) + } + if serviceCtx != "" { + tagsStr = append(tagsStr, serviceCtx) + } + + return tagsStr +} diff --git a/pkg/process/checks/net_test.go b/pkg/process/checks/net_test.go index f778f4f818d45..e5aec3d9effa8 100644 --- a/pkg/process/checks/net_test.go +++ b/pkg/process/checks/net_test.go @@ -13,8 +13,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/network/dns" - "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/metadata/parser" + "github.com/DataDog/datadog-agent/pkg/process/procutil" ) func makeConnection(pid int32) *model.Connection { @@ -52,8 +54,9 @@ func TestDNSNameEncoding(t *testing.T) { "1.1.2.4": {Names: []string{"host4.domain.com"}}, "1.1.2.5": {Names: nil}, } - cfg := config.NewDefaultAgentConfig() - chunks := batchConnections(cfg, 0, p, dns, "nid", nil, nil, nil, nil, nil, nil) + ex := parser.NewServiceExtractor() + maxConnsPerMessage := 10 + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, p, dns, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) assert.Equal(t, len(chunks), 1) chunk := chunks[0] @@ -76,8 +79,6 @@ func TestDNSNameEncoding(t *testing.T) { } func TestNetworkConnectionBatching(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - for i, tc := range []struct { cur, last []*model.Connection maxSize int @@ -115,10 +116,12 @@ func TestNetworkConnectionBatching(t *testing.T) { expectedChunks: 3, }, } { - cfg.MaxConnsPerMessage = tc.maxSize ctm := map[string]int64{} rctm := map[string]*model.RuntimeCompilationTelemetry{} - chunks := batchConnections(cfg, 0, tc.cur, map[string]*model.DNSEntry{}, "nid", ctm, rctm, nil, nil, nil, nil) + khfr := model.KernelHeaderFetchResult_FetchNotAttempted + coretm := map[string]model.COREResult{} + ex := parser.NewServiceExtractor() + chunks := batchConnections(&HostInfo{}, tc.maxSize, 0, tc.cur, map[string]*model.DNSEntry{}, "nid", ctm, rctm, khfr, coretm, nil, nil, nil, nil, ex) assert.Len(t, chunks, tc.expectedChunks, "len %d", i) total := 0 @@ -156,10 +159,9 @@ func TestNetworkConnectionBatchingWithDNS(t *testing.T) { "1.1.2.3": {Names: []string{"datacat.edu"}}, } - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 1 - - chunks := batchConnections(cfg, 0, p, dns, "nid", nil, nil, nil, nil, nil, nil) + maxConnsPerMessage := 1 + ex := parser.NewServiceExtractor() + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, p, dns, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) assert.Len(t, chunks, 4) total := 0 @@ -197,10 +199,9 @@ func TestBatchSimilarConnectionsTogether(t *testing.T) { p[4].Raddr.Ip = "1.2.3.4" p[5].Raddr.Ip = "1.3.4.5" - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 2 - - chunks := batchConnections(cfg, 0, p, map[string]*model.DNSEntry{}, "nid", nil, nil, nil, nil, nil, nil) + maxConnsPerMessage := 2 + ex := parser.NewServiceExtractor() + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, p, map[string]*model.DNSEntry{}, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) assert.Len(t, chunks, 3) total := 0 @@ -282,10 +283,9 @@ func TestNetworkConnectionBatchingWithDomainsByQueryType(t *testing.T) { } dnsmap := map[string]*model.DNSEntry{} - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 1 - - chunks := batchConnections(cfg, 0, conns, dnsmap, "nid", nil, nil, domains, nil, nil, nil) + maxConnsPerMessage := 1 + ex := parser.NewServiceExtractor() + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, dnsmap, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, domains, nil, nil, nil, ex) assert.Len(t, chunks, 4) total := 0 @@ -401,10 +401,9 @@ func TestNetworkConnectionBatchingWithDomains(t *testing.T) { } dnsmap := map[string]*model.DNSEntry{} - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 1 - - chunks := batchConnections(cfg, 0, conns, dnsmap, "nid", nil, nil, domains, nil, nil, nil) + maxConnsPerMessage := 1 + ex := parser.NewServiceExtractor() + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, dnsmap, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, domains, nil, nil, nil, ex) assert.Len(t, chunks, 4) total := 0 @@ -511,10 +510,9 @@ func TestNetworkConnectionBatchingWithRoutes(t *testing.T) { conns[6].RouteIdx = 3 conns[7].RouteIdx = 2 - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 4 - - chunks := batchConnections(cfg, 0, conns, nil, "nid", nil, nil, nil, routes, nil, nil) + maxConnsPerMessage := 4 + ex := parser.NewServiceExtractor() + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, routes, nil, nil, ex) assert.Len(t, chunks, 2) total := 0 @@ -580,10 +578,9 @@ func TestNetworkConnectionTags(t *testing.T) { } foundTags := []fakeConn{} - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 4 - - chunks := batchConnections(cfg, 0, conns, nil, "nid", nil, nil, nil, nil, tags, nil) + maxConnsPerMessage := 4 + ex := parser.NewServiceExtractor() + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, tags, nil, ex) assert.Len(t, chunks, 2) total := 0 @@ -601,3 +598,72 @@ func TestNetworkConnectionTags(t *testing.T) { assert.Equal(t, 8, total) require.EqualValues(t, expectedTags, foundTags) } + +func TestNetworkConnectionTagsWithService(t *testing.T) { + conns := makeConnections(1) + tags := []string{"tag0"} + conns[0].Tags = []uint32{0} + + expectedTags := []string{"tag0", "process_context:my-server"} + + procsByPid := map[int32]*procutil.Process{ + conns[0].Pid: { + Pid: conns[0].Pid, + Cmdline: []string{"./my-server.sh"}, + }, + } + mockConfig := ddconfig.Mock(t) + mockConfig.Set("service_monitoring_config.process_service_inference.enabled", true) + + maxConnsPerMessage := 1 + ex := parser.NewServiceExtractor() + ex.Extract(procsByPid) + + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, tags, nil, ex) + + assert.Len(t, chunks, 1) + connections := chunks[0].(*model.CollectorConnections) + assert.Len(t, connections.Connections, 1) + require.EqualValues(t, expectedTags, connections.GetConnectionsTags(connections.Connections[0].TagsIdx)) +} + +func TestConvertAndEnrichWithServiceTags(t *testing.T) { + tags := []string{"tag0", "tag1", "tag2"} + + tests := []struct { + name string + tagOffsets []uint32 + serviceTag string + expected []string + }{ + { + name: "no tags", + tagOffsets: nil, + serviceTag: "", + expected: []string{}, + }, + { + name: "convert tags only", + tagOffsets: []uint32{0, 2}, + serviceTag: "", + expected: []string{"tag0", "tag2"}, + }, + { + name: "convert service tag only", + tagOffsets: nil, + serviceTag: "process_context:dogfood", + expected: []string{"process_context:dogfood"}, + }, + { + name: "convert tags with service tag", + tagOffsets: []uint32{0, 2}, + serviceTag: "process_context:doge", + expected: []string{"tag0", "tag2", "process_context:doge"}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equal(t, tt.expected, convertAndEnrichWithServiceCtx(tags, tt.tagOffsets, tt.serviceTag)) + }) + } +} diff --git a/pkg/process/checks/pod.go b/pkg/process/checks/pod.go index 3e19ad62e4d6c..9f0218bd9fc5b 100644 --- a/pkg/process/checks/pod.go +++ b/pkg/process/checks/pod.go @@ -18,31 +18,35 @@ import ( "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" k8sProcessors "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors/k8s" "github.com/DataDog/datadog-agent/pkg/orchestrator" - "github.com/DataDog/datadog-agent/pkg/process/config" + oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/kubelet" ) // Pod is a singleton PodCheck. -var Pod = &PodCheck{} +var Pod = &PodCheck{ + config: oconfig.NewDefaultOrchestratorConfig(), +} // PodCheck is a check that returns container metadata and stats. type PodCheck struct { - sysInfo *model.SystemInfo + hostInfo *HostInfo containerFailedLogLimit *util.LogLimit processor *processors.Processor + config *oconfig.OrchestratorConfig } // Init initializes a PodCheck instance. -func (c *PodCheck) Init(cfg *config.AgentConfig, info *model.SystemInfo) { +func (c *PodCheck) Init(_ *SysProbeConfig, hostInfo *HostInfo) error { + c.hostInfo = hostInfo c.containerFailedLogLimit = util.NewLogLimit(10, time.Minute*10) c.processor = processors.NewProcessor(new(k8sProcessors.PodHandlers)) - c.sysInfo = info + return c.config.Load() } // Name returns the name of the ProcessCheck. -func (c *PodCheck) Name() string { return config.PodCheckName } +func (c *PodCheck) Name() string { return PodCheckName } // RealTime indicates if this check only runs in real-time mode. func (c *PodCheck) RealTime() bool { return false } @@ -51,7 +55,7 @@ func (c *PodCheck) RealTime() bool { return false } func (c *PodCheck) ShouldSaveLastRun() bool { return true } // Run runs the PodCheck to collect a list of running pods -func (c *PodCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (c *PodCheck) Run(groupID int32) ([]model.MessageBody, error) { kubeUtil, err := kubelet.GetKubeUtil() if err != nil { return nil, err @@ -69,8 +73,8 @@ func (c *PodCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageB ctx := &processors.ProcessorContext{ ClusterID: clusterID, - Cfg: cfg.Orchestrator, - HostName: cfg.HostName, + Cfg: c.config, + HostName: c.hostInfo.HostName, MsgGroupID: groupID, NodeType: orchestrator.K8sPod, ApiGroupVersionTag: fmt.Sprintf("kube_api_version:%s", "v1"), diff --git a/pkg/process/checks/pod_null.go b/pkg/process/checks/pod_null.go index de36e3e9cc00c..44843b3daa2b8 100644 --- a/pkg/process/checks/pod_null.go +++ b/pkg/process/checks/pod_null.go @@ -12,8 +12,6 @@ import ( "fmt" model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) // Pod is a singleton PodCheck. @@ -21,12 +19,11 @@ var Pod = &PodCheck{} // PodCheck is a check that returns container metadata and stats. type PodCheck struct { - sysInfo *model.SystemInfo } // Init initializes a PodCheck instance. -func (c *PodCheck) Init(cfg *config.AgentConfig, info *model.SystemInfo) { - c.sysInfo = info +func (c *PodCheck) Init(_ *SysProbeConfig, hostInfo *HostInfo) error { + return nil } // Name returns the name of the ProcessCheck. @@ -39,8 +36,8 @@ func (c *PodCheck) RealTime() bool { return false } func (c *PodCheck) ShouldSaveLastRun() bool { return true } // Run runs the PodCheck to collect a list of running pods -func (c *PodCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { - return nil, fmt.Errorf("Not implemented") +func (c *PodCheck) Run(groupID int32) ([]model.MessageBody, error) { + return nil, fmt.Errorf("not implemented") } // Cleanup frees any resource held by the PodCheck before the agent exits diff --git a/pkg/process/checks/process.go b/pkg/process/checks/process.go index 6bf1da24edb39..93325ff27b848 100644 --- a/pkg/process/checks/process.go +++ b/pkg/process/checks/process.go @@ -8,12 +8,14 @@ package checks import ( "context" "errors" + "regexp" + "strings" "time" model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/gopsutil/cpu" - "github.com/DataDog/datadog-agent/pkg/process/config" + ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/process/statsd" @@ -22,10 +24,19 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -const emptyCtrID = "" +const ( + emptyCtrID = "" + configPrefix = "process_config." + configCustomSensitiveWords = configPrefix + "custom_sensitive_words" + configScrubArgs = configPrefix + "scrub_args" + configStripProcArgs = configPrefix + "strip_proc_arguments" + configDisallowList = configPrefix + "blacklist_patterns" +) // Process is a singleton ProcessCheck. -var Process = &ProcessCheck{} +var Process = &ProcessCheck{ + scrubber: procutil.NewDefaultDataScrubber(), +} var _ CheckWithRealTime = (*ProcessCheck)(nil) @@ -36,8 +47,13 @@ var errEmptyCPUTime = errors.New("empty CPU time information returned") // checks that will be used for rates, cpu calculations, etc. type ProcessCheck struct { probe procutil.Probe + // scrubber is a DataScrubber to hide command line sensitive words + scrubber *procutil.DataScrubber + + // disallowList to hide processes + disallowList []*regexp.Regexp - sysInfo *model.SystemInfo + hostInfo *HostInfo lastCPUTime cpu.TimesStat lastProcs map[int32]*procutil.Process lastRun time.Time @@ -64,8 +80,8 @@ type ProcessCheck struct { } // Init initializes the singleton ProcessCheck. -func (p *ProcessCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) { - p.sysInfo = info +func (p *ProcessCheck) Init(_ *SysProbeConfig, info *HostInfo) error { + p.hostInfo = info p.probe = newProcessProbe(procutil.WithPermission(Process.SysprobeProcessModuleEnabled)) p.containerProvider = util.GetSharedContainerProvider() @@ -79,13 +95,18 @@ func (p *ProcessCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) { p.maxBatchSize = getMaxBatchSize() p.maxBatchBytes = getMaxBatchBytes() + + initScrubber(p.scrubber) + + p.disallowList = initDisallowList() + return nil } // Name returns the name of the ProcessCheck. -func (p *ProcessCheck) Name() string { return config.ProcessCheckName } +func (p *ProcessCheck) Name() string { return ProcessCheckName } // RealTimeName returns the name of the RTProcessCheck -func (p *ProcessCheck) RealTimeName() string { return config.RTProcessCheckName } +func (p *ProcessCheck) RealTimeName() string { return RTProcessCheckName } // RealTime indicates if this check only runs in real-time mode. func (p *ProcessCheck) RealTime() bool { return false } @@ -100,8 +121,8 @@ func (p *ProcessCheck) ShouldSaveLastRun() bool { return true } // Processes are split up into a chunks of at most 100 processes per message to // limit the message size on intake. // See agent.proto for the schema of the message and models used. -func (p *ProcessCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { - result, err := p.run(cfg, groupID, false) +func (p *ProcessCheck) Run(groupID int32) ([]model.MessageBody, error) { + result, err := p.run(groupID, false) if err != nil { return nil, err } @@ -112,7 +133,7 @@ func (p *ProcessCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.Mess // Cleanup frees any resource held by the ProcessCheck before the agent exits func (p *ProcessCheck) Cleanup() {} -func (p *ProcessCheck) run(cfg *config.AgentConfig, groupID int32, collectRealTime bool) (*RunResult, error) { +func (p *ProcessCheck) run(groupID int32, collectRealTime bool) (*RunResult, error) { start := time.Now() cpuTimes, err := cpu.Times(false) if err != nil { @@ -170,8 +191,8 @@ func (p *ProcessCheck) run(cfg *config.AgentConfig, groupID int32, collectRealTi } connsByPID := Connections.getLastConnectionsByPID() - procsByCtr := fmtProcesses(cfg, procs, p.lastProcs, pidToCid, cpuTimes[0], p.lastCPUTime, p.lastRun, connsByPID) - messages, totalProcs, totalContainers := createProcCtrMessages(procsByCtr, containers, cfg, p.maxBatchSize, p.maxBatchBytes, p.sysInfo, groupID, p.networkID) + procsByCtr := fmtProcesses(p.scrubber, p.disallowList, procs, p.lastProcs, pidToCid, cpuTimes[0], p.lastCPUTime, p.lastRun, connsByPID) + messages, totalProcs, totalContainers := createProcCtrMessages(p.hostInfo, procsByCtr, containers, p.maxBatchSize, p.maxBatchBytes, groupID, p.networkID) // Store the last state for comparison on the next run. // Note: not storing the filtered in case there are new processes that haven't had a chance to show up twice. @@ -187,21 +208,21 @@ func (p *ProcessCheck) run(cfg *config.AgentConfig, groupID int32, collectRealTi if p.realtimeLastProcs != nil { // TODO: deduplicate chunking with RT collection - chunkedStats := fmtProcessStats(cfg, p.maxBatchSize, stats, p.realtimeLastProcs, pidToCid, cpuTimes[0], p.realtimeLastCPUTime, p.realtimeLastRun, connsByPID) + chunkedStats := fmtProcessStats(p.maxBatchSize, stats, p.realtimeLastProcs, pidToCid, cpuTimes[0], p.realtimeLastCPUTime, p.realtimeLastRun, connsByPID) groupSize := len(chunkedStats) chunkedCtrStats := convertAndChunkContainers(containers, groupSize) messages := make([]model.MessageBody, 0, groupSize) for i := 0; i < groupSize; i++ { messages = append(messages, &model.CollectorRealTime{ - HostName: cfg.HostName, + HostName: p.hostInfo.HostName, Stats: chunkedStats[i], ContainerStats: chunkedCtrStats[i], GroupId: groupID, GroupSize: int32(groupSize), - NumCpus: int32(len(p.sysInfo.Cpus)), - TotalMemory: p.sysInfo.TotalMemory, - ContainerHostType: cfg.ContainerHostType, + NumCpus: int32(len(p.hostInfo.SystemInfo.Cpus)), + TotalMemory: p.hostInfo.SystemInfo.TotalMemory, + ContainerHostType: p.hostInfo.ContainerHostType, }) } result.RealTime = messages @@ -229,26 +250,25 @@ func procsToStats(procs map[int32]*procutil.Process) map[int32]*procutil.Stats { // RunWithOptions collects process data (regular metadata + stats) and/or realtime process data (stats only) // Messages are grouped as RunResult instances with CheckName identifying the type -func (p *ProcessCheck) RunWithOptions(cfg *config.AgentConfig, nextGroupID func() int32, options RunOptions) (*RunResult, error) { +func (p *ProcessCheck) RunWithOptions(nextGroupID func() int32, options RunOptions) (*RunResult, error) { if options.RunStandard { log.Tracef("Running process check") - return p.run(cfg, nextGroupID(), options.RunRealTime) + return p.run(nextGroupID(), options.RunRealTime) } if options.RunRealTime { log.Tracef("Running rtprocess check") - return p.runRealtime(cfg, nextGroupID()) + return p.runRealtime(nextGroupID()) } return nil, errors.New("invalid run options for check") } func createProcCtrMessages( + hostInfo *HostInfo, procsByCtr map[string][]*model.Process, containers []*model.Container, - cfg *config.AgentConfig, maxBatchSize int, maxBatchWeight int, - sysInfo *model.SystemInfo, groupID int32, networkID string, ) ([]model.MessageBody, int, int) { @@ -258,11 +278,11 @@ func createProcCtrMessages( messages := make([]model.MessageBody, 0, len(collectorProcs)) for _, m := range collectorProcs { m.GroupSize = int32(len(collectorProcs)) - m.HostName = cfg.HostName + m.HostName = hostInfo.HostName m.NetworkId = networkID - m.Info = sysInfo + m.Info = hostInfo.SystemInfo m.GroupId = groupID - m.ContainerHostType = cfg.ContainerHostType + m.ContainerHostType = hostInfo.ContainerHostType messages = append(messages, m) } @@ -297,7 +317,8 @@ func chunkProcessesAndContainers( // fmtProcesses goes through each process, converts them to process object and group them by containers // non-container processes would be in a single group with key as empty string "" func fmtProcesses( - cfg *config.AgentConfig, + scrubber *procutil.DataScrubber, + disallowList []*regexp.Regexp, procs, lastProcs map[int32]*procutil.Process, ctrByProc map[int]string, syst2, syst1 cpu.TimesStat, @@ -305,15 +326,15 @@ func fmtProcesses( connsByPID map[int32][]*model.Connection, ) map[string][]*model.Process { procsByCtr := make(map[string][]*model.Process) - connCheckIntervalS := int(cfg.CheckIntervals[config.ConnectionsCheckName] / time.Second) + connCheckIntervalS := int(GetInterval(ConnectionsCheckName) / time.Second) for _, fp := range procs { - if skipProcess(cfg, fp, lastProcs) { + if skipProcess(disallowList, fp, lastProcs) { continue } - // Hide blacklisted args if the Scrubber is enabled - fp.Cmdline = cfg.Scrubber.ScrubProcessCommand(fp) + // Hide disallow-listed args if the Scrubber is enabled + fp.Cmdline = scrubber.ScrubProcessCommand(fp) proc := &model.Process{ Pid: fp.Pid, @@ -338,7 +359,7 @@ func fmtProcesses( procsByCtr[proc.ContainerId] = append(procsByCtr[proc.ContainerId], proc) } - cfg.Scrubber.IncrementCacheAge() + scrubber.IncrementCacheAge() return procsByCtr } @@ -442,17 +463,17 @@ func formatCPU(statsNow, statsBefore *procutil.Stats, syst2, syst1 cpu.TimesStat return formatCPUTimes(statsNow, statsNow.CPUTime, statsBefore.CPUTime, syst2, syst1) } -// skipProcess will skip a given process if it's blacklisted or hasn't existed +// skipProcess will skip a given process if it's disallow-listed or hasn't existed // for multiple collections. func skipProcess( - cfg *config.AgentConfig, + disallowList []*regexp.Regexp, fp *procutil.Process, lastProcs map[int32]*procutil.Process, ) bool { if len(fp.Cmdline) == 0 { return true } - if config.IsBlacklisted(fp.Cmdline, cfg.Blacklist) { + if isDisallowListed(fp.Cmdline, disallowList) { return true } if _, ok := lastProcs[fp.Pid]; !ok { @@ -497,3 +518,54 @@ func mergeProcWithSysprobeStats(pids []int32, procs map[int32]*procutil.Process, log.Debugf("cannot do GetProcStats from system-probe for process check: %s", err) } } + +func initScrubber(scrubber *procutil.DataScrubber) { + // Enable/Disable the DataScrubber to obfuscate process args + if ddconfig.Datadog.IsSet(configScrubArgs) { + scrubber.Enabled = ddconfig.Datadog.GetBool(configScrubArgs) + } + + if scrubber.Enabled { // Scrubber is enabled by default when it's created + log.Debug("Starting process collection with Scrubber enabled") + } + + // A custom word list to enhance the default one used by the DataScrubber + if ddconfig.Datadog.IsSet(configCustomSensitiveWords) { + words := ddconfig.Datadog.GetStringSlice(configCustomSensitiveWords) + scrubber.AddCustomSensitiveWords(words) + log.Debug("Adding custom sensitives words to Scrubber:", words) + } + + // Strips all process arguments + if ddconfig.Datadog.GetBool(configStripProcArgs) { + log.Debug("Strip all process arguments enabled") + scrubber.StripAllArguments = true + } +} + +func initDisallowList() []*regexp.Regexp { + var disallowList []*regexp.Regexp + // A list of regex patterns that will exclude a process if matched. + if ddconfig.Datadog.IsSet(configDisallowList) { + for _, b := range ddconfig.Datadog.GetStringSlice(configDisallowList) { + r, err := regexp.Compile(b) + if err != nil { + log.Warnf("Ignoring invalid disallow list pattern: %s", b) + continue + } + disallowList = append(disallowList, r) + } + } + return disallowList +} + +// isDisallowListed returns a boolean indicating if the given command is disallow-listed by our config. +func isDisallowListed(cmdline []string, disallowList []*regexp.Regexp) bool { + cmd := strings.Join(cmdline, " ") + for _, b := range disallowList { + if b.MatchString(cmd) { + return true + } + } + return false +} diff --git a/pkg/process/checks/process_data.go b/pkg/process/checks/process_data.go new file mode 100644 index 0000000000000..7d3a0992ff94a --- /dev/null +++ b/pkg/process/checks/process_data.go @@ -0,0 +1,51 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package checks + +import ( + "time" + + "github.com/DataDog/datadog-agent/pkg/process/metadata" + "github.com/DataDog/datadog-agent/pkg/process/procutil" +) + +// ProcessData collects a basic state of process data such as cmdline args. +// This is currently used for metadata extraction from processes. This is a starting point for providing +// process data across all checks as part of the migration to components. +type ProcessData struct { + probe procutil.Probe + extractors []metadata.Extractor +} + +func NewProcessData() *ProcessData { + return &ProcessData{ + probe: newProcessProbe(), + } +} + +// Fetch retrieves process data from the system and notifies registered extractors +func (p *ProcessData) Fetch() error { + procs, err := p.probe.ProcessesByPID(time.Now(), false) + + if err != nil { + return err + } + + notifyExtractors(procs, p.extractors) + + return nil +} + +// Register adds an Extractor which will be notified for metadata extraction +func (p *ProcessData) Register(e metadata.Extractor) { + p.extractors = append(p.extractors, e) +} + +func notifyExtractors(procs map[int32]*procutil.Process, extractors []metadata.Extractor) { + for _, extractor := range extractors { + extractor.Extract(procs) + } +} diff --git a/pkg/process/checks/process_data_test.go b/pkg/process/checks/process_data_test.go new file mode 100644 index 0000000000000..a1e2a623b662c --- /dev/null +++ b/pkg/process/checks/process_data_test.go @@ -0,0 +1,83 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package checks + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + + "github.com/DataDog/datadog-agent/pkg/process/procutil" + "github.com/DataDog/datadog-agent/pkg/process/procutil/mocks" +) + +type mockExtractor struct { + called int + procs map[int32]*procutil.Process +} + +func (e *mockExtractor) Extract(p map[int32]*procutil.Process) { + e.called += 1 + e.procs = p +} + +func newMockExtractor() *mockExtractor { + return &mockExtractor{} +} + +func TestProcessDataFetch(t *testing.T) { + probe := mocks.NewProbe(t) + + proc1 := makeProcess(1, "git clone google.com") + proc2 := makeProcess(2, "mine-bitcoins -all -x") + processesByPid := map[int32]*procutil.Process{ + proc1.Pid: proc1, + proc2.Pid: proc2, + } + + tests := []struct { + name string + extractors []*mockExtractor + wantErr bool + }{ + { + name: "error fetching process data", + extractors: nil, + wantErr: true, + }, + { + name: "verify fetch triggers extractors", + extractors: []*mockExtractor{newMockExtractor(), newMockExtractor()}, + wantErr: true, + }, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + p := NewProcessData() + p.probe = probe + + for _, e := range tc.extractors { + p.Register(e) + } + + if tc.wantErr { + probe.On("ProcessesByPID", mock.Anything, mock.Anything). + Return(nil, fmt.Errorf("unable to retrieve process data")) + assert.Error(t, p.Fetch()) + } else { + probe.On("ProcessesByPID", mock.Anything, mock.Anything). + Return(processesByPid, nil) + assert.NoError(t, p.Fetch()) + for _, e := range tc.extractors { + assert.Equal(t, 1, e.called) + assert.Equal(t, processesByPid, e.procs) + } + } + }) + } +} diff --git a/pkg/process/checks/process_discovery_check.go b/pkg/process/checks/process_discovery_check.go index 267ecb3d28c35..5c84869c7bb68 100644 --- a/pkg/process/checks/process_discovery_check.go +++ b/pkg/process/checks/process_discovery_check.go @@ -11,7 +11,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" ) @@ -23,23 +22,24 @@ var ProcessDiscovery = &ProcessDiscoveryCheck{} // The goal of this check is to collect information about possible integrations that may be enabled by the end user. type ProcessDiscoveryCheck struct { probe procutil.Probe - info *model.SystemInfo + info *HostInfo initCalled bool maxBatchSize int } // Init initializes the ProcessDiscoveryCheck. It is a runtime error to call Run without first having called Init. -func (d *ProcessDiscoveryCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) { +func (d *ProcessDiscoveryCheck) Init(_ *SysProbeConfig, info *HostInfo) error { d.info = info d.initCalled = true d.probe = newProcessProbe(procutil.WithPermission(Process.SysprobeProcessModuleEnabled)) d.maxBatchSize = getMaxBatchSize() + return nil } // Name returns the name of the ProcessDiscoveryCheck. -func (d *ProcessDiscoveryCheck) Name() string { return config.DiscoveryCheckName } +func (d *ProcessDiscoveryCheck) Name() string { return DiscoveryCheckName } // RealTime returns a value that says whether this check should be run in real time. func (d *ProcessDiscoveryCheck) RealTime() bool { return false } @@ -49,7 +49,7 @@ func (d *ProcessDiscoveryCheck) ShouldSaveLastRun() bool { return true } // Run collects process metadata, and packages it into a CollectorProcessDiscovery payload to be sent. // It is a runtime error to call Run without first having called Init. -func (d *ProcessDiscoveryCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (d *ProcessDiscoveryCheck) Run(groupID int32) ([]model.MessageBody, error) { if !d.initCalled { return nil, fmt.Errorf("ProcessDiscoveryCheck.Run called before Init") } @@ -61,15 +61,15 @@ func (d *ProcessDiscoveryCheck) Run(cfg *config.AgentConfig, groupID int32) ([]m } host := &model.Host{ - Name: cfg.HostName, - NumCpus: calculateNumCores(d.info), - TotalMemory: d.info.TotalMemory, + Name: d.info.HostName, + NumCpus: calculateNumCores(d.info.SystemInfo), + TotalMemory: d.info.SystemInfo.TotalMemory, } procDiscoveryChunks := chunkProcessDiscoveries(pidMapToProcDiscoveries(procs), d.maxBatchSize) payload := make([]model.MessageBody, len(procDiscoveryChunks)) for i, procDiscoveryChunk := range procDiscoveryChunks { payload[i] = &model.CollectorProcDiscovery{ - HostName: cfg.HostName, + HostName: d.info.HostName, GroupId: groupID, GroupSize: int32(len(procDiscoveryChunks)), ProcessDiscoveries: procDiscoveryChunk, diff --git a/pkg/process/checks/process_discovery_check_test.go b/pkg/process/checks/process_discovery_check_test.go index 41eedd1996771..d863af5147f26 100644 --- a/pkg/process/checks/process_discovery_check_test.go +++ b/pkg/process/checks/process_discovery_check_test.go @@ -10,8 +10,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) func TestProcessDiscoveryCheck(t *testing.T) { @@ -23,14 +21,18 @@ func TestProcessDiscoveryCheck(t *testing.T) { maxBatchSize := 10 getMaxBatchSize = func() int { return maxBatchSize } - cfg := &config.AgentConfig{} - ProcessDiscovery.Init(cfg, &model.SystemInfo{ - Cpus: []*model.CPUInfo{{Number: 0}}, - TotalMemory: 0, - }) + ProcessDiscovery.Init( + nil, + &HostInfo{ + SystemInfo: &model.SystemInfo{ + Cpus: []*model.CPUInfo{{Number: 0}}, + TotalMemory: 0, + }, + }, + ) // Test check runs without error - result, err := ProcessDiscovery.Run(cfg, 0) + result, err := ProcessDiscovery.Run(0) assert.NoError(t, err) // Test that result has the proper number of chunks, and that those chunks are of the correct type diff --git a/pkg/process/checks/process_events_fallback.go b/pkg/process/checks/process_events_fallback.go index de9245c7dd1a9..ac369d4a28e92 100644 --- a/pkg/process/checks/process_events_fallback.go +++ b/pkg/process/checks/process_events_fallback.go @@ -12,8 +12,6 @@ import ( "errors" model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) // ProcessEvents is a ProcessEventsCheck singleton @@ -24,11 +22,12 @@ type ProcessEventsCheck struct { } // Init initializes the ProcessEventsCheck. -func (e *ProcessEventsCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) { +func (e *ProcessEventsCheck) Init(_ *SysProbeConfig, _ *HostInfo) error { + return nil } // Name returns the name of the ProcessEventsCheck. -func (e *ProcessEventsCheck) Name() string { return config.ProcessEventsCheckName } +func (e *ProcessEventsCheck) Name() string { return ProcessEventsCheckName } // RealTime returns a value that says whether this check should be run in real time. func (e *ProcessEventsCheck) RealTime() bool { return false } @@ -37,7 +36,7 @@ func (e *ProcessEventsCheck) RealTime() bool { return false } func (e *ProcessEventsCheck) ShouldSaveLastRun() bool { return true } // Run fetches process lifecycle events that have been stored in-memory since the last check run -func (e *ProcessEventsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (e *ProcessEventsCheck) Run(groupID int32) ([]model.MessageBody, error) { return nil, errors.New("the process_events check is not supported on this system") } diff --git a/pkg/process/checks/process_events_linux.go b/pkg/process/checks/process_events_linux.go index e7aefd979a87b..640b9f8dd9b62 100644 --- a/pkg/process/checks/process_events_linux.go +++ b/pkg/process/checks/process_events_linux.go @@ -17,7 +17,6 @@ import ( payload "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/events" "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/process/statsd" @@ -33,29 +32,28 @@ type ProcessEventsCheck struct { store events.Store listener *events.SysProbeListener - sysInfo *payload.SystemInfo + hostInfo *HostInfo maxBatchSize int } // Init initializes the ProcessEventsCheck. -func (e *ProcessEventsCheck) Init(_ *config.AgentConfig, info *payload.SystemInfo) { +func (e *ProcessEventsCheck) Init(_ *SysProbeConfig, info *HostInfo) error { e.initMutex.Lock() defer e.initMutex.Unlock() if e.store != nil || e.listener != nil { - log.Error("process_events check has already been initialized") - return + return log.Error("process_events check has already been initialized") } log.Info("Initializing process_events check") - e.sysInfo = info + e.hostInfo = info e.maxBatchSize = getMaxBatchSize() store, err := events.NewRingStore(statsd.Client) if err != nil { log.Errorf("RingStore can't be created: %v", err) - return + return err } e.store = store @@ -65,12 +63,13 @@ func (e *ProcessEventsCheck) Init(_ *config.AgentConfig, info *payload.SystemInf }) if err != nil { log.Errorf("Event Listener can't be created: %v", err) - return + return err } e.listener = listener e.start() log.Info("process_events check correctly set up") + return nil } // start kicks off process lifecycle events collection and keep them in memory until they're fetched in the next check run @@ -80,7 +79,7 @@ func (e *ProcessEventsCheck) start() { } // Name returns the name of the ProcessEventsCheck. -func (e *ProcessEventsCheck) Name() string { return config.ProcessEventsCheckName } +func (e *ProcessEventsCheck) Name() string { return ProcessEventsCheckName } // RealTime returns a value that says whether this check should be run in real time. func (e *ProcessEventsCheck) RealTime() bool { return false } @@ -89,7 +88,7 @@ func (e *ProcessEventsCheck) RealTime() bool { return false } func (e *ProcessEventsCheck) ShouldSaveLastRun() bool { return true } // Run fetches process lifecycle events that have been stored in-memory since the last check run -func (e *ProcessEventsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]payload.MessageBody, error) { +func (e *ProcessEventsCheck) Run(groupID int32) ([]payload.MessageBody, error) { if !e.isCheckCorrectlySetup() { return nil, errors.New("the process_events check hasn't been correctly initialized") } @@ -106,8 +105,8 @@ func (e *ProcessEventsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]payl messages := make([]payload.MessageBody, len(chunks)) for c, chunk := range chunks { messages[c] = &payload.CollectorProcEvent{ - Hostname: cfg.HostName, - Info: e.sysInfo, + Hostname: e.hostInfo.HostName, + Info: e.hostInfo.SystemInfo, Events: chunk, GroupId: groupID, GroupSize: int32(len(chunks)), diff --git a/pkg/process/checks/process_events_linux_test.go b/pkg/process/checks/process_events_linux_test.go index f041f91031ac3..ad5e205b40f2f 100644 --- a/pkg/process/checks/process_events_linux_test.go +++ b/pkg/process/checks/process_events_linux_test.go @@ -19,7 +19,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/events" "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/security/api" @@ -243,14 +242,14 @@ func TestProcessEventsCheck(t *testing.T) { maxBatchSize: 10, listener: listener, store: store, + hostInfo: &HostInfo{}, } check.start() - cfg := &config.AgentConfig{} events := make([]*payload.ProcessEvent, 0) assert.Eventually(t, func() bool { // Run the process_events check until all expected events are collected - msgs, err := check.Run(cfg, 0) + msgs, err := check.Run(0) require.NoError(t, err) for _, msg := range msgs { diff --git a/pkg/process/checks/process_nix_test.go b/pkg/process/checks/process_nix_test.go index 987e57d6abd13..8ac192761b7ed 100644 --- a/pkg/process/checks/process_nix_test.go +++ b/pkg/process/checks/process_nix_test.go @@ -20,7 +20,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/gopsutil/cpu" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" ) @@ -46,8 +45,8 @@ func TestBasicProcessMessages(t *testing.T) { } lastRun := time.Now().Add(-5 * time.Second) syst1, syst2 := cpu.TimesStat{}, cpu.TimesStat{} - cfg := config.NewDefaultAgentConfig() sysInfo := &model.SystemInfo{} + hostInfo := &HostInfo{SystemInfo: sysInfo} for i, tc := range []struct { testName string @@ -55,7 +54,7 @@ func TestBasicProcessMessages(t *testing.T) { containers []*model.Container pidToCid map[int]string maxSize int - blacklist []string + disallowList []string expectedChunks int expectedProcs int expectedContainers int @@ -66,7 +65,7 @@ func TestBasicProcessMessages(t *testing.T) { maxSize: 2, containers: []*model.Container{}, pidToCid: nil, - blacklist: []string{}, + disallowList: []string{}, expectedChunks: 2, expectedProcs: 3, expectedContainers: 0, @@ -77,7 +76,7 @@ func TestBasicProcessMessages(t *testing.T) { maxSize: 2, containers: []*model.Container{c[0]}, pidToCid: map[int]string{1: "foo", 2: "foo"}, - blacklist: []string{}, + disallowList: []string{}, expectedChunks: 2, expectedProcs: 3, expectedContainers: 1, @@ -88,7 +87,7 @@ func TestBasicProcessMessages(t *testing.T) { maxSize: 1, containers: []*model.Container{c[1]}, pidToCid: map[int]string{3: "bar"}, - blacklist: []string{}, + disallowList: []string{}, expectedChunks: 3, expectedProcs: 3, expectedContainers: 1, @@ -99,7 +98,7 @@ func TestBasicProcessMessages(t *testing.T) { maxSize: 2, containers: []*model.Container{c[0], c[1]}, pidToCid: map[int]string{1: "foo", 2: "foo", 3: "bar"}, - blacklist: []string{}, + disallowList: []string{}, expectedChunks: 2, expectedProcs: 3, expectedContainers: 2, @@ -110,22 +109,21 @@ func TestBasicProcessMessages(t *testing.T) { maxSize: 2, containers: []*model.Container{c[1]}, pidToCid: map[int]string{3: "bar"}, - blacklist: []string{"foo"}, + disallowList: []string{"foo"}, expectedChunks: 1, expectedProcs: 2, expectedContainers: 1, }, } { t.Run(tc.testName, func(t *testing.T) { - bl := make([]*regexp.Regexp, 0, len(tc.blacklist)) - for _, s := range tc.blacklist { - bl = append(bl, regexp.MustCompile(s)) + disallowList := make([]*regexp.Regexp, 0, len(tc.disallowList)) + for _, s := range tc.disallowList { + disallowList = append(disallowList, regexp.MustCompile(s)) } - cfg.Blacklist = bl networks := make(map[int32][]*model.Connection) - procs := fmtProcesses(cfg, tc.processes, tc.processes, tc.pidToCid, syst2, syst1, lastRun, networks) - messages, totalProcs, totalContainers := createProcCtrMessages(procs, tc.containers, cfg, tc.maxSize, maxBatchBytes, sysInfo, int32(i), "nid") + procs := fmtProcesses(procutil.NewDefaultDataScrubber(), disallowList, tc.processes, tc.processes, tc.pidToCid, syst2, syst1, lastRun, networks) + messages, totalProcs, totalContainers := createProcCtrMessages(hostInfo, procs, tc.containers, tc.maxSize, maxBatchBytes, int32(i), "nid") assert.Equal(t, tc.expectedChunks, len(messages)) @@ -233,18 +231,18 @@ func TestContainerProcessChunking(t *testing.T) { lastRun := time.Now().Add(-5 * time.Second) syst1, syst2 := cpu.TimesStat{}, cpu.TimesStat{} - cfg := config.NewDefaultAgentConfig() sysInfo := &model.SystemInfo{} + hostInfo := &HostInfo{SystemInfo: sysInfo} - processes := fmtProcesses(cfg, procsByPid, procsByPid, pidToCid, syst2, syst1, lastRun, networks) - messages, totalProcs, totalContainers := createProcCtrMessages(processes, ctrs, cfg, tc.maxSize, maxBatchBytes, sysInfo, int32(i), "nid") + processes := fmtProcesses(procutil.NewDefaultDataScrubber(), nil, procsByPid, procsByPid, pidToCid, syst2, syst1, lastRun, networks) + messages, totalProcs, totalContainers := createProcCtrMessages(hostInfo, processes, ctrs, tc.maxSize, maxBatchBytes, int32(i), "nid") assert.Equal(t, tc.expectedProcCount, totalProcs) assert.Equal(t, tc.expectedCtrCount, totalContainers) // sort and verify messages sortMsgs(messages) - verifyBatchedMsgs(t, cfg, tc.expectedBatches, messages) + verifyBatchedMsgs(t, hostInfo, tc.expectedBatches, messages) }) } } @@ -278,7 +276,7 @@ func sortMsgs(m []model.MessageBody) { }) } -func verifyBatchedMsgs(t *testing.T, cfg *config.AgentConfig, expected []map[string]int, msgs []model.MessageBody) { +func verifyBatchedMsgs(t *testing.T, hostInfo *HostInfo, expected []map[string]int, msgs []model.MessageBody) { assert := assert.New(t) assert.Equal(len(expected), len(msgs), "Number of messages created") @@ -286,7 +284,7 @@ func verifyBatchedMsgs(t *testing.T, cfg *config.AgentConfig, expected []map[str for i, msg := range msgs { payload := msg.(*model.CollectorProc) - assert.Equal(cfg.ContainerHostType, payload.ContainerHostType) + assert.Equal(hostInfo.ContainerHostType, payload.ContainerHostType) actualCtrPIDCounts := map[string]int{} diff --git a/pkg/process/checks/process_rt.go b/pkg/process/checks/process_rt.go index a1f8c676169f4..67a920b6826b1 100644 --- a/pkg/process/checks/process_rt.go +++ b/pkg/process/checks/process_rt.go @@ -11,7 +11,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/gopsutil/cpu" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/process/util" @@ -20,7 +19,7 @@ import ( // runRealtime runs the realtime ProcessCheck to collect statistics about the running processes. // Underying procutil.Probe is responsible for the actual implementation -func (p *ProcessCheck) runRealtime(cfg *config.AgentConfig, groupID int32) (*RunResult, error) { +func (p *ProcessCheck) runRealtime(groupID int32) (*RunResult, error) { cpuTimes, err := cpu.Times(false) if err != nil { return nil, err @@ -64,21 +63,21 @@ func (p *ProcessCheck) runRealtime(cfg *config.AgentConfig, groupID int32) (*Run connsByPID := Connections.getLastConnectionsByPID() - chunkedStats := fmtProcessStats(cfg, p.maxBatchSize, procs, p.realtimeLastProcs, pidToCid, cpuTimes[0], p.realtimeLastCPUTime, p.realtimeLastRun, connsByPID) + chunkedStats := fmtProcessStats(p.maxBatchSize, procs, p.realtimeLastProcs, pidToCid, cpuTimes[0], p.realtimeLastCPUTime, p.realtimeLastRun, connsByPID) groupSize := len(chunkedStats) chunkedCtrStats := convertAndChunkContainers(containers, groupSize) messages := make([]model.MessageBody, 0, groupSize) for i := 0; i < groupSize; i++ { messages = append(messages, &model.CollectorRealTime{ - HostName: cfg.HostName, + HostName: p.hostInfo.HostName, Stats: chunkedStats[i], ContainerStats: chunkedCtrStats[i], GroupId: groupID, GroupSize: int32(groupSize), - NumCpus: int32(len(p.sysInfo.Cpus)), - TotalMemory: p.sysInfo.TotalMemory, - ContainerHostType: cfg.ContainerHostType, + NumCpus: int32(len(p.hostInfo.SystemInfo.Cpus)), + TotalMemory: p.hostInfo.SystemInfo.TotalMemory, + ContainerHostType: p.hostInfo.ContainerHostType, }) } @@ -95,7 +94,6 @@ func (p *ProcessCheck) runRealtime(cfg *config.AgentConfig, groupID int32) (*Run // fmtProcessStats formats and chunks a slice of ProcessStat into chunks. func fmtProcessStats( - cfg *config.AgentConfig, maxBatchSize int, procs, lastProcs map[int32]*procutil.Stats, pidToCid map[int]string, @@ -103,7 +101,7 @@ func fmtProcessStats( lastRun time.Time, connsByPID map[int32][]*model.Connection, ) [][]*model.ProcessStat { - connCheckIntervalS := int(cfg.CheckIntervals[config.ConnectionsCheckName] / time.Second) + connCheckIntervalS := int(GetInterval(ConnectionsCheckName) / time.Second) chunked := make([][]*model.ProcessStat, 0) chunk := make([]*model.ProcessStat, 0, maxBatchSize) diff --git a/pkg/process/checks/process_rt_test.go b/pkg/process/checks/process_rt_test.go index bf9ac0b851938..3ef7e422dd2db 100644 --- a/pkg/process/checks/process_rt_test.go +++ b/pkg/process/checks/process_rt_test.go @@ -13,7 +13,6 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" ) @@ -23,14 +22,13 @@ func TestProcessCheckRealtimeBeforeStandard(t *testing.T) { // If the standard process check hasn't run yet, nothing is returned expected := &RunResult{} - actual, err := processCheck.runRealtime(config.NewDefaultAgentConfig(), 0) + actual, err := processCheck.runRealtime(0) require.NoError(t, err) assert.Equal(t, expected, actual) } func TestProcessCheckRealtimeFirstRun(t *testing.T) { processCheck, probe := processCheckWithMockProbe(t) - cfg := config.NewDefaultAgentConfig() proc1 := makeProcess(1, "git clone google.com") proc2 := makeProcess(2, "mine-bitcoins -all -x") @@ -46,19 +44,18 @@ func TestProcessCheckRealtimeFirstRun(t *testing.T) { probe.On("StatsForPIDs", mock.Anything, mock.Anything).Return(statsByPid, nil) // Run the standard process check once to populate last seen pids - processCheck.run(cfg, 0, false) + processCheck.run(0, false) // The first realtime check returns nothing expected := &RunResult{} - actual, err := processCheck.runRealtime(cfg, 0) + actual, err := processCheck.runRealtime(0) require.NoError(t, err) assert.Equal(t, expected, actual) } func TestProcessCheckRealtimeSecondRun(t *testing.T) { processCheck, probe := processCheckWithMockProbe(t) - cfg := config.NewDefaultAgentConfig() proc1 := makeProcess(1, "git clone google.com") proc2 := makeProcess(2, "mine-bitcoins -all -x") @@ -74,19 +71,19 @@ func TestProcessCheckRealtimeSecondRun(t *testing.T) { probe.On("StatsForPIDs", mock.Anything, mock.Anything).Return(statsByPid, nil) // Run the standard process check once to populate last seen pids - processCheck.run(cfg, 0, false) + processCheck.run(0, false) // The first realtime check returns nothing - first, err := processCheck.runRealtime(cfg, 0) + first, err := processCheck.runRealtime(0) require.NoError(t, err) assert.Equal(t, &RunResult{}, first) expected := makeProcessStatModels(t, proc1, proc2, proc3, proc4, proc5) - actual, err := processCheck.runRealtime(cfg, 0) + actual, err := processCheck.runRealtime(0) require.NoError(t, err) require.Len(t, actual.RealTime, 1) rt := actual.RealTime[0].(*model.CollectorRealTime) assert.ElementsMatch(t, expected, rt.Stats) assert.Equal(t, int32(1), rt.GroupSize) - assert.Equal(t, int32(len(processCheck.sysInfo.Cpus)), rt.NumCpus) + assert.Equal(t, int32(len(processCheck.hostInfo.SystemInfo.Cpus)), rt.NumCpus) } diff --git a/pkg/process/checks/process_test.go b/pkg/process/checks/process_test.go index d40bda7151901..6838d80fbc521 100644 --- a/pkg/process/checks/process_test.go +++ b/pkg/process/checks/process_test.go @@ -6,6 +6,8 @@ package checks import ( + "fmt" + "regexp" "testing" "time" @@ -14,7 +16,7 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - "github.com/DataDog/datadog-agent/pkg/process/config" + ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/process/procutil/mocks" "github.com/DataDog/datadog-agent/pkg/process/util" @@ -29,16 +31,22 @@ import ( func processCheckWithMockProbe(t *testing.T) (*ProcessCheck, *mocks.Probe) { t.Helper() probe := mocks.NewProbe(t) - return &ProcessCheck{ - probe: probe, - sysInfo: &model.SystemInfo{ - Cpus: []*model.CPUInfo{ - {CoreId: "1"}, - {CoreId: "2"}, - {CoreId: "3"}, - {CoreId: "4"}, - }, + sysInfo := &model.SystemInfo{ + Cpus: []*model.CPUInfo{ + {CoreId: "1"}, + {CoreId: "2"}, + {CoreId: "3"}, + {CoreId: "4"}, }, + } + hostInfo := &HostInfo{ + SystemInfo: sysInfo, + } + + return &ProcessCheck{ + probe: probe, + scrubber: procutil.NewDefaultDataScrubber(), + hostInfo: hostInfo, containerProvider: mockContainerProvider(t), }, probe } @@ -82,7 +90,7 @@ func TestProcessCheckFirstRun(t *testing.T) { // The first run returns nothing because processes must be observed on two consecutive runs expected := &RunResult{} - actual, err := processCheck.run(config.NewDefaultAgentConfig(), 0, false) + actual, err := processCheck.run(0, false) require.NoError(t, err) assert.Equal(t, expected, actual) } @@ -102,7 +110,7 @@ func TestProcessCheckSecondRun(t *testing.T) { Return(processesByPid, nil) // The first run returns nothing because processes must be observed on two consecutive runs - first, err := processCheck.run(config.NewDefaultAgentConfig(), 0, false) + first, err := processCheck.run(0, false) require.NoError(t, err) assert.Equal(t, &RunResult{}, first) @@ -110,30 +118,30 @@ func TestProcessCheckSecondRun(t *testing.T) { &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc1)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc2)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc3)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc4)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc5)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, } - actual, err := processCheck.run(config.NewDefaultAgentConfig(), 0, false) + actual, err := processCheck.run(0, false) require.NoError(t, err) assert.ElementsMatch(t, expected, actual.Standard) // ordering is not guaranteed assert.Nil(t, actual.RealTime) @@ -153,7 +161,7 @@ func TestProcessCheckWithRealtime(t *testing.T) { Return(processesByPid, nil) // The first run returns nothing because processes must be observed on two consecutive runs - first, err := processCheck.run(config.NewDefaultAgentConfig(), 0, true) + first, err := processCheck.run(0, true) require.NoError(t, err) assert.Equal(t, &RunResult{}, first) @@ -161,37 +169,142 @@ func TestProcessCheckWithRealtime(t *testing.T) { &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc1)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc2)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc3)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc4)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc5)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, }, } expectedStats := makeProcessStatModels(t, proc1, proc2, proc3, proc4, proc5) - actual, err := processCheck.run(config.NewDefaultAgentConfig(), 0, true) + actual, err := processCheck.run(0, true) require.NoError(t, err) assert.ElementsMatch(t, expectedProcs, actual.Standard) // ordering is not guaranteed require.Len(t, actual.RealTime, 1) rt := actual.RealTime[0].(*model.CollectorRealTime) assert.ElementsMatch(t, expectedStats, rt.Stats) assert.Equal(t, int32(1), rt.GroupSize) - assert.Equal(t, int32(len(processCheck.sysInfo.Cpus)), rt.NumCpus) + assert.Equal(t, int32(len(processCheck.hostInfo.SystemInfo.Cpus)), rt.NumCpus) +} + +func TestOnlyEnvConfigArgsScrubbingEnabled(t *testing.T) { + _ = ddconfig.Mock(t) + + t.Setenv("DD_CUSTOM_SENSITIVE_WORDS", "*password*,consul_token,*api_key") + + scrubber := procutil.NewDefaultDataScrubber() + initScrubber(scrubber) + + assert.True(t, scrubber.Enabled) + + cases := []struct { + cmdline []string + parsedCmdline []string + }{ + { + []string{"spidly", "--mypasswords=123,456", "consul_token", "1234", "--dd_api_key=1234"}, + []string{"spidly", "--mypasswords=********", "consul_token", "********", "--dd_api_key=********"}, + }, + } + + for i := range cases { + cases[i].cmdline, _ = scrubber.ScrubCommand(cases[i].cmdline) + assert.Equal(t, cases[i].parsedCmdline, cases[i].cmdline) + } +} + +func TestOnlyEnvConfigArgsScrubbingDisabled(t *testing.T) { + _ = ddconfig.Mock(t) + + t.Setenv("DD_SCRUB_ARGS", "false") + t.Setenv("DD_CUSTOM_SENSITIVE_WORDS", "*password*,consul_token,*api_key") + + scrubber := procutil.NewDefaultDataScrubber() + initScrubber(scrubber) + + assert.False(t, scrubber.Enabled) + + cases := []struct { + cmdline []string + parsedCmdline []string + }{ + { + []string{"spidly", "--mypasswords=123,456", "consul_token", "1234", "--dd_api_key=1234"}, + []string{"spidly", "--mypasswords=123,456", "consul_token", "1234", "--dd_api_key=1234"}, + }, + } + + for i := range cases { + fp := &procutil.Process{Cmdline: cases[i].cmdline} + cases[i].cmdline = scrubber.ScrubProcessCommand(fp) + assert.Equal(t, cases[i].parsedCmdline, cases[i].cmdline) + } +} + +func TestDisallowList(t *testing.T) { + testDisallowList := []string{ + "^getty", + "^acpid", + "^atd", + "^upstart-udev-bridge", + "^upstart-socket-bridge", + "^upstart-file-bridge", + "^dhclient", + "^dhclient3", + "^rpc", + "^dbus-daemon", + "udevd", + "^/sbin/", + "^/usr/sbin/", + "^/var/ossec/bin/ossec", + "^rsyslogd", + "^whoopsie$", + "^cron$", + "^CRON$", + "^/usr/lib/postfix/master$", + "^qmgr", + "^pickup", + "^sleep", + "^/lib/systemd/systemd-logind$", + "^/usr/local/bin/goshe dnsmasq$", + } + disallowList := make([]*regexp.Regexp, 0, len(testDisallowList)) + for _, b := range testDisallowList { + r, err := regexp.Compile(b) + if err == nil { + disallowList = append(disallowList, r) + } + } + cases := []struct { + cmdline []string + disallowListed bool + }{ + {[]string{"getty", "-foo", "-bar"}, true}, + {[]string{"rpcbind", "-x"}, true}, + {[]string{"my-rpc-app", "-config foo.ini"}, false}, + {[]string{"rpc.statd", "-L"}, true}, + {[]string{"/usr/sbin/irqbalance"}, true}, + } + + for _, c := range cases { + assert.Equal(t, c.disallowListed, isDisallowListed(c.cmdline, disallowList), + fmt.Sprintf("Case %v failed", c)) + } } diff --git a/pkg/process/checks/system_info.go b/pkg/process/checks/system_info.go index da8fd2eaa05bd..7041006ee96aa 100644 --- a/pkg/process/checks/system_info.go +++ b/pkg/process/checks/system_info.go @@ -14,14 +14,12 @@ import ( "github.com/DataDog/gopsutil/mem" model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) // CollectSystemInfo collects a set of system-level information that will not // change until a restart. This bit of information should be passed along with // the process messages. -func CollectSystemInfo(cfg *config.AgentConfig) (*model.SystemInfo, error) { +func CollectSystemInfo() (*model.SystemInfo, error) { hi, err := host.Info() if err != nil { return nil, err diff --git a/pkg/process/checks/system_info_darwin.go b/pkg/process/checks/system_info_darwin.go index 2e3f0a7eafdcc..ac844cb054d27 100644 --- a/pkg/process/checks/system_info_darwin.go +++ b/pkg/process/checks/system_info_darwin.go @@ -16,8 +16,6 @@ import ( "github.com/DataDog/gopsutil/host" "github.com/DataDog/gopsutil/mem" "golang.org/x/sys/unix" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) type statsProvider interface { @@ -60,7 +58,7 @@ func patchCPUInfo(gopsutilCPUInfo []cpu.InfoStat) ([]cpu.InfoStat, error) { // CollectSystemInfo collects a set of system-level information that will not // change until a restart. This bit of information should be passed along with // the process messages. -func CollectSystemInfo(_ *config.AgentConfig) (*model.SystemInfo, error) { +func CollectSystemInfo() (*model.SystemInfo, error) { hi, err := host.Info() if err != nil { return nil, err diff --git a/pkg/process/checks/system_info_windows.go b/pkg/process/checks/system_info_windows.go index 4690133db0d07..2b1e3ee32539e 100644 --- a/pkg/process/checks/system_info_windows.go +++ b/pkg/process/checks/system_info_windows.go @@ -15,14 +15,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/winutil" model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) // CollectSystemInfo collects a set of system-level information that will not // change until a restart. This bit of information should be passed along with // the process messages. -func CollectSystemInfo(cfg *config.AgentConfig) (*model.SystemInfo, error) { +func CollectSystemInfo() (*model.SystemInfo, error) { hi, err := platform.GetArchInfo() if err != nil { return nil, err diff --git a/pkg/process/config/config.go b/pkg/process/config/config.go deleted file mode 100644 index 45b10727de04b..0000000000000 --- a/pkg/process/config/config.go +++ /dev/null @@ -1,460 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package config - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "net" - "net/http" - "net/url" - "os" - "os/exec" - "regexp" - "strconv" - "strings" - "time" - - model "github.com/DataDog/agent-payload/v5/process" - "google.golang.org/grpc" - - sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/config/settings" - oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" - "github.com/DataDog/datadog-agent/pkg/process/util" - pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" - "github.com/DataDog/datadog-agent/pkg/util/fargate" - ddgrpc "github.com/DataDog/datadog-agent/pkg/util/grpc" - "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -// defaultProxyPort is the default port used for proxies. -// This mirrors the configuration for the infrastructure agent. -const defaultProxyPort = 3128 - -// Name for check performed by process-agent or system-probe -const ( - ProcessCheckName = "process" - RTProcessCheckName = "rtprocess" - ContainerCheckName = "container" - RTContainerCheckName = "rtcontainer" - ConnectionsCheckName = "connections" - PodCheckName = "pod" - PodCheckManifestName = "pod_manifest" - DiscoveryCheckName = "process_discovery" - ProcessEventsCheckName = "process_events" - - ProcessCheckDefaultInterval = 10 * time.Second - RTProcessCheckDefaultInterval = 2 * time.Second - ContainerCheckDefaultInterval = 10 * time.Second - RTContainerCheckDefaultInterval = 2 * time.Second - ConnectionsCheckDefaultInterval = 30 * time.Second - PodCheckDefaultInterval = 10 * time.Second - ProcessDiscoveryCheckDefaultInterval = 4 * time.Hour -) - -type proxyFunc func(*http.Request) (*url.URL, error) - -type cmdFunc = func(name string, arg ...string) *exec.Cmd - -// AgentConfig is the global config for the process-agent. This information -// is sourced from config files and the environment variables. -// AgentConfig is shared across process-agent checks and should only contain shared objects and -// settings that cannot be read directly from the global Config object. -// For any other setting, use `pkg/config`. -type AgentConfig struct { - HostName string - Blacklist []*regexp.Regexp - Scrubber *DataScrubber - MaxConnsPerMessage int - Transport *http.Transport `json:"-"` - - // host type of the agent, used to populate container payload with additional host information - ContainerHostType model.ContainerHostType - - // System probe collection configuration - EnableSystemProbe bool - SystemProbeAddress string - - // Orchestrator config - Orchestrator *oconfig.OrchestratorConfig - - // Check config - CheckIntervals map[string]time.Duration - - // Internal store of a proxy used for generating the Transport - proxy proxyFunc -} - -// CheckInterval returns the interval for the given check name, defaulting to 10s if not found. -func (a AgentConfig) CheckInterval(checkName string) time.Duration { - d, ok := a.CheckIntervals[checkName] - if !ok { - log.Errorf("missing check interval for '%s', you must set a default", checkName) - d = 10 * time.Second - } - return d -} - -// NewDefaultTransport provides a http transport configuration with sane default timeouts -func NewDefaultTransport() *http.Transport { - return &http.Transport{ - MaxIdleConns: 5, - IdleConnTimeout: 90 * time.Second, - Dial: (&net.Dialer{ - Timeout: 10 * time.Second, - KeepAlive: 10 * time.Second, - }).Dial, - TLSHandshakeTimeout: 5 * time.Second, - ResponseHeaderTimeout: 5 * time.Second, - ExpectContinueTimeout: 1 * time.Second, - } -} - -// NewDefaultAgentConfig returns an AgentConfig with defaults initialized -func NewDefaultAgentConfig() *AgentConfig { - ac := &AgentConfig{ - MaxConnsPerMessage: 600, - HostName: "", - Transport: NewDefaultTransport(), - - ContainerHostType: model.ContainerHostType_notSpecified, - - // System probe collection configuration - EnableSystemProbe: false, - SystemProbeAddress: defaultSystemProbeAddress, - - // Orchestrator config - Orchestrator: oconfig.NewDefaultOrchestratorConfig(), - - // Check config - CheckIntervals: map[string]time.Duration{ - ProcessCheckName: ProcessCheckDefaultInterval, - RTProcessCheckName: RTProcessCheckDefaultInterval, - ContainerCheckName: ContainerCheckDefaultInterval, - RTContainerCheckName: RTContainerCheckDefaultInterval, - ConnectionsCheckName: ConnectionsCheckDefaultInterval, - PodCheckName: PodCheckDefaultInterval, - DiscoveryCheckName: ProcessDiscoveryCheckDefaultInterval, - ProcessEventsCheckName: config.DefaultProcessEventsCheckInterval, - }, - - // DataScrubber to hide command line sensitive words - Scrubber: NewDefaultDataScrubber(), - Blacklist: make([]*regexp.Regexp, 0), - } - - // Set default values for proc/sys paths if unset. - // Don't set this is /host is not mounted to use context within container. - // Generally only applicable for container-only cases like Fargate. - if config.IsContainerized() && util.PathExists("/host") { - if v := os.Getenv("HOST_PROC"); v == "" { - os.Setenv("HOST_PROC", "/host/proc") - } - if v := os.Getenv("HOST_SYS"); v == "" { - os.Setenv("HOST_SYS", "/host/sys") - } - } - - return ac -} - -// LoadConfigIfExists takes a path to either a directory containing datadog.yaml or a direct path to a datadog.yaml file -// and loads it into ddconfig.Datadog. It does this silently, and does not produce any logs. -func LoadConfigIfExists(path string) error { - if path != "" { - if util.PathExists(path) { - config.Datadog.AddConfigPath(path) - if strings.HasSuffix(path, ".yaml") { // If they set a config file directly, let's try to honor that - config.Datadog.SetConfigFile(path) - } - - if _, err := config.LoadWithoutSecret(); err != nil { - return err - } - } else { - log.Infof("no config exists at %s, ignoring...", path) - } - } - return nil -} - -// NewAgentConfig returns an AgentConfig using a configuration file. It can be nil -// if there is no file available. In this case we'll configure only via environment. -func NewAgentConfig(loggerName config.LoggerName, yamlPath string, syscfg *sysconfig.Config) (*AgentConfig, error) { - var err error - - cfg := NewDefaultAgentConfig() - if err := cfg.LoadAgentConfig(yamlPath); err != nil { - return nil, err - } - - if err := cfg.Orchestrator.Load(); err != nil { - return nil, err - } - - // (Re)configure the logging from our configuration - logFile := config.Datadog.GetString("process_config.log_file") - if err := setupLogger(loggerName, logFile); err != nil { - log.Errorf("failed to setup configured logger: %s", err) - return nil, err - } - - if syscfg.Enabled { - cfg.EnableSystemProbe = true - cfg.MaxConnsPerMessage = syscfg.MaxConnsPerMessage - cfg.SystemProbeAddress = syscfg.SocketAddress - } - - // TODO: Once proxies have been moved to common config util, remove this - if cfg.proxy, err = proxyFromEnv(cfg.proxy); err != nil { - log.Errorf("error parsing environment proxy settings, not using a proxy: %s", err) - cfg.proxy = nil - } - - if err := validate.ValidHostname(cfg.HostName); err != nil { - // lookup hostname if there is no config override or if the override is invalid - agentBin := config.Datadog.GetString("process_config.dd_agent_bin") - connectionTimeout := config.Datadog.GetDuration("process_config.grpc_connection_timeout_secs") * time.Second - if hostname, err := getHostname(context.TODO(), agentBin, connectionTimeout); err == nil { - cfg.HostName = hostname - } else { - log.Errorf("Cannot get hostname: %v", err) - } - } - - cfg.ContainerHostType = getContainerHostType() - - if cfg.proxy != nil { - cfg.Transport.Proxy = cfg.proxy - } - - return cfg, nil -} - -// InitRuntimeSettings registers settings to be added to the runtime config. -func InitRuntimeSettings() { - // NOTE: Any settings you want to register should simply be added here - processRuntimeSettings := []settings.RuntimeSetting{ - settings.LogLevelRuntimeSetting{}, - } - - // Before we begin listening, register runtime settings - for _, setting := range processRuntimeSettings { - err := settings.RegisterRuntimeSetting(setting) - if err != nil { - _ = log.Warnf("cannot initialize the runtime setting %s: %v", setting.Name(), err) - } - } -} - -// getContainerHostType uses the fargate library to detect container environment and returns the protobuf version of it -func getContainerHostType() model.ContainerHostType { - switch fargate.GetOrchestrator(context.TODO()) { - case fargate.ECS: - return model.ContainerHostType_fargateECS - case fargate.EKS: - return model.ContainerHostType_fargateEKS - } - return model.ContainerHostType_notSpecified -} - -// loadEnvVariables reads env variables specific to process-agent and overrides the corresponding settings -// in the global Config object. -// This function is used to handle historic process-agent env vars. New settings should be -// handled directly in the /pkg/config/process.go file -func loadEnvVariables() { - // The following environment variables will be loaded in the order listed, meaning variables - // further down the list may override prior variables. - for _, variable := range []struct{ env, cfg string }{ - {"DD_ORCHESTRATOR_URL", "orchestrator_explorer.orchestrator_dd_url"}, - {"HTTPS_PROXY", "proxy.https"}, - } { - if v, ok := os.LookupEnv(variable.env); ok { - config.Datadog.Set(variable.cfg, v) - } - } - - if v := os.Getenv("DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS"); v != "" { - endpoints := make(map[string][]string) - if err := json.Unmarshal([]byte(v), &endpoints); err != nil { - log.Errorf(`Could not parse DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS: %v. It must be of the form '{"https://process.agent.datadoghq.com": ["apikey1", ...], ...}'.`, err) - } else { - config.Datadog.Set("orchestrator_explorer.orchestrator_additional_endpoints", endpoints) - } - } -} - -// IsBlacklisted returns a boolean indicating if the given command is blacklisted by our config. -func IsBlacklisted(cmdline []string, blacklist []*regexp.Regexp) bool { - cmd := strings.Join(cmdline, " ") - for _, b := range blacklist { - if b.MatchString(cmd) { - return true - } - } - return false -} - -// getHostname attempts to resolve the hostname in the following order: the main datadog agent via grpc, the main agent -// via cli and lastly falling back to os.Hostname() if it is unavailable -func getHostname(ctx context.Context, ddAgentBin string, grpcConnectionTimeout time.Duration) (string, error) { - // Fargate is handled as an exceptional case (there is no concept of a host, so we use the ARN in-place). - if fargate.IsFargateInstance(ctx) { - hostname, err := fargate.GetFargateHost(ctx) - if err == nil { - return hostname, nil - } - log.Errorf("failed to get Fargate host: %v", err) - } - - // Get the hostname via gRPC from the main agent if a hostname has not been set either from config/fargate - hostname, err := getHostnameFromGRPC(ctx, ddgrpc.GetDDAgentClient, grpcConnectionTimeout) - if err == nil { - return hostname, nil - } - log.Errorf("failed to get hostname from grpc: %v", err) - - // If the hostname is not set then we fallback to use the agent binary - hostname, err = getHostnameFromCmd(ddAgentBin, exec.Command) - if err == nil { - return hostname, nil - } - log.Errorf("failed to get hostname from cmd: %v", err) - - return os.Hostname() -} - -// getHostnameCmd shells out to obtain the hostname used by the infra agent -func getHostnameFromCmd(ddAgentBin string, cmdFn cmdFunc) (string, error) { - cmd := cmdFn(ddAgentBin, "hostname") - - // Copying all environment variables to child process - // Windows: Required, so the child process can load DLLs, etc. - // Linux: Optional, but will make use of DD_HOSTNAME and DOCKER_DD_AGENT if they exist - cmd.Env = append(cmd.Env, os.Environ()...) - - var stdout, stderr bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stderr - - err := cmd.Run() - if err != nil { - return "", err - } - - hostname := strings.TrimSpace(stdout.String()) - if hostname == "" { - return "", fmt.Errorf("error retrieving dd-agent hostname %s", stderr.String()) - } - - return hostname, nil -} - -// getHostnameFromGRPC retrieves the hostname from the main datadog agent via GRPC -func getHostnameFromGRPC(ctx context.Context, grpcClientFn func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error), grpcConnectionTimeout time.Duration) (string, error) { - ctx, cancel := context.WithTimeout(ctx, grpcConnectionTimeout) - defer cancel() - - ddAgentClient, err := grpcClientFn(ctx) - if err != nil { - return "", fmt.Errorf("cannot connect to datadog agent via grpc: %w", err) - } - reply, err := ddAgentClient.GetHostname(ctx, &pb.HostnameRequest{}) - if err != nil { - return "", fmt.Errorf("cannot get hostname from datadog agent via grpc: %w", err) - } - - log.Debugf("retrieved hostname:%s from datadog agent via grpc", reply.Hostname) - return reply.Hostname, nil -} - -// proxyFromEnv parses out the proxy configuration from the ENV variables in a -// similar way to getProxySettings and, if enough values are available, returns -// a new proxy URL value. If the environment is not set for this then the -// `defaultVal` is returned. -func proxyFromEnv(defaultVal proxyFunc) (proxyFunc, error) { - var host string - scheme := "http" - if v := os.Getenv("PROXY_HOST"); v != "" { - // accept either http://myproxy.com or myproxy.com - if i := strings.Index(v, "://"); i != -1 { - // when available, parse the scheme from the url - scheme = v[0:i] - host = v[i+3:] - } else { - host = v - } - } - - if host == "" { - return defaultVal, nil - } - - port := defaultProxyPort - if v := os.Getenv("PROXY_PORT"); v != "" { - port, _ = strconv.Atoi(v) - } - var user, password string - if v := os.Getenv("PROXY_USER"); v != "" { - user = v - } - if v := os.Getenv("PROXY_PASSWORD"); v != "" { - password = v - } - - return constructProxy(host, scheme, port, user, password) -} - -// constructProxy constructs a *url.Url for a proxy given the parts of a -// Note that we assume we have at least a non-empty host for this call but -// all other values can be their defaults (empty string or 0). -func constructProxy(host, scheme string, port int, user, password string) (proxyFunc, error) { - var userpass *url.Userinfo - if user != "" { - if password != "" { - userpass = url.UserPassword(user, password) - } else { - userpass = url.User(user) - } - } - - var path string - if userpass != nil { - path = fmt.Sprintf("%s@%s:%v", userpass.String(), host, port) - } else { - path = fmt.Sprintf("%s:%v", host, port) - } - if scheme != "" { - path = fmt.Sprintf("%s://%s", scheme, path) - } - - u, err := url.Parse(path) - if err != nil { - return nil, err - } - return http.ProxyURL(u), nil -} - -func setupLogger(loggerName config.LoggerName, logFile string) error { - if config.Datadog.GetBool("disable_file_logging") { - logFile = "" - } - - return config.SetupLogger( - loggerName, - config.Datadog.GetString("log_level"), - logFile, - config.GetSyslogURI(), - config.Datadog.GetBool("syslog_rfc"), - config.Datadog.GetBool("log_to_console"), - config.Datadog.GetBool("log_format_json"), - ) -} diff --git a/pkg/process/config/config_nix.go b/pkg/process/config/config_nix.go deleted file mode 100644 index 30ac2928bff19..0000000000000 --- a/pkg/process/config/config_nix.go +++ /dev/null @@ -1,12 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !windows && !darwin -// +build !windows,!darwin - -package config - -// defaultSystemProbeAddress is the default unix socket path to be used for connecting to the system probe -const defaultSystemProbeAddress = "/opt/datadog-agent/run/sysprobe.sock" diff --git a/pkg/process/config/config_nix_test.go b/pkg/process/config/config_nix_test.go deleted file mode 100644 index 4d25a4a6ec9bc..0000000000000 --- a/pkg/process/config/config_nix_test.go +++ /dev/null @@ -1,100 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build linux && secrets -// +build linux,secrets - -package config - -import ( - "fmt" - "os" - "os/exec" - "sync" - "testing" - - // This test calls ContainerProvider behind the scene, need to initialize the linux provider - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/DataDog/datadog-agent/pkg/config" -) - -var secretScriptBuilder sync.Once - -func setupSecretScript() error { - script := "./testdata/secret" - goCmd, err := exec.LookPath("go") - if err != nil { - return fmt.Errorf("Couldn't find golang binary in path") - } - - buildCmd := exec.Command(goCmd, "build", "-o", script, fmt.Sprintf("%s.go", script)) - if err := buildCmd.Start(); err != nil { - return fmt.Errorf("Couldn't build script %v: %s", script, err) - } - if err := buildCmd.Wait(); err != nil { - return fmt.Errorf("Couldn't wait the end of the build for script %v: %s", script, err) - } - - // Permissions required for the secret script - err = os.Chmod(script, 0700) - if err != nil { - return err - } - - return os.Chown(script, os.Geteuid(), os.Getgid()) -} - -// TestAgentConfigYamlEnc tests the secrets feature on the file TestDDAgentConfigYamlEnc -func TestAgentConfigYamlEnc(t *testing.T) { - secretScriptBuilder.Do(func() { require.NoError(t, setupSecretScript()) }) - - newConfig() - defer restoreGlobalConfig() - // Secrets settings are initialized only once by initConfig in the agent package so we have to setup them - config.InitConfig(config.Datadog) - config.Datadog.Set("secret_backend_timeout", 15) - config.Datadog.Set("secret_backend_output_max_size", 1024) - - _ = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlEnc.yaml", "") - assert.Equal(t, "secret-my_api_key", config.Datadog.GetString("api_key")) -} - -// TestAgentConfigYamlEnc2 tests the secrets feature on the file TestDDAgentConfigYamlEnc2 -func TestAgentConfigYamlEnc2(t *testing.T) { - secretScriptBuilder.Do(func() { require.NoError(t, setupSecretScript()) }) - - newConfig() - defer restoreGlobalConfig() - // Secrets settings are initialized only once by initConfig in the agent package so we have to setup them - config.InitConfig(config.Datadog) - config.Datadog.Set("secret_backend_timeout", 15) - config.Datadog.Set("secret_backend_output_max_size", 1024) - _ = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlEnc2.yaml", "") - - assert.Equal(t, "secret-encrypted_key", config.Datadog.GetString("api_key")) - assert.Equal(t, "secret-burrito.com", config.Datadog.GetString("process_config.process_dd_url")) -} - -func TestAgentEncryptedVariablesSecrets(t *testing.T) { - secretScriptBuilder.Do(func() { require.NoError(t, setupSecretScript()) }) - - newConfig() - defer restoreGlobalConfig() - - // Secrets settings are initialized only once by initConfig in the agent package so we have to setup them - config.InitConfig(config.Datadog) - config.Datadog.Set("secret_backend_timeout", 15) - config.Datadog.Set("secret_backend_output_max_size", 1024) - - t.Setenv("DD_API_KEY", "ENC[my_api_key]") - t.Setenv("DD_HOSTNAME", "ENC[my-host]") // Valid hostnames do not use underscores - - agentConfig := loadAgentConfigForTest(t, "./testdata/TestEnvSiteConfig-Enc.yaml", "") - - assert.Equal(t, "secret-my_api_key", config.Datadog.Get("api_key")) - assert.Equal(t, "secret-my-host", agentConfig.HostName) -} diff --git a/pkg/process/config/config_test.go b/pkg/process/config/config_test.go deleted file mode 100644 index bcdc96444141d..0000000000000 --- a/pkg/process/config/config_test.go +++ /dev/null @@ -1,555 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build linux || windows -// +build linux windows - -package config - -import ( - "context" - "errors" - "fmt" - "net/http" - "os" - "os/exec" - "regexp" - "runtime" - "strconv" - "strings" - "testing" - "time" - - sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/process/procutil" - pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" - mocks "github.com/DataDog/datadog-agent/pkg/proto/pbgo/mocks" - - "github.com/golang/mock/gomock" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "google.golang.org/grpc" -) - -var originalConfig = config.Datadog - -func restoreGlobalConfig() { - config.Datadog = originalConfig -} - -func newConfig() { - config.Datadog = config.NewConfig("datadog", "DD", strings.NewReplacer(".", "_")) - config.InitConfig(config.Datadog) - // force timeout to 0s, otherwise each test waits 60s - config.Datadog.Set(key(ns, "grpc_connection_timeout_secs"), 0) -} - -func loadAgentConfigForTest(t *testing.T, path, networksYamlPath string) *AgentConfig { - config.InitSystemProbeConfig(config.Datadog) - - require.NoError(t, LoadConfigIfExists(path)) - - syscfg, err := sysconfig.Merge(networksYamlPath) - require.NoError(t, err) - - cfg, err := NewAgentConfig("test", path, syscfg) - require.NoError(t, err) - return cfg -} - -func TestBlacklist(t *testing.T) { - testBlacklist := []string{ - "^getty", - "^acpid", - "^atd", - "^upstart-udev-bridge", - "^upstart-socket-bridge", - "^upstart-file-bridge", - "^dhclient", - "^dhclient3", - "^rpc", - "^dbus-daemon", - "udevd", - "^/sbin/", - "^/usr/sbin/", - "^/var/ossec/bin/ossec", - "^rsyslogd", - "^whoopsie$", - "^cron$", - "^CRON$", - "^/usr/lib/postfix/master$", - "^qmgr", - "^pickup", - "^sleep", - "^/lib/systemd/systemd-logind$", - "^/usr/local/bin/goshe dnsmasq$", - } - blacklist := make([]*regexp.Regexp, 0, len(testBlacklist)) - for _, b := range testBlacklist { - r, err := regexp.Compile(b) - if err == nil { - blacklist = append(blacklist, r) - } - } - cases := []struct { - cmdline []string - blacklisted bool - }{ - {[]string{"getty", "-foo", "-bar"}, true}, - {[]string{"rpcbind", "-x"}, true}, - {[]string{"my-rpc-app", "-config foo.ini"}, false}, - {[]string{"rpc.statd", "-L"}, true}, - {[]string{"/usr/sbin/irqbalance"}, true}, - } - - for _, c := range cases { - assert.Equal(t, c.blacklisted, IsBlacklisted(c.cmdline, blacklist), - fmt.Sprintf("Case %v failed", c)) - } -} - -// TestEnvGrpcConnectionTimeoutSecs tests DD_PROCESS_CONFIG_GRPC_CONNECTION_TIMEOUT_SECS. -// This environment variable cannot be tested with the other environment variables because it is overridden. -func TestEnvGrpcConnectionTimeoutSecs(t *testing.T) { - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - - t.Run("DD_PROCESS_CONFIG_GRPC_CONNECTION_TIMEOUT_SECS", func(t *testing.T) { - t.Setenv("DD_PROCESS_CONFIG_GRPC_CONNECTION_TIMEOUT_SECS", "1") - _, _ = NewAgentConfig("test", "", syscfg) - assert.Equal(t, 1, config.Datadog.GetInt("process_config.grpc_connection_timeout_secs")) - }) - - t.Run("DD_PROCESS_AGENT_GRPC_CONNECTION_TIMEOUT_SECS", func(t *testing.T) { - t.Setenv("DD_PROCESS_AGENT_GRPC_CONNECTION_TIMEOUT_SECS", "2") - _, _ = NewAgentConfig("test", "", syscfg) - assert.Equal(t, 2, config.Datadog.GetInt("process_config.grpc_connection_timeout_secs")) - }) -} - -func TestYamlConfig(t *testing.T) { - // Reset the config - config.Datadog = config.NewConfig("datadog", "DD", strings.NewReplacer(".", "_")) - - f, err := os.CreateTemp("", "yamlConfigTest*.yaml") - defer os.Remove(f.Name()) - assert.NoError(t, err) - - _, err = f.WriteString(` -log_level: debug -log_to_console: false -process_config: - log_file: /tmp/test - dd_agent_bin: /tmp/test - grpc_connection_timeout_secs: 1 - remote_tagger: true - process_discovery: - enabled: true - interval: 1h -`) - require.NoError(t, err) - - require.NoError(t, LoadConfigIfExists(f.Name())) - - assert.Equal(t, "debug", config.Datadog.GetString("log_level")) - assert.False(t, config.Datadog.GetBool("log_to_console")) - assert.Equal(t, "/tmp/test", config.Datadog.GetString("process_config.log_file")) - assert.Equal(t, "/tmp/test", config.Datadog.GetString("process_config.dd_agent_bin")) - assert.Equal(t, 1, config.Datadog.GetInt("process_config.grpc_connection_timeout_secs")) - assert.True(t, config.Datadog.GetBool("process_config.remote_tagger")) - assert.True(t, config.Datadog.GetBool("process_config.process_discovery.enabled")) - assert.Equal(t, time.Hour, config.Datadog.GetDuration("process_config.process_discovery.interval")) -} - -func TestOnlyEnvConfigArgsScrubbingEnabled(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - t.Setenv("DD_CUSTOM_SENSITIVE_WORDS", "*password*,consul_token,*api_key") - - syscfg, err := sysconfig.Merge("") - assert.NoError(t, err) - agentConfig, _ := NewAgentConfig("test", "", syscfg) - assert.Equal(t, true, agentConfig.Scrubber.Enabled) - - cases := []struct { - cmdline []string - parsedCmdline []string - }{ - { - []string{"spidly", "--mypasswords=123,456", "consul_token", "1234", "--dd_api_key=1234"}, - []string{"spidly", "--mypasswords=********", "consul_token", "********", "--dd_api_key=********"}, - }, - } - - for i := range cases { - cases[i].cmdline, _ = agentConfig.Scrubber.ScrubCommand(cases[i].cmdline) - assert.Equal(t, cases[i].parsedCmdline, cases[i].cmdline) - } -} - -func TestOnlyEnvConfigArgsScrubbingDisabled(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - t.Setenv("DD_SCRUB_ARGS", "false") - t.Setenv("DD_CUSTOM_SENSITIVE_WORDS", "*password*,consul_token,*api_key") - - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - agentConfig, _ := NewAgentConfig("test", "", syscfg) - assert.Equal(t, false, agentConfig.Scrubber.Enabled) - - cases := []struct { - cmdline []string - parsedCmdline []string - }{ - { - []string{"spidly", "--mypasswords=123,456", "consul_token", "1234", "--dd_api_key=1234"}, - []string{"spidly", "--mypasswords=123,456", "consul_token", "1234", "--dd_api_key=1234"}, - }, - } - - for i := range cases { - fp := &procutil.Process{Cmdline: cases[i].cmdline} - cases[i].cmdline = agentConfig.Scrubber.ScrubProcessCommand(fp) - assert.Equal(t, cases[i].parsedCmdline, cases[i].cmdline) - } -} - -func TestOnlyEnvConfigLogLevelOverride(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - t.Setenv("DD_LOG_LEVEL", "error") - t.Setenv("LOG_LEVEL", "debug") - - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - _, _ = NewAgentConfig("test", "", syscfg) - assert.Equal(t, "error", config.Datadog.GetString("log_level")) -} - -func TestGetHostname(t *testing.T) { - ctx := context.Background() - _ = NewDefaultAgentConfig() - h, err := getHostname(ctx, config.Datadog.GetString("process_config.dd_agent_bin"), 0) - assert.Nil(t, err) - // verify we fall back to getting os hostname - expectedHostname, _ := os.Hostname() - assert.Equal(t, expectedHostname, h) -} - -func TestDefaultConfig(t *testing.T) { - assert := assert.New(t) - agentConfig := NewDefaultAgentConfig() - - // assert that some sane defaults are set - assert.Equal("info", config.Datadog.GetString("log_level")) - assert.Equal(true, agentConfig.Scrubber.Enabled) - - t.Setenv("DOCKER_DD_AGENT", "yes") - _ = NewDefaultAgentConfig() - assert.Equal(os.Getenv("HOST_PROC"), "") - assert.Equal(os.Getenv("HOST_SYS"), "") - t.Setenv("DOCKER_DD_AGENT", "no") - assert.Equal(config.DefaultProcessExpVarPort, config.Datadog.GetInt("process_config.expvar_port")) - - assert.Equal("info", config.Datadog.GetString("log_level")) - assert.True(config.Datadog.GetBool("log_to_console")) - assert.Equal(config.DefaultProcessAgentLogFile, config.Datadog.GetString("process_config.log_file")) - assert.Equal(config.DefaultDDAgentBin, config.Datadog.GetString("process_config.dd_agent_bin")) - assert.Equal(config.DefaultGRPCConnectionTimeoutSecs, config.Datadog.GetInt("process_config.grpc_connection_timeout_secs")) - assert.False(config.Datadog.GetBool("process_config.remote_tagger")) - assert.True(config.Datadog.GetBool("process_config.process_discovery.enabled")) - assert.Equal(4*time.Hour, config.Datadog.GetDuration("process_config.process_discovery.interval")) -} - -func TestAgentConfigYamlAndSystemProbeConfig(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - assert := assert.New(t) - - agentConfig := loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "") - - assert.Equal("apikey_20", config.Datadog.GetString("api_key")) - assert.Equal("http://my-process-app.datadoghq.com", config.Datadog.GetString("process_config.process_dd_url")) - assert.Equal(10, config.Datadog.GetInt("process_config.queue_size")) - assert.Equal(8*time.Second, agentConfig.CheckIntervals[ContainerCheckName]) - assert.Equal(30*time.Second, agentConfig.CheckIntervals[ProcessCheckName]) - assert.Equal(false, agentConfig.Scrubber.Enabled) - assert.Equal(5065, config.Datadog.GetInt("process_config.expvar_port")) - - newConfig() - agentConfig = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml") - - assert.Equal("apikey_20", config.Datadog.GetString("api_key")) - assert.Equal("http://my-process-app.datadoghq.com", config.Datadog.GetString("process_config.process_dd_url")) - assert.Equal("server-01", agentConfig.HostName) - assert.Equal(10, config.Datadog.GetInt("process_config.queue_size")) - assert.Equal(8*time.Second, agentConfig.CheckIntervals[ContainerCheckName]) - assert.Equal(30*time.Second, agentConfig.CheckIntervals[ProcessCheckName]) - assert.Equal(false, agentConfig.Scrubber.Enabled) - if runtime.GOOS != "windows" { - assert.Equal("/var/my-location/system-probe.log", agentConfig.SystemProbeAddress) - } - - newConfig() - agentConfig = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml") - - assert.Equal("apikey_20", config.Datadog.GetString("api_key")) - assert.Equal("http://my-process-app.datadoghq.com", config.Datadog.GetString("process_config.process_dd_url")) - assert.Equal(10, config.Datadog.GetInt("process_config.queue_size")) - assert.Equal(8*time.Second, agentConfig.CheckIntervals[ContainerCheckName]) - assert.Equal(30*time.Second, agentConfig.CheckIntervals[ProcessCheckName]) - assert.Equal(false, agentConfig.Scrubber.Enabled) - - newConfig() - agentConfig = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml") - - if runtime.GOOS == "windows" { - assert.Equal("localhost:4444", agentConfig.SystemProbeAddress) - } -} - -func TestProxyEnv(t *testing.T) { - assert := assert.New(t) - for i, tc := range []struct { - host string - port int - user string - pass string - expected string - }{ - { - "example.com", - 1234, - "", - "", - "http://example.com:1234", - }, - { - "https://example.com", - 4567, - "foo", - "bar", - "https://foo:bar@example.com:4567", - }, - { - "example.com", - 0, - "foo", - "", - "http://foo@example.com:3128", - }, - } { - t.Setenv("PROXY_HOST", tc.host) - if tc.port > 0 { - t.Setenv("PROXY_PORT", strconv.Itoa(tc.port)) - } else { - t.Setenv("PROXY_PORT", "") - } - t.Setenv("PROXY_USER", tc.user) - t.Setenv("PROXY_PASSWORD", tc.pass) - pf, err := proxyFromEnv(nil) - assert.NoError(err, "proxy case %d had error", i) - u, err := pf(&http.Request{}) - assert.NoError(err) - assert.Equal(tc.expected, u.String()) - } -} - -func TestEnvOrchestratorAdditionalEndpoints(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - assert := assert.New(t) - - expected := make(map[string]string) - expected["key1"] = "url1.com" - expected["key2"] = "url2.com" - expected["key3"] = "url2.com" - expected["apikey_20"] = "orchestrator.datadoghq.com" // from config file - - t.Setenv("DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS", `{"https://url1.com": ["key1"], "https://url2.com": ["key2", "key3"]}`) - - agentConfig := loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml") - - for _, actual := range agentConfig.Orchestrator.OrchestratorEndpoints { - assert.Equal(expected[actual.APIKey], actual.Endpoint.Hostname(), actual) - } -} - -func TestNetworkConfig(t *testing.T) { - t.Run("yaml", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - agentConfig := loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlOnly.yaml", "./testdata/TestDDAgentConfig-NetConfig.yaml") - - assert.True(t, agentConfig.EnableSystemProbe) - }) - - t.Run("env", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - t.Setenv("DD_SYSTEM_PROBE_NETWORK_ENABLED", "true") - - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - agentConfig, err := NewAgentConfig("test", "", syscfg) - require.NoError(t, err) - - assert.True(t, agentConfig.EnableSystemProbe) - }) -} - -func TestSystemProbeNoNetwork(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - agentConfig := loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlOnly.yaml", "./testdata/TestDDAgentConfig-OOMKillOnly.yaml") - - assert.True(t, agentConfig.EnableSystemProbe) -} - -func TestGetHostnameFromGRPC(t *testing.T) { - ctx := context.Background() - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - mockClient := mocks.NewMockAgentClient(ctrl) - - mockClient.EXPECT().GetHostname( - gomock.Any(), - &pb.HostnameRequest{}, - ).Return(&pb.HostnameReply{Hostname: "unit-test-hostname"}, nil) - - t.Run("hostname returns from grpc", func(t *testing.T) { - hostname, err := getHostnameFromGRPC(ctx, func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error) { - return mockClient, nil - }, config.DefaultGRPCConnectionTimeoutSecs*time.Second) - - assert.Nil(t, err) - assert.Equal(t, "unit-test-hostname", hostname) - }) - - t.Run("grpc client is unavailable", func(t *testing.T) { - grpcErr := errors.New("no grpc client") - hostname, err := getHostnameFromGRPC(ctx, func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error) { - return nil, grpcErr - }, config.DefaultGRPCConnectionTimeoutSecs*time.Second) - - assert.NotNil(t, err) - assert.Equal(t, grpcErr, errors.Unwrap(err)) - assert.Empty(t, hostname) - }) -} - -func TestGetHostnameFromCmd(t *testing.T) { - t.Run("valid hostname", func(t *testing.T) { - h, err := getHostnameFromCmd("agent-success", fakeExecCommand) - assert.Nil(t, err) - assert.Equal(t, "unit_test_hostname", h) - }) - - t.Run("no hostname returned", func(t *testing.T) { - h, err := getHostnameFromCmd("agent-empty_hostname", fakeExecCommand) - assert.NotNil(t, err) - assert.Equal(t, "", h) - }) -} - -func TestInvalidHostname(t *testing.T) { - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - - // Lower the GRPC timeout, otherwise the test will time out in CI - config.Datadog.Set("process_config.grpc_connection_timeout_secs", 1) - - // Input yaml file has an invalid hostname (localhost) so we expect to configure via environment - agentConfig, err := NewAgentConfig("test", "./testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml", syscfg) - require.NoError(t, err) - - expectedHostname, _ := os.Hostname() - assert.Equal(t, expectedHostname, agentConfig.HostName) -} - -// TestGetHostnameShellCmd is a method that is called as a substitute for a dd-agent shell command, -// the GO_TEST_PROCESS flag ensures that if it is called as part of the test suite, it is skipped. -func TestGetHostnameShellCmd(t *testing.T) { - if os.Getenv("GO_TEST_PROCESS") != "1" { - return - } - defer os.Exit(0) - - args := os.Args - for len(args) > 0 { - if args[0] == "--" { - args = args[1:] - break - } - args = args[1:] - } - - if len(args) == 0 { - fmt.Fprintf(os.Stderr, "No command\n") - os.Exit(2) - } - - cmd, args := args[0], args[1:] - switch cmd { - case "agent-success": - assert.EqualValues(t, []string{"hostname"}, args) - fmt.Fprintf(os.Stdout, "unit_test_hostname") - case "agent-empty_hostname": - assert.EqualValues(t, []string{"hostname"}, args) - fmt.Fprintf(os.Stdout, "") - } -} - -// TestProcessDiscoveryInterval tests to make sure that the process discovery interval validation works properly -func TestProcessDiscoveryInterval(t *testing.T) { - for _, tc := range []struct { - name string - interval time.Duration - expectedInterval time.Duration - }{ - { - name: "allowed interval", - interval: 8 * time.Hour, - expectedInterval: 8 * time.Hour, - }, - { - name: "below minimum", - interval: 0, - expectedInterval: discoveryMinInterval, - }, - } { - t.Run(tc.name, func(t *testing.T) { - cfg := config.Mock(t) - cfg.Set("process_config.process_discovery.interval", tc.interval) - - agentCfg := NewDefaultAgentConfig() - assert.NoError(t, agentCfg.LoadAgentConfig("")) - - assert.Equal(t, tc.expectedInterval, agentCfg.CheckIntervals[DiscoveryCheckName]) - }) - } -} - -// fakeExecCommand is a function that initialises a new exec.Cmd, one which will -// simply call TestShellProcessSuccess rather than the command it is provided. It will -// also pass through the command and its arguments as an argument to TestShellProcessSuccess -func fakeExecCommand(command string, args ...string) *exec.Cmd { - cs := []string{"-test.run=TestGetHostnameShellCmd", "--", command} - cs = append(cs, args...) - cmd := exec.Command(os.Args[0], cs...) - cmd.Env = []string{"GO_TEST_PROCESS=1"} - return cmd -} diff --git a/pkg/process/config/testdata/TestDDAgentConfig-NetConfig.yaml b/pkg/process/config/testdata/TestDDAgentConfig-NetConfig.yaml deleted file mode 100644 index 62f9f5f33b633..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfig-NetConfig.yaml +++ /dev/null @@ -1,2 +0,0 @@ -network_config: - enabled: true diff --git a/pkg/process/config/testdata/TestDDAgentConfig-OOMKillOnly.yaml b/pkg/process/config/testdata/TestDDAgentConfig-OOMKillOnly.yaml deleted file mode 100644 index 2dd3fe2cefbba..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfig-OOMKillOnly.yaml +++ /dev/null @@ -1,2 +0,0 @@ -system_probe_config: - enable_oom_kill: true diff --git a/pkg/process/config/testdata/TestDDAgentConfigBothVersions.yaml b/pkg/process/config/testdata/TestDDAgentConfigBothVersions.yaml deleted file mode 100644 index b792ebf4e8dce..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigBothVersions.yaml +++ /dev/null @@ -1,7 +0,0 @@ -api_key: apikey_20 - -process_config: - process_dd_url: http://my-process-app.datadoghq.com - queue_size: 10 - windows: - args_refresh_interval: 40 \ No newline at end of file diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml deleted file mode 100644 index 97f2dde7f03e9..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml +++ /dev/null @@ -1,28 +0,0 @@ -system_probe_config: - enabled: true - sysprobe_socket: /var/my-location/system-probe.log - disable_tcp: true - disable_udp: true - disable_ipv6: true - disable_dns_inspection: false - excluded_linux_versions: - - 5.5.0 - - 4.2.1 - closed_channel_size: 1000 - source_excludes: - 127.0.0.1: - - "5005" - 172.0.0.1/20: - - "*" - "*": - - "443" - dest_excludes: - 2001:db8::2:1: - - "5005" - 172.0.0.1/20: - - "*" - "*": - - "*" - -network_config: - enabled: false diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml deleted file mode 100644 index ee20a6dde1ebd..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml +++ /dev/null @@ -1,7 +0,0 @@ -system_probe_config: - enabled: true - bpf_debug: true - sysprobe_socket: localhost:4444 - -network_config: - enabled: true diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml deleted file mode 100644 index 3e215ccb09cbd..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml +++ /dev/null @@ -1,7 +0,0 @@ -system_probe_config: - enabled: true - bpf_debug: true - sysprobe_socket: /var/my-location/system-probe.log - -network_config: - enabled: true diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml deleted file mode 100644 index a2d5ac69ca5c2..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml +++ /dev/null @@ -1,16 +0,0 @@ -api_key: apikey_20 -hostname: server-01 - -process_agent_enabled: true -process_config: - process_dd_url: http://my-process-app.datadoghq.com - enabled: 'true' - queue_size: 10 - intervals: - container: 8 - process: 30 - windows: - args_refresh_interval: 100 - add_new_args: false - scrub_args: false - expvar_port: 5065 diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlEnc.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlEnc.yaml deleted file mode 100644 index 0054a16c1765d..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlEnc.yaml +++ /dev/null @@ -1,5 +0,0 @@ -api_key: "ENC[my_api_key]" - -process_config: - enabled: 'true' -secret_backend_command: "./testdata/secret" diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlEnc2.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlEnc2.yaml deleted file mode 100644 index d56efdaa64b92..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlEnc2.yaml +++ /dev/null @@ -1,6 +0,0 @@ -api_key: "ENC[encrypted_key]" - -process_config: - enabled: 'true' - process_dd_url: "ENC[burrito.com]" -secret_backend_command: "./testdata/secret" diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-2.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-2.yaml deleted file mode 100644 index 412f677510743..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-2.yaml +++ /dev/null @@ -1,13 +0,0 @@ -api_key: apikey_20 - -process_agent_enabled: true -process_config: - enabled: 'false' - queue_size: 10 - intervals: - container: 8 - process: 30 - windows: - args_refresh_interval: -1 - add_new_args: true - scrub_args: true diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-3.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-3.yaml deleted file mode 100644 index a341991c78259..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-3.yaml +++ /dev/null @@ -1,9 +0,0 @@ -api_key: apikey_20 - -process_agent_enabled: true -process_config: - enabled: 'disabled' - queue_size: 10 - intervals: - container: 8 - process: 30 diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-4.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-4.yaml deleted file mode 100644 index a509048f5f855..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-4.yaml +++ /dev/null @@ -1,13 +0,0 @@ -api_key: apikey_20 - -process_agent_enabled: true -process_config: - enabled: 'disabled' - additional_endpoints: - https://process.datadoghq.eu: - - foo - - bar - queue_size: 10 - intervals: - container: 8 - process: 30 diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-5.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-5.yaml deleted file mode 100644 index a539f6d62cc83..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-5.yaml +++ /dev/null @@ -1,7 +0,0 @@ -api_key: apikey_20 -site: datadoghq.eu - -process_agent_enabled: true -process_config: - enabled: 'true' - process_dd_url: http://test-process.datadoghq.com diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-6.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-6.yaml deleted file mode 100644 index 7c8f74dfeb52b..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-6.yaml +++ /dev/null @@ -1,6 +0,0 @@ -api_key: apikey_20 -site: datacathq.eu - -process_agent_enabled: true -process_config: - enabled: 'true' diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml deleted file mode 100644 index 84048df948c13..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml +++ /dev/null @@ -1,5 +0,0 @@ -hostname: localhost - -process_agent_enabled: true -process_config: - enabled: 'true' diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly.yaml deleted file mode 100644 index 021fea35cb7f1..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly.yaml +++ /dev/null @@ -1,14 +0,0 @@ -api_key: apikey_20 - -process_agent_enabled: true -process_config: - enabled: 'true' - grpc_connection_timeout_secs: 0 - queue_size: 10 - intervals: - container: 8 - process: 30 - windows: - args_refresh_interval: 100 - add_new_args: false - scrub_args: false diff --git a/pkg/process/config/testdata/TestEnvSiteConfig-Enc.yaml b/pkg/process/config/testdata/TestEnvSiteConfig-Enc.yaml deleted file mode 100644 index d2168f39a2d8f..0000000000000 --- a/pkg/process/config/testdata/TestEnvSiteConfig-Enc.yaml +++ /dev/null @@ -1,8 +0,0 @@ -site: datacathq.eu - -process_agent_enabled: true -process_config: - enabled: 'true' - process_dd_url: https://burrito.com -secret_backend_command: "./testdata/secret" - diff --git a/pkg/process/config/testdata/secret.go b/pkg/process/config/testdata/secret.go deleted file mode 100644 index 2e036517d61bd..0000000000000 --- a/pkg/process/config/testdata/secret.go +++ /dev/null @@ -1,47 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package main - -import ( - "encoding/json" - "fmt" - "os" -) - -type Input struct { - Version string `json:"version"` - Secrets []string `json:"secrets"` -} - -type SecretOutput struct { - Value string `json:"value"` - // Use pointer for error so if it's not provided null will be used - Error *string `json:"error"` -} - -func main() { - in := Input{} - err := json.NewDecoder(os.Stdin).Decode(&in) - if err != nil { - fmt.Fprintf(os.Stderr, "error occurred decoding input: %s", err) - os.Exit(1) - } - - // Append secret to all the secrets requested - - out := map[string]SecretOutput{} - for _, s := range in.Secrets { - out[s] = SecretOutput{ - Value: fmt.Sprintf("secret-%s", s), - } - } - - err = json.NewEncoder(os.Stdout).Encode(out) - if err != nil { - fmt.Fprintf(os.Stderr, "error occurred encoding output: %s", err) - os.Exit(1) - } -} diff --git a/pkg/process/config/yaml_config.go b/pkg/process/config/yaml_config.go deleted file mode 100644 index 6528f20558f11..0000000000000 --- a/pkg/process/config/yaml_config.go +++ /dev/null @@ -1,131 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package config - -import ( - "path/filepath" - "regexp" - "strings" - "time" - - "github.com/DataDog/datadog-agent/pkg/config" - httputils "github.com/DataDog/datadog-agent/pkg/util/http" - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -const ( - ns = "process_config" - discoveryMinInterval = 10 * time.Minute -) - -func key(pieces ...string) string { - return strings.Join(pieces, ".") -} - -// LoadAgentConfig loads process-agent specific configurations based on the global Config object -func (a *AgentConfig) LoadAgentConfig(path string) error { - loadEnvVariables() - - // Resolve any secrets - if err := config.ResolveSecrets(config.Datadog, filepath.Base(path)); err != nil { - return err - } - - if config.Datadog.IsSet("hostname") { - a.HostName = config.Datadog.GetString("hostname") - } - - // The interval, in seconds, at which we will run each check. If you want consistent - // behavior between real-time you may set the Container/ProcessRT intervals to 10. - // Defaults to 10s for normal checks and 2s for others. - a.setCheckInterval(ns, "container", ContainerCheckName) - a.setCheckInterval(ns, "container_realtime", RTContainerCheckName) - a.setCheckInterval(ns, "process", ProcessCheckName) - a.setCheckInterval(ns, "process_realtime", RTProcessCheckName) - a.setCheckInterval(ns, "connections", ConnectionsCheckName) - - // We don't need to check if the key exists since we already bound it to a default in InitConfig. - // We use a minimum of 10 minutes for this value. - discoveryInterval := config.Datadog.GetDuration("process_config.process_discovery.interval") - if discoveryInterval < discoveryMinInterval { - discoveryInterval = discoveryMinInterval - _ = log.Warnf("Invalid interval for process discovery (<= %s) using default value of %[1]s", discoveryMinInterval.String()) - } - a.CheckIntervals[DiscoveryCheckName] = discoveryInterval - - eventsInterval := config.Datadog.GetDuration("process_config.event_collection.interval") - if eventsInterval < config.DefaultProcessEventsMinCheckInterval { - eventsInterval = config.DefaultProcessEventsCheckInterval - _ = log.Warnf("Invalid interval for process_events check (< %s) using default value of %s", - config.DefaultProcessEventsMinCheckInterval.String(), config.DefaultProcessEventsCheckInterval.String()) - } - a.CheckIntervals[ProcessEventsCheckName] = eventsInterval - - if a.CheckIntervals[ProcessCheckName] < a.CheckIntervals[RTProcessCheckName] || a.CheckIntervals[ProcessCheckName]%a.CheckIntervals[RTProcessCheckName] != 0 { - // Process check interval must be greater or equal to RTProcess check interval and the intervals must be divisible - // in order to be run on the same goroutine - log.Warnf( - "Invalid process check interval overrides [%s,%s], resetting to defaults [%s,%s]", - a.CheckIntervals[ProcessCheckName], - a.CheckIntervals[RTProcessCheckName], - ProcessCheckDefaultInterval, - RTProcessCheckDefaultInterval, - ) - a.CheckIntervals[ProcessCheckName] = ProcessCheckDefaultInterval - a.CheckIntervals[RTProcessCheckName] = RTProcessCheckDefaultInterval - } - - // A list of regex patterns that will exclude a process if matched. - if k := key(ns, "blacklist_patterns"); config.Datadog.IsSet(k) { - for _, b := range config.Datadog.GetStringSlice(k) { - r, err := regexp.Compile(b) - if err != nil { - log.Warnf("Ignoring invalid blacklist pattern: %s", b) - continue - } - a.Blacklist = append(a.Blacklist, r) - } - } - - // Enable/Disable the DataScrubber to obfuscate process args - if scrubArgsKey := key(ns, "scrub_args"); config.Datadog.IsSet(scrubArgsKey) { - a.Scrubber.Enabled = config.Datadog.GetBool(scrubArgsKey) - } - if a.Scrubber.Enabled { // Scrubber is enabled by default when it's created - log.Debug("Starting process-agent with Scrubber enabled") - } - - // A custom word list to enhance the default one used by the DataScrubber - if k := key(ns, "custom_sensitive_words"); config.Datadog.IsSet(k) { - words := config.Datadog.GetStringSlice(k) - a.Scrubber.AddCustomSensitiveWords(words) - log.Debug("Adding custom sensitives words to Scrubber:", words) - } - - // Strips all process arguments - if config.Datadog.GetBool(key(ns, "strip_proc_arguments")) { - log.Debug("Strip all process arguments enabled") - a.Scrubber.StripAllArguments = true - } - - // Build transport (w/ proxy if needed) - a.Transport = httputils.CreateHTTPTransport() - - return nil -} - -func (a *AgentConfig) setCheckInterval(ns, check, checkKey string) { - k := key(ns, "intervals", check) - - if !config.Datadog.IsSet(k) { - return - } - - if interval := config.Datadog.GetInt(k); interval != 0 { - log.Infof("Overriding %s check interval to %ds", checkKey, interval) - a.CheckIntervals[checkKey] = time.Duration(interval) * time.Second - } -} diff --git a/pkg/process/metadata/metadata.go b/pkg/process/metadata/metadata.go new file mode 100644 index 0000000000000..576dd59a6621b --- /dev/null +++ b/pkg/process/metadata/metadata.go @@ -0,0 +1,13 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package metadata + +import "github.com/DataDog/datadog-agent/pkg/process/procutil" + +// Extractor is common interface for extracting metadata from processes +type Extractor interface { + Extract(procs map[int32]*procutil.Process) +} diff --git a/pkg/process/dockerproxy/filter.go b/pkg/process/metadata/parser/dockerproxy.go similarity index 61% rename from pkg/process/dockerproxy/filter.go rename to pkg/process/metadata/parser/dockerproxy.go index 6f08866cebbdd..60bf06edd6e91 100644 --- a/pkg/process/dockerproxy/filter.go +++ b/pkg/process/metadata/parser/dockerproxy.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package dockerproxy +package parser import ( "strconv" @@ -15,8 +15,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -// Filter keeps track of every docker-proxy instance and filters network traffic going through them -type Filter struct { +// DockerProxy keeps track of every docker-proxy instance and filters network traffic going through them +type DockerProxy struct { proxyByTarget map[model.ContainerAddr]*proxy // This "secondary index" is used only during the proxy IP discovery process proxyByPID map[int32]*proxy @@ -28,40 +28,46 @@ type proxy struct { target model.ContainerAddr } -// NewFilter instantiates a new filter loaded with docker-proxy instance information -func NewFilter(procs map[int32]*procutil.Process) *Filter { - filter := new(Filter) - filter.LoadProxies(procs) - return filter +// NewDockerProxy instantiates a new filter loaded with docker-proxy instance information +func NewDockerProxy() *DockerProxy { + return &DockerProxy{ + proxyByPID: make(map[int32]*proxy), + proxyByTarget: make(map[model.ContainerAddr]*proxy), + } } -// LoadProxies by inspecting processes information -func (f *Filter) LoadProxies(procs map[int32]*procutil.Process) { - f.proxyByPID = make(map[int32]*proxy) - f.proxyByTarget = make(map[model.ContainerAddr]*proxy) +func (d *DockerProxy) Extract(processes map[int32]*procutil.Process) { + proxyByPID := make(map[int32]*proxy) + proxyByTarget := make(map[model.ContainerAddr]*proxy) - for _, p := range procs { - proxy := extractProxyTarget(p) - if proxy == nil { + for _, p := range processes { + if proxy, seen := d.proxyByPID[p.Pid]; seen { + proxyByPID[p.Pid] = proxy + proxyByTarget[proxy.target] = proxy continue } - log.Debugf("detected docker-proxy with pid=%d target.ip=%s target.port=%d target.proto=%s", - proxy.pid, - proxy.target.Ip, - proxy.target.Port, - proxy.target.Protocol, - ) - - // Add proxy to cache - f.proxyByPID[proxy.pid] = proxy - f.proxyByTarget[proxy.target] = proxy + if proxy := extractProxyTarget(p); proxy != nil { + log.Debugf("detected docker-proxy with pid=%d target.ip=%s target.port=%d target.proto=%s", + proxy.pid, + proxy.target.Ip, + proxy.target.Port, + proxy.target.Protocol, + ) + + // Add proxy to cache + proxyByPID[p.Pid] = proxy + proxyByTarget[proxy.target] = proxy + } } + + d.proxyByPID = proxyByPID + d.proxyByTarget = proxyByTarget } // Filter all connections that have a docker-proxy at one end -func (f *Filter) Filter(payload *model.Connections) { - if len(f.proxyByPID) == 0 { +func (d *DockerProxy) Filter(payload *model.Connections) { + if len(d.proxyByPID) == 0 { return } @@ -69,14 +75,14 @@ func (f *Filter) Filter(payload *model.Connections) { // TODO: we can probably discard the whole logic below if we determine that each proxy // instance will be always bound to the docker0 IP for _, c := range payload.Conns { - if len(f.proxyByPID) == 0 { + if len(d.proxyByPID) == 0 { break } - if proxy, ok := f.proxyByPID[c.Pid]; ok { - if proxyIP := f.discoverProxyIP(proxy, c); proxyIP != "" { + if proxy, ok := d.proxyByPID[c.Pid]; ok && proxy != nil { + if proxyIP := d.discoverProxyIP(proxy, c); proxyIP != "" { proxy.ip = proxyIP - delete(f.proxyByPID, c.Pid) + delete(d.proxyByPID, c.Pid) } } } @@ -85,7 +91,7 @@ func (f *Filter) Filter(payload *model.Connections) { filtered := make([]*model.Connection, 0, len(payload.Conns)) for _, c := range payload.Conns { // If either end of the connection is a proxy we can drop it - if f.isProxied(c) { + if d.isProxied(c) { continue } @@ -95,19 +101,19 @@ func (f *Filter) Filter(payload *model.Connections) { payload.Conns = filtered } -func (f *Filter) isProxied(c *model.Connection) bool { - if p, ok := f.proxyByTarget[model.ContainerAddr{Ip: c.Laddr.Ip, Port: c.Laddr.Port, Protocol: c.Type}]; ok { +func (d *DockerProxy) isProxied(c *model.Connection) bool { + if p, ok := d.proxyByTarget[model.ContainerAddr{Ip: c.Laddr.Ip, Port: c.Laddr.Port, Protocol: c.Type}]; ok { return p.ip == c.Raddr.Ip } - if p, ok := f.proxyByTarget[model.ContainerAddr{Ip: c.Raddr.Ip, Port: c.Raddr.Port, Protocol: c.Type}]; ok { + if p, ok := d.proxyByTarget[model.ContainerAddr{Ip: c.Raddr.Ip, Port: c.Raddr.Port, Protocol: c.Type}]; ok { return p.ip == c.Laddr.Ip } return false } -func (f *Filter) discoverProxyIP(p *proxy, c *model.Connection) string { +func (d *DockerProxy) discoverProxyIP(p *proxy, c *model.Connection) string { // The heuristic here goes as follows: // One of the ends of this connections must match p.target; // The proxy IP will be the other end; diff --git a/pkg/process/dockerproxy/filter_test.go b/pkg/process/metadata/parser/dockerproxy_test.go similarity index 96% rename from pkg/process/dockerproxy/filter_test.go rename to pkg/process/metadata/parser/dockerproxy_test.go index bdafff65bb537..d4cfa5a55e4b4 100644 --- a/pkg/process/dockerproxy/filter_test.go +++ b/pkg/process/metadata/parser/dockerproxy_test.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package dockerproxy +package parser import ( "testing" @@ -37,7 +37,8 @@ import ( // The purpose of this package is to filter flows like (3) and (4) in order to // avoid double counting traffic represented similar to flows (1) and (2) func TestProxyFiltering(t *testing.T) { - filter := NewFilter(processData()) + proxyFilter := NewDockerProxy() + proxyFilter.Extract(processData()) // (1) This represents the *outgoing* connection from redis client to redis rerver (via host IP) // It should be *kept* @@ -101,7 +102,7 @@ func TestProxyFiltering(t *testing.T) { // Filter docker-proxy traffic in place payload := &model.Connections{Conns: []*model.Connection{c1, c2, c3, c4}} - filter.Filter(payload) + proxyFilter.Filter(payload) assert.Len(t, payload.Conns, 2) assert.Equal(t, c1, payload.Conns[0]) assert.Equal(t, c2, payload.Conns[1]) diff --git a/pkg/process/metadata/parser/service.go b/pkg/process/metadata/parser/service.go new file mode 100644 index 0000000000000..839f7a03a0968 --- /dev/null +++ b/pkg/process/metadata/parser/service.go @@ -0,0 +1,263 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package parser + +import ( + "path/filepath" + "strings" + "unicode" + + ddconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/process/metadata" + "github.com/DataDog/datadog-agent/pkg/process/procutil" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +type serviceExtractorFn func(args []string) string + +const ( + javaJarFlag = "-jar" + javaJarExtension = ".jar" + javaApachePrefix = "org.apache." +) + +// List of binaries that usually have additional process context of whats running +var binsWithContext = map[string]serviceExtractorFn{ + "python": parseCommandContextPython, + "python2.7": parseCommandContextPython, + "python3": parseCommandContextPython, + "python3.7": parseCommandContextPython, + "ruby2.3": parseCommandContext, + "ruby": parseCommandContext, + "java": parseCommandContextJava, + "java.exe": parseCommandContextJava, + "sudo": parseCommandContext, +} + +var _ metadata.Extractor = &ServiceExtractor{} + +// ServiceExtractor infers a service tag by extracting it from a process +type ServiceExtractor struct { + enabled bool + serviceByPID map[int32]*serviceMetadata +} + +type serviceMetadata struct { + cmdline []string + serviceContext string +} + +// NewServiceExtractor instantiates a new service discovery extractor +func NewServiceExtractor() *ServiceExtractor { + enabled := ddconfig.Datadog.GetBool("service_monitoring_config.process_service_inference.enabled") + return &ServiceExtractor{ + enabled: enabled, + serviceByPID: make(map[int32]*serviceMetadata), + } +} + +func (d *ServiceExtractor) Extract(processes map[int32]*procutil.Process) { + if !d.enabled { + return + } + + serviceByPID := make(map[int32]*serviceMetadata) + + for _, proc := range processes { + if meta, seen := d.serviceByPID[proc.Pid]; seen { + // check the service metadata is for the same process + if len(proc.Cmdline) == len(meta.cmdline) { + if len(proc.Cmdline) == 0 || proc.Cmdline[0] == meta.cmdline[0] { + serviceByPID[proc.Pid] = meta + continue + } + } + } + meta := extractServiceMetadata(proc.Cmdline) + if meta != nil { + log.Tracef("detected service metadata: %v", meta) + } + serviceByPID[proc.Pid] = meta + } + + d.serviceByPID = serviceByPID +} + +func (d *ServiceExtractor) GetServiceContext(pid int32) string { + if !d.enabled { + return "" + } + if meta, ok := d.serviceByPID[pid]; ok { + return meta.serviceContext + } + return "" +} + +func extractServiceMetadata(cmd []string) *serviceMetadata { + if len(cmd) == 0 || len(cmd[0]) == 0 { + return &serviceMetadata{ + cmdline: cmd, + } + } + + exe := cmd[0] + // check if all args are packed into the first argument + if len(cmd) == 1 { + if idx := strings.IndexRune(exe, ' '); idx != -1 { + exe = exe[0:idx] + cmd = strings.Split(cmd[0], " ") + } + } + + // trim any quotes from the executable + exe = strings.Trim(exe, "\"") + + // Extract executable from commandline args + exe = trimColonRight(removeFilePath(exe)) + if !isRuneLetterAt(exe, 0) { + exe = parseExeStartWithSymbol(exe) + } + + if contextFn, ok := binsWithContext[exe]; ok { + tag := contextFn(cmd[1:]) + return &serviceMetadata{ + cmdline: cmd, + serviceContext: "process_context:" + tag, + } + } + + // trim trailing file extensions + if i := strings.LastIndex(exe, "."); i > 0 { + exe = exe[:i] + } + + return &serviceMetadata{ + cmdline: cmd, + serviceContext: "process_context:" + exe, + } +} + +func removeFilePath(s string) string { + if s != "" { + return filepath.Base(s) + } + return s +} + +// trimColonRight will remove any colon and it's associated value right of the string +func trimColonRight(s string) string { + if i := strings.Index(s, ":"); i > 0 { + return s[:i] + } + + return s +} + +func isRuneLetterAt(s string, position int) bool { + return len(s) > position && unicode.IsLetter(rune(s[position])) +} + +// parseExeStartWithSymbol deals with exe that starts with special chars like "(", "-" or "[" +func parseExeStartWithSymbol(exe string) string { + if exe == "" { + return exe + } + // drop the first character + result := exe[1:] + // if last character is also special character, also drop it + if result != "" && !isRuneLetterAt(result, len(result)-1) { + result = result[:len(result)-1] + } + return result +} + +// In most cases, the best context is the first non-argument / environment variable, if it exists +func parseCommandContext(args []string) string { + var prevArgIsFlag bool + + for _, a := range args { + hasFlagPrefix, isEnvVariable := strings.HasPrefix(a, "-"), strings.ContainsRune(a, '=') + shouldSkipArg := prevArgIsFlag || hasFlagPrefix || isEnvVariable + + if !shouldSkipArg { + if c := trimColonRight(removeFilePath(a)); isRuneLetterAt(c, 0) { + return c + } + } + + prevArgIsFlag = hasFlagPrefix + } + + return "" +} + +func parseCommandContextPython(args []string) string { + var ( + prevArgIsFlag bool + moduleFlag bool + ) + + for _, a := range args { + hasFlagPrefix, isEnvVariable := strings.HasPrefix(a, "-"), strings.ContainsRune(a, '=') + + shouldSkipArg := prevArgIsFlag || hasFlagPrefix || isEnvVariable + + if !shouldSkipArg || moduleFlag { + if c := trimColonRight(removeFilePath(a)); isRuneLetterAt(c, 0) { + return c + } + } + + if hasFlagPrefix && a == "-m" { + moduleFlag = true + } + + prevArgIsFlag = hasFlagPrefix + } + + return "" +} + +func parseCommandContextJava(args []string) string { + prevArgIsFlag := false + + for _, a := range args { + hasFlagPrefix := strings.HasPrefix(a, "-") + includesAssignment := strings.ContainsRune(a, '=') || + strings.HasPrefix(a, "-X") || + strings.HasPrefix(a, "-javaagent:") || + strings.HasPrefix(a, "-verbose:") + shouldSkipArg := prevArgIsFlag || hasFlagPrefix || includesAssignment + if !shouldSkipArg { + arg := removeFilePath(a) + + if arg = trimColonRight(arg); isRuneLetterAt(arg, 0) { + if strings.HasSuffix(arg, javaJarExtension) { + return arg[:len(arg)-len(javaJarExtension)] + } + + if strings.HasPrefix(arg, javaApachePrefix) { + // take the project name after the package 'org.apache.' while stripping off the remaining package + // and class name + arg = arg[len(javaApachePrefix):] + if idx := strings.Index(arg, "."); idx != -1 { + return arg[:idx] + } + } + if idx := strings.LastIndex(arg, "."); idx != -1 && idx+1 < len(arg) { + // take just the class name without the package + return arg[idx+1:] + } + + return arg + } + } + + prevArgIsFlag = hasFlagPrefix && !includesAssignment && a != javaJarFlag + } + + return "" +} diff --git a/pkg/process/metadata/parser/service_test.go b/pkg/process/metadata/parser/service_test.go new file mode 100644 index 0000000000000..f1c8a682f9c8b --- /dev/null +++ b/pkg/process/metadata/parser/service_test.go @@ -0,0 +1,152 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package parser + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + ddconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/process/procutil" +) + +func TestExtractServiceMetadata(t *testing.T) { + tests := []struct { + name string + cmdline []string + expectedServiceTag string + }{ + { + name: "empty", + cmdline: []string{}, + expectedServiceTag: "", + }, + { + name: "blank", + cmdline: []string{""}, + expectedServiceTag: "", + }, + { + name: "single arg executable", + cmdline: []string{ + "./my-server.sh", + }, + expectedServiceTag: "process_context:my-server", + }, + { + name: "sudo", + cmdline: []string{ + "sudo", "-E", "-u", "dog", "/usr/local/bin/myApp", "-items=0,1,2,3", "-foo=bar", + }, + expectedServiceTag: "process_context:myApp", + }, + { + name: "python flask argument", + cmdline: []string{ + "/opt/python/2.7.11/bin/python2.7", "flask", "run", "--host=0.0.0.0", + }, + expectedServiceTag: "process_context:flask", + }, + { + name: "python - flask argument in path", + cmdline: []string{ + "/opt/python/2.7.11/bin/python2.7", "/opt/dogweb/bin/flask", "run", "--host=0.0.0.0", "--without-threads", + }, + expectedServiceTag: "process_context:flask", + }, + { + name: "python flask in single argument", + cmdline: []string{ + "/opt/python/2.7.11/bin/python2.7 flask run --host=0.0.0.0", + }, + expectedServiceTag: "process_context:flask", + }, + { + name: "python - module hello", + cmdline: []string{ + "python3", "-m", "hello", + }, + expectedServiceTag: "process_context:hello", + }, + { + name: "ruby - td-agent", + cmdline: []string{ + "ruby", "/usr/sbin/td-agent", "--log", "/var/log/td-agent/td-agent.log", "--daemon", "/var/run/td-agent/td-agent.pid", + }, + expectedServiceTag: "process_context:td-agent", + }, + { + name: "java using the -jar flag to define the service", + cmdline: []string{ + "java", "-Xmx4000m", "-Xms4000m", "-XX:ReservedCodeCacheSize=256m", "-jar", "/opt/sheepdog/bin/myservice.jar", + }, + expectedServiceTag: "process_context:myservice", + }, + { + name: "java class name as service", + cmdline: []string{ + "java", "-Xmx4000m", "-Xms4000m", "-XX:ReservedCodeCacheSize=256m", "com.datadog.example.HelloWorld", + }, + expectedServiceTag: "process_context:HelloWorld", + }, + { + name: "java kafka", + cmdline: []string{ + "java", "-Xmx4000m", "-Xms4000m", "-XX:ReservedCodeCacheSize=256m", "kafka.Kafka", + }, + expectedServiceTag: "process_context:Kafka", + }, + { + name: "java parsing for org.apache projects with cassandra as the service", + cmdline: []string{ + "/usr/bin/java", "-Xloggc:/usr/share/cassandra/logs/gc.log", "-ea", "-XX:+HeapDumpOnOutOfMemoryError", "-Xss256k", "-Dlogback.configurationFile=logback.xml", + "-Dcassandra.logdir=/var/log/cassandra", "-Dcassandra.storagedir=/data/cassandra", + "-cp", "/etc/cassandra:/usr/share/cassandra/lib/HdrHistogram-2.1.9.jar:/usr/share/cassandra/lib/cassandra-driver-core-3.0.1-shaded.jar", + "org.apache.cassandra.service.CassandraDaemon", + }, + expectedServiceTag: "process_context:cassandra", + }, + { + name: "java space in java executable path", + cmdline: []string{ + "/home/dd/my java dir/java", "com.dog.cat", + }, + expectedServiceTag: "process_context:cat", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockConfig := ddconfig.Mock(t) + mockConfig.Set("service_monitoring_config.process_service_inference.enabled", true) + + proc := procutil.Process{ + Pid: 1, + Cmdline: tt.cmdline, + } + procsByPid := map[int32]*procutil.Process{proc.Pid: &proc} + + se := NewServiceExtractor() + se.Extract(procsByPid) + assert.Equal(t, tt.expectedServiceTag, se.GetServiceContext(proc.Pid)) + }) + } +} + +func TestExtractServiceMetadataDisabled(t *testing.T) { + mockConfig := ddconfig.Mock(t) + mockConfig.Set("service_monitoring_config.process_service_inference.enabled", false) + + proc := procutil.Process{ + Pid: 1, + Cmdline: []string{"/bin/bash"}, + } + procsByPid := map[int32]*procutil.Process{proc.Pid: &proc} + se := NewServiceExtractor() + se.Extract(procsByPid) + assert.Empty(t, se.GetServiceContext(proc.Pid)) +} diff --git a/pkg/process/metadata/parser/service_windows_test.go b/pkg/process/metadata/parser/service_windows_test.go new file mode 100644 index 0000000000000..3970499835904 --- /dev/null +++ b/pkg/process/metadata/parser/service_windows_test.go @@ -0,0 +1,72 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows +// +build windows + +package parser + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + ddconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/process/procutil" +) + +func TestWindowsExtractServiceMetadata(t *testing.T) { + tests := []struct { + name string + cmdline []string + expectedServiceTag string + }{ + { + name: "CDPSvc", + cmdline: []string{ + "C:\\Windows\\system32\\svchost.exe", "-k", "LocalService", "-p", "-s", "CDPSvc", + }, + expectedServiceTag: "process_context:svchost", + }, + { + name: "nginx", + cmdline: []string{ + "C:\\nginx-1.23.2\\nginx.exe", + }, + expectedServiceTag: "process_context:nginx", + }, + { + name: "java using the -jar flag", + cmdline: []string{ + "\"C:\\Program Files\\Java\\jdk-17.0.1\\bin\\java\"", "-Xmx4000m", "-Xms4000m", "-XX:ReservedCodeCacheSize=256m", "-jar", "myService.jar", + }, + expectedServiceTag: "process_context:myService", + }, + { + name: "java with exe extension", + cmdline: []string{ + "C:\\Program Files\\Java\\jdk-17.0.1\\bin\\java.exe", "com.dog.myService", + }, + expectedServiceTag: "process_context:myService", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockConfig := ddconfig.Mock(t) + mockConfig.Set("service_monitoring_config.process_service_inference.enabled", true) + + proc := procutil.Process{ + Pid: 1, + Cmdline: tt.cmdline, + } + procsByPid := map[int32]*procutil.Process{proc.Pid: &proc} + + se := NewServiceExtractor() + se.Extract(procsByPid) + assert.Equal(t, tt.expectedServiceTag, se.GetServiceContext(proc.Pid)) + }) + } +} diff --git a/pkg/process/monitor/process_monitor.go b/pkg/process/monitor/process_monitor.go new file mode 100644 index 0000000000000..6d652c5b19732 --- /dev/null +++ b/pkg/process/monitor/process_monitor.go @@ -0,0 +1,360 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package monitor + +import ( + "errors" + "fmt" + "regexp" + "runtime" + "sync" + "time" + + "github.com/DataDog/gopsutil/process" + "github.com/vishvananda/netlink" + + "github.com/DataDog/datadog-agent/pkg/process/util" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +const ( + processMonitorMaxEvents = 2048 +) + +var ( + once sync.Once + processMonitor *ProcessMonitor +) + +// ProcessMonitor will subscribe to the netlink process events like Exec, Exit +// and call the subscribed callbacks +// Initialize() will scan the current process and will call the subscribed callbacks +// +// callbacks will be executed in parallel via a pool of goroutines (runtime.NumCPU()) +// callbackRunner is callbacks queue. The queue size is set by processMonitorMaxEvents +// +// Multiple team can use the same ProcessMonitor, +// the callers need to guarantee calling each Initialize() Stop() one single time +// this maintain an internal reference counter +// +// ProcessMonitor require root or CAP_NET_ADMIN capabilities +type ProcessMonitor struct { + m sync.Mutex + wg sync.WaitGroup + refcount int + + isInitialized bool + + // chan push done by vishvananda/netlink library + events chan netlink.ProcEvent + done chan struct{} + errors chan error + + // callback registration and parallel execution management + procEventCallbacks map[ProcessEventType][]*ProcessCallback + runningPids map[uint32]interface{} + callbackRunner chan func() + callbackRunnerDone chan struct{} +} + +type ProcessEventType int + +const ( + EXEC ProcessEventType = iota + EXIT +) + +type ProcessMetadataField int + +const ( + ANY ProcessMetadataField = iota + NAME +) + +type metadataName struct { + Name string +} + +type ProcessCallback struct { + Event ProcessEventType + Metadata ProcessMetadataField + Regex *regexp.Regexp + Callback func(pid uint32) +} + +// GetProcessMonitor create a monitor (only once) that register to netlink process events. +// +// This monitor can monitor.Subscribe(callback, filter) callback on particular event +// like process EXEC, EXIT. The callback will be called when the filter will match. +// Filter can be applied on : +// process name (NAME) +// by default ANY is applied +// +// Typical initialization: +// mon := GetProcessMonitor() +// mon.Subscribe(callback) +// mon.Initialize() +// +// note: o GetProcessMonitor() will always return the same instance +// as we can only register once with netlink process event +// o mon.Subscribe() will subscribe callback before or after the Initialization +// o mon.Initialize() will scan current processes and call subscribed callback +// +// o callback{Event: EXIT, Metadata: ANY} callback is called for all exit events, system wide +// o callback{Event: EXIT, Metadata: NAME} callback will be called if we seen the process Exec event, +// the metadata will be saved between Exec and Exit event per pid +// then the Exit callback will evaluate the same metadata on Exit. +// We need to save the metadata here as /proc/pid doesn't exist anymore. +func GetProcessMonitor() *ProcessMonitor { + once.Do(func() { + processMonitor = &ProcessMonitor{ + isInitialized: false, + procEventCallbacks: make(map[ProcessEventType][]*ProcessCallback), + runningPids: make(map[uint32]interface{}), + } + }) + + return processMonitor +} + +func (pm *ProcessMonitor) enqueueCallback(callback *ProcessCallback, pid uint32, metadata interface{}) { + if callback.Event == EXEC && callback.Metadata != ANY { + switch callback.Metadata { + case NAME: + pm.runningPids[pid] = metadata + } + } + pm.callbackRunner <- func() { callback.Callback(pid) } +} + +// evalEXECCallback is a best effort and would not return errors, but report them +func (p *ProcessMonitor) evalEXECCallback(c *ProcessCallback, pid uint32) { + if c.Metadata == ANY { + p.enqueueCallback(c, pid, nil) + return + } + + var err error + var proc *process.Process + // We receive the Exec event first and /proc could be slow to update + end := time.Now().Add(10 * time.Millisecond) + for end.After(time.Now()) { + proc, err = process.NewProcess(int32(pid)) + if err == nil { + break + } + time.Sleep(time.Millisecond) + } + if err != nil { + // short living process can hit here (or later proc.Name() parsing) + // as they already exited when we try to find them in /proc + // so let's be quiet on the logs as there not much to do here + return + } + + switch c.Metadata { + case NAME: + pname, err := proc.Name() + if err != nil { + log.Debugf("process %d name parsing failed %s", pid, err) + return + } + if c.Regex.MatchString(pname) { + p.enqueueCallback(c, pid, metadataName{Name: pname}) + } + } +} + +// evalEXITCallback will evaluate the metadata saved by the Exec callback and the callback accordingly +// please refer to GetProcessMonitor documentation +func (p *ProcessMonitor) evalEXITCallback(c *ProcessCallback, pid uint32) { + switch c.Metadata { + case NAME: + metadata, found := p.runningPids[pid] + if !found { + // we can hit here if a process started before the Exec callback has been registred + // and the process Exit, so we don't find his metadata + return + } + pname := metadata.(metadataName).Name + if c.Regex.MatchString(pname) { + p.enqueueCallback(c, pid, metadata) + } + case ANY: + p.enqueueCallback(c, pid, nil) + } +} + +// Initialize will scan all running processes and execute matching callbacks +// Once it's done all new events from netlink socket will be processed by the main async loop +func (pm *ProcessMonitor) Initialize() error { + pm.m.Lock() + defer pm.m.Unlock() + + pm.refcount++ + if pm.isInitialized { + return nil + } + + pm.events = make(chan netlink.ProcEvent, processMonitorMaxEvents) + pm.done = make(chan struct{}) + pm.errors = make(chan error) + + if err := netlink.ProcEventMonitor(pm.events, pm.done, pm.errors); err != nil { + return fmt.Errorf("couldn't initialize process monitor: %s", err) + } + + pm.callbackRunnerDone = make(chan struct{}, runtime.NumCPU()) + pm.callbackRunner = make(chan func(), runtime.NumCPU()) + for i := 0; i < runtime.NumCPU(); i++ { + pm.wg.Add(1) + go func() { + defer pm.wg.Done() + for { + select { + case <-pm.callbackRunnerDone: + return + case call, ok := <-pm.callbackRunner: + if !ok { + continue + } + call() + } + } + }() + } + + // This is the main async loop, where we process processes events from netlink socket + // events are dropped until + pm.wg.Add(1) + go func() { + defer func() { + log.Info("netlink process monitor ended") + pm.wg.Done() + }() + for { + select { + case <-pm.done: + return + + case event, ok := <-pm.events: + if !ok { + return + } + pm.m.Lock() + if !pm.isInitialized { + pm.m.Unlock() + continue + } + + switch ev := event.Msg.(type) { + case *netlink.ExecProcEvent: + for _, c := range pm.procEventCallbacks[EXEC] { + pm.evalEXECCallback(c, ev.ProcessPid) + } + case *netlink.ExitProcEvent: + for _, c := range pm.procEventCallbacks[EXIT] { + pm.evalEXITCallback(c, ev.ProcessPid) + } + delete(pm.runningPids, ev.ProcessPid) + } + pm.m.Unlock() + + case err, ok := <-pm.errors: + if !ok { + return + } + log.Errorf("process montior error: %s", err) + pm.Stop() + return + } + } + }() + + fn := func(pid int) error { + for _, c := range pm.procEventCallbacks[EXEC] { + pm.evalEXECCallback(c, uint32(pid)) + } + return nil + } + + if err := util.WithAllProcs(util.HostProc(), fn); err != nil { + return fmt.Errorf("process monitor init, scanning all process failed %s", err) + } + // enable events to be processed + pm.isInitialized = true + return nil +} + +// Subscribe register a callback and store it pm.procEventCallbacks[callback.Event] list +// this list is maintained out of order, and the return UnSubscribe function callback +// will remove the previously registered callback from the list +// +// By design : 1/ a callback object can be registered only once +// 2/ Exec callback with a Metadata (!=ANY) must be registred before the sibling Exit metadata, +// otherwise the Subscribe() will return an error as no metadata will be saved between Exec and Exit, +// please refer to GetProcessMonitor() +func (pm *ProcessMonitor) Subscribe(callback *ProcessCallback) (UnSubscribe func(), err error) { + pm.m.Lock() + defer pm.m.Unlock() + + for _, c := range pm.procEventCallbacks[callback.Event] { + if c == callback { + return nil, errors.New("same callback can't be registred twice") + } + } + + // check if the sibling Exec callback exist + if callback.Event == EXIT && callback.Metadata != ANY { + foundSibling := false + for _, c := range pm.procEventCallbacks[EXEC] { + if c.Metadata == callback.Metadata && c.Regex.String() == callback.Regex.String() { + foundSibling = true + break + } + } + if !foundSibling { + return nil, errors.New("no Exec callback has been found with the same Metadata and Regex, please Subscribe(Exec callback, Metadata) first") + } + } + + pm.procEventCallbacks[callback.Event] = append(pm.procEventCallbacks[callback.Event], callback) + + // UnSubscribe() + return func() { + pm.m.Lock() + defer pm.m.Unlock() + + // we are scanning all callbacks remove the one we registered + // and remove it from the pm.procEventCallbacks[callback.Event] list + for i, c := range pm.procEventCallbacks[callback.Event] { + if c == callback { + l := len(pm.procEventCallbacks[callback.Event]) + pm.procEventCallbacks[callback.Event][i] = pm.procEventCallbacks[callback.Event][l-1] + pm.procEventCallbacks[callback.Event] = pm.procEventCallbacks[callback.Event][:l-1] + return + } + } + }, nil +} + +func (pm *ProcessMonitor) Stop() { + pm.m.Lock() + defer pm.m.Unlock() + pm.refcount-- + if pm.refcount > 0 { + return + } + + close(pm.callbackRunnerDone) + close(pm.done) + pm.wg.Wait() + + pm.isInitialized = false +} diff --git a/pkg/process/monitor/process_monitor_test.go b/pkg/process/monitor/process_monitor_test.go new file mode 100644 index 0000000000000..8fd230453261f --- /dev/null +++ b/pkg/process/monitor/process_monitor_test.go @@ -0,0 +1,176 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package monitor + +import ( + "fmt" + "io/ioutil" + "os" + "os/exec" + "path" + "regexp" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/util" +) + +func TestProcessMonitorBasics(t *testing.T) { + // Making sure we get the same process monitor if we call it twice. + pm := GetProcessMonitor() + pm2 := GetProcessMonitor() + + require.Equal(t, pm, pm2) + + // Sanity subscribing a callback. + callback := &ProcessCallback{ + Event: EXEC, + Metadata: ANY, + Callback: func(pid uint32) {}, + } + unsubscribe, err := pm.Subscribe(callback) + require.NoError(t, err) + + // Sanity subscribing a callback. + callback2 := &ProcessCallback{ + Event: EXEC, + Metadata: ANY, + Callback: func(pid uint32) {}, + } + unsubscribe2, err := pm.Subscribe(callback2) + require.NoError(t, err) + + // duplicated subscription should fail. + _, err = pm.Subscribe(callback) + require.Error(t, err) + + // making sure unsubscribe works and does not panic for the second unsubscription. + unsubscribe() + require.NotPanics(t, unsubscribe) + unsubscribe2() + require.NotPanics(t, unsubscribe2) +} + +func TestProcessMonitorCallbacks(t *testing.T) { + pm := GetProcessMonitor() + + numberOfExecs := 0 + numberOfExits := 0 + + tmpFile, err := ioutil.TempFile("", "echo") + require.NoError(t, err) + defer os.Remove(tmpFile.Name()) + err = util.CopyFile("/bin/echo", tmpFile.Name()) + require.NoError(t, err) + + require.NoError(t, os.Chmod(tmpFile.Name(), 0500)) + + require.NoError(t, pm.Initialize()) + defer pm.Stop() + callbackExec := &ProcessCallback{ + Event: EXEC, + Metadata: NAME, + Regex: regexp.MustCompile(path.Base(tmpFile.Name())), + Callback: func(pid uint32) { + numberOfExecs++ + }, + } + callbackExit := &ProcessCallback{ + Event: EXIT, + Metadata: NAME, // we want only the captured Exec process + Regex: regexp.MustCompile(path.Base(tmpFile.Name())), + Callback: func(pid uint32) { + numberOfExits++ + }, + } + + unsubscribeExec, err := pm.Subscribe(callbackExec) + require.NoError(t, err) + unsubscribeExit, err := pm.Subscribe(callbackExit) + require.NoError(t, err) + + require.NoError(t, exec.Command(tmpFile.Name(), "test").Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs == 1 && numberOfExits == 1 + }, time.Second, time.Millisecond*200, fmt.Sprintf("didn't capture exec %d and exit %d", numberOfExecs, numberOfExits)) + + unsubscribeExit() + require.NoError(t, exec.Command(tmpFile.Name()).Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs == 2 && numberOfExits == 1 + }, time.Second, time.Millisecond*200, fmt.Sprintf("didn't capture exec %d and exit %d", numberOfExecs, numberOfExits)) + + unsubscribeExec() + require.NoError(t, exec.Command(tmpFile.Name()).Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs == 2 && numberOfExits == 1 + }, time.Second, time.Millisecond*200, fmt.Sprintf("didn't capture exec %d and exit %d", numberOfExecs, numberOfExits)) + +} + +func TestProcessMonitorRefcount(t *testing.T) { + pm := GetProcessMonitor() + require.Equal(t, pm.refcount, 0) + err := pm.Initialize() + require.Equal(t, pm.refcount, 1) + require.NoError(t, err) + pm.Stop() + require.Equal(t, pm.refcount, 0) + + pm2 := GetProcessMonitor() + + numberOfExecs := 0 + callbackExec := &ProcessCallback{ + Event: EXEC, + Metadata: ANY, + Callback: func(pid uint32) { + numberOfExecs++ + }, + } + _, err = pm.Subscribe(callbackExec) + require.NoError(t, err) + require.NoError(t, pm2.Initialize()) + require.Equal(t, pm.refcount, 1) + + oldNumberOfExecs := numberOfExecs + require.NoError(t, exec.Command("/bin/echo").Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs > oldNumberOfExecs + }, time.Second, time.Millisecond*200, fmt.Sprintf("didn't capture a new exec %d old %d", numberOfExecs, oldNumberOfExecs)) + + require.NoError(t, pm2.Initialize()) + require.Equal(t, pm.refcount, 2) + + oldNumberOfExecs = numberOfExecs + require.NoError(t, exec.Command("/bin/echo").Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs > oldNumberOfExecs + }, time.Second, time.Millisecond*200, fmt.Sprintf("didn't capture a new exec %d old %d", numberOfExecs, oldNumberOfExecs)) + + require.Equal(t, pm.refcount, 2) + pm2.Stop() + require.Equal(t, pm.refcount, 1) + + oldNumberOfExecs = numberOfExecs + require.NoError(t, exec.Command("/bin/echo").Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs > oldNumberOfExecs + }, time.Second, time.Millisecond*200, fmt.Sprintf("didn't capture a new exec %d old %d", numberOfExecs, oldNumberOfExecs)) + + pm2.Stop() + require.Equal(t, pm.refcount, 0) + + oldNumberOfExecs = numberOfExecs + require.NoError(t, exec.Command("/bin/echo").Run()) + require.Eventuallyf(t, func() bool { + return numberOfExecs == oldNumberOfExecs + }, time.Second, time.Millisecond*200, fmt.Sprintf("capture a new exec %d old %d", numberOfExecs, oldNumberOfExecs)) +} diff --git a/pkg/process/net/mocks/sys_probe_util.go b/pkg/process/net/mocks/sys_probe_util.go index fd62825d2a6c9..6626b400338d8 100644 --- a/pkg/process/net/mocks/sys_probe_util.go +++ b/pkg/process/net/mocks/sys_probe_util.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/process/config/data_scrubber.go b/pkg/process/procutil/data_scrubber.go similarity index 94% rename from pkg/process/config/data_scrubber.go rename to pkg/process/procutil/data_scrubber.go index 1bd2da7f0cf44..2ca5b1f40ff10 100644 --- a/pkg/process/config/data_scrubber.go +++ b/pkg/process/procutil/data_scrubber.go @@ -3,16 +3,14 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package config +package procutil import ( "bytes" - "fmt" "regexp" "strconv" "strings" - "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -28,7 +26,7 @@ const ( defaultCacheMaxCycles = 25 ) -// DataScrubber allows the agent to blacklist cmdline arguments that match +// DataScrubber allows the agent to disallow-list cmdline arguments that match // a list of predefined and custom words type DataScrubber struct { Enabled bool @@ -87,7 +85,7 @@ func CompileStringsToRegex(words []string) []*regexp.Regexp { valid = false break } else { - enhancedWord.WriteString(fmt.Sprintf("[^\\s=:$/]*")) + enhancedWord.WriteString("[^\\s=:$/]*") } } else { enhancedWord.WriteString(string(rune)) @@ -111,7 +109,7 @@ func CompileStringsToRegex(words []string) []*regexp.Regexp { } // createProcessKey returns an unique identifier for a given process -func createProcessKey(p *procutil.Process) string { +func createProcessKey(p *Process) string { var b bytes.Buffer b.WriteString("p:") b.WriteString(strconv.Itoa(int(p.Pid))) @@ -123,7 +121,7 @@ func createProcessKey(p *procutil.Process) string { // ScrubProcessCommand uses a cache memory to avoid scrubbing already known // process' cmdlines -func (ds *DataScrubber) ScrubProcessCommand(p *procutil.Process) []string { +func (ds *DataScrubber) ScrubProcessCommand(p *Process) []string { if ds.StripAllArguments { return ds.stripArguments(p.Cmdline) } diff --git a/pkg/process/config/data_scrubber_test.go b/pkg/process/procutil/data_scrubber_test.go similarity index 98% rename from pkg/process/config/data_scrubber_test.go rename to pkg/process/procutil/data_scrubber_test.go index c122f80c3607b..eba60223f8dd1 100644 --- a/pkg/process/config/data_scrubber_test.go +++ b/pkg/process/procutil/data_scrubber_test.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package config +package procutil import ( "flag" @@ -11,8 +11,6 @@ import ( "time" "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/process/procutil" ) func setupDataScrubber(t *testing.T) *DataScrubber { @@ -58,7 +56,7 @@ type testCase struct { } type testProcess struct { - procutil.Process + Process parsedCmdline []string } @@ -197,9 +195,9 @@ func setupTestProcesses() (fps []testProcess, sensible int) { fps = make([]testProcess, 0, len(cases)) for i, c := range cases { fps = append(fps, testProcess{ - procutil.Process{ + Process{ Pid: int32(i), - Stats: &procutil.Stats{ + Stats: &Stats{ CreateTime: time.Now().Unix(), }, Cmdline: c.cmdline, @@ -219,9 +217,9 @@ func setupTestProcessesForBench() []testProcess { fps := make([]testProcess, 0, len(cases)) for i := 0; i < nbProcesses; i++ { fps = append(fps, testProcess{ - procutil.Process{ + Process{ Pid: int32(i), - Stats: &procutil.Stats{ + Stats: &Stats{ CreateTime: time.Now().Unix(), }, Cmdline: cases[i%len(cases)].cmdline, @@ -296,7 +294,7 @@ func TestUncompilableWord(t *testing.T) { } } -func TestBlacklistedArgs(t *testing.T) { +func TestDisallowListedArgs(t *testing.T) { cases := setupSensitiveCmdlines() scrubber := setupDataScrubber(t) @@ -306,7 +304,7 @@ func TestBlacklistedArgs(t *testing.T) { } } -func TestBlacklistedArgsWhenDisabled(t *testing.T) { +func TestDisallowListedArgsWhenDisabled(t *testing.T) { cases := []struct { cmdline []string parsedCmdline []string @@ -333,7 +331,7 @@ func TestBlacklistedArgsWhenDisabled(t *testing.T) { scrubber.Enabled = false for i := range cases { - fp := &procutil.Process{Cmdline: cases[i].cmdline} + fp := &Process{Cmdline: cases[i].cmdline} cases[i].cmdline = scrubber.ScrubProcessCommand(fp) assert.Equal(t, cases[i].parsedCmdline, cases[i].cmdline) } @@ -368,13 +366,13 @@ func TestScrubberStrippingAllArgument(t *testing.T) { scrubber.StripAllArguments = true for i := range cases { - fp := &procutil.Process{Cmdline: cases[i].cmdline} + fp := &Process{Cmdline: cases[i].cmdline} cases[i].cmdline = scrubber.ScrubProcessCommand(fp) assert.Equal(t, cases[i].parsedCmdline, cases[i].cmdline) } } -func TestNoBlacklistedArgs(t *testing.T) { +func TestNoDisallowListedArgs(t *testing.T) { cases := setupInsensitiveCmdlines() scrubber := setupDataScrubber(t) diff --git a/pkg/process/procutil/mocks/probe.go b/pkg/process/procutil/mocks/probe.go index 1d5c5e2bbbc77..ceaa025a4e87e 100644 --- a/pkg/process/procutil/mocks/probe.go +++ b/pkg/process/procutil/mocks/probe.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/process/procutil/process_windows.go b/pkg/process/procutil/process_windows.go index 4ec0bb8a353ac..ac84157420a41 100644 --- a/pkg/process/procutil/process_windows.go +++ b/pkg/process/procutil/process_windows.go @@ -86,9 +86,8 @@ func (p *probe) init() { } // Need to run PdhCollectQueryData once so that we have meaningful metrics on the first run - status = pdhutil.PdhCollectQueryData(p.hQuery) - if status != 0 { - err = fmt.Errorf("PdhCollectQueryData failed with 0x%x", status) + err = pdhutil.PdhCollectQueryData(p.hQuery) + if err != nil { return } @@ -257,9 +256,9 @@ func (p *probe) enumCounters(collectMeta bool, collectStats bool) error { delete(p.instanceToPID, k) } - status := pdhutil.PdhCollectQueryData(p.hQuery) - if status != 0 { - return fmt.Errorf("PdhCollectQueryData failed with 0x%x", status) + err := pdhutil.PdhCollectQueryData(p.hQuery) + if err != nil { + return err } ignored := []string{ @@ -267,7 +266,7 @@ func (p *probe) enumCounters(collectMeta bool, collectStats bool) error { "Idle", // System Idle process } - err := p.formatter.Enum(pdhutil.CounterAllProcessPID, p.counters[pdhutil.CounterAllProcessPID], pdhutil.PDH_FMT_LARGE, ignored, valueToUint64(p.mapPID)) + err = p.formatter.Enum(pdhutil.CounterAllProcessPID, p.counters[pdhutil.CounterAllProcessPID], pdhutil.PDH_FMT_LARGE, ignored, valueToUint64(p.mapPID)) if err != nil { return err diff --git a/pkg/process/util/status.go b/pkg/process/util/status.go index 434cde89c39d6..396c2c3c6abbd 100644 --- a/pkg/process/util/status.go +++ b/pkg/process/util/status.go @@ -66,31 +66,32 @@ type MemInfo struct { // ProcessExpvars holds values fetched from the exp var server type ProcessExpvars struct { - Pid int `json:"pid"` - Uptime int `json:"uptime"` - UptimeNano float64 `json:"uptime_nano"` - MemStats MemInfo `json:"memstats"` - Version InfoVersion `json:"version"` - DockerSocket string `json:"docker_socket"` - LastCollectTime string `json:"last_collect_time"` - ProcessCount int `json:"process_count"` - ContainerCount int `json:"container_count"` - ProcessQueueSize int `json:"process_queue_size"` - RTProcessQueueSize int `json:"rtprocess_queue_size"` - ConnectionsQueueSize int `json:"connections_queue_size"` - EventQueueSize int `json:"event_queue_size"` - PodQueueSize int `json:"pod_queue_size"` - ProcessQueueBytes int `json:"process_queue_bytes"` - RTProcessQueueBytes int `json:"rtprocess_queue_bytes"` - ConnectionsQueueBytes int `json:"connections_queue_bytes"` - EventQueueBytes int `json:"event_queue_bytes"` - PodQueueBytes int `json:"pod_queue_bytes"` - ContainerID string `json:"container_id"` - ProxyURL string `json:"proxy_url"` - LogFile string `json:"log_file"` - EnabledChecks []string `json:"enabled_checks"` - Endpoints map[string][]string `json:"endpoints"` - DropCheckPayloads []string `json:"drop_check_payloads"` + Pid int `json:"pid"` + Uptime int `json:"uptime"` + UptimeNano float64 `json:"uptime_nano"` + MemStats MemInfo `json:"memstats"` + Version InfoVersion `json:"version"` + DockerSocket string `json:"docker_socket"` + LastCollectTime string `json:"last_collect_time"` + ProcessCount int `json:"process_count"` + ContainerCount int `json:"container_count"` + ProcessQueueSize int `json:"process_queue_size"` + RTProcessQueueSize int `json:"rtprocess_queue_size"` + ConnectionsQueueSize int `json:"connections_queue_size"` + EventQueueSize int `json:"event_queue_size"` + PodQueueSize int `json:"pod_queue_size"` + ProcessQueueBytes int `json:"process_queue_bytes"` + RTProcessQueueBytes int `json:"rtprocess_queue_bytes"` + ConnectionsQueueBytes int `json:"connections_queue_bytes"` + EventQueueBytes int `json:"event_queue_bytes"` + PodQueueBytes int `json:"pod_queue_bytes"` + ContainerID string `json:"container_id"` + ProxyURL string `json:"proxy_url"` + LogFile string `json:"log_file"` + EnabledChecks []string `json:"enabled_checks"` + Endpoints map[string][]string `json:"endpoints"` + DropCheckPayloads []string `json:"drop_check_payloads"` + SystemProbeProcessModuleEnabled bool `json:"system_probe_process_module_enabled"` } // Status holds runtime information from process-agent diff --git a/pkg/process/util/status_test.go b/pkg/process/util/status_test.go index 2097502b8ad9c..fb02427d544d3 100644 --- a/pkg/process/util/status_test.go +++ b/pkg/process/util/status_test.go @@ -51,18 +51,19 @@ func TestGetStatus(t *testing.T) { "fakeAPIKey", }, }, - LastCollectTime: "2022-02-011 10:10:00", - DockerSocket: "/var/run/docker.sock", - ProcessCount: 30, - ContainerCount: 2, - ProcessQueueSize: 1, - RTProcessQueueSize: 3, - ConnectionsQueueSize: 4, - PodQueueSize: 5, - ProcessQueueBytes: 2 * 1024, - RTProcessQueueBytes: 512, - ConnectionsQueueBytes: 8 * 1024, - PodQueueBytes: 4 * 1024, + LastCollectTime: "2022-02-011 10:10:00", + DockerSocket: "/var/run/docker.sock", + ProcessCount: 30, + ContainerCount: 2, + ProcessQueueSize: 1, + RTProcessQueueSize: 3, + ConnectionsQueueSize: 4, + PodQueueSize: 5, + ProcessQueueBytes: 2 * 1024, + RTProcessQueueBytes: 512, + ConnectionsQueueBytes: 8 * 1024, + PodQueueBytes: 4 * 1024, + SystemProbeProcessModuleEnabled: true, } // Feature detection needs to run before host methods are called. During runtime, feature detection happens diff --git a/pkg/proto/utils/workloadmeta.go b/pkg/proto/utils/workloadmeta.go index f9bbab10edc6b..c69dd64be1d50 100644 --- a/pkg/proto/utils/workloadmeta.go +++ b/pkg/proto/utils/workloadmeta.go @@ -7,11 +7,14 @@ package utils import ( "fmt" + "time" pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" "github.com/DataDog/datadog-agent/pkg/workloadmeta" ) +var emptyTimestampUnix = new(time.Time).Unix() + // Conversions from Workloadmeta types to protobuf // ProtobufEventFromWorkloadmetaEvent converts the given workloadmeta.Event into protobuf @@ -416,6 +419,53 @@ func WorkloadmetaFilterFromProtoFilter(protoFilter *pb.WorkloadmetaFilter) (*wor return workloadmeta.NewFilter(kinds, source, eventType), nil } +// WorkloadmetaEventFromProtoEvent converts the given protobuf workloadmeta event into a workloadmeta.Event +func WorkloadmetaEventFromProtoEvent(protoEvent *pb.WorkloadmetaEvent) (workloadmeta.Event, error) { + if protoEvent == nil { + return workloadmeta.Event{}, nil + } + + eventType, err := toWorkloadmetaEventType(protoEvent.Type) + if err != nil { + return workloadmeta.Event{}, err + } + + if protoEvent.Container != nil { + container, err := toWorkloadmetaContainer(protoEvent.Container) + if err != nil { + return workloadmeta.Event{}, err + } + + return workloadmeta.Event{ + Type: eventType, + Entity: container, + }, nil + + } else if protoEvent.KubernetesPod != nil { + kubernetesPod, err := toWorkloadmetaKubernetesPod(protoEvent.KubernetesPod) + if err != nil { + return workloadmeta.Event{}, err + } + + return workloadmeta.Event{ + Type: eventType, + Entity: kubernetesPod, + }, nil + } else if protoEvent.EcsTask != nil { + ecsTask, err := toWorkloadmetaECSTask(protoEvent.EcsTask) + if err != nil { + return workloadmeta.Event{}, err + } + + return workloadmeta.Event{ + Type: eventType, + Entity: ecsTask, + }, nil + } + + return workloadmeta.Event{}, fmt.Errorf("unknown entity") +} + func toWorkloadmetaKind(protoKind pb.WorkloadmetaKind) (workloadmeta.Kind, error) { switch protoKind { case pb.WorkloadmetaKind_CONTAINER: @@ -456,3 +506,255 @@ func toWorkloadmetaEventType(protoEventType pb.WorkloadmetaEventType) (workloadm return workloadmeta.EventTypeAll, fmt.Errorf("unknown event type: %s", protoEventType) } + +func toWorkloadmetaContainer(protoContainer *pb.Container) (*workloadmeta.Container, error) { + entityId, err := toWorkloadmetaEntityID(protoContainer.EntityId) + if err != nil { + return nil, err + } + + runtime, err := toWorkloadmetaContainerRuntime(protoContainer.Runtime) + if err != nil { + return nil, err + } + + var ports []workloadmeta.ContainerPort + for _, port := range protoContainer.Ports { + ports = append(ports, toWorkloadmetaContainerPort(port)) + } + + state, err := toWorkloadmetaContainerState(protoContainer.State) + if err != nil { + return nil, err + } + + return &workloadmeta.Container{ + EntityID: entityId, + EntityMeta: toWorkloadmetaEntityMeta(protoContainer.EntityMeta), + EnvVars: protoContainer.EnvVars, + Hostname: protoContainer.Hostname, + Image: toWorkloadmetaImage(protoContainer.Image), + NetworkIPs: protoContainer.NetworkIps, + PID: int(protoContainer.Pid), + Ports: ports, + Runtime: runtime, + State: state, + CollectorTags: protoContainer.CollectorTags, + }, nil +} + +func toWorkloadmetaContainerPort(protoPort *pb.ContainerPort) workloadmeta.ContainerPort { + return workloadmeta.ContainerPort{ + Name: protoPort.Name, + Port: int(protoPort.Port), + Protocol: protoPort.Protocol, + } +} + +func toWorkloadmetaEntityID(protoEntityID *pb.WorkloadmetaEntityId) (workloadmeta.EntityID, error) { + kind, err := toWorkloadmetaKind(protoEntityID.Kind) + if err != nil { + return workloadmeta.EntityID{}, err + } + + return workloadmeta.EntityID{ + Kind: kind, + ID: protoEntityID.Id, + }, nil +} + +func toWorkloadmetaEntityMeta(protoEntityMeta *pb.EntityMeta) workloadmeta.EntityMeta { + return workloadmeta.EntityMeta{ + Name: protoEntityMeta.Name, + Namespace: protoEntityMeta.Namespace, + Annotations: protoEntityMeta.Annotations, + Labels: protoEntityMeta.Labels, + } +} + +func toWorkloadmetaImage(protoImage *pb.ContainerImage) workloadmeta.ContainerImage { + return workloadmeta.ContainerImage{ + ID: protoImage.Id, + RawName: protoImage.RawName, + Name: protoImage.Name, + ShortName: protoImage.ShortName, + Tag: protoImage.Tag, + } +} + +func toWorkloadmetaContainerRuntime(protoRuntime pb.Runtime) (workloadmeta.ContainerRuntime, error) { + switch protoRuntime { + case pb.Runtime_DOCKER: + return workloadmeta.ContainerRuntimeDocker, nil + case pb.Runtime_CONTAINERD: + return workloadmeta.ContainerRuntimeContainerd, nil + case pb.Runtime_PODMAN: + return workloadmeta.ContainerRuntimePodman, nil + case pb.Runtime_CRIO: + return workloadmeta.ContainerRuntimeCRIO, nil + case pb.Runtime_GARDEN: + return workloadmeta.ContainerRuntimeGarden, nil + case pb.Runtime_ECS_FARGATE: + return workloadmeta.ContainerRuntimeECSFargate, nil + } + + return workloadmeta.ContainerRuntimeDocker, fmt.Errorf("unknown runtime: %s", protoRuntime) +} + +func toWorkloadmetaContainerState(protoContainerState *pb.ContainerState) (workloadmeta.ContainerState, error) { + status, err := toWorkloadmetaContainerStatus(protoContainerState.Status) + if err != nil { + return workloadmeta.ContainerState{}, err + } + + health, err := toWorkloadmetaContainerHealth(protoContainerState.Health) + if err != nil { + return workloadmeta.ContainerState{}, err + } + + containerState := workloadmeta.ContainerState{ + Running: protoContainerState.Running, + Status: status, + Health: health, + } + + if protoContainerState.CreatedAt != emptyTimestampUnix { + containerState.CreatedAt = time.Unix(protoContainerState.CreatedAt, 0) + } + + if protoContainerState.StartedAt != emptyTimestampUnix { + containerState.StartedAt = time.Unix(protoContainerState.StartedAt, 0) + } + + if protoContainerState.FinishedAt != emptyTimestampUnix { + containerState.FinishedAt = time.Unix(protoContainerState.FinishedAt, 0) + } + + if protoContainerState.ExitCode != 0 { + containerState.ExitCode = &protoContainerState.ExitCode + } + + return containerState, nil +} + +func toWorkloadmetaContainerStatus(protoContainerStatus pb.ContainerStatus) (workloadmeta.ContainerStatus, error) { + switch protoContainerStatus { + case pb.ContainerStatus_CONTAINER_STATUS_UNKNOWN: + return workloadmeta.ContainerStatusUnknown, nil + case pb.ContainerStatus_CONTAINER_STATUS_CREATED: + return workloadmeta.ContainerStatusCreated, nil + case pb.ContainerStatus_CONTAINER_STATUS_RUNNING: + return workloadmeta.ContainerStatusRunning, nil + case pb.ContainerStatus_CONTAINER_STATUS_RESTARTING: + return workloadmeta.ContainerStatusRestarting, nil + case pb.ContainerStatus_CONTAINER_STATUS_PAUSED: + return workloadmeta.ContainerStatusPaused, nil + case pb.ContainerStatus_CONTAINER_STATUS_STOPPED: + return workloadmeta.ContainerStatusStopped, nil + } + + return workloadmeta.ContainerStatusUnknown, fmt.Errorf("unknown container status: %s", protoContainerStatus) +} + +func toWorkloadmetaContainerHealth(protoContainerHealth pb.ContainerHealth) (workloadmeta.ContainerHealth, error) { + switch protoContainerHealth { + case pb.ContainerHealth_CONTAINER_HEALTH_UNKNOWN: + return workloadmeta.ContainerHealthUnknown, nil + case pb.ContainerHealth_CONTAINER_HEALTH_HEALTHY: + return workloadmeta.ContainerHealthHealthy, nil + case pb.ContainerHealth_CONTAINER_HEALTH_UNHEALTHY: + return workloadmeta.ContainerHealthUnhealthy, nil + } + + return workloadmeta.ContainerHealthUnknown, fmt.Errorf("unknown container health: %s", protoContainerHealth) +} + +func toWorkloadmetaKubernetesPod(protoKubernetesPod *pb.KubernetesPod) (*workloadmeta.KubernetesPod, error) { + entityId, err := toWorkloadmetaEntityID(protoKubernetesPod.EntityId) + if err != nil { + return nil, err + } + + var owners []workloadmeta.KubernetesPodOwner + for _, protoPodOwner := range protoKubernetesPod.Owners { + owners = append(owners, toWorkloadmetaPodOwner(protoPodOwner)) + } + + var containers []workloadmeta.OrchestratorContainer + for _, protoContainer := range protoKubernetesPod.Containers { + containers = append(containers, toWorkloadmetaOrchestratorContainer(protoContainer)) + } + + return &workloadmeta.KubernetesPod{ + EntityID: entityId, + EntityMeta: toWorkloadmetaEntityMeta(protoKubernetesPod.EntityMeta), + Owners: owners, + PersistentVolumeClaimNames: protoKubernetesPod.PersistentVolumeClaimNames, + Containers: containers, + Ready: protoKubernetesPod.Ready, + Phase: protoKubernetesPod.Phase, + IP: protoKubernetesPod.Ip, + PriorityClass: protoKubernetesPod.PriorityClass, + QOSClass: protoKubernetesPod.QosClass, + KubeServices: protoKubernetesPod.KubeServices, + NamespaceLabels: protoKubernetesPod.NamespaceLabels, + }, nil +} + +func toWorkloadmetaPodOwner(protoPodOwner *pb.KubernetesPodOwner) workloadmeta.KubernetesPodOwner { + return workloadmeta.KubernetesPodOwner{ + Kind: protoPodOwner.Kind, + Name: protoPodOwner.Name, + ID: protoPodOwner.Id, + } +} + +func toWorkloadmetaOrchestratorContainer(protoOrchestratorContainer *pb.OrchestratorContainer) workloadmeta.OrchestratorContainer { + return workloadmeta.OrchestratorContainer{ + ID: protoOrchestratorContainer.Id, + Name: protoOrchestratorContainer.Name, + Image: toWorkloadmetaImage(protoOrchestratorContainer.Image), + } +} + +func toWorkloadmetaECSTask(protoECSTask *pb.ECSTask) (*workloadmeta.ECSTask, error) { + entityId, err := toWorkloadmetaEntityID(protoECSTask.EntityId) + if err != nil { + return nil, err + } + + launchType, err := toECSLaunchType(protoECSTask.LaunchType) + if err != nil { + return nil, err + } + + var containers []workloadmeta.OrchestratorContainer + for _, protoContainer := range protoECSTask.Containers { + containers = append(containers, toWorkloadmetaOrchestratorContainer(protoContainer)) + } + + return &workloadmeta.ECSTask{ + EntityID: entityId, + EntityMeta: toWorkloadmetaEntityMeta(protoECSTask.EntityMeta), + Tags: protoECSTask.Tags, + ContainerInstanceTags: protoECSTask.ContainerInstanceTags, + ClusterName: protoECSTask.ClusterName, + Region: protoECSTask.Region, + AvailabilityZone: protoECSTask.AvailabilityZone, + Family: protoECSTask.Family, + Version: protoECSTask.Version, + LaunchType: launchType, + Containers: containers, + }, nil +} + +func toECSLaunchType(protoLaunchType pb.ECSLaunchType) (workloadmeta.ECSLaunchType, error) { + switch protoLaunchType { + case pb.ECSLaunchType_EC2: + return workloadmeta.ECSLaunchTypeEC2, nil + case pb.ECSLaunchType_FARGATE: + return workloadmeta.ECSLaunchTypeFargate, nil + } + + return workloadmeta.ECSLaunchTypeEC2, fmt.Errorf("unknown launch type: %s", protoLaunchType) +} diff --git a/pkg/proto/utils/workloadmeta_test.go b/pkg/proto/utils/workloadmeta_test.go index e4add0233d891..ebaeb28aab12c 100644 --- a/pkg/proto/utils/workloadmeta_test.go +++ b/pkg/proto/utils/workloadmeta_test.go @@ -17,18 +17,21 @@ import ( "github.com/DataDog/datadog-agent/pkg/workloadmeta" ) -func TestProtobufEventFromWorkloadmetaEvent(t *testing.T) { - createdAt := time.Now() +// This function tests both the function that converts a workloadmeta.Event into +// protobuf and the one that converts the protobuf into workloadmeta.Event. This +// is to avoid duplicating all the events and protobufs in 2 functions. +func TestConversions(t *testing.T) { + createdAt := time.Unix(1669071600, 0) tests := []struct { - name string - event workloadmeta.Event - expectedProtobuf *pb.WorkloadmetaEvent - expectsError bool + name string + workloadmetaEvent workloadmeta.Event + protoWorkloadmetaEvent *pb.WorkloadmetaEvent + expectsError bool }{ { name: "event with a container", - event: workloadmeta.Event{ + workloadmetaEvent: workloadmeta.Event{ Type: workloadmeta.EventTypeSet, Entity: &workloadmeta.Container{ EntityID: workloadmeta.EntityID{ @@ -82,7 +85,7 @@ func TestProtobufEventFromWorkloadmetaEvent(t *testing.T) { }, }, }, - expectedProtobuf: &pb.WorkloadmetaEvent{ + protoWorkloadmetaEvent: &pb.WorkloadmetaEvent{ Type: pb.WorkloadmetaEventType_EVENT_TYPE_SET, Container: &pb.Container{ EntityId: &pb.WorkloadmetaEntityId{ @@ -140,7 +143,7 @@ func TestProtobufEventFromWorkloadmetaEvent(t *testing.T) { }, { name: "event with a Kubernetes pod", - event: workloadmeta.Event{ + workloadmetaEvent: workloadmeta.Event{ Type: workloadmeta.EventTypeSet, Entity: &workloadmeta.KubernetesPod{ EntityID: workloadmeta.EntityID{ @@ -193,7 +196,7 @@ func TestProtobufEventFromWorkloadmetaEvent(t *testing.T) { }, }, }, - expectedProtobuf: &pb.WorkloadmetaEvent{ + protoWorkloadmetaEvent: &pb.WorkloadmetaEvent{ Type: pb.WorkloadmetaEventType_EVENT_TYPE_SET, KubernetesPod: &pb.KubernetesPod{ EntityId: &pb.WorkloadmetaEntityId{ @@ -250,7 +253,7 @@ func TestProtobufEventFromWorkloadmetaEvent(t *testing.T) { }, { name: "event with an ECS task", - event: workloadmeta.Event{ + workloadmetaEvent: workloadmeta.Event{ Type: workloadmeta.EventTypeSet, Entity: &workloadmeta.ECSTask{ EntityID: workloadmeta.EntityID{ @@ -294,7 +297,7 @@ func TestProtobufEventFromWorkloadmetaEvent(t *testing.T) { }, }, }, - expectedProtobuf: &pb.WorkloadmetaEvent{ + protoWorkloadmetaEvent: &pb.WorkloadmetaEvent{ Type: pb.WorkloadmetaEventType_EVENT_TYPE_SET, EcsTask: &pb.ECSTask{ EntityId: &pb.WorkloadmetaEntityId{ @@ -342,23 +345,35 @@ func TestProtobufEventFromWorkloadmetaEvent(t *testing.T) { }, { name: "invalid event", - event: workloadmeta.Event{ + workloadmetaEvent: workloadmeta.Event{ Type: -1, // invalid Entity: &workloadmeta.Container{}, }, + protoWorkloadmetaEvent: &pb.WorkloadmetaEvent{ + Type: -1, // invalid + Container: &pb.Container{}, + }, expectsError: true, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - resultProtobuf, err := ProtobufEventFromWorkloadmetaEvent(test.event) + resultProtobuf, err := ProtobufEventFromWorkloadmetaEvent(test.workloadmetaEvent) + + if test.expectsError { + assert.Error(t, err) + } else { + assert.NoError(t, err) + assert.True(t, proto.Equal(resultProtobuf, test.protoWorkloadmetaEvent)) + } + resultWorkloadmetaEvent, err := WorkloadmetaEventFromProtoEvent(test.protoWorkloadmetaEvent) if test.expectsError { assert.Error(t, err) } else { assert.NoError(t, err) - assert.True(t, proto.Equal(resultProtobuf, test.expectedProtobuf)) + assert.Equal(t, test.workloadmetaEvent, resultWorkloadmetaEvent) } }) } diff --git a/pkg/remoteconfig/state/configs.go b/pkg/remoteconfig/state/configs.go index af6b06bf6ceda..7051a342969f6 100644 --- a/pkg/remoteconfig/state/configs.go +++ b/pkg/remoteconfig/state/configs.go @@ -10,7 +10,7 @@ import ( "errors" "fmt" - "github.com/theupdateframework/go-tuf/data" + "github.com/DataDog/go-tuf/data" ) /* @@ -22,13 +22,15 @@ import ( 4. Add a method on the `Repository` to retrieved typed configs for the product. */ -var allProducts = []string{ProductAPMSampling, ProductCWSDD, ProductASMFeatures, ProductASMDD, ProductASMData} +var allProducts = []string{ProductAPMSampling, ProductCWSDD, ProductCWSCustom, ProductASMFeatures, ProductASMDD, ProductASMData} const ( // ProductAPMSampling is the apm sampling product ProductAPMSampling = "APM_SAMPLING" // ProductCWSDD is the cloud workload security product managed by datadog employees ProductCWSDD = "CWS_DD" + // ProductCWSCustom is the cloud workload security product managed by datadog customers + ProductCWSCustom = "CWS_CUSTOM" // ProductASMFeatures is the ASM product used form ASM activation through remote config ProductASMFeatures = "ASM_FEATURES" // ProductASMDD is the application security monitoring product managed by datadog employees @@ -50,6 +52,8 @@ func parseConfig(product string, raw []byte, metadata Metadata) (interface{}, er c, err = parseASMFeaturesConfig(raw, metadata) case ProductCWSDD: c, err = parseConfigCWSDD(raw, metadata) + case ProductCWSCustom: + c, err = parseConfigCWSCustom(raw, metadata) case ProductASMDD: c, err = parseConfigASMDD(raw, metadata) case ProductASMData: @@ -128,6 +132,39 @@ func (r *Repository) CWSDDConfigs() map[string]ConfigCWSDD { return typedConfigs } +// ConfigCWSCustom is a deserialized CWS Custom configuration file along with its +// associated remote config metadata +type ConfigCWSCustom struct { + Config []byte + Metadata Metadata +} + +func parseConfigCWSCustom(data []byte, metadata Metadata) (ConfigCWSCustom, error) { + return ConfigCWSCustom{ + Config: data, + Metadata: metadata, + }, nil +} + +// CWSCustomConfigs returns the currently active CWSCustom config files +func (r *Repository) CWSCustomConfigs() map[string]ConfigCWSCustom { + typedConfigs := make(map[string]ConfigCWSCustom) + + configs := r.getConfigs(ProductCWSCustom) + + for path, conf := range configs { + // We control this, so if this has gone wrong something has gone horribly wrong + typed, ok := conf.(ConfigCWSCustom) + if !ok { + panic("unexpected config stored as CWSDD Config") + } + + typedConfigs[path] = typed + } + + return typedConfigs +} + // ConfigASMDD is a deserialized ASM DD configuration file along with its // associated remote config metadata type ConfigASMDD struct { diff --git a/pkg/remoteconfig/state/go.mod b/pkg/remoteconfig/state/go.mod index c51b42955b84f..d9ddc80826405 100644 --- a/pkg/remoteconfig/state/go.mod +++ b/pkg/remoteconfig/state/go.mod @@ -3,13 +3,13 @@ module github.com/DataDog/datadog-agent/pkg/remoteconfig/state go 1.18 require ( + github.com/DataDog/go-tuf v0.3.0--fix-localmeta-fork + github.com/secure-systems-lab/go-securesystemslib v0.4.0 github.com/stretchr/testify v1.8.1 - github.com/theupdateframework/go-tuf v0.3.0 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/secure-systems-lab/go-securesystemslib v0.3.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/remoteconfig/state/go.sum b/pkg/remoteconfig/state/go.sum index 9ddfc6b8a549a..b084b40a593e8 100644 --- a/pkg/remoteconfig/state/go.sum +++ b/pkg/remoteconfig/state/go.sum @@ -1,3 +1,5 @@ +github.com/DataDog/go-tuf v0.3.0--fix-localmeta-fork h1:yBq5PrAtrM4yVeSzQ+bn050+Ysp++RKF1QmtkL4VqvU= +github.com/DataDog/go-tuf v0.3.0--fix-localmeta-fork/go.mod h1:yA5JwkZsHTLuqq3zaRgUQf35DfDkpOZqgtBqHKpwrBs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -45,8 +47,9 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/secure-systems-lab/go-securesystemslib v0.3.1 h1:LJuyMziazadwmQRRu1M7GMUo5S1oH1+YxU9FjuSFU8k= github.com/secure-systems-lab/go-securesystemslib v0.3.1/go.mod h1:o8hhjkbNl2gOamKUA/eNW3xUrntHT9L4W89W1nfj43U= +github.com/secure-systems-lab/go-securesystemslib v0.4.0 h1:b23VGrQhTA8cN2CbBw7/FulN9fTtqYUdS5+Oxzt+DUE= +github.com/secure-systems-lab/go-securesystemslib v0.4.0/go.mod h1:FGBZgq2tXWICsxWQW1msNf49F0Pf2Op5Htayx335Qbs= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -57,8 +60,6 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/theupdateframework/go-tuf v0.3.0 h1:od2sc5+BSkKZhmUG2o2rmruy0BGSmhrbDhCnpxh87X8= -github.com/theupdateframework/go-tuf v0.3.0/go.mod h1:E5XP0wXitrFUHe4b8cUcAAdxBW4LbfnqF4WXXGLgWNo= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= diff --git a/pkg/remoteconfig/state/repository.go b/pkg/remoteconfig/state/repository.go index 18b1b76213645..2e8e3331c6883 100644 --- a/pkg/remoteconfig/state/repository.go +++ b/pkg/remoteconfig/state/repository.go @@ -13,7 +13,7 @@ import ( "log" "strings" - "github.com/theupdateframework/go-tuf/data" + "github.com/DataDog/go-tuf/data" ) var ( diff --git a/pkg/remoteconfig/state/repository_test.go b/pkg/remoteconfig/state/repository_test.go index 88693e5ca9e1d..80bee0d40dde6 100644 --- a/pkg/remoteconfig/state/repository_test.go +++ b/pkg/remoteconfig/state/repository_test.go @@ -6,9 +6,11 @@ package state import ( + "encoding/base64" "encoding/json" "testing" + "github.com/secure-systems-lab/go-securesystemslib/cjson" "github.com/stretchr/testify/assert" ) @@ -703,6 +705,21 @@ func TestUpdateWithTwoProducts(t *testing.T) { assert.Contains(t, state.CachedFiles, expectedCachedFileAPMSampling) } +func createRawTestData(targetFileBase string, targetsPayload string) []byte { + payload := base64.StdEncoding.EncodeToString([]byte(targetsPayload)) + targets := make(map[string]interface{}) + if err := json.Unmarshal([]byte(targetFileBase), &targets); err != nil { + panic(err) + } + + targets["targets"] = payload + marshalled, err := cjson.EncodeCanonical(targets) + if err != nil { + panic(err) + } + return marshalled +} + // These tests involve generated JSON responses that the remote config service would send. They // were primarily created to assist tracer teams with unit tests around TUF integrity checks, // but they apply to agent clients as well, so we include them here as an extra layer of protection. @@ -727,12 +744,34 @@ func TestPreGeneratedIntegrityChecks(t *testing.T) { } tests := []testData{ - {description: "valid", isError: false, rawUpdate: []byte(`{"targets":"eyJzaWduZWQiOnsiX3R5cGUiOiJ0YXJnZXRzIiwiY3VzdG9tIjp7Im9wYXF1ZV9iYWNrZW5kX3N0YXRlIjoiZXlKbWIyOGlPaUFpWW1GeUluMD0ifSwiZXhwaXJlcyI6IjIwMjItMTItMjlUMDg6NTg6MzJaIiwic3BlY192ZXJzaW9uIjoiMS4wIiwidGFyZ2V0cyI6eyJkYXRhZG9nLzIvQVNNX0ZFQVRVUkVTL0FTTV9GRUFUVVJFUy1iYXNlL2NvbmZpZyI6eyJjdXN0b20iOnsidiI6MX0sImhhc2hlcyI6eyJzaGEyNTYiOiI5MjIxZGZkOWY2MDg0MTUxMzEzZTNlNDkyMDEyMWFlODQzNjE0YzMyOGU0NjMwZWEzNzFiYTY2ZTJmMTVhMGE2In0sImxlbmd0aCI6NDd9fSwidmVyc2lvbiI6MX0sInNpZ25hdHVyZXMiOlt7ImtleWlkIjoiZWQ3NjcyYzlhMjRhYmRhNzg4NzJlZTMyZWU3MWM3Y2IxZDUyMzVlOGRiNGVjYmYxY2EyOGI5YzUwZWI3NWQ5ZSIsInNpZyI6IjlhNWYyOTAzNTkzNTdiZmJkOTk3NzJkYzFiYTAzYzc3N2E2NjhkZjA4YzRiYmQ4MDdkMGI5ZGI2ZDUyYzNhOTgyZmY3ODA0MTY0MGUxZWMwZDU1ZDQxNDBkMGE3YzViOGRhYjgwM2NlM2ZjMDk1MzFlNWJjZWJlMTkwMTZiNjA0In1dfQ==","target_files":[{"path":"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config","raw":"ewogICAgImFzbSI6IHsKICAgICAgICAiZW5hYmxlZCI6IHRydWUKICAgIH0KfQo="}],"client_configs":["datadog/2/ASM_FEATURES/ASM_FEATURES-base/config"]}`)}, - {description: "invalid tuf targets signature", isError: true, rawUpdate: []byte(`{"targets":"eyJzaWduZWQiOnsiX3R5cGUiOiJ0YXJnZXRzIiwic3BlY192ZXJzaW9uIjoiMS4wIiwidmVyc2lvbiI6OTk5LCJleHBpcmVzIjoiMjAyMi0xMC0yN1QxNjo1Mzo1N1oiLCJ0YXJnZXRzIjp7ImRhdGFkb2cvMi9GRUFUVVJFUy9GRUFUVVJFUy1iYXNlL2NvbmZpZyI6eyJsZW5ndGgiOjQ3LCJoYXNoZXMiOnsic2hhMjU2IjoiOTIyMWRmZDlmNjA4NDE1MTMxM2UzZTQ5MjAxMjFhZTg0MzYxNGMzMjhlNDYzMGVhMzcxYmE2NmUyZjE1YTBhNiJ9LCJjdXN0b20iOnsidiI6MX19fSwiY3VzdG9tIjp7Im9wYXF1ZV9iYWNrZW5kX3N0YXRlIjoiZXlKbWIyOGlPaUFpWW1GeUluMD0ifX0sInNpZ25hdHVyZXMiOlt7ImtleWlkIjoiZWQ3NjcyYzlhMjRhYmRhNzg4NzJlZTMyZWU3MWM3Y2IxZDUyMzVlOGRiNGVjYmYxY2EyOGI5YzUwZWI3NWQ5ZSIsInNpZyI6ImQ3NDhiNjM5ODk1M2I4YjA5Zjc5NzMwYjZiOTc5NmQ1YzY3ZjIyYjY3Y2QxNzgyMmY2MjYyOThmNTUyNDllYzk0YmQ4YTYyY2IyMjBhMjRiZGJhMmJjZGFlM2NhMGQ0ZDhkOGE5MWNjZDY1NzFjYTYxNzUwOWQ0MmI1MzI2NjAzIn1dfQ==","target_files":[{"path":"datadog/2/ASM_FEATURES/asm_features_activation/config","raw":"ewogICAgImFzbSI6IHsKICAgICAgICAiZW5hYmxlZCI6IHRydWUKICAgIH0KfQo="}],"client_configs":["datadog/2/ASM_FEATURES/asm_features_activation/config"]}`)}, - {description: "tuf targets signed with invalid key", isError: true, rawUpdate: []byte(`{"targets":"eyJzaWduZWQiOnsiX3R5cGUiOiJ0YXJnZXRzIiwiY3VzdG9tIjp7Im9wYXF1ZV9iYWNrZW5kX3N0YXRlIjoiZXlKbWIyOGlPaUFpWW1GeUluMD0ifSwiZXhwaXJlcyI6IjIwMjItMTItMjlUMDg6NTg6MzJaIiwic3BlY192ZXJzaW9uIjoiMS4wIiwidGFyZ2V0cyI6eyJkYXRhZG9nLzIvQVNNX0ZFQVRVUkVTL0FTTV9GRUFUVVJFUy1iYXNlL2NvbmZpZyI6eyJjdXN0b20iOnsidiI6MX0sImhhc2hlcyI6eyJzaGEyNTYiOiI5MjIxZGZkOWY2MDg0MTUxMzEzZTNlNDkyMDEyMWFlODQzNjE0YzMyOGU0NjMwZWEzNzFiYTY2ZTJmMTVhMGE2In0sImxlbmd0aCI6NDd9fSwidmVyc2lvbiI6MX0sInNpZ25hdHVyZXMiOlt7ImtleWlkIjoiOTM5NjFhZWU2Njk2MWQyMzJlMDAwOGEzYmIxMTY4NzliYzVjMzM3NWFlOTliNWZiOTliYTA5MGM0ZDJmYTIzYiIsInNpZyI6IjA5ZWZjN2MxNGUxMzc0M2Y1MWE1ZWI1ODZjYTFlMzY3NWVmZmFiNjk2NjlmYzVkNTY0MGI4Y2I3NGI0NWQ0MTY4ODZhODkwYzNkOGI0ODFhZGM1Y2Y5ZGZkZTYxZDlhMzUxYzcxNGY2MzUzY2ViZTFmZWZhOTNmMjhmNDI5OTBhIn1dfQ==","target_files":[{"path":"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config","raw":"ewogICAgImFzbSI6IHsKICAgICAgICAiZW5hYmxlZCI6IHRydWUKICAgIH0KfQo="}],"client_configs":["datadog/2/ASM_FEATURES/ASM_FEATURES-base/config"]}`)}, - {description: "missing target file in tuf targets", isError: true, rawUpdate: []byte(`{"targets":"eyJzaWduZWQiOnsiX3R5cGUiOiJ0YXJnZXRzIiwiY3VzdG9tIjp7Im9wYXF1ZV9iYWNrZW5kX3N0YXRlIjoiZXlKbWIyOGlPaUFpWW1GeUluMD0ifSwiZXhwaXJlcyI6IjIwMjItMTItMjlUMDg6NTg6MzJaIiwic3BlY192ZXJzaW9uIjoiMS4wIiwidGFyZ2V0cyI6e30sInZlcnNpb24iOjF9LCJzaWduYXR1cmVzIjpbeyJrZXlpZCI6ImVkNzY3MmM5YTI0YWJkYTc4ODcyZWUzMmVlNzFjN2NiMWQ1MjM1ZThkYjRlY2JmMWNhMjhiOWM1MGViNzVkOWUiLCJzaWciOiI4N2U3N2JjNTJlZjNhNWM4OGZlNGY5MTVlYTgxNjVjNTM4ODJhYTUzZDcyMjRiYWZiZTA2ZmFhMDYxYzc5MDA5YjkzZjEyYTk4NTM3ZmY3ZGVhMGZhYTI2ZGUxZjdjOWYzN2Q0YjAzZTFmY2U0ZjFjMDQxZjBmMzBjOGNmYmUwZSJ9XX0=","target_files":[{"path":"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config","raw":"ewogICAgImFzbSI6IHsKICAgICAgICAiZW5hYmxlZCI6IHRydWUKICAgIH0KfQo="}],"client_configs":["datadog/2/ASM_FEATURES/ASM_FEATURES-base/config"]}`)}, - {description: "target file hash incorrect in tuf targets", isError: true, rawUpdate: []byte(`{"targets":"eyJzaWduZWQiOnsiX3R5cGUiOiJ0YXJnZXRzIiwiY3VzdG9tIjp7Im9wYXF1ZV9iYWNrZW5kX3N0YXRlIjoiZXlKbWIyOGlPaUFpWW1GeUluMD0ifSwiZXhwaXJlcyI6IjIwMjItMTItMjlUMDg6NTg6MzJaIiwic3BlY192ZXJzaW9uIjoiMS4wIiwidGFyZ2V0cyI6eyJkYXRhZG9nLzIvQVNNX0ZFQVRVUkVTL0FTTV9GRUFUVVJFUy1iYXNlL2NvbmZpZyI6eyJjdXN0b20iOnsidiI6MX0sImhhc2hlcyI6eyJzaGEyNTYiOiI2NjYxNmI2NTY4NjE3MzY4In0sImxlbmd0aCI6NDd9fSwidmVyc2lvbiI6MX0sInNpZ25hdHVyZXMiOlt7ImtleWlkIjoiZWQ3NjcyYzlhMjRhYmRhNzg4NzJlZTMyZWU3MWM3Y2IxZDUyMzVlOGRiNGVjYmYxY2EyOGI5YzUwZWI3NWQ5ZSIsInNpZyI6IjkzYzQ3MWMxMWM3NzM1ZDViZmI4OTJhYmNlY2I5MGYyYzFhZTJlNDlmODNlYzdiMmNmOGYxZmZiZTY4MmEwM2E5OGI0MTA2NWRlOWVjZmM1MzZkYzU5Njk2NjM4NjUxYWEyYmNlOWNiYzViMzI3YmUwYzM2ZGRhOWZhZTBhMjAzIn1dfQ==","target_files":[{"path":"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config","raw":"ewogICAgImFzbSI6IHsKICAgICAgICAiZW5hYmxlZCI6IHRydWUKICAgIH0KfQo="}],"client_configs":["datadog/2/ASM_FEATURES/ASM_FEATURES-base/config"]}`)}, - {description: "target file length incorrect in tuf targets", isError: true, rawUpdate: []byte(`{"targets":"eyJzaWduZWQiOnsiX3R5cGUiOiJ0YXJnZXRzIiwiY3VzdG9tIjp7Im9wYXF1ZV9iYWNrZW5kX3N0YXRlIjoiZXlKbWIyOGlPaUFpWW1GeUluMD0ifSwiZXhwaXJlcyI6IjIwMjItMTItMjlUMDg6NTg6MzJaIiwic3BlY192ZXJzaW9uIjoiMS4wIiwidGFyZ2V0cyI6eyJkYXRhZG9nLzIvQVNNX0ZFQVRVUkVTL0FTTV9GRUFUVVJFUy1iYXNlL2NvbmZpZyI6eyJjdXN0b20iOnsidiI6MX0sImhhc2hlcyI6eyJzaGEyNTYiOiI2NjYxNmI2NTY4NjE3MzY4In0sImxlbmd0aCI6OTk5fX0sInZlcnNpb24iOjF9LCJzaWduYXR1cmVzIjpbeyJrZXlpZCI6ImVkNzY3MmM5YTI0YWJkYTc4ODcyZWUzMmVlNzFjN2NiMWQ1MjM1ZThkYjRlY2JmMWNhMjhiOWM1MGViNzVkOWUiLCJzaWciOiJiZDJiMTY3ZmQ4N2UxM2VhYjdhZjdlOWIwZDYwYWZkYjBiYjAzY2U1Y2QyOTc4OWUzMDgxNTY0NjViYTg1NzA0MDU0ZWJlMTAzODdhYWJiZjM3MGI1ODJjODJlMDc4MjhkMWI1NTYyODEzYzkzMTJhY2NhMmJlNWVkNzA2ZjUwNiJ9XX0=","target_files":[{"path":"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config","raw":"ewogICAgImFzbSI6IHsKICAgICAgICAiZW5hYmxlZCI6IHRydWUKICAgIH0KfQo="}],"client_configs":["datadog/2/ASM_FEATURES/ASM_FEATURES-base/config"]}`)}, + + {description: "valid", isError: false, rawUpdate: createRawTestData( + `{"target_files":[{"path":"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config","raw":"ewogICAgImFzbSI6IHsKICAgICAgICAiZW5hYmxlZCI6IHRydWUKICAgIH0KfQo="}],"client_configs":["datadog/2/ASM_FEATURES/ASM_FEATURES-base/config"]}`, + `{"signed":{"_type":"targets","custom":{"opaque_backend_state":"eyJmb28iOiAiYmFyIn0="},"expires":"2032-10-24T15:10:45.097315-04:00","spec_version":"1.0","targets":{"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config":{"custom":{"v":1},"hashes":{"sha256":"9221dfd9f6084151313e3e4920121ae843614c328e4630ea371ba66e2f15a0a6"},"length":47}},"version":1},"signatures":[{"keyid":"ed7672c9a24abda78872ee32ee71c7cb1d5235e8db4ecbf1ca28b9c50eb75d9e","sig":"8cf4603262262fb06146868ccf46092e120a82ce5c45fbfd8dd52aae807fe3d0450cac8459c32cd2848951a0482341b04818e4bc062d0614f05621db950b3c0b"}]}`), + }, + + {description: "invalid tuf targets signature", isError: true, rawUpdate: createRawTestData( + `{"target_files":[{"path":"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config","raw":"ewogICAgImFzbSI6IHsKICAgICAgICAiZW5hYmxlZCI6IHRydWUKICAgIH0KfQo="}],"client_configs":["datadog/2/ASM_FEATURES/ASM_FEATURES-base/config"]}`, + `{"signed":{"_type":"targets","spec_version":"1.0","version":999,"expires":"2032-10-24T15:10:45.097315-04:00","targets":{"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config":{"length":47,"hashes":{"sha256":"9221dfd9f6084151313e3e4920121ae843614c328e4630ea371ba66e2f15a0a6"},"custom":{"v":1}}},"custom":{"opaque_backend_state":"eyJmb28iOiAiYmFyIn0="}},"signatures":[{"keyid":"ed7672c9a24abda78872ee32ee71c7cb1d5235e8db4ecbf1ca28b9c50eb75d9e","sig":"8cf4603262262fb06146868ccf46092e120a82ce5c45fbfd8dd52aae807fe3d0450cac8459c32cd2848951a0482341b04818e4bc062d0614f05621db950b3c0b"}]}`), + }, + + {description: "tuf targets signed with invalid key", isError: true, rawUpdate: createRawTestData( + `{"target_files":[{"path":"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config","raw":"ewogICAgImFzbSI6IHsKICAgICAgICAiZW5hYmxlZCI6IHRydWUKICAgIH0KfQo="}],"client_configs":["datadog/2/ASM_FEATURES/ASM_FEATURES-base/config"]}`, + `{"signed":{"_type":"targets","custom":{"opaque_backend_state":"eyJmb28iOiAiYmFyIn0="},"expires":"2032-10-24T15:10:45.097315-04:00","spec_version":"1.0","targets":{},"version":1},"signatures":[{"keyid":"ed7672c9a24abda78872ee32ee71c7cb1d5235e8db4ecbf1ca28b9c50eb75d9e","sig":"ef3cfcf821f6c191232f2b0af5931a15ac91d363c781d1195feaf11f1b50a2343c708e2c9bfe64d56415240c12a9afcbd2f556d3a9f479e94efc4516d5934907"}]}`), + }, + + {description: "missing target file in tuf targets", isError: true, rawUpdate: createRawTestData( + `{"target_files":[{"path":"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config","raw":"ewogICAgImFzbSI6IHsKICAgICAgICAiZW5hYmxlZCI6IHRydWUKICAgIH0KfQo="}],"client_configs":["datadog/2/ASM_FEATURES/ASM_FEATURES-base/config"]}`, + `{"signed":{"_type":"targets","custom":{"opaque_backend_state":"eyJmb28iOiAiYmFyIn0="},"expires":"2032-10-24T15:10:45.097315-04:00","spec_version":"1.0","targets":{},"version":1},"signatures":[{"keyid":"ed7672c9a24abda78872ee32ee71c7cb1d5235e8db4ecbf1ca28b9c50eb75d9e","sig":"ef3cfcf821f6c191232f2b0af5931a15ac91d363c781d1195feaf11f1b50a2343c708e2c9bfe64d56415240c12a9afcbd2f556d3a9f479e94efc4516d5934907"}]}`, + )}, + {description: "target file hash incorrect in tuf targets", isError: true, rawUpdate: createRawTestData( + `{"target_files":[{"path":"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config","raw":"ewogICAgImFzbSI6IHsKICAgICAgICAiZW5hYmxlZCI6IHRydWUKICAgIH0KfQo="}],"client_configs":["datadog/2/ASM_FEATURES/ASM_FEATURES-base/config"]}`, + `{"signed":{"_type":"targets","custom":{"opaque_backend_state":"eyJmb28iOiAiYmFyIn0="},"expires":"2032-10-24T15:10:45.097315-04:00","spec_version":"1.0","targets":{"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config":{"custom":{"v":1},"hashes":{"sha256":"66616b6568617368"},"length":47}},"version":1},"signatures":[{"keyid":"ed7672c9a24abda78872ee32ee71c7cb1d5235e8db4ecbf1ca28b9c50eb75d9e","sig":"a323d0f5535b3a309273b5a3df70f36bfa3e0e74acf98307148dc41f6cc02982654b48c7264e64ab2649acde732f5808ec74f37feba6410310b0a5d40dc5250c"}]}`, + )}, + {description: "target file length incorrect in tuf targets", isError: true, rawUpdate: createRawTestData( + `{"target_files":[{"path":"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config","raw":"ewogICAgImFzbSI6IHsKICAgICAgICAiZW5hYmxlZCI6IHRydWUKICAgIH0KfQo="}],"client_configs":["datadog/2/ASM_FEATURES/ASM_FEATURES-base/config"]}`, + `{"signed":{"_type":"targets","custom":{"opaque_backend_state":"eyJmb28iOiAiYmFyIn0="},"expires":"2032-10-24T15:10:45.097315-04:00","spec_version":"1.0","targets":{"datadog/2/ASM_FEATURES/ASM_FEATURES-base/config":{"custom":{"v":1},"hashes":{"sha256":"66616b6568617368"},"length":999}},"version":1},"signatures":[{"keyid":"ed7672c9a24abda78872ee32ee71c7cb1d5235e8db4ecbf1ca28b9c50eb75d9e","sig":"664dd2dfc841717a66101cddff1123f142bed3200790724a3b16eb016ef7944a139f61ce9a3833a525b823ae093f9bb986aae84d23feb1d855644d265b349d0e"}]}`, + )}, } for _, test := range tests { diff --git a/pkg/remoteconfig/state/testingutils_test.go b/pkg/remoteconfig/state/testingutils_test.go index f96589ab52839..f2507acffdb0f 100644 --- a/pkg/remoteconfig/state/testingutils_test.go +++ b/pkg/remoteconfig/state/testingutils_test.go @@ -12,11 +12,11 @@ import ( "testing" "time" + "github.com/DataDog/go-tuf/data" + "github.com/DataDog/go-tuf/pkg/keys" + "github.com/DataDog/go-tuf/sign" + "github.com/DataDog/go-tuf/util" "github.com/stretchr/testify/assert" - "github.com/theupdateframework/go-tuf/data" - "github.com/theupdateframework/go-tuf/pkg/keys" - "github.com/theupdateframework/go-tuf/sign" - "github.com/theupdateframework/go-tuf/util" "github.com/DataDog/datadog-agent/pkg/remoteconfig/state/products/apmsampling" ) diff --git a/pkg/remoteconfig/state/tuf.go b/pkg/remoteconfig/state/tuf.go index 41ac1c3477646..3cc712d9cce91 100644 --- a/pkg/remoteconfig/state/tuf.go +++ b/pkg/remoteconfig/state/tuf.go @@ -13,10 +13,10 @@ import ( "strconv" "strings" - "github.com/theupdateframework/go-tuf/client" - "github.com/theupdateframework/go-tuf/data" - "github.com/theupdateframework/go-tuf/util" - "github.com/theupdateframework/go-tuf/verify" + "github.com/DataDog/go-tuf/client" + "github.com/DataDog/go-tuf/data" + "github.com/DataDog/go-tuf/util" + "github.com/DataDog/go-tuf/verify" ) type tufRootsClient struct { diff --git a/pkg/secrets/check_rights_nix_test.go b/pkg/secrets/check_rights_nix_test.go index f9efaa8d4ca51..5f8d3668c0d43 100644 --- a/pkg/secrets/check_rights_nix_test.go +++ b/pkg/secrets/check_rights_nix_test.go @@ -21,6 +21,10 @@ func setCorrectRight(path string) { os.Chmod(path, 0700) } +// testCheckRightsStub is a dummy checkRights stub for *nix +func testCheckRightsStub() { +} + func TestWrongPath(t *testing.T) { require.NotNil(t, checkRights("does not exists", false)) } diff --git a/pkg/secrets/check_rights_windows.go b/pkg/secrets/check_rights_windows.go index df55b2bb58189..559386ca1530b 100644 --- a/pkg/secrets/check_rights_windows.go +++ b/pkg/secrets/check_rights_windows.go @@ -14,6 +14,7 @@ import ( "unsafe" "golang.org/x/sys/windows" + "golang.org/x/sys/windows/registry" "github.com/DataDog/datadog-agent/pkg/util/winutil" ) @@ -28,82 +29,64 @@ func checkRights(filename string, allowGroupExec bool) error { } if _, err := os.Stat(filename); err != nil { if os.IsNotExist(err) { - return fmt.Errorf("secretBackendCommand %s does not exist", filename) + return fmt.Errorf("secretBackendCommand '%s' does not exist", filename) } + return fmt.Errorf("unable to check permissions for secretBackendCommand '%s': %s", filename, err) } - var fileDacl *winutil.Acl - err := winutil.GetNamedSecurityInfo(filename, - winutil.SE_FILE_OBJECT, - winutil.DACL_SECURITY_INFORMATION, - nil, - nil, - &fileDacl, - nil, - nil) + fileDacl, err := getACL(filename) if err != nil { - return fmt.Errorf("could not query ACLs for %s: %s", filename, err) + return fmt.Errorf("could not query ACLs for '%s': %s", filename, err) } var aclSizeInfo winutil.AclSizeInformation err = winutil.GetAclInformation(fileDacl, &aclSizeInfo, winutil.AclSizeInformationEnum) if err != nil { - return fmt.Errorf("could not query ACLs for %s: %s", filename, err) + return fmt.Errorf("could not query ACLs for '%s': %s", filename, err) } // create the sids that are acceptable to us (local system account and // administrators group) - var localSystem *windows.SID - err = windows.AllocateAndInitializeSid(&windows.SECURITY_NT_AUTHORITY, - 1, // local system has 1 valid subauth - windows.SECURITY_LOCAL_SYSTEM_RID, - 0, 0, 0, 0, 0, 0, 0, - &localSystem) + localSystem, err := getLocalSystemSID() if err != nil { return fmt.Errorf("could not query Local System SID: %s", err) } defer windows.FreeSid(localSystem) - var administrators *windows.SID - err = windows.AllocateAndInitializeSid(&windows.SECURITY_NT_AUTHORITY, - 2, // administrators group has 2 valid subauths - windows.SECURITY_BUILTIN_DOMAIN_RID, - windows.DOMAIN_ALIAS_RID_ADMINS, - 0, 0, 0, 0, 0, 0, - &administrators) + administrators, err := getAdministratorsSID() if err != nil { return fmt.Errorf("could not query Administrator SID: %s", err) } defer windows.FreeSid(administrators) - secretuser, err := winutil.GetSidFromUser() + secretUser, err := getSecretUserSID() if err != nil { - return fmt.Errorf("could not get SID for current user: %s", err) + return err } bSecretUserExplicitlyAllowed := false for i := uint32(0); i < aclSizeInfo.AceCount; i++ { var pAce *winutil.AccessAllowedAce if err := winutil.GetAce(fileDacl, i, &pAce); err != nil { - return fmt.Errorf("Could not query a ACE on %s: %s", filename, err) + return fmt.Errorf("could not query a ACE on '%s': %s", filename, err) } compareSid := (*windows.SID)(unsafe.Pointer(&pAce.SidStart)) compareIsLocalSystem := windows.EqualSid(compareSid, localSystem) compareIsAdministrators := windows.EqualSid(compareSid, administrators) - compareIsSecretUser := windows.EqualSid(compareSid, secretuser) + compareIsSecretUser := windows.EqualSid(compareSid, secretUser) if pAce.AceType == winutil.ACCESS_DENIED_ACE_TYPE { // if we're denying access to local system or administrators, // it's wrong. Otherwise, any explicit access denied is OK if compareIsLocalSystem || compareIsAdministrators || compareIsSecretUser { - return fmt.Errorf("Invalid executable '%s': Can't deny access LOCAL_SYSTEM, Administrators or %s", filename, secretuser) + return fmt.Errorf("invalid executable '%s': explicit deny access for LOCAL_SYSTEM, Administrators or %s", filename, secretUser) } // otherwise, it's fine; deny access to whomever } if pAce.AceType == winutil.ACCESS_ALLOWED_ACE_TYPE { if !(compareIsLocalSystem || compareIsAdministrators || compareIsSecretUser) { - return fmt.Errorf("Invalid executable '%s': other users/groups than LOCAL_SYSTEM, Administrators or %s have rights on it", filename, secretuser) + return fmt.Errorf("invalid executable '%s': other users/groups than LOCAL_SYSTEM, Administrators or %s have rights on it", filename, secretUser) } if compareIsSecretUser { bSecretUserExplicitlyAllowed = true @@ -113,7 +96,102 @@ func checkRights(filename string, allowGroupExec bool) error { if !bSecretUserExplicitlyAllowed { // there was never an ACE explicitly allowing the secret user, so we can't use it - return fmt.Errorf("'%s' user is not allowed to execute secretBackendCommand '%s'", secretuser, filename) + return fmt.Errorf("'%s' user is not allowed to execute secretBackendCommand '%s'", secretUser, filename) } return nil } + +// getACL retrieves the DACL for the file at filename path +func getACL(filename string) (*winutil.Acl, error) { + var fileDacl *winutil.Acl + err := winutil.GetNamedSecurityInfo(filename, + winutil.SE_FILE_OBJECT, + winutil.DACL_SECURITY_INFORMATION, + nil, + nil, + &fileDacl, + nil, + nil) + + return fileDacl, err +} + +// getLocalSystemSID returns the SID of the Local System account +func getLocalSystemSID() (*windows.SID, error) { + var localSystem *windows.SID + err := windows.AllocateAndInitializeSid(&windows.SECURITY_NT_AUTHORITY, + 1, // local system has 1 valid subauth + windows.SECURITY_LOCAL_SYSTEM_RID, + 0, 0, 0, 0, 0, 0, 0, + &localSystem) + + return localSystem, err +} + +// getAdministratorsSID returns the SID of the built-in Administrators group principal +func getAdministratorsSID() (*windows.SID, error) { + var administrators *windows.SID + err := windows.AllocateAndInitializeSid(&windows.SECURITY_NT_AUTHORITY, + 2, // administrators group has 2 valid subauths + windows.SECURITY_BUILTIN_DOMAIN_RID, + windows.DOMAIN_ALIAS_RID_ADMINS, + 0, 0, 0, 0, 0, 0, + &administrators) + return administrators, err +} + +// getSecretUserSID returns the SID of the user running the secret backend +func getSecretUserSID() (*windows.SID, error) { + localSystem, err := getLocalSystemSID() + if err != nil { + return nil, fmt.Errorf("could not query Local System SID: %s", err) + } + defer windows.FreeSid(localSystem) + + currentUser, err := winutil.GetSidFromUser() + if err != nil { + return nil, fmt.Errorf("could not get SID for current user: %s", err) + } + + secretUser := currentUser + + elevated, err := winutil.IsProcessElevated() + if err != nil { + return nil, fmt.Errorf("unable to determine if running elevated: %s", err) + } + + if elevated || currentUser.Equals(localSystem) { + ddUser, err := getDDAgentUserSID() + if err != nil { + return nil, fmt.Errorf("could not resolve SID for ddagentuser user: %s", err) + } + secretUser = ddUser + } + return secretUser, nil +} + +// getDDAgentUserSID returns the SID of the ddagentuser configured at installation time +var getDDAgentUserSID = func() (*windows.SID, error) { + k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Datadog\Datadog Agent`, registry.QUERY_VALUE) + if err != nil { + return nil, fmt.Errorf("could not open installer registry key: %s", err) + } + defer k.Close() + + user, _, err := k.GetStringValue("installedUser") + if err != nil { + return nil, fmt.Errorf("could not read installedUser in registry: %s", err) + } + + domain, _, err := k.GetStringValue("installedDomain") + if err != nil { + return nil, fmt.Errorf("could not read installedDomain in registry: %s", err) + } + + if domain != "" { + user = domain + `\` + user + } + + sid, _, _, err := windows.LookupSID("", user) + return sid, err +} diff --git a/pkg/secrets/check_rights_windows_test.go b/pkg/secrets/check_rights_windows_test.go index 3fef85bc79ad4..b1e895d896846 100644 --- a/pkg/secrets/check_rights_windows_test.go +++ b/pkg/secrets/check_rights_windows_test.go @@ -9,12 +9,15 @@ package secrets import ( + "io/ioutil" "os" "os/exec" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/util/winutil" ) func setCorrectRight(path string) { @@ -26,14 +29,27 @@ func setCorrectRight(path string) { "-addDDuser", "1").Run() } +func testCheckRightsStub() { + // Stub for CI since running as Administrator and no installer data + getDDAgentUserSID = winutil.GetSidFromUser +} + func TestWrongPath(t *testing.T) { require.NotNil(t, checkRights("does not exists", false)) } -func TestCheckRights(t *testing.T) { - _, err := os.CreateTemp("", "agent-collector-test") +func TestSpaceInPath(t *testing.T) { + tmpDir, err := ioutil.TempDir("", "super temp") require.Nil(t, err) + defer os.Remove(tmpDir) + tmpFile, err := os.CreateTemp(tmpDir, "agent-collector-test") + require.Nil(t, err) + defer os.Remove(tmpFile.Name()) + require.Nil(t, os.Chmod(tmpFile.Name(), 0700)) + require.Nil(t, checkRights(tmpFile.Name(), false)) +} +func TestCheckRights(t *testing.T) { // default options allowGroupExec := false diff --git a/pkg/secrets/exec_nix.go b/pkg/secrets/exec_nix.go new file mode 100644 index 0000000000000..0c87dc3b1a8e5 --- /dev/null +++ b/pkg/secrets/exec_nix.go @@ -0,0 +1,19 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build secrets && !windows +// +build secrets,!windows + +package secrets + +import ( + "context" + "os/exec" +) + +// commandContext sets up an exec.Cmd for running with a context +func commandContext(ctx context.Context, name string, arg ...string) (*exec.Cmd, func(), error) { + return exec.CommandContext(ctx, name, arg...), func() {}, nil +} diff --git a/pkg/secrets/exec_windows.go b/pkg/secrets/exec_windows.go new file mode 100644 index 0000000000000..ebf85856e02f0 --- /dev/null +++ b/pkg/secrets/exec_windows.go @@ -0,0 +1,110 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2018-present Datadog, Inc. + +//go:build secrets && windows +// +build secrets,windows + +package secrets + +import ( + "context" + "fmt" + "os/exec" + "syscall" + + "golang.org/x/sys/windows" + "golang.org/x/sys/windows/svc/mgr" + + "github.com/DataDog/datadog-agent/pkg/util/winutil" +) + +const ddAgentServiceName = "datadogagent" + +// commandContext sets up an exec.Cmd for running with a context +func commandContext(ctx context.Context, name string, arg ...string) (*exec.Cmd, func(), error) { + cmd := exec.CommandContext(ctx, name, arg...) + done := func() {} + localSystem, err := getLocalSystemSID() + if err != nil { + return nil, nil, fmt.Errorf("could not query Local System SID: %s", err) + } + defer windows.FreeSid(localSystem) + + currentUser, err := winutil.GetSidFromUser() + if err != nil { + return nil, nil, fmt.Errorf("could not get SID for current user: %s", err) + } + + // If we are running as Local System we need to "sandbox" execution to "ddagentuser" + if currentUser.Equals(localSystem) { + // Retrieve token from the running Datadog Agent service + token, err := getDDAgentServiceToken() + if err != nil { + return nil, nil, err + } + + done = func() { + defer windows.CloseHandle(windows.Handle(token)) + } + + // Configure the token to run with + cmd.SysProcAttr = &syscall.SysProcAttr{Token: syscall.Token(token)} + } + + return cmd, done, nil +} + +// getDDAgentServiceToken retrieves token from the running Datadog Agent service +func getDDAgentServiceToken() (windows.Token, error) { + var token, duplicatedToken windows.Token + pid, err := getServicePid(ddAgentServiceName) + if err != nil { + return windows.Token(0), fmt.Errorf("could not get pid of %s service: %s", ddAgentServiceName, err) + } + + procHandle, err := windows.OpenProcess(windows.PROCESS_QUERY_INFORMATION, false, pid) + if err != nil { + return windows.Token(0), fmt.Errorf("could not get pid of %s service: %s", ddAgentServiceName, err) + } + + defer windows.CloseHandle(procHandle) + + if err = windows.OpenProcessToken(procHandle, windows.TOKEN_ALL_ACCESS, &token); err != nil { + return windows.Token(0), err + } + + defer windows.CloseHandle(windows.Handle(token)) + + if err := windows.DuplicateTokenEx(token, windows.MAXIMUM_ALLOWED, nil, windows.SecurityDelegation, windows.TokenPrimary, &duplicatedToken); err != nil { + return windows.Token(0), fmt.Errorf("error duplicating %s service token: %s", ddAgentServiceName, err) + } + + return duplicatedToken, nil +} + +// getServicePid gets the PID of a running service +func getServicePid(serviceName string) (uint32, error) { + h, err := windows.OpenSCManager(nil, nil, windows.SC_MANAGER_CONNECT) + if err != nil { + return 0, fmt.Errorf("could not connect to SCM: %s", err) + } + + m := &mgr.Mgr{Handle: h} + defer m.Disconnect() + + hSvc, err := windows.OpenService(m.Handle, syscall.StringToUTF16Ptr(serviceName), + windows.SERVICE_QUERY_STATUS) + if err != nil { + return 0, fmt.Errorf("could not access service %s: %v", serviceName, err) + } + + service := &mgr.Service{Name: serviceName, Handle: hSvc} + defer service.Close() + status, err := service.Query() + if err != nil { + return 0, fmt.Errorf("could not query service %s: %v", serviceName, err) + } + return status.ProcessId, nil +} diff --git a/pkg/secrets/fetch_secret.go b/pkg/secrets/fetch_secret.go index 8f985d4c5feba..c3da015324c4e 100644 --- a/pkg/secrets/fetch_secret.go +++ b/pkg/secrets/fetch_secret.go @@ -48,7 +48,12 @@ func execCommand(inputPayload string) ([]byte, error) { time.Duration(secretBackendTimeout)*time.Second) defer cancel() - cmd := exec.CommandContext(ctx, secretBackendCommand, secretBackendArguments...) + cmd, done, err := commandContext(ctx, secretBackendCommand, secretBackendArguments...) + if err != nil { + return nil, err + } + defer done() + if err := checkRights(cmd.Path, secretBackendCommandAllowGroupExec); err != nil { return nil, err } @@ -73,7 +78,7 @@ func execCommand(inputPayload string) ([]byte, error) { // datadog.yaml. log.Debugf("%s | calling secret_backend_command with payload: '%s'", time.Now().String(), inputPayload) start := time.Now() - err := cmd.Run() + err = cmd.Run() elapsed := time.Since(start) log.Debugf("%s | secret_backend_command '%s' completed in %s", time.Now().String(), secretBackendCommand, elapsed) diff --git a/pkg/secrets/fetch_secret_test.go b/pkg/secrets/fetch_secret_test.go index 51d6140c3271b..86324390643f4 100644 --- a/pkg/secrets/fetch_secret_test.go +++ b/pkg/secrets/fetch_secret_test.go @@ -35,6 +35,8 @@ func build(m *testing.M, outBin, pkg string) { } func TestMain(m *testing.M) { + testCheckRightsStub() + if runtime.GOOS == "windows" { binExtension = ".exe" } diff --git a/pkg/secrets/info_windows.go b/pkg/secrets/info_windows.go index 05a53a7ce8edb..6476ba96a1b7e 100644 --- a/pkg/secrets/info_windows.go +++ b/pkg/secrets/info_windows.go @@ -12,10 +12,12 @@ import ( "bytes" "fmt" "os/exec" + "strings" ) func (info *SecretInfo) populateRights() { - err := checkRights(info.ExecutablePath, secretBackendCommandAllowGroupExec) + execPath := fmt.Sprintf("\"%s\"", strings.TrimSpace(info.ExecutablePath)) + err := checkRights(execPath, secretBackendCommandAllowGroupExec) if err != nil { info.Rights = fmt.Sprintf("Error: %s", err) } else { @@ -28,7 +30,7 @@ func (info *SecretInfo) populateRights() { return } - cmd := exec.Command(ps, "get-acl", "-Path", info.ExecutablePath, "|", "format-list") + cmd := exec.Command(ps, "get-acl", "-Path", execPath, "|", "format-list") stdout := bytes.Buffer{} stderr := bytes.Buffer{} diff --git a/pkg/security/api/api.pb.go b/pkg/security/api/api.pb.go index 8f1472f0e035b..88641c7f03b69 100644 --- a/pkg/security/api/api.pb.go +++ b/pkg/security/api/api.pb.go @@ -1033,7 +1033,7 @@ func (x *EnvironmentStatus) GetUseRingBuffer() bool { return false } -// Discarders +//Discarders type DumpDiscardersParams struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/pkg/security/api/api_grpc.pb.go b/pkg/security/api/api_grpc.pb.go index f1efa091c117b..5945a86476a25 100644 --- a/pkg/security/api/api_grpc.pb.go +++ b/pkg/security/api/api_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.21.9 +// - protoc v3.6.1 // source: pkg/security/api/api.proto package api diff --git a/pkg/security/api/mocks/security_module__get_process_events_client.go b/pkg/security/api/mocks/security_module__get_process_events_client.go index a465f757aac0a..55980bf049ac1 100644 --- a/pkg/security/api/mocks/security_module__get_process_events_client.go +++ b/pkg/security/api/mocks/security_module__get_process_events_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/security/api/mocks/security_module_client.go b/pkg/security/api/mocks/security_module_client.go index 76085bbc3ab6d..3d5c0bbf93cef 100644 --- a/pkg/security/api/mocks/security_module_client.go +++ b/pkg/security/api/mocks/security_module_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/security/api/mocks/security_module_server.go b/pkg/security/api/mocks/security_module_server.go index 8bd63b22baa98..7a8a4c5f9f4f6 100644 --- a/pkg/security/api/mocks/security_module_server.go +++ b/pkg/security/api/mocks/security_module_server.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/security/config/config.go b/pkg/security/config/config.go index 0982af8490a46..2dc50dc6bfbf4 100644 --- a/pkg/security/config/config.go +++ b/pkg/security/config/config.go @@ -300,7 +300,7 @@ func (c *Config) globalSanitize() error { c.RuntimeCompiledConstantsEnabled = false } - serviceName := utils.GetTagValue("service", coreconfig.GetConfiguredTags(true)) + serviceName := utils.GetTagValue("service", coreconfig.GetGlobalConfiguredTags(true)) if len(serviceName) > 0 { c.HostServiceName = fmt.Sprintf("service:%s", serviceName) } diff --git a/pkg/security/ebpf/c/activity_dump.h b/pkg/security/ebpf/c/activity_dump.h index 147165032a104..e626088950d59 100644 --- a/pkg/security/ebpf/c/activity_dump.h +++ b/pkg/security/ebpf/c/activity_dump.h @@ -117,8 +117,6 @@ struct bpf_map_def SEC("maps/cgroup_tracing_event_gen") cgroup_tracing_event_gen .key_size = sizeof(u32), .value_size = sizeof(struct cgroup_tracing_event_t), .max_entries = 1, - .pinning = 0, - .namespace = "", }; __attribute__((always_inline)) struct cgroup_tracing_event_t *get_cgroup_tracing_event() { diff --git a/pkg/security/ebpf/c/approvers.h b/pkg/security/ebpf/c/approvers.h index e9cd64220f7b1..d5f670746eeed 100644 --- a/pkg/security/ebpf/c/approvers.h +++ b/pkg/security/ebpf/c/approvers.h @@ -18,8 +18,6 @@ struct bpf_map_def SEC("maps/basename_approvers") basename_approvers = { .key_size = BASENAME_FILTER_SIZE, .value_size = sizeof(struct basename_filter_t), .max_entries = 255, - .pinning = 0, - .namespace = "", }; void get_dentry_name(struct dentry *dentry, void *buffer, size_t n); diff --git a/pkg/security/ebpf/c/bpf.h b/pkg/security/ebpf/c/bpf.h index 2ea922c71eff6..df711158080e9 100644 --- a/pkg/security/ebpf/c/bpf.h +++ b/pkg/security/ebpf/c/bpf.h @@ -105,8 +105,6 @@ struct bpf_map_def SEC("maps/bpf_maps") bpf_maps = { .key_size = sizeof(u32), .value_size = sizeof(struct bpf_map_t), .max_entries = 4096, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/bpf_progs") bpf_progs = { @@ -114,8 +112,6 @@ struct bpf_map_def SEC("maps/bpf_progs") bpf_progs = { .key_size = sizeof(u32), .value_size = sizeof(struct bpf_prog_t), .max_entries = 4096, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/tgid_fd_map_id") tgid_fd_map_id = { @@ -123,8 +119,6 @@ struct bpf_map_def SEC("maps/tgid_fd_map_id") tgid_fd_map_id = { .key_size = sizeof(struct bpf_tgid_fd_t), .value_size = sizeof(u32), .max_entries = 4096, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/tgid_fd_prog_id") tgid_fd_prog_id = { @@ -132,8 +126,6 @@ struct bpf_map_def SEC("maps/tgid_fd_prog_id") tgid_fd_prog_id = { .key_size = sizeof(struct bpf_tgid_fd_t), .value_size = sizeof(u32), .max_entries = 4096, - .pinning = 0, - .namespace = "", }; __attribute__((always_inline)) void save_obj_fd(struct syscall_cache_t *syscall) { diff --git a/pkg/security/ebpf/c/buffer_selector.h b/pkg/security/ebpf/c/buffer_selector.h index 1321f4ff3713f..29e54309cb81b 100644 --- a/pkg/security/ebpf/c/buffer_selector.h +++ b/pkg/security/ebpf/c/buffer_selector.h @@ -9,8 +9,6 @@ struct bpf_map_def SEC("maps/buffer_selector") buffer_selector = { .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 3, - .pinning = 0, - .namespace = "", }; static __attribute__((always_inline)) diff --git a/pkg/security/ebpf/c/defs.h b/pkg/security/ebpf/c/defs.h index b427592787e0f..7c97ec9608a04 100644 --- a/pkg/security/ebpf/c/defs.h +++ b/pkg/security/ebpf/c/defs.h @@ -1,7 +1,7 @@ #ifndef _DEFS_H_ #define _DEFS_H_ -#include "bpf_helpers.h" +#include "bpf_tracing.h" #include "constants.h" @@ -173,13 +173,6 @@ #define CONTAINER_ID_LEN 64 #define MAX_XATTR_NAME_LEN 200 -#define bpf_printk(fmt, ...) \ - ({ \ - char ____fmt[] = fmt; \ - bpf_trace_printk(____fmt, sizeof(____fmt), \ - ##__VA_ARGS__); \ - }) - #define IS_UNHANDLED_ERROR(retval) retval < 0 && retval != -EACCES && retval != -EPERM #define IS_ERR(ptr) ((unsigned long)(ptr) > (unsigned long)(-1000)) @@ -227,6 +220,7 @@ enum event_type EVENT_NET_DEVICE, EVENT_VETH_PAIR, EVENT_BIND, + EVENT_UNSHARE_MNTNS, EVENT_SYSCALLS, EVENT_MAX, // has to be the last one @@ -323,8 +317,6 @@ struct bpf_map_def SEC("maps/path_id") path_id = { .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 1, - .pinning = 0, - .namespace = "", }; static __attribute__((always_inline)) u32 get_path_id(int invalidate) { @@ -355,8 +347,6 @@ struct perf_map_stats_t { struct bpf_map_def SEC("maps/events") events = { .type = BPF_MAP_TYPE_PERF_EVENT_ARRAY, .max_entries = 0, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/events_stats") events_stats = { @@ -364,8 +354,6 @@ struct bpf_map_def SEC("maps/events_stats") events_stats = { .key_size = sizeof(u32), .value_size = sizeof(struct perf_map_stats_t), .max_entries = EVENT_MAX, - .pinning = 0, - .namespace = "", }; void __attribute__((always_inline)) send_event_with_size_ptr(void *ctx, u64 event_type, void *kernel_event, u64 kernel_event_size) { @@ -429,8 +417,6 @@ struct bpf_map_def SEC("maps/mount_ref") mount_ref = { .key_size = sizeof(u32), .value_size = sizeof(struct mount_ref_t), .max_entries = 64000, - .pinning = 0, - .namespace = "", }; static __attribute__((always_inline)) void inc_mount_ref(u32 mount_id) { @@ -527,8 +513,6 @@ struct bpf_map_def SEC("maps/enabled_events") enabled_events = { .key_size = sizeof(u32), .value_size = sizeof(u64), .max_entries = 1, - .pinning = 0, - .namespace = "", }; static __attribute__((always_inline)) u64 get_enabled_events(void) { diff --git a/pkg/security/ebpf/c/dentry.h b/pkg/security/ebpf/c/dentry.h index 6ba453a29f018..222b997a537ae 100644 --- a/pkg/security/ebpf/c/dentry.h +++ b/pkg/security/ebpf/c/dentry.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "defs.h" #include "filters.h" @@ -62,6 +63,17 @@ int __attribute__((always_inline)) get_file_mount_id(struct file *file) { return get_vfsmount_mount_id(mnt); } +int __attribute__((always_inline)) get_vfsmount_mount_flags(struct vfsmount *mnt) { + int mount_flags; + bpf_probe_read(&mount_flags, sizeof(mount_flags), &mnt->mnt_flags); + return mount_flags; +} + +int __attribute__((always_inline)) get_path_mount_flags(struct path *path) { + struct vfsmount *mnt; + bpf_probe_read(&mnt, sizeof(mnt), &path->mnt); + return get_vfsmount_mount_flags(mnt); +} int __attribute__((always_inline)) get_mount_mount_id(void *mnt) { int mount_id; @@ -79,6 +91,12 @@ int __attribute__((always_inline)) get_mount_peer_group_id(void *mnt) { return mount_id; } +struct dentry * __attribute__((always_inline)) get_mount_mountpoint_dentry(struct mount *mnt) { + struct dentry *dentry; + bpf_probe_read(&dentry, sizeof(dentry), (char *)mnt + 24); + return dentry; +} + struct vfsmount * __attribute__((always_inline)) get_mount_vfsmount(void *mnt) { return (struct vfsmount *)(mnt + 32); } @@ -187,6 +205,20 @@ void __attribute__((always_inline)) get_dentry_name(struct dentry *dentry, void bpf_probe_read_str(buffer, n, (void *)qstr.name); } +int __attribute__((always_inline)) get_sizeof_inode() { + u64 sizeof_inode; + LOAD_CONSTANT("sizeof_inode", sizeof_inode); + + return sizeof_inode; +} + +int __attribute__((always_inline)) get_sb_magic_offset() { + u64 offset; + LOAD_CONSTANT("sb_magic_offset", offset); + + return offset; +} + #define get_dentry_key_path(dentry, path) (struct path_key_t) { .ino = get_dentry_ino(dentry), .mount_id = get_path_mount_id(path) } #define get_inode_key_path(inode, path) (struct path_key_t) { .ino = get_inode_ino(inode), .mount_id = get_path_mount_id(path) } @@ -204,4 +236,17 @@ static __attribute__((always_inline)) void set_file_inode(struct dentry *dentry, } } +// get_sb_magic returns the magic number of a superblock, which can be used to identify the format of the filesystem +static __attribute__((always_inline)) int get_sb_magic(struct super_block *sb) { + u64 magic; + bpf_probe_read(&magic, sizeof(magic), (char *)sb + get_sb_magic_offset()); + + return magic; +} + +static __attribute__((always_inline)) int is_tmpfs(struct dentry *dentry) { + struct super_block *sb = get_dentry_sb(dentry); + return get_sb_magic(sb) == TMPFS_MAGIC; +} + #endif diff --git a/pkg/security/ebpf/c/dentry_resolver.h b/pkg/security/ebpf/c/dentry_resolver.h index 16c47a8bd9f87..f58dec606cfbb 100644 --- a/pkg/security/ebpf/c/dentry_resolver.h +++ b/pkg/security/ebpf/c/dentry_resolver.h @@ -31,8 +31,6 @@ struct bpf_map_def SEC("maps/pathnames") pathnames = { .key_size = sizeof(struct path_key_t), .value_size = sizeof(struct path_leaf_t), .max_entries = 64000, - .pinning = 0, - .namespace = "", }; #define DR_NO_CALLBACK -1 @@ -50,6 +48,8 @@ enum dr_kprobe_progs DR_LINK_DST_CALLBACK_KPROBE_KEY, DR_RENAME_CALLBACK_KPROBE_KEY, DR_SELINUX_CALLBACK_KPROBE_KEY, + DR_UNSHARE_MNTNS_STAGE_ONE_CALLBACK_KPROBE_KEY, + DR_UNSHARE_MNTNS_STAGE_TWO_CALLBACK_KPROBE_KEY, }; struct bpf_map_def SEC("maps/dentry_resolver_kprobe_callbacks") dentry_resolver_kprobe_callbacks = { @@ -130,7 +130,7 @@ int __attribute__((always_inline)) resolve_dentry_tail_call(void *ctx, struct de .ad_state = input->ad_state, }; - if (key.ino == 0 || key.mount_id == 0) { + if (key.ino == 0) { return DENTRY_INVALID; } @@ -249,8 +249,6 @@ struct bpf_map_def SEC("maps/dr_erpc_state") dr_erpc_state = { .key_size = sizeof(u32), .value_size = sizeof(struct dr_erpc_state_t), .max_entries = 1, - .pinning = 0, - .namespace = "", }; #define DR_ERPC_BUFFER_LENGTH 8*4096 @@ -260,8 +258,6 @@ struct bpf_map_def SEC("maps/dr_erpc_buffer") dr_erpc_buffer = { .key_size = sizeof(u32), .value_size = DR_ERPC_BUFFER_LENGTH*2, .max_entries = 1, - .pinning = 0, - .namespace = "", }; #define DR_ERPC_OK 0 @@ -281,8 +277,6 @@ struct bpf_map_def SEC("maps/dr_erpc_stats_fb") dr_erpc_stats_fb = { .key_size = sizeof(u32), .value_size = sizeof(struct dr_erpc_stats_t), .max_entries = 6, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/dr_erpc_stats_bb") dr_erpc_stats_bb = { @@ -290,8 +284,6 @@ struct bpf_map_def SEC("maps/dr_erpc_stats_bb") dr_erpc_stats_bb = { .key_size = sizeof(u32), .value_size = sizeof(struct dr_erpc_stats_t), .max_entries = 6, - .pinning = 0, - .namespace = "", }; int __attribute__((always_inline)) monitor_resolution_err(u32 resolution_err) { diff --git a/pkg/security/ebpf/c/discarders.h b/pkg/security/ebpf/c/discarders.h index ed5e1fe4ef5ae..0800cfe7e568c 100644 --- a/pkg/security/ebpf/c/discarders.h +++ b/pkg/security/ebpf/c/discarders.h @@ -19,8 +19,6 @@ struct bpf_map_def SEC("maps/discarder_stats_fb") discarder_stats_fb = { .key_size = sizeof(u32), .value_size = sizeof(struct discarder_stats_t), .max_entries = EVENT_LAST_DISCARDER, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/discarder_stats_bb") discarder_stats_bb = { @@ -28,8 +26,6 @@ struct bpf_map_def SEC("maps/discarder_stats_bb") discarder_stats_bb = { .key_size = sizeof(u32), .value_size = sizeof(struct discarder_stats_t), .max_entries = EVENT_LAST_DISCARDER, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/inode_discarder_revisions") inode_discarder_revisions = { @@ -37,8 +33,6 @@ struct bpf_map_def SEC("maps/inode_discarder_revisions") inode_discarder_revisio .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = REVISION_ARRAY_SIZE, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/discarders_revision") discarders_revision = { @@ -46,8 +40,6 @@ struct bpf_map_def SEC("maps/discarders_revision") discarders_revision = { .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 1, - .pinning = 0, - .namespace = "", }; u64 __attribute__((always_inline)) get_discarder_retention() { @@ -216,8 +208,6 @@ struct bpf_map_def SEC("maps/inode_discarders") inode_discarders = { .key_size = sizeof(struct inode_discarder_t), .value_size = sizeof(struct inode_discarder_params_t), .max_entries = 4096, - .pinning = 0, - .namespace = "", }; @@ -377,8 +367,6 @@ struct bpf_map_def SEC("maps/pid_discarders") pid_discarders = { \ .key_size = sizeof(u32), .value_size = sizeof(struct pid_discarder_params_t), .max_entries = 512, - .pinning = 0, - .namespace = "", }; int __attribute__((always_inline)) expire_pid_discarder(u32 tgid); diff --git a/pkg/security/ebpf/c/dns.h b/pkg/security/ebpf/c/dns.h index 45bb848f9b94c..8b5e5655d716a 100644 --- a/pkg/security/ebpf/c/dns.h +++ b/pkg/security/ebpf/c/dns.h @@ -49,8 +49,6 @@ struct bpf_map_def SEC("maps/dns_event") dns_event = { .key_size = sizeof(u32), .value_size = sizeof(struct dns_event_t), .max_entries = 1, - .pinning = 0, - .namespace = "", }; __attribute__((always_inline)) struct dns_event_t *get_dns_event() { diff --git a/pkg/security/ebpf/c/erpc.h b/pkg/security/ebpf/c/erpc.h index 1986d01fadc37..b44d88129b830 100644 --- a/pkg/security/ebpf/c/erpc.h +++ b/pkg/security/ebpf/c/erpc.h @@ -147,7 +147,7 @@ int __attribute__((always_inline)) handle_erpc_request(struct pt_regs *ctx) { switch (op) { case RESOLVE_SEGMENT_OP: - return handle_dr_request(ctx, data, DR_ERPC_SEGMENT_KEY); + return handle_dr_request(ctx, data, DR_ERPC_SEGMENT_KEY); // func (dr *DentryResolver) ResolveFromERPC in the userspace code side triggers handle_dr_request case RESOLVE_PATH_OP: return handle_dr_request(ctx, data, DR_ERPC_KEY); case RESOLVE_PARENT_OP: diff --git a/pkg/security/ebpf/c/exec.h b/pkg/security/ebpf/c/exec.h index b5d075258fdca..09994b2c4a874 100644 --- a/pkg/security/ebpf/c/exec.h +++ b/pkg/security/ebpf/c/exec.h @@ -11,9 +11,9 @@ #define MAX_PERF_STR_BUFF_LEN 256 #define MAX_STR_BUFF_LEN (1 << 15) -#define MAX_ARRAY_ELEMENT_PER_TAIL 23 #define MAX_ARRAY_ELEMENT_SIZE 4096 -#define MAX_ARGS_ELEMENTS 140 +#define MAX_ARRAY_ELEMENT_PER_TAIL 23 +#define MAX_ARGS_ENVS_ELEMENTS (MAX_ARRAY_ELEMENT_PER_TAIL * (32 / 2)) // split tailcall limit in half struct args_envs_event_t { struct kevent_t event; @@ -30,7 +30,7 @@ struct bpf_map_def SEC("maps/args_envs_progs") args_envs_progs = { .type = BPF_MAP_TYPE_PROG_ARRAY, .key_size = sizeof(u32), .value_size = sizeof(u32), - .max_entries = 10, + .max_entries = 1, }; struct bpf_map_def SEC("maps/str_array_buffers") str_array_buffers = { @@ -38,8 +38,6 @@ struct bpf_map_def SEC("maps/str_array_buffers") str_array_buffers = { .key_size = sizeof(u32), .value_size = sizeof(struct str_array_buffer_t), .max_entries = 1, - .pinning = 0, - .namespace = "", }; struct exec_event_t { @@ -62,8 +60,6 @@ struct bpf_map_def SEC("maps/exec_event_gen") exec_event_gen = { .key_size = sizeof(u32), .value_size = sizeof(struct exec_event_t), .max_entries = 1, - .pinning = 0, - .namespace = "", }; __attribute__((always_inline)) struct exec_event_t *new_exec_event() { @@ -120,8 +116,6 @@ struct bpf_map_def SEC("maps/exec_count_fb") exec_count_fb = { .key_size = sizeof(struct exec_path), .value_size = sizeof(u64), .max_entries = 2048, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/exec_count_bb") exec_count_bb = { @@ -129,8 +123,6 @@ struct bpf_map_def SEC("maps/exec_count_bb") exec_count_bb = { .key_size = sizeof(struct exec_path), .value_size = sizeof(u64), .max_entries = 2048, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/tasks_in_coredump") tasks_in_coredump = { @@ -139,8 +131,6 @@ struct bpf_map_def SEC("maps/tasks_in_coredump") tasks_in_coredump = { .value_size = sizeof(u8), .max_entries = 64, .map_flags = BPF_F_NO_COMMON_LRU, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/exec_pid_transfer") exec_pid_transfer = { @@ -148,8 +138,6 @@ struct bpf_map_def SEC("maps/exec_pid_transfer") exec_pid_transfer = { .key_size = sizeof(u32), .value_size = sizeof(u64), .max_entries = 512, - .pinning = 0, - .namespace = "", }; struct proc_cache_t __attribute__((always_inline)) *get_proc_from_cookie(u32 cookie) { @@ -163,9 +151,6 @@ struct proc_cache_t __attribute__((always_inline)) *get_proc_from_cookie(u32 coo void __attribute__((always_inline)) parse_str_array(struct pt_regs *ctx, struct str_array_ref_t *array_ref, u64 event_type) { const char **array = array_ref->array; int index = array_ref->index; - if (index == 255) { - return; - } array_ref->truncated = 0; @@ -218,7 +203,7 @@ void __attribute__((always_inline)) parse_str_array(struct pt_regs *ctx, struct bpf_probe_read(&str, sizeof(str), (void *)&array[index]); } else { - index = 255; // stop here + array_ref->array = NULL; // array->array == NULL indicates that we reached the end of the string array break; } } @@ -241,15 +226,16 @@ int kprobe_parse_args_envs(struct pt_regs *ctx) { } struct str_array_ref_t *array = &syscall->exec.args; - if (syscall->exec.next_tail > MAX_ARGS_ELEMENTS / MAX_ARRAY_ELEMENT_PER_TAIL) { + if (array->array == NULL || array->index > MAX_ARGS_ENVS_ELEMENTS) { // args are parsed array = &syscall->exec.envs; + if (array->array == NULL || array->index > MAX_ARGS_ENVS_ELEMENTS) { // envs are parsed + return 0; + } } parse_str_array(ctx, array, EVENT_ARGS_ENVS); - syscall->exec.next_tail++; - - bpf_tail_call_compat(ctx, &args_envs_progs, syscall->exec.next_tail); + bpf_tail_call_compat(ctx, &args_envs_progs, 0); return 0; } @@ -301,7 +287,12 @@ int __attribute__((always_inline)) handle_exec_event(struct pt_regs *ctx, struct syscall->exec.is_parsed = 1; syscall->exec.dentry = get_file_dentry(file); - syscall->exec.file.path_key = get_inode_key_path(inode, path); + + // set mount_id to 0 is this is a fileless exec, meaning that the vfs type is tmpfs and that is an internal mount + u32 mount_id = is_tmpfs(syscall->exec.dentry) && get_path_mount_flags(path) & MNT_INTERNAL ? 0 : get_path_mount_id(path); + + syscall->exec.file.path_key.ino = get_inode_ino(inode); + syscall->exec.file.path_key.mount_id = mount_id; syscall->exec.file.path_key.path_id = get_path_id(0); u64 pid_tgid = bpf_get_current_pid_tgid(); @@ -313,7 +304,7 @@ int __attribute__((always_inline)) handle_exec_event(struct pt_regs *ctx, struct .executable = { .path_key = { .ino = syscall->exec.file.path_key.ino, - .mount_id = get_path_mount_id(path), + .mount_id = mount_id, .path_id = syscall->exec.file.path_key.path_id, }, .flags = syscall->exec.file.flags @@ -685,7 +676,11 @@ int __attribute__((always_inline)) parse_args_and_env(struct pt_regs *ctx) { // call it here before the memory get replaced fill_span_context(&syscall->exec.span_context); - bpf_tail_call_compat(ctx, &args_envs_progs, syscall->exec.next_tail); + // avoid tail call if we have nothing to parse (or already did) + if (syscall->exec.args.array != NULL || syscall->exec.envs.array != NULL) { + bpf_tail_call_compat(ctx, &args_envs_progs, 0); + } + return 0; } diff --git a/pkg/security/ebpf/c/filters.h b/pkg/security/ebpf/c/filters.h index b0c161c51653e..d7ff50e44c4a4 100644 --- a/pkg/security/ebpf/c/filters.h +++ b/pkg/security/ebpf/c/filters.h @@ -28,8 +28,6 @@ struct bpf_map_def SEC("maps/filter_policy") filter_policy = { .key_size = sizeof(u32), .value_size = sizeof(struct policy_t), .max_entries = EVENT_MAX, - .pinning = 0, - .namespace = "", }; #endif diff --git a/pkg/security/ebpf/c/flow.h b/pkg/security/ebpf/c/flow.h index 455c4534e61e7..6253eab6af544 100644 --- a/pkg/security/ebpf/c/flow.h +++ b/pkg/security/ebpf/c/flow.h @@ -9,8 +9,6 @@ struct bpf_map_def SEC("maps/flow_pid") flow_pid = { .key_size = sizeof(struct pid_route_t), .value_size = sizeof(u32), .max_entries = 10240, - .pinning = 0, - .namespace = "", }; __attribute__((always_inline)) u32 get_flow_pid(struct pid_route_t *key) { @@ -131,8 +129,6 @@ struct bpf_map_def SEC("maps/conntrack") conntrack = { .key_size = sizeof(struct namespaced_flow_t), .value_size = sizeof(struct namespaced_flow_t), .max_entries = 4096, - .pinning = 0, - .namespace = "", }; __attribute__((always_inline)) int trace_nat_manip_pkt(struct pt_regs *ctx, struct nf_conn *ct) { diff --git a/pkg/security/ebpf/c/iouring.h b/pkg/security/ebpf/c/iouring.h index d1f0d5c6d3f4b..e337940b25ae6 100644 --- a/pkg/security/ebpf/c/iouring.h +++ b/pkg/security/ebpf/c/iouring.h @@ -6,8 +6,6 @@ struct bpf_map_def SEC("maps/io_uring_ctx_pid") io_uring_ctx_pid = { .key_size = sizeof(void*), .value_size = sizeof(u64), .max_entries = 2048, - .pinning = 0, - .namespace = "", }; void __attribute__((always_inline)) cache_ioctx_pid_tgid(void *ioctx) { @@ -84,4 +82,4 @@ u64 __attribute__((always_inline)) get_pid_tgid_from_iouring(void *req) { } } -#endif \ No newline at end of file +#endif diff --git a/pkg/security/ebpf/c/mmap.h b/pkg/security/ebpf/c/mmap.h index afc1696ca58e9..146e45dbda543 100644 --- a/pkg/security/ebpf/c/mmap.h +++ b/pkg/security/ebpf/c/mmap.h @@ -6,8 +6,6 @@ struct bpf_map_def SEC("maps/mmap_flags_approvers") mmap_flags_approvers = { .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 1, - .pinning = 0, - .namespace = "", }; int __attribute__((always_inline)) approve_mmap_by_flags(struct syscall_cache_t *syscall) { @@ -24,8 +22,6 @@ struct bpf_map_def SEC("maps/mmap_protection_approvers") mmap_protection_approve .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 1, - .pinning = 0, - .namespace = "", }; int __attribute__((always_inline)) approve_mmap_by_protection(struct syscall_cache_t *syscall) { diff --git a/pkg/security/ebpf/c/mount.h b/pkg/security/ebpf/c/mount.h index 07ed6536851a6..a5f62b3e6e70f 100644 --- a/pkg/security/ebpf/c/mount.h +++ b/pkg/security/ebpf/c/mount.h @@ -5,12 +5,7 @@ #define FSTYPE_LEN 16 -struct mount_event_t { - struct kevent_t event; - struct process_context_t process; - struct span_context_t span; - struct container_context_t container; - struct syscall_t syscall; +struct mount_fields_t { u32 mount_id; u32 group_id; dev_t device; @@ -18,16 +13,196 @@ struct mount_event_t { unsigned long parent_inode; unsigned long root_inode; u32 root_mount_id; - u32 padding; + u32 bind_src_mount_id; char fstype[FSTYPE_LEN]; }; +struct mount_event_t { + struct kevent_t event; + struct process_context_t process; + struct span_context_t span; + struct container_context_t container; + struct syscall_t syscall; + struct mount_fields_t mountfields; +}; + +struct unshare_mntns_event_t { + struct kevent_t event; + struct mount_fields_t mountfields; +}; + SYSCALL_COMPAT_KPROBE3(mount, const char*, source, const char*, target, const char*, fstype) { struct syscall_cache_t syscall = { .type = EVENT_MOUNT, }; cache_syscall(&syscall); + + return 0; +} + +SYSCALL_KPROBE1(unshare, unsigned long, flags) { + struct syscall_cache_t syscall = { + .type = EVENT_UNSHARE_MNTNS, + .unshare_mntns = { + .flags = flags, + }, + }; + + // unshare is only used to propagate mounts created when a mount namespace is copied + if (!(syscall.unshare_mntns.flags & CLONE_NEWNS)) { + return 0; + } + + cache_syscall(&syscall); + + return 0; +} + +SEC("kprobe/attach_mnt") +int kprobe_attach_mnt(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_syscall(EVENT_UNSHARE_MNTNS); + if (!syscall) { + return 0; + } + + syscall->unshare_mntns.mnt = (struct mount *)PT_REGS_PARM1(ctx); + syscall->unshare_mntns.parent = (struct mount *)PT_REGS_PARM2(ctx); + struct mountpoint *mp = (struct mountpoint *)PT_REGS_PARM3(ctx); + syscall->unshare_mntns.mp_dentry = get_mountpoint_dentry(mp); + + struct dentry *dentry = get_vfsmount_dentry(get_mount_vfsmount(syscall->unshare_mntns.mnt)); + syscall->unshare_mntns.root_key.mount_id = get_mount_mount_id(syscall->unshare_mntns.mnt); + syscall->unshare_mntns.root_key.ino = get_dentry_ino(dentry); + + struct super_block *sb = get_dentry_sb(dentry); + struct file_system_type *s_type = get_super_block_fs(sb); + bpf_probe_read(&syscall->unshare_mntns.fstype, sizeof(syscall->unshare_mntns.fstype), &s_type->name); + + syscall->resolver.key = syscall->unshare_mntns.root_key; + syscall->resolver.dentry = dentry; + syscall->resolver.discarder_type = 0; + syscall->resolver.callback = DR_UNSHARE_MNTNS_STAGE_ONE_CALLBACK_KPROBE_KEY; + syscall->resolver.iteration = 0; + syscall->resolver.ret = 0; + + resolve_dentry(ctx, DR_KPROBE); + return 0; +} + +SEC("kprobe/__attach_mnt") +int kprobe___attach_mnt(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_syscall(EVENT_UNSHARE_MNTNS); + if (!syscall) { + return 0; + } + + struct mount *mnt = (struct mount *)PT_REGS_PARM1(ctx); + + // check if mnt has already been processed in case both attach_mnt and __attach_mnt are loaded + if (syscall->unshare_mntns.mnt == mnt) { + return 0; + } + + syscall->unshare_mntns.mnt = (struct mount *)PT_REGS_PARM1(ctx); + syscall->unshare_mntns.parent = (struct mount *)PT_REGS_PARM2(ctx); + syscall->unshare_mntns.mp_dentry = get_mount_mountpoint_dentry(syscall->unshare_mntns.mnt); + + struct dentry *dentry = get_vfsmount_dentry(get_mount_vfsmount(syscall->unshare_mntns.mnt)); + syscall->unshare_mntns.root_key.mount_id = get_mount_mount_id(syscall->unshare_mntns.mnt); + syscall->unshare_mntns.root_key.ino = get_dentry_ino(dentry); + + struct super_block *sb = get_dentry_sb(dentry); + struct file_system_type *s_type = get_super_block_fs(sb); + bpf_probe_read(&syscall->unshare_mntns.fstype, sizeof(syscall->unshare_mntns.fstype), &s_type->name); + + syscall->resolver.key = syscall->unshare_mntns.root_key; + syscall->resolver.dentry = dentry; + syscall->resolver.discarder_type = 0; + syscall->resolver.callback = DR_UNSHARE_MNTNS_STAGE_ONE_CALLBACK_KPROBE_KEY; + syscall->resolver.iteration = 0; + syscall->resolver.ret = 0; + + resolve_dentry(ctx, DR_KPROBE); + return 0; +} + +SEC("kprobe/dr_unshare_mntns_stage_one_callback") +int __attribute__((always_inline)) kprobe_dr_unshare_mntns_stage_one_callback(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_syscall(EVENT_UNSHARE_MNTNS); + if (!syscall) { + return 0; + } + + struct dentry *mp_dentry = syscall->unshare_mntns.mp_dentry; + + syscall->unshare_mntns.path_key.mount_id = get_mount_mount_id(syscall->unshare_mntns.parent); + syscall->unshare_mntns.path_key.ino = get_dentry_ino(mp_dentry); + + syscall->resolver.key = syscall->unshare_mntns.path_key; + syscall->resolver.dentry = mp_dentry; + syscall->resolver.discarder_type = 0; + syscall->resolver.callback = DR_UNSHARE_MNTNS_STAGE_TWO_CALLBACK_KPROBE_KEY; + syscall->resolver.iteration = 0; + syscall->resolver.ret = 0; + + resolve_dentry(ctx, DR_KPROBE); + return 0; +} + +SEC("kprobe/dr_unshare_mntns_stage_two_callback") +int __attribute__((always_inline)) kprobe_dr_unshare_mntns_stage_two_callback(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_syscall(EVENT_UNSHARE_MNTNS); + if (!syscall) { + return 0; + } + + struct unshare_mntns_event_t event = { + .mountfields.mount_id = get_mount_mount_id(syscall->unshare_mntns.mnt), + .mountfields.group_id = get_mount_peer_group_id(syscall->unshare_mntns.mnt), + .mountfields.device = get_mount_dev(syscall->unshare_mntns.mnt), + .mountfields.parent_mount_id = syscall->unshare_mntns.path_key.mount_id, + .mountfields.parent_inode = syscall->unshare_mntns.path_key.ino, + .mountfields.root_inode = syscall->unshare_mntns.root_key.ino, + .mountfields.root_mount_id = syscall->unshare_mntns.root_key.mount_id, + .mountfields.bind_src_mount_id = 0, // do not consider mnt ns copies as bind mounts + }; + bpf_probe_read_str(&event.mountfields.fstype, FSTYPE_LEN, (void*) syscall->unshare_mntns.fstype); + + if (event.mountfields.mount_id == 0 && event.mountfields.device == 0) { + return 0; + } + + send_event(ctx, EVENT_UNSHARE_MNTNS, event); + + return 0; +} + +SEC("kprobe/clone_mnt") +int kprobe_clone_mnt(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_syscall(EVENT_MOUNT); + if (!syscall) { + return 0; + } + + if (syscall->mount.bind_src_mnt || syscall->mount.src_mnt) { + return 0; + } + + syscall->mount.bind_src_mnt = (struct mount *)PT_REGS_PARM1(ctx); + + syscall->mount.bind_src_key.mount_id = get_mount_mount_id(syscall->mount.bind_src_mnt); + struct dentry *mount_dentry = get_mount_mountpoint_dentry(syscall->mount.bind_src_mnt); + syscall->mount.bind_src_key.ino = get_dentry_ino(mount_dentry); + + syscall->resolver.key = syscall->mount.bind_src_key; + syscall->resolver.dentry = mount_dentry; + syscall->resolver.discarder_type = 0; + syscall->resolver.callback = DR_NO_CALLBACK; + syscall->resolver.iteration = 0; + syscall->resolver.ret = 0; + + resolve_dentry(ctx, DR_KPROBE); return 0; } @@ -143,17 +318,18 @@ int __attribute__((always_inline)) dr_mount_callback(void *ctx, int retval) { struct mount_event_t event = { .syscall.retval = retval, .event.async = 0, - .mount_id = get_mount_mount_id(syscall->mount.src_mnt), - .group_id = get_mount_peer_group_id(syscall->mount.src_mnt), - .device = get_mount_dev(syscall->mount.src_mnt), - .parent_mount_id = syscall->mount.path_key.mount_id, - .parent_inode = syscall->mount.path_key.ino, - .root_inode = syscall->mount.root_key.ino, - .root_mount_id = syscall->mount.root_key.mount_id, + .mountfields.mount_id = get_mount_mount_id(syscall->mount.src_mnt), + .mountfields.group_id = get_mount_peer_group_id(syscall->mount.src_mnt), + .mountfields.device = get_mount_dev(syscall->mount.src_mnt), + .mountfields.parent_mount_id = syscall->mount.path_key.mount_id, + .mountfields.parent_inode = syscall->mount.path_key.ino, + .mountfields.root_inode = syscall->mount.root_key.ino, + .mountfields.root_mount_id = syscall->mount.root_key.mount_id, + .mountfields.bind_src_mount_id = syscall->mount.bind_src_key.mount_id, }; - bpf_probe_read_str(&event.fstype, FSTYPE_LEN, (void*) syscall->mount.fstype); + bpf_probe_read_str(&event.mountfields.fstype, FSTYPE_LEN, (void*) syscall->mount.fstype); - if (event.mount_id == 0 && event.device == 0) { + if (event.mountfields.mount_id == 0 && event.mountfields.device == 0) { return 0; } diff --git a/pkg/security/ebpf/c/mprotect.h b/pkg/security/ebpf/c/mprotect.h index 872fba839b795..2aaf2d75601f7 100644 --- a/pkg/security/ebpf/c/mprotect.h +++ b/pkg/security/ebpf/c/mprotect.h @@ -6,8 +6,6 @@ struct bpf_map_def SEC("maps/mprotect_vm_protection_approvers") mprotect_vm_prot .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 1, - .pinning = 0, - .namespace = "", }; int __attribute__((always_inline)) approve_mprotect_by_vm_protection(struct syscall_cache_t *syscall) { @@ -24,8 +22,6 @@ struct bpf_map_def SEC("maps/mprotect_req_protection_approvers") mprotect_req_pr .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 1, - .pinning = 0, - .namespace = "", }; int __attribute__((always_inline)) approve_mprotect_by_req_protection(struct syscall_cache_t *syscall) { diff --git a/pkg/security/ebpf/c/net_device.h b/pkg/security/ebpf/c/net_device.h index 962816a6010ee..89614bb7b348b 100644 --- a/pkg/security/ebpf/c/net_device.h +++ b/pkg/security/ebpf/c/net_device.h @@ -54,8 +54,6 @@ struct bpf_map_def SEC("maps/veth_state_machine") veth_state_machine = { .key_size = sizeof(u64), .value_size = sizeof(struct veth_state_t), .max_entries = 1024, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/veth_devices") veth_devices = { @@ -63,8 +61,6 @@ struct bpf_map_def SEC("maps/veth_devices") veth_devices = { .key_size = sizeof(struct device_ifindex_t), .value_size = sizeof(struct device_t), .max_entries = 1024, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/veth_device_name_to_ifindex") veth_device_name_to_ifindex = { @@ -72,8 +68,6 @@ struct bpf_map_def SEC("maps/veth_device_name_to_ifindex") veth_device_name_to_i .key_size = sizeof(struct device_name_t), .value_size = sizeof(struct device_ifindex_t), .max_entries = 1024, - .pinning = 0, - .namespace = "", }; struct register_netdevice_cache_t { @@ -86,8 +80,6 @@ struct bpf_map_def SEC("maps/register_netdevice_cache") register_netdevice_cache .key_size = sizeof(u64), .value_size = sizeof(struct register_netdevice_cache_t), .max_entries = 1024, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/netdevice_lookup_cache") netdevice_lookup_cache = { @@ -95,8 +87,6 @@ struct bpf_map_def SEC("maps/netdevice_lookup_cache") netdevice_lookup_cache = { .key_size = sizeof(u64), .value_size = sizeof(struct device_ifindex_t), .max_entries = 1024, - .pinning = 0, - .namespace = "", }; SEC("kprobe/veth_newlink") diff --git a/pkg/security/ebpf/c/network_parser.h b/pkg/security/ebpf/c/network_parser.h index 7492b3e436f73..75af719de2646 100644 --- a/pkg/security/ebpf/c/network_parser.h +++ b/pkg/security/ebpf/c/network_parser.h @@ -59,8 +59,6 @@ struct bpf_map_def SEC("maps/packets") packets = { .key_size = sizeof(u32), .value_size = sizeof(struct packet_t), .max_entries = 1, - .pinning = 0, - .namespace = "", }; __attribute__((always_inline)) struct packet_t *get_packet() { diff --git a/pkg/security/ebpf/c/open.h b/pkg/security/ebpf/c/open.h index 097f58f688dc5..1e1709ac4a1fa 100644 --- a/pkg/security/ebpf/c/open.h +++ b/pkg/security/ebpf/c/open.h @@ -11,8 +11,6 @@ struct bpf_map_def SEC("maps/open_flags_approvers") open_flags_approvers = { .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 1, - .pinning = 0, - .namespace = "", }; struct open_event_t { diff --git a/pkg/security/ebpf/c/overlayfs.h b/pkg/security/ebpf/c/overlayfs.h index 7228ba720cffd..7228aed0275f0 100644 --- a/pkg/security/ebpf/c/overlayfs.h +++ b/pkg/security/ebpf/c/overlayfs.h @@ -1,35 +1,13 @@ #ifndef _OVERLAYFS_H_ #define _OVERLAYFS_H_ -#include "syscalls.h" - -#define OVERLAYFS_SUPER_MAGIC 0x794c7630 +#include -int __attribute__((always_inline)) get_sizeof_inode() { - u64 sizeof_inode; - LOAD_CONSTANT("sizeof_inode", sizeof_inode); - - return sizeof_inode; -} - -int __attribute__((always_inline)) get_sb_magic_offset() { - u64 offset; - LOAD_CONSTANT("sb_magic_offset", offset); - - return offset; -} +#include "syscalls.h" static __attribute__((always_inline)) int is_overlayfs(struct dentry *dentry) { - struct inode *d_inode; - bpf_probe_read(&d_inode, sizeof(d_inode), &dentry->d_inode); - - struct super_block *sb; - bpf_probe_read(&sb, sizeof(sb), &d_inode->i_sb); - - u64 magic; - bpf_probe_read(&magic, sizeof(magic), (char *)sb + get_sb_magic_offset()); - - return magic == OVERLAYFS_SUPER_MAGIC; + struct super_block *sb = get_dentry_sb(dentry); + return get_sb_magic(sb) == OVERLAYFS_SUPER_MAGIC; } int __attribute__((always_inline)) get_ovl_lower_ino(struct dentry *dentry) { diff --git a/pkg/security/ebpf/c/pipe.h b/pkg/security/ebpf/c/pipe.h index 5cb3a6585ddde..862ff3afeb416 100644 --- a/pkg/security/ebpf/c/pipe.h +++ b/pkg/security/ebpf/c/pipe.h @@ -6,8 +6,6 @@ struct bpf_map_def SEC("maps/pipefs_mountid") pipefs_mountid = { .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 1, - .pinning = 0, - .namespace = "", }; #define DECLARE_EQUAL_TO_SUFFIXED(suffix, s) static __attribute__((always_inline)) int equal_to_##suffix(char *str) { \ diff --git a/pkg/security/ebpf/c/prebuilt/offset-guesser.c b/pkg/security/ebpf/c/prebuilt/offset-guesser.c index b6ead577939b2..1869bd6580db8 100644 --- a/pkg/security/ebpf/c/prebuilt/offset-guesser.c +++ b/pkg/security/ebpf/c/prebuilt/offset-guesser.c @@ -6,10 +6,16 @@ #include #include -#include "bpf_helpers.h" +#include "bpf_tracing.h" #include "constants.h" + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + #include "offset.h" +#pragma clang diagnostic pop + __u32 _version SEC("version") = 0xFFFFFFFE; char LICENSE[] SEC("license") = "GPL"; diff --git a/pkg/security/ebpf/c/prebuilt/probe.c b/pkg/security/ebpf/c/prebuilt/probe.c index b0938bf088d06..8dafff3b5f3c4 100644 --- a/pkg/security/ebpf/c/prebuilt/probe.c +++ b/pkg/security/ebpf/c/prebuilt/probe.c @@ -19,6 +19,9 @@ #include #include +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + #include "defs.h" #include "buffer_selector.h" #include "process.h" @@ -75,6 +78,8 @@ #include "procfs.h" #include "offset.h" +#pragma clang diagnostic pop + struct invalidate_dentry_event_t { struct kevent_t event; u64 inode; diff --git a/pkg/security/ebpf/c/process.h b/pkg/security/ebpf/c/process.h index f0fdfe5cd3b44..d68af44ca818a 100644 --- a/pkg/security/ebpf/c/process.h +++ b/pkg/security/ebpf/c/process.h @@ -46,8 +46,6 @@ struct bpf_map_def SEC("maps/proc_cache") proc_cache = { .key_size = sizeof(u32), .value_size = sizeof(struct proc_cache_t), .max_entries = 16384, - .pinning = 0, - .namespace = "", }; static void __attribute__((always_inline)) fill_container_context(struct proc_cache_t *entry, struct container_context_t *context) { @@ -91,8 +89,6 @@ struct bpf_map_def SEC("maps/pid_cache") pid_cache = { .key_size = sizeof(u32), .value_size = sizeof(struct pid_cache_t), .max_entries = 16384, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/pid_ignored") pid_ignored = { @@ -100,8 +96,6 @@ struct bpf_map_def SEC("maps/pid_ignored") pid_ignored = { .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 16738, - .pinning = 0, - .namespace = "", }; // defined in exec.h @@ -122,8 +116,6 @@ struct bpf_map_def SEC("maps/netns_cache") netns_cache = { .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 40960, - .pinning = 0, - .namespace = "", }; static struct proc_cache_t * __attribute__((always_inline)) fill_process_context_with_pid_tgid(struct process_context_t *data, u64 pid_tgid) { @@ -159,8 +151,6 @@ struct bpf_map_def SEC("maps/root_nr_namespace_nr") root_nr_namespace_nr = { .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 32768, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/namespace_nr_root_nr") namespace_nr_root_nr = { @@ -168,8 +158,6 @@ struct bpf_map_def SEC("maps/namespace_nr_root_nr") namespace_nr_root_nr = { .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 32768, - .pinning = 0, - .namespace = "", }; void __attribute__((always_inline)) register_nr(u32 root_nr, u64 namespace_nr) { diff --git a/pkg/security/ebpf/c/procfs.h b/pkg/security/ebpf/c/procfs.h index 4cbe6a87b3ed1..aa7adade5c606 100644 --- a/pkg/security/ebpf/c/procfs.h +++ b/pkg/security/ebpf/c/procfs.h @@ -6,8 +6,6 @@ struct bpf_map_def SEC("maps/exec_file_cache") exec_file_cache = { .key_size = sizeof(u64), .value_size = sizeof(struct file_t), .max_entries = 4096, - .pinning = 0, - .namespace = "", }; __attribute__((always_inline)) int is_snapshot_process() { @@ -76,8 +74,6 @@ struct bpf_map_def SEC("maps/fd_link_pid") fd_link_pid = { .key_size = sizeof(u8), .value_size = sizeof(u32), .max_entries = 1, - .pinning = 0, - .namespace = "", }; SEC("kprobe/path_get") diff --git a/pkg/security/ebpf/c/raw_syscalls.h b/pkg/security/ebpf/c/raw_syscalls.h index 49ba0e466f540..6f824cd6c4770 100644 --- a/pkg/security/ebpf/c/raw_syscalls.h +++ b/pkg/security/ebpf/c/raw_syscalls.h @@ -32,8 +32,6 @@ struct bpf_map_def SEC("maps/syscall_monitor") syscall_monitor = { .key_size = sizeof(u32), .value_size = sizeof(struct syscall_monitor_entry_t), .max_entries = 2048, - .pinning = 0, - .namespace = "", }; #define EXIT_SYSCALL_KEY 1 @@ -49,8 +47,6 @@ struct bpf_map_def SEC("maps/syscall_table") syscall_table = { .key_size = sizeof(struct syscall_table_key_t), .value_size = sizeof(u8), .max_entries = 50, - .pinning = 0, - .namespace = "", }; __attribute__((always_inline)) u8 is_syscall(struct syscall_table_key_t *key) { diff --git a/pkg/security/ebpf/c/selinux.h b/pkg/security/ebpf/c/selinux.h index 20643d31ee415..ea37622a49c77 100644 --- a/pkg/security/ebpf/c/selinux.h +++ b/pkg/security/ebpf/c/selinux.h @@ -42,8 +42,6 @@ struct bpf_map_def SEC("maps/selinux_write_buffer") selinux_write_buffer = { .key_size = sizeof(u32), .value_size = sizeof(struct selinux_write_buffer_t), .max_entries = 1, - .pinning = 0, - .namespace = "", }; struct bpf_map_def SEC("maps/selinux_enforce_status") selinux_enforce_status = { @@ -51,8 +49,6 @@ struct bpf_map_def SEC("maps/selinux_enforce_status") selinux_enforce_status = { .key_size = sizeof(u32), .value_size = sizeof(u16), .max_entries = 2, - .pinning = 0, - .namespace = "", }; #define SELINUX_ENFORCE_STATUS_DISABLE_KEY 0 diff --git a/pkg/security/ebpf/c/span.h b/pkg/security/ebpf/c/span.h index 350b0f8a8a6d7..83c8cb9f6a181 100644 --- a/pkg/security/ebpf/c/span.h +++ b/pkg/security/ebpf/c/span.h @@ -18,8 +18,6 @@ struct bpf_map_def SEC("maps/span_tls") span_tls = { .key_size = sizeof(u32), .value_size = sizeof(struct span_tls_t), .max_entries = 4096, - .pinning = 0, - .namespace = "", }; // defined in process.h diff --git a/pkg/security/ebpf/c/splice.h b/pkg/security/ebpf/c/splice.h index 2979c2f55a395..c962c46d92d03 100644 --- a/pkg/security/ebpf/c/splice.h +++ b/pkg/security/ebpf/c/splice.h @@ -6,8 +6,6 @@ struct bpf_map_def SEC("maps/splice_entry_flags_approvers") splice_entry_flags_a .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 1, - .pinning = 0, - .namespace = "", }; int __attribute__((always_inline)) approve_splice_by_entry_flags(struct syscall_cache_t *syscall) { @@ -24,8 +22,6 @@ struct bpf_map_def SEC("maps/splice_exit_flags_approvers") splice_exit_flags_app .key_size = sizeof(u32), .value_size = sizeof(u32), .max_entries = 1, - .pinning = 0, - .namespace = "", }; int __attribute__((always_inline)) approve_splice_by_exit_flags(struct syscall_cache_t *syscall) { diff --git a/pkg/security/ebpf/c/syscalls.h b/pkg/security/ebpf/c/syscalls.h index c96a8ce7f7d2e..d0346947f381c 100644 --- a/pkg/security/ebpf/c/syscalls.h +++ b/pkg/security/ebpf/c/syscalls.h @@ -14,7 +14,7 @@ enum { struct str_array_ref_t { u32 id; - u8 index; + u32 index; u8 truncated; const char **array; }; @@ -108,9 +108,11 @@ struct syscall_cache_t { struct { struct mount *src_mnt; struct mount *dest_mnt; + struct mount *bind_src_mnt; struct mountpoint *dest_mountpoint; struct path_key_t root_key; struct path_key_t path_key; + struct path_key_t bind_src_key; const char *fstype; } mount; @@ -139,7 +141,6 @@ struct syscall_cache_t { struct str_array_ref_t envs; struct span_context_t span_context; struct linux_binprm_t linux_binprm; - u32 next_tail; u8 is_parsed; } exec; @@ -216,6 +217,16 @@ struct syscall_cache_t { u16 family; u16 port; } bind; + + struct { + struct mount *mnt; + struct mount *parent; + struct dentry *mp_dentry; + const char *fstype; + struct path_key_t root_key; + struct path_key_t path_key; + unsigned long flags; + } unshare_mntns; }; }; @@ -224,8 +235,6 @@ struct bpf_map_def SEC("maps/syscalls") syscalls = { .key_size = sizeof(u64), .value_size = sizeof(struct syscall_cache_t), .max_entries = 1024, - .pinning = 0, - .namespace = "", }; struct policy_t __attribute__((always_inline)) fetch_policy(u64 event_type) { diff --git a/pkg/security/ebpf/probes/const.go b/pkg/security/ebpf/probes/const.go index 022ce9cb10ca6..71127a796433e 100644 --- a/pkg/security/ebpf/probes/const.go +++ b/pkg/security/ebpf/probes/const.go @@ -56,6 +56,10 @@ const ( DentryResolverRenameCallbackKprobeKey // DentryResolverSELinuxCallbackKprobeKey is the key to the callback program to execute after resolving the destination dentry of a selinux event DentryResolverSELinuxCallbackKprobeKey + // DentryResolverUnshareMntNSStageOneCallbackKprobeKey is the key to the callback program to execute after resolving the dentry of a cloned mount when a new mount namespace is created using unshare + DentryResolverUnshareMntNSStageOneCallbackKprobeKey + // DentryResolverUnshareMntNSStageTwoCallbackKprobeKey is the key to the callback program to execute after resolving the dentry of a cloned mount mountpoint when a new mount namespace is created using unshare + DentryResolverUnshareMntNSStageTwoCallbackKprobeKey ) const ( diff --git a/pkg/security/ebpf/probes/dentry.go b/pkg/security/ebpf/probes/dentry.go index 86f0c32eb2fa6..d58816cb1661f 100644 --- a/pkg/security/ebpf/probes/dentry.go +++ b/pkg/security/ebpf/probes/dentry.go @@ -138,6 +138,22 @@ func getDentryResolverTailCallRoutes(ERPCDentryResolutionEnabled, supportMmapabl EBPFFuncName: "kprobe_dr_selinux_callback", }, }, + { + ProgArrayName: "dentry_resolver_kprobe_callbacks", + Key: DentryResolverUnshareMntNSStageOneCallbackKprobeKey, + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: "kprobe/dr_unshare_mntns_stage_one_callback", + EBPFFuncName: "kprobe_dr_unshare_mntns_stage_one_callback", + }, + }, + { + ProgArrayName: "dentry_resolver_kprobe_callbacks", + Key: DentryResolverUnshareMntNSStageTwoCallbackKprobeKey, + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: "kprobe/dr_unshare_mntns_stage_two_callback", + EBPFFuncName: "kprobe_dr_unshare_mntns_stage_two_callback", + }, + }, // dentry resolver tracepoint callbacks { diff --git a/pkg/security/ebpf/probes/event_types.go b/pkg/security/ebpf/probes/event_types.go index 42027b9245971..068db081e9dc6 100644 --- a/pkg/security/ebpf/probes/event_types.go +++ b/pkg/security/ebpf/probes/event_types.go @@ -241,6 +241,7 @@ func GetSelectorsPerEventType() map[eval.EventType][]manager.ProbesSelector { &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/attach_recursive_mnt", EBPFFuncName: "kprobe_attach_recursive_mnt"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/propagate_mnt", EBPFFuncName: "kprobe_propagate_mnt"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/security_sb_umount", EBPFFuncName: "kprobe_security_sb_umount"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/clone_mnt", EBPFFuncName: "kprobe_clone_mnt"}}, }}, &manager.OneOf{Selectors: ExpandSyscallProbesSelector( manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "mount"}, EntryAndExit, true), @@ -248,6 +249,13 @@ func GetSelectorsPerEventType() map[eval.EventType][]manager.ProbesSelector { &manager.OneOf{Selectors: ExpandSyscallProbesSelector( manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "umount"}, EntryAndExit), }, + &manager.OneOf{Selectors: ExpandSyscallProbesSelector( + manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "unshare"}, Entry), + }, + &manager.OneOf{Selectors: []manager.ProbesSelector{ + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/__attach_mnt", EBPFFuncName: "kprobe___attach_mnt"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/attach_mnt", EBPFFuncName: "kprobe_attach_mnt"}}, + }}, // Rename probes &manager.AllOf{Selectors: []manager.ProbesSelector{ diff --git a/pkg/security/ebpf/probes/exec.go b/pkg/security/ebpf/probes/exec.go index 0f1c834c56993..64176b2c7b737 100644 --- a/pkg/security/ebpf/probes/exec.go +++ b/pkg/security/ebpf/probes/exec.go @@ -227,19 +227,14 @@ func getExecProbes() []*manager.Probe { } func getExecTailCallRoutes() []manager.TailCallRoute { - var routes []manager.TailCallRoute - - for i := uint32(0); i != 10; i++ { - route := manager.TailCallRoute{ + return []manager.TailCallRoute{ + { ProgArrayName: "args_envs_progs", - Key: i, + Key: 0, ProbeIdentificationPair: manager.ProbeIdentificationPair{ EBPFSection: "kprobe/parse_args_envs", EBPFFuncName: "kprobe_parse_args_envs", }, - } - routes = append(routes, route) + }, } - - return routes } diff --git a/pkg/security/ebpf/probes/mount.go b/pkg/security/ebpf/probes/mount.go index 33dba12409565..5bd376673028e 100644 --- a/pkg/security/ebpf/probes/mount.go +++ b/pkg/security/ebpf/probes/mount.go @@ -33,6 +33,27 @@ var mountProbes = []*manager.Probe{ EBPFFuncName: "kprobe_security_sb_umount", }, }, + { + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + UID: SecurityAgentUID, + EBPFSection: "kprobe/clone_mnt", + EBPFFuncName: "kprobe_clone_mnt", + }, + }, + { + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + UID: SecurityAgentUID, + EBPFSection: "kprobe/__attach_mnt", + EBPFFuncName: "kprobe___attach_mnt", + }, + }, + { + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + UID: SecurityAgentUID, + EBPFSection: "kprobe/attach_mnt", + EBPFFuncName: "kprobe_attach_mnt", + }, + }, } func getMountProbes() []*manager.Probe { @@ -48,5 +69,12 @@ func getMountProbes() []*manager.Probe { }, SyscallFuncName: "umount", }, EntryAndExit)...) + mountProbes = append(mountProbes, ExpandSyscallProbes(&manager.Probe{ + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + UID: SecurityAgentUID, + }, + SyscallFuncName: "unshare", + }, Entry)...) + return mountProbes } diff --git a/pkg/security/events/custom.go b/pkg/security/events/custom.go new file mode 100644 index 0000000000000..c92d49f7a6996 --- /dev/null +++ b/pkg/security/events/custom.go @@ -0,0 +1,101 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package events + +import ( + "encoding/json" + + "github.com/mailru/easyjson" + + "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" + "github.com/DataDog/datadog-agent/pkg/security/secl/rules" +) + +const ( + // LostEventsRuleID is the rule ID for the lost_events_* events + LostEventsRuleID = "lost_events" + // RulesetLoadedRuleID is the rule ID for the ruleset_loaded events + RulesetLoadedRuleID = "ruleset_loaded" + // NoisyProcessRuleID is the rule ID for the noisy_process events + NoisyProcessRuleID = "noisy_process" + // AbnormalPathRuleID is the rule ID for the abnormal_path events + AbnormalPathRuleID = "abnormal_path" + // SelfTestRuleID is the rule ID for the self_test events + SelfTestRuleID = "self_test" +) + +// NewCustomRule returns a new custom rule +func NewCustomRule(id eval.RuleID) *rules.Rule { + return &rules.Rule{ + Rule: &eval.Rule{ID: id}, + Definition: &rules.RuleDefinition{ID: id}, + } +} + +// AllCustomRuleIDs returns the list of custom rule IDs +func AllCustomRuleIDs() []string { + return []string{ + LostEventsRuleID, + RulesetLoadedRuleID, + NoisyProcessRuleID, + AbnormalPathRuleID, + SelfTestRuleID, + } +} + +// NewCustomEvent returns a new custom event +func NewCustomEvent(eventType model.EventType, marshaler easyjson.Marshaler) *CustomEvent { + return &CustomEvent{ + eventType: eventType, + marshaler: marshaler, + } +} + +// CustomEvent is used to send custom security events to Datadog +type CustomEvent struct { + eventType model.EventType + tags []string + marshaler easyjson.Marshaler +} + +// Clone returns a copy of the current CustomEvent +func (ce *CustomEvent) Clone() CustomEvent { + return CustomEvent{ + eventType: ce.eventType, + tags: ce.tags, + marshaler: ce.marshaler, + } +} + +// GetTags returns the tags of the custom event +func (ce *CustomEvent) GetTags() []string { + return append(ce.tags, "type:"+ce.GetType()) +} + +// GetType returns the type of the custom event as a string +func (ce *CustomEvent) GetType() string { + return ce.eventType.String() +} + +// GetEventType returns the event type +func (ce *CustomEvent) GetEventType() model.EventType { + return ce.eventType +} + +// MarshalJSON is the JSON marshaller function of the custom event +func (ce *CustomEvent) MarshalJSON() ([]byte, error) { + return easyjson.Marshal(ce.marshaler) +} + +// String returns the string representation of a custom event +func (ce *CustomEvent) String() string { + d, err := json.Marshal(ce) + if err != nil { + return err.Error() + } + return string(d) +} diff --git a/pkg/security/module/event.go b/pkg/security/module/event.go index de7e39b91647c..c73444f372316 100644 --- a/pkg/security/module/event.go +++ b/pkg/security/module/event.go @@ -35,4 +35,5 @@ type Event interface { // EventSender defines an event sender type EventSender interface { SendEvent(rule *rules.Rule, event Event, extTagsCb func() []string, service string) + SendProcessEventData(data []byte) } diff --git a/pkg/security/module/module.go b/pkg/security/module/module.go index 3c92b98f634fc..734c6d50edb2b 100644 --- a/pkg/security/module/module.go +++ b/pkg/security/module/module.go @@ -29,6 +29,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/system-probe/api/module" sapi "github.com/DataDog/datadog-agent/pkg/security/api" sconfig "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/metrics" sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/probe/selftests" @@ -328,7 +329,7 @@ func (m *Module) newRuleOpts() (opts rules.Opts) { opts. WithSupportedDiscarders(sprobe.SupportedDiscarders). WithEventTypeEnabled(m.getEventTypeEnabled()). - WithReservedRuleIDs(sprobe.AllCustomRuleIDs()). + WithReservedRuleIDs(events.AllCustomRuleIDs()). WithLogger(seclog.DefaultLogger) return } @@ -348,14 +349,13 @@ func (m *Module) getApproverRuleset(policyProviders []rules.PolicyProvider) (*ru opts.WithStateScopes(map[rules.Scope]rules.VariableProviderFactory{ "process": func() rules.VariableProvider { return eval.NewScopedVariables(func(ctx *eval.Context) unsafe.Pointer { - return unsafe.Pointer(&(*model.Event)(ctx.Object).ProcessContext) + return unsafe.Pointer(&ctx.Event.(*model.Event).ProcessContext) }, nil) }, }) // approver ruleset - model := &model.Model{} - approverRuleSet := rules.NewRuleSet(model, model.NewEvent, &opts, &evalOpts, &eval.MacroStore{}) + approverRuleSet := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) // load policies loadApproversErrs := approverRuleSet.LoadPolicies(m.policyLoader, m.policyOpts) @@ -394,7 +394,7 @@ func (m *Module) LoadPolicies(policyProviders []rules.PolicyProvider, sendLoaded WithStateScopes(map[rules.Scope]rules.VariableProviderFactory{ "process": func() rules.VariableProvider { scoper := func(ctx *eval.Context) unsafe.Pointer { - return unsafe.Pointer((*sprobe.Event)(ctx.Object).ProcessCacheEntry) + return unsafe.Pointer(ctx.Event.(*model.Event).ProcessCacheEntry) } return m.probe.GetResolvers().ProcessResolver.NewProcessVariables(scoper) }, @@ -404,7 +404,7 @@ func (m *Module) LoadPolicies(policyProviders []rules.PolicyProvider, sendLoaded evalOpts.WithVariables(model.SECLVariables) // standard ruleset - ruleSet := m.probe.NewRuleSet(&opts, &evalOpts, &eval.MacroStore{}) + ruleSet := m.probe.NewRuleSet(&opts, &evalOpts) loadErrs := ruleSet.LoadPolicies(m.policyLoader, m.policyOpts) if loadApproversErrs.ErrorOrNil() == nil && loadErrs.ErrorOrNil() != nil { @@ -430,21 +430,20 @@ func (m *Module) LoadPolicies(policyProviders []rules.PolicyProvider, sendLoaded return err } + // set the rate limiters + m.rateLimiter.Apply(ruleSet, events.AllCustomRuleIDs()) + // full list of IDs, user rules + custom var ruleIDs []rules.RuleID ruleIDs = append(ruleIDs, ruleSet.ListRuleIDs()...) - ruleIDs = append(ruleIDs, sprobe.AllCustomRuleIDs()...) + ruleIDs = append(ruleIDs, events.AllCustomRuleIDs()...) m.apiServer.Apply(ruleIDs) - m.rateLimiter.Apply(ruleSet) m.displayReport(report) if sendLoadedReport { - // report that a new policy was loaded - monitor := m.probe.GetMonitor() - monitor.ReportRuleSetLoaded(ruleSet, loadApproversErrs) - + ReportRuleSetLoaded(m.eventSender, m.statsdClient, ruleSet, loadApproversErrs) m.policyMonitor.AddPolicies(ruleSet.GetPolicies(), loadApproversErrs) } @@ -492,13 +491,13 @@ func (m *Module) EventDiscarderFound(rs *rules.RuleSet, event eval.Event, field return } - if err := m.probe.OnNewDiscarder(rs, event.(*sprobe.Event), field, eventType); err != nil { + if err := m.probe.OnNewDiscarder(rs, event.(*model.Event), field, eventType); err != nil { seclog.Trace(err) } } // HandleEvent is called by the probe when an event arrives from the kernel -func (m *Module) HandleEvent(event *sprobe.Event) { +func (m *Module) HandleEvent(event *model.Event) { // if the event should have been discarded in kernel space, we don't need to evaluate it if event.SavedByActivityDumps { return @@ -510,20 +509,22 @@ func (m *Module) HandleEvent(event *sprobe.Event) { } // HandleCustomEvent is called by the probe when an event should be sent to Datadog but doesn't need evaluation -func (m *Module) HandleCustomEvent(rule *rules.Rule, event *sprobe.CustomEvent) { +func (m *Module) HandleCustomEvent(rule *rules.Rule, event *events.CustomEvent) { m.eventSender.SendEvent(rule, event, func() []string { return nil }, "") } // RuleMatch is called by the ruleset when a rule matches func (m *Module) RuleMatch(rule *rules.Rule, event eval.Event) { + ev := event.(*model.Event) + // prepare the event - m.probe.OnRuleMatch(rule, event.(*sprobe.Event)) + m.probe.OnRuleMatch(rule, ev) // needs to be resolved here, outside of the callback as using process tree // which can be modified during queuing - service := event.(*sprobe.Event).GetProcessServiceTag() + service := ev.FieldHandlers.GetProcessServiceTag(ev) - id := event.(*sprobe.Event).ContainerContext.ID + id := ev.ContainerContext.ID extTagsCb := func() []string { var tags []string @@ -541,7 +542,7 @@ func (m *Module) RuleMatch(rule *rules.Rule, event eval.Event) { } // send if not selftest related events - if m.selfTester == nil || !m.selfTester.IsExpectedEvent(rule, event) { + if m.selfTester == nil || !m.selfTester.IsExpectedEvent(rule, event, m.probe) { m.eventSender.SendEvent(rule, event, extTagsCb, service) } } @@ -555,6 +556,16 @@ func (m *Module) SendEvent(rule *rules.Rule, event Event, extTagsCb func() []str } } +// SendProcessEvent sends a process event using the provided EventSender interface +func (m *Module) SendProcessEvent(data []byte) { + m.eventSender.SendProcessEventData(data) +} + +// SendProcessEventData implements the EventSender interface forwarding a process event to the APIServer +func (m *Module) SendProcessEventData(data []byte) { + m.apiServer.SendProcessEvent(data) +} + // HandleActivityDump sends an activity dump to the backend func (m *Module) HandleActivityDump(dump *sapi.ActivityDumpStreamMessage) { m.apiServer.SendActivityDump(dump) @@ -742,8 +753,7 @@ func (m *Module) RunSelfTest(sendLoadedReport bool) error { // send the report if m.config.SelfTestSendReport { - monitor := m.probe.GetMonitor() - monitor.ReportSelfTest(success, fails) + ReportSelfTest(m.eventSender, m.statsdClient, success, fails) } return nil diff --git a/pkg/security/module/policy_monitor.go b/pkg/security/module/policy_monitor.go index cd5369898c064..b62a06b8c248c 100644 --- a/pkg/security/module/policy_monitor.go +++ b/pkg/security/module/policy_monitor.go @@ -1,11 +1,10 @@ +//go:generate go run github.com/mailru/easyjson/easyjson -gen_build_flags=-mod=mod -no_std_marshalers $GOFILE + // Unless explicitly stated otherwise all files in this repository are licensed // under the Apache License Version 2.0. // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build linux -// +build linux - package module import ( @@ -18,7 +17,9 @@ import ( "github.com/hashicorp/go-multierror" "github.com/DataDog/datadog-agent/pkg/dogstatsd" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/metrics" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/tagger/collectors" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -119,3 +120,110 @@ func NewPolicyMonitor(statsdClient statsd.ClientInterface) *PolicyMonitor { rules: make(map[string]string), } } + +// RuleSetLoadedReport represents the rule and the custom event related to a RuleSetLoaded event, ready to be dispatched +type RuleSetLoadedReport struct { + Rule *rules.Rule + Event *events.CustomEvent +} + +// ReportRuleSetLoaded reports to Datadog that new ruleset was loaded +func ReportRuleSetLoaded(sender EventSender, statsdClient statsd.ClientInterface, ruleSet *rules.RuleSet, err *multierror.Error) { + rule, event := NewRuleSetLoadedEvent(ruleSet, err) + + if err := statsdClient.Count(metrics.MetricRuleSetLoaded, 1, []string{}, 1.0); err != nil { + log.Error(fmt.Errorf("failed to send ruleset_loaded metric: %w", err)) + } + + sender.SendEvent(rule, event, func() []string { return nil }, "") +} + +// RuleLoaded defines a loaded rule +// easyjson:json +type RuleState struct { + ID string `json:"id"` + Version string `json:"version,omitempty"` + Expression string `json:"expression"` + Status string `json:"status"` + Message string `json:"message,omitempty"` +} + +// PolicyState is used to report policy was loaded +// easyjson:json +type PolicyState struct { + Name string `json:"name"` + Version string `json:"version"` + Source string `json:"source"` + Rules []*RuleState `json:"rules"` +} + +// RulesetLoadedEvent is used to report that a new ruleset was loaded +// easyjson:json +type RulesetLoadedEvent struct { + Timestamp time.Time `json:"date"` + Policies []*PolicyState `json:"policies"` +} + +func PolicyStateFromRuleDefinition(def *rules.RuleDefinition) *PolicyState { + return &PolicyState{ + Name: def.Policy.Name, + Version: def.Policy.Version, + Source: def.Policy.Source, + } +} + +func RuleStateFromDefinition(def *rules.RuleDefinition, status string, message string) *RuleState { + return &RuleState{ + ID: def.ID, + Version: def.Version, + Expression: def.Expression, + Status: status, + Message: message, + } +} + +// NewRuleSetLoadedEvent returns the rule and a populated custom event for a new_rules_loaded event +func NewRuleSetLoadedEvent(rs *rules.RuleSet, err *multierror.Error) (*rules.Rule, *events.CustomEvent) { + mp := make(map[string]*PolicyState) + + var policyState *PolicyState + var exists bool + + for _, policy := range rs.GetPolicies() { + // rule successfully loaded + for _, ruleDef := range policy.Rules { + policyName := ruleDef.Policy.Name + + if policyState, exists = mp[policyName]; !exists { + policyState = PolicyStateFromRuleDefinition(ruleDef) + mp[policyName] = policyState + } + policyState.Rules = append(policyState.Rules, RuleStateFromDefinition(ruleDef, "loaded", "")) + } + } + + // rules ignored due to errors + if err != nil && err.Errors != nil { + for _, err := range err.Errors { + if rerr, ok := err.(*rules.ErrRuleLoad); ok { + policyName := rerr.Definition.Policy.Name + + if _, exists := mp[policyName]; !exists { + policyState = PolicyStateFromRuleDefinition(rerr.Definition) + mp[policyName] = policyState + } + policyState.Rules = append(policyState.Rules, RuleStateFromDefinition(rerr.Definition, string(rerr.Type()), rerr.Err.Error())) + } + } + } + + var policies []*PolicyState + for _, policy := range mp { + policies = append(policies, policy) + } + + return events.NewCustomRule(events.RulesetLoadedRuleID), events.NewCustomEvent(model.CustomRulesetLoadedEventType, RulesetLoadedEvent{ + Timestamp: time.Now(), + Policies: policies, + }) +} diff --git a/pkg/security/module/policy_monitor_easyjson.go b/pkg/security/module/policy_monitor_easyjson.go new file mode 100644 index 0000000000000..34d911311751d --- /dev/null +++ b/pkg/security/module/policy_monitor_easyjson.go @@ -0,0 +1,321 @@ +// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT. + +package module + +import ( + json "encoding/json" + easyjson "github.com/mailru/easyjson" + jlexer "github.com/mailru/easyjson/jlexer" + jwriter "github.com/mailru/easyjson/jwriter" +) + +// suppress unused package warning +var ( + _ *json.RawMessage + _ *jlexer.Lexer + _ *jwriter.Writer + _ easyjson.Marshaler +) + +func easyjson6151911dDecodeGithubComDataDogDatadogAgentPkgSecurityModule(in *jlexer.Lexer, out *RulesetLoadedEvent) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "date": + if data := in.Raw(); in.Ok() { + in.AddError((out.Timestamp).UnmarshalJSON(data)) + } + case "policies": + if in.IsNull() { + in.Skip() + out.Policies = nil + } else { + in.Delim('[') + if out.Policies == nil { + if !in.IsDelim(']') { + out.Policies = make([]*PolicyState, 0, 8) + } else { + out.Policies = []*PolicyState{} + } + } else { + out.Policies = (out.Policies)[:0] + } + for !in.IsDelim(']') { + var v1 *PolicyState + if in.IsNull() { + in.Skip() + v1 = nil + } else { + if v1 == nil { + v1 = new(PolicyState) + } + (*v1).UnmarshalEasyJSON(in) + } + out.Policies = append(out.Policies, v1) + in.WantComma() + } + in.Delim(']') + } + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson6151911dEncodeGithubComDataDogDatadogAgentPkgSecurityModule(out *jwriter.Writer, in RulesetLoadedEvent) { + out.RawByte('{') + first := true + _ = first + { + const prefix string = ",\"date\":" + out.RawString(prefix[1:]) + out.Raw((in.Timestamp).MarshalJSON()) + } + { + const prefix string = ",\"policies\":" + out.RawString(prefix) + if in.Policies == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v2, v3 := range in.Policies { + if v2 > 0 { + out.RawByte(',') + } + if v3 == nil { + out.RawString("null") + } else { + (*v3).MarshalEasyJSON(out) + } + } + out.RawByte(']') + } + } + out.RawByte('}') +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v RulesetLoadedEvent) MarshalEasyJSON(w *jwriter.Writer) { + easyjson6151911dEncodeGithubComDataDogDatadogAgentPkgSecurityModule(w, v) +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *RulesetLoadedEvent) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson6151911dDecodeGithubComDataDogDatadogAgentPkgSecurityModule(l, v) +} +func easyjson6151911dDecodeGithubComDataDogDatadogAgentPkgSecurityModule1(in *jlexer.Lexer, out *RuleState) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "id": + out.ID = string(in.String()) + case "version": + out.Version = string(in.String()) + case "expression": + out.Expression = string(in.String()) + case "status": + out.Status = string(in.String()) + case "message": + out.Message = string(in.String()) + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson6151911dEncodeGithubComDataDogDatadogAgentPkgSecurityModule1(out *jwriter.Writer, in RuleState) { + out.RawByte('{') + first := true + _ = first + { + const prefix string = ",\"id\":" + out.RawString(prefix[1:]) + out.String(string(in.ID)) + } + if in.Version != "" { + const prefix string = ",\"version\":" + out.RawString(prefix) + out.String(string(in.Version)) + } + { + const prefix string = ",\"expression\":" + out.RawString(prefix) + out.String(string(in.Expression)) + } + { + const prefix string = ",\"status\":" + out.RawString(prefix) + out.String(string(in.Status)) + } + if in.Message != "" { + const prefix string = ",\"message\":" + out.RawString(prefix) + out.String(string(in.Message)) + } + out.RawByte('}') +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v RuleState) MarshalEasyJSON(w *jwriter.Writer) { + easyjson6151911dEncodeGithubComDataDogDatadogAgentPkgSecurityModule1(w, v) +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *RuleState) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson6151911dDecodeGithubComDataDogDatadogAgentPkgSecurityModule1(l, v) +} +func easyjson6151911dDecodeGithubComDataDogDatadogAgentPkgSecurityModule2(in *jlexer.Lexer, out *PolicyState) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "name": + out.Name = string(in.String()) + case "version": + out.Version = string(in.String()) + case "source": + out.Source = string(in.String()) + case "rules": + if in.IsNull() { + in.Skip() + out.Rules = nil + } else { + in.Delim('[') + if out.Rules == nil { + if !in.IsDelim(']') { + out.Rules = make([]*RuleState, 0, 8) + } else { + out.Rules = []*RuleState{} + } + } else { + out.Rules = (out.Rules)[:0] + } + for !in.IsDelim(']') { + var v4 *RuleState + if in.IsNull() { + in.Skip() + v4 = nil + } else { + if v4 == nil { + v4 = new(RuleState) + } + (*v4).UnmarshalEasyJSON(in) + } + out.Rules = append(out.Rules, v4) + in.WantComma() + } + in.Delim(']') + } + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson6151911dEncodeGithubComDataDogDatadogAgentPkgSecurityModule2(out *jwriter.Writer, in PolicyState) { + out.RawByte('{') + first := true + _ = first + { + const prefix string = ",\"name\":" + out.RawString(prefix[1:]) + out.String(string(in.Name)) + } + { + const prefix string = ",\"version\":" + out.RawString(prefix) + out.String(string(in.Version)) + } + { + const prefix string = ",\"source\":" + out.RawString(prefix) + out.String(string(in.Source)) + } + { + const prefix string = ",\"rules\":" + out.RawString(prefix) + if in.Rules == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v5, v6 := range in.Rules { + if v5 > 0 { + out.RawByte(',') + } + if v6 == nil { + out.RawString("null") + } else { + (*v6).MarshalEasyJSON(out) + } + } + out.RawByte(']') + } + } + out.RawByte('}') +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v PolicyState) MarshalEasyJSON(w *jwriter.Writer) { + easyjson6151911dEncodeGithubComDataDogDatadogAgentPkgSecurityModule2(w, v) +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *PolicyState) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson6151911dDecodeGithubComDataDogDatadogAgentPkgSecurityModule2(l, v) +} diff --git a/pkg/security/module/process_monitor.go b/pkg/security/module/process_monitor.go index 8ff3ec0590c02..107f8c93d188f 100644 --- a/pkg/security/module/process_monitor.go +++ b/pkg/security/module/process_monitor.go @@ -10,7 +10,8 @@ package module import ( "github.com/DataDog/datadog-agent/pkg/process/events/model" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/events" + smodel "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -21,12 +22,12 @@ type ProcessMonitoring struct { } // HandleEvent implement the EventHandler interface -func (p *ProcessMonitoring) HandleEvent(event *sprobe.Event) { +func (p *ProcessMonitoring) HandleEvent(event *smodel.Event) { // Force resolution of all event fields before exposing it through the API server event.ResolveFields(false) event.ResolveEventTimestamp() - entry := event.ResolveProcessCacheEntry() + entry, _ := event.ResolveProcessCacheEntry() if entry == nil { return } @@ -61,11 +62,11 @@ func (p *ProcessMonitoring) HandleEvent(event *sprobe.Event) { return } - p.module.apiServer.SendProcessEvent(data) + p.module.SendProcessEvent(data) } // HandleCustomEvent implement the EventHandler interface -func (p *ProcessMonitoring) HandleCustomEvent(rule *rules.Rule, event *sprobe.CustomEvent) { +func (p *ProcessMonitoring) HandleCustomEvent(rule *rules.Rule, event *events.CustomEvent) { } // NewProcessMonitoring returns a new ProcessMonitoring instance diff --git a/pkg/security/module/rate_limiter.go b/pkg/security/module/rate_limiter.go index b1a7cd1b93729..e592b363c9c46 100644 --- a/pkg/security/module/rate_limiter.go +++ b/pkg/security/module/rate_limiter.go @@ -17,8 +17,8 @@ import ( "go.uber.org/atomic" "golang.org/x/time/rate" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/metrics" - "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -31,8 +31,8 @@ var ( defaultBurst int = 40 defaultPerRuleLimiters = map[eval.RuleID]*Limiter{ - probe.AbnormalPathRuleID: NewLimiter(rate.Every(time.Second), 1), - probe.RulesetLoadedRuleID: NewLimiter(rate.Inf, 1), // No limit on ruleset loaded + events.RulesetLoadedRuleID: NewLimiter(rate.Inf, 1), // No limit on ruleset loaded + events.AbnormalPathRuleID: NewLimiter(rate.Every(30*time.Second), 1), } ) @@ -69,19 +69,29 @@ func NewRateLimiter(client statsd.ClientInterface) *RateLimiter { statsdClient: client, } + return rl +} + +func applyBaseLimitersFromDefault(limiters map[string]*Limiter) { for id, limiter := range defaultPerRuleLimiters { - rl.limiters[id] = limiter + limiters[id] = limiter } - - return rl } // Apply a set of rules -func (rl *RateLimiter) Apply(ruleSet *rules.RuleSet) { +func (rl *RateLimiter) Apply(ruleSet *rules.RuleSet, customRuleIDs []eval.RuleID) { rl.Lock() defer rl.Unlock() newLimiters := make(map[string]*Limiter) + + for _, id := range customRuleIDs { + newLimiters[id] = NewLimiter(defaultLimit, defaultBurst) + } + + // override if there is more specific defs + applyBaseLimitersFromDefault(newLimiters) + for id, rule := range ruleSet.GetRules() { if rule.Definition.Every != 0 { newLimiters[id] = NewLimiter(rate.Every(rule.Definition.Every), 1) @@ -89,6 +99,7 @@ func (rl *RateLimiter) Apply(ruleSet *rules.RuleSet) { newLimiters[id] = NewLimiter(defaultLimit, defaultBurst) } } + rl.limiters = newLimiters } diff --git a/pkg/security/module/rule_filters_model.go b/pkg/security/module/rule_filters_model.go index 6856466fa7373..b8f4c26acaf59 100644 --- a/pkg/security/module/rule_filters_model.go +++ b/pkg/security/module/rule_filters_model.go @@ -7,7 +7,6 @@ package module import ( "reflect" - "unsafe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" ) @@ -43,10 +42,6 @@ func (e *RuleFilterEvent) GetTags() []string { return []string{} } -func (e *RuleFilterEvent) GetPointer() unsafe.Pointer { - return unsafe.Pointer(e) -} - func (m *RuleFilterModel) ValidateField(key string, value eval.FieldValue) error { return nil } diff --git a/pkg/security/module/rule_filters_model_linux.go b/pkg/security/module/rule_filters_model_linux.go index f94adc524dd1e..0ab7d9c0e7ac3 100644 --- a/pkg/security/module/rule_filters_model_linux.go +++ b/pkg/security/module/rule_filters_model_linux.go @@ -40,7 +40,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.major": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return int(ubuntuKernelVersion.Major) } @@ -51,7 +51,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.minor": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return int(ubuntuKernelVersion.Minor) } @@ -62,7 +62,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.patch": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return int(ubuntuKernelVersion.Patch) } @@ -73,7 +73,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.abi": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return int(ubuntuKernelVersion.Abi) } @@ -84,7 +84,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.flavor": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return ubuntuKernelVersion.Flavor } @@ -99,70 +99,70 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) }, nil case "os.id": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*RuleFilterEvent)(ctx.Object).kv.OsRelease["ID"] }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*RuleFilterEvent).kv.OsRelease["ID"] }, Field: field, }, nil case "os.platform_id": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*RuleFilterEvent)(ctx.Object).kv.OsRelease["PLATFORM_ID"] }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*RuleFilterEvent).kv.OsRelease["PLATFORM_ID"] }, Field: field, }, nil case "os.version_id": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*RuleFilterEvent)(ctx.Object).kv.OsRelease["VERSION_ID"] }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*RuleFilterEvent).kv.OsRelease["VERSION_ID"] }, Field: field, }, nil case "os.is_amazon_linux": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsAmazonLinuxKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsAmazonLinuxKernel() }, Field: field, }, nil case "os.is_cos": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsCOSKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsCOSKernel() }, Field: field, }, nil case "os.is_debian": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsDebianKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsDebianKernel() }, Field: field, }, nil case "os.is_oracle": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsOracleUEKKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsOracleUEKKernel() }, Field: field, }, nil case "os.is_rhel": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*RuleFilterEvent)(ctx.Object).kv.IsRH7Kernel() || (*RuleFilterEvent)(ctx.Object).kv.IsRH8Kernel() + return ctx.Event.(*RuleFilterEvent).kv.IsRH7Kernel() || ctx.Event.(*RuleFilterEvent).kv.IsRH8Kernel() }, Field: field, }, nil case "os.is_rhel7": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsRH7Kernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsRH7Kernel() }, Field: field, }, nil case "os.is_rhel8": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsRH8Kernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsRH8Kernel() }, Field: field, }, nil case "os.is_sles": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsSLESKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsSLESKernel() }, Field: field, }, nil case "os.is_sles12": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsSuse12Kernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsSuse12Kernel() }, Field: field, }, nil case "os.is_sles15": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsSuse15Kernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsSuse15Kernel() }, Field: field, }, nil } diff --git a/pkg/security/module/self_tests.go b/pkg/security/module/self_tests.go new file mode 100644 index 0000000000000..6054dab73eb2d --- /dev/null +++ b/pkg/security/module/self_tests.go @@ -0,0 +1,53 @@ +//go:generate go run github.com/mailru/easyjson/easyjson -gen_build_flags=-mod=mod -no_std_marshalers $GOFILE + +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package module + +import ( + "fmt" + "time" + + "github.com/DataDog/datadog-agent/pkg/security/events" + "github.com/DataDog/datadog-agent/pkg/security/metrics" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" + "github.com/DataDog/datadog-agent/pkg/security/secl/rules" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-go/v5/statsd" +) + +// SelfTestEvent is used to report a self test result +// easyjson:json +type SelfTestEvent struct { + Timestamp time.Time `json:"date"` + Success []string `json:"succeeded_tests"` + Fails []string `json:"failed_tests"` +} + +// NewSelfTestEvent returns the rule and the result of the self test +func NewSelfTestEvent(success []string, fails []string) (*rules.Rule, *events.CustomEvent) { + return events.NewCustomRule(events.SelfTestRuleID), events.NewCustomEvent(model.CustomSelfTestEventType, SelfTestEvent{ + Timestamp: time.Now(), + Success: success, + Fails: fails, + }) +} + +// ReportSelfTest reports to Datadog that a self test was performed +func ReportSelfTest(sender EventSender, statsdClient statsd.ClientInterface, success []string, fails []string) { + // send metric with number of success and fails + tags := []string{ + fmt.Sprintf("success:%d", len(success)), + fmt.Sprintf("fails:%d", len(fails)), + } + if err := statsdClient.Count(metrics.MetricSelfTest, 1, tags, 1.0); err != nil { + log.Error(fmt.Errorf("failed to send self_test metric: %w", err)) + } + + // send the custom event with the list of succeed and failed self tests + rule, event := NewSelfTestEvent(success, fails) + sender.SendEvent(rule, event, func() []string { return nil }, "") +} diff --git a/pkg/security/module/self_tests_easyjson.go b/pkg/security/module/self_tests_easyjson.go new file mode 100644 index 0000000000000..d391ca3c1fd65 --- /dev/null +++ b/pkg/security/module/self_tests_easyjson.go @@ -0,0 +1,151 @@ +// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT. + +package module + +import ( + json "encoding/json" + easyjson "github.com/mailru/easyjson" + jlexer "github.com/mailru/easyjson/jlexer" + jwriter "github.com/mailru/easyjson/jwriter" +) + +// suppress unused package warning +var ( + _ *json.RawMessage + _ *jlexer.Lexer + _ *jwriter.Writer + _ easyjson.Marshaler +) + +func easyjsonF0077844DecodeGithubComDataDogDatadogAgentPkgSecurityModule(in *jlexer.Lexer, out *SelfTestEvent) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "date": + if data := in.Raw(); in.Ok() { + in.AddError((out.Timestamp).UnmarshalJSON(data)) + } + case "succeeded_tests": + if in.IsNull() { + in.Skip() + out.Success = nil + } else { + in.Delim('[') + if out.Success == nil { + if !in.IsDelim(']') { + out.Success = make([]string, 0, 4) + } else { + out.Success = []string{} + } + } else { + out.Success = (out.Success)[:0] + } + for !in.IsDelim(']') { + var v1 string + v1 = string(in.String()) + out.Success = append(out.Success, v1) + in.WantComma() + } + in.Delim(']') + } + case "failed_tests": + if in.IsNull() { + in.Skip() + out.Fails = nil + } else { + in.Delim('[') + if out.Fails == nil { + if !in.IsDelim(']') { + out.Fails = make([]string, 0, 4) + } else { + out.Fails = []string{} + } + } else { + out.Fails = (out.Fails)[:0] + } + for !in.IsDelim(']') { + var v2 string + v2 = string(in.String()) + out.Fails = append(out.Fails, v2) + in.WantComma() + } + in.Delim(']') + } + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjsonF0077844EncodeGithubComDataDogDatadogAgentPkgSecurityModule(out *jwriter.Writer, in SelfTestEvent) { + out.RawByte('{') + first := true + _ = first + { + const prefix string = ",\"date\":" + out.RawString(prefix[1:]) + out.Raw((in.Timestamp).MarshalJSON()) + } + { + const prefix string = ",\"succeeded_tests\":" + out.RawString(prefix) + if in.Success == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v3, v4 := range in.Success { + if v3 > 0 { + out.RawByte(',') + } + out.String(string(v4)) + } + out.RawByte(']') + } + } + { + const prefix string = ",\"failed_tests\":" + out.RawString(prefix) + if in.Fails == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v5, v6 := range in.Fails { + if v5 > 0 { + out.RawByte(',') + } + out.String(string(v6)) + } + out.RawByte(']') + } + } + out.RawByte('}') +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v SelfTestEvent) MarshalEasyJSON(w *jwriter.Writer) { + easyjsonF0077844EncodeGithubComDataDogDatadogAgentPkgSecurityModule(w, v) +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *SelfTestEvent) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjsonF0077844DecodeGithubComDataDogDatadogAgentPkgSecurityModule(l, v) +} diff --git a/pkg/security/probe/accessors.go b/pkg/security/probe/accessors.go deleted file mode 100644 index 69fb810557fa4..0000000000000 --- a/pkg/security/probe/accessors.go +++ /dev/null @@ -1,32285 +0,0 @@ -//go:build linux -// +build linux - -// Code generated - DO NOT EDIT. -package probe - -import ( - "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" - "github.com/DataDog/datadog-agent/pkg/security/secl/model" - _ "github.com/DataDog/datadog-agent/pkg/security/secl/model" - "net" - "reflect" - "unsafe" -) - -// suppress unused package warning -var ( - _ *unsafe.Pointer -) - -func (m *Model) GetIterator(field eval.Field) (eval.Iterator, error) { - switch field { - case "process.ancestors": - return &model.ProcessAncestorsIterator{}, nil - case "ptrace.tracee.ancestors": - return &model.ProcessAncestorsIterator{}, nil - case "signal.target.ancestors": - return &model.ProcessAncestorsIterator{}, nil - } - return nil, &eval.ErrIteratorNotSupported{Field: field} -} -func (m *Model) GetEventTypes() []eval.EventType { - return []eval.EventType{ - eval.EventType("bind"), - eval.EventType("bpf"), - eval.EventType("capset"), - eval.EventType("chmod"), - eval.EventType("chown"), - eval.EventType("dns"), - eval.EventType("exec"), - eval.EventType("exit"), - eval.EventType("link"), - eval.EventType("load_module"), - eval.EventType("mkdir"), - eval.EventType("mmap"), - eval.EventType("mprotect"), - eval.EventType("open"), - eval.EventType("ptrace"), - eval.EventType("removexattr"), - eval.EventType("rename"), - eval.EventType("rmdir"), - eval.EventType("selinux"), - eval.EventType("setgid"), - eval.EventType("setuid"), - eval.EventType("setxattr"), - eval.EventType("signal"), - eval.EventType("splice"), - eval.EventType("unlink"), - eval.EventType("unload_module"), - eval.EventType("utimes"), - } -} -func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Evaluator, error) { - switch field { - case "async": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Async - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bind.addr.family": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.AddrFamily) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bind.addr.ip": - return &eval.CIDREvaluator{ - EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).Bind.Addr.IPNet - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bind.addr.port": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.Addr.Port) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bind.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.cmd": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Cmd) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.map.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Map.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.map.type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Map.Type) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.prog.attach_type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Program.AttachType) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.prog.helpers": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - result := make([]int, len((*Event)(ctx.Object).ResolveHelpers(&(*Event)(ctx.Object).BPF.Program))) - for i, v := range (*Event)(ctx.Object).ResolveHelpers(&(*Event)(ctx.Object).BPF.Program) { - result[i] = int(v) - } - return result - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "bpf.prog.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Program.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.prog.tag": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Program.Tag - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.prog.type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Program.Type) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "capset.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Capset.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "capset.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Capset.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.destination.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Chmod.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Chmod.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Chmod.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Chmod.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Chmod.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Chmod.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Chmod.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Chmod.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Chmod.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.destination.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.destination.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveChownGID(&(*Event)(ctx.Object).Chown) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.destination.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.destination.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveChownUID(&(*Event)(ctx.Object).Chown) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Chown.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Chown.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Chown.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Chown.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Chown.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Chown.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Chown.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Chown.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Chown.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveContainerID(&(*Event)(ctx.Object).ContainerContext) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "container.tags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveContainerTags(&(*Event)(ctx.Object).ContainerContext) - }, - Field: field, - Weight: 9999 * eval.HandlerWeight, - }, nil - case "dns.id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.ID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.class": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Class) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.count": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Count) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.length": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Size) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.name": - return &eval.StringEvaluator{ - OpOverrides: eval.DNSNameCmp, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).DNS.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.name.length": - return &eval.IntEvaluator{ - OpOverrides: eval.DNSNameCmp, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).DNS.Name) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Type) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exec.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exec.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exec.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).Exec.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Exec.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Exec.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Exec.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exec.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exec.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exec.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exec.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Exec.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Exec.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exit.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exit.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exit.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.cause": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Cause) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.code": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Code) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).Exit.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Exit.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Exit.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Exit.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exit.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exit.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exit.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exit.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Exit.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Exit.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Link.Target) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Link.Target.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Link.Target.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Link.Target) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Link.Target)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Link.Target) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Link.Target)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Link.Target.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Link.Target.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Link.Source) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Link.Source.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Link.Source.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Link.Source) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Link.Source)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Link.Source) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Link.Source)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Link.Source.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Link.Source.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).LoadModule.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).LoadModule.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).LoadModule.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).LoadModule.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).LoadModule.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).LoadModule.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).LoadModule.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).LoadModule.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).LoadModule.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.loaded_from_memory": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).LoadModule.LoadedFromMemory - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.destination.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Mkdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Mkdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Mkdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Mkdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Mkdir.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Mkdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Mkdir.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Mkdir.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Mkdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).MMap.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).MMap.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).MMap.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).MMap.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).MMap.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).MMap.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).MMap.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).MMap.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).MMap.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.flags": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MMap.Flags - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.protection": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MMap.Protection - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mprotect.req_protection": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MProtect.ReqProtection - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mprotect.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MProtect.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mprotect.vm_protection": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MProtect.VMProtection - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.destination.ip": - return &eval.CIDREvaluator{ - EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).NetworkContext.Destination.IPNet - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.destination.port": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Destination.Port) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.device.ifindex": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Device.IfIndex) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.device.ifname": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveNetworkDeviceIfName(&(*Event)(ctx.Object).NetworkContext.Device) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "network.l3_protocol": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.L3Protocol) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.l4_protocol": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.L4Protocol) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.size": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Size) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.source.ip": - return &eval.CIDREvaluator{ - EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).NetworkContext.Source.IPNet - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.source.port": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Source.Port) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Open.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Open.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Open.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Open.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Open.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Open.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Open.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Open.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Open.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.flags": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.Flags) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.ancestors.args": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "process.ancestors.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.args_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "process.ancestors.argv0": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "process.ancestors.cap_effective": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.cap_permitted": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.comm": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Comm - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.container.id": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ContainerID - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.cookie": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Cookie) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.created_at": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.egid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.egroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.envs_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.euid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.euser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.fsgid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.fsgroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.fsuid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.fsuser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.Group - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []bool{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.is_kworker": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.PIDContext.IsKworker - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.is_thread": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.IsThread - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.pid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Pid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.ppid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PPid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.tid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Tid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.tty_name": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.TTYName - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.User - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt(&(*Event)(ctx.Object).ProcessContext.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.parent.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.parent.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.parent.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).ProcessContext.Parent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ProcessContext.Parent.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ProcessContext.Parent.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.request": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Request) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.ancestors.args": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.args_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.argv0": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.cap_effective": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.cap_permitted": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.comm": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Comm - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.container.id": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ContainerID - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.cookie": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Cookie) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.created_at": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.egid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.egroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.envs_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.euid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.euser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.fsgid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.fsgroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.fsuid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.fsuser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.Group - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []bool{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.is_kworker": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.PIDContext.IsKworker - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.is_thread": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.IsThread - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.pid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Pid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.ppid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PPid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.tid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Tid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.tty_name": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.TTYName - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.User - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt(&(*Event)(ctx.Object).PTrace.Tracee.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).PTrace.Tracee.Parent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.destination.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveXAttrName(&(*Event)(ctx.Object).RemoveXAttr) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.destination.namespace": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveXAttrNamespace(&(*Event)(ctx.Object).RemoveXAttr) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).RemoveXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).RemoveXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).RemoveXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).RemoveXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).RemoveXAttr.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).RemoveXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).RemoveXAttr.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).RemoveXAttr.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).RemoveXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Rename.New) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Rename.New.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Rename.New.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rename.New) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rename.New)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rename.New) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rename.New)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Rename.New.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Rename.New.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Rename.Old) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Rename.Old.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Rename.Old.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rename.Old) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rename.Old)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rename.Old) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rename.Old)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Rename.Old.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Rename.Old.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Rmdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Rmdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Rmdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rmdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rmdir.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rmdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rmdir.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Rmdir.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Rmdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "selinux.bool.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSELinuxBoolName(&(*Event)(ctx.Object).SELinux) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "selinux.bool.state": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.BoolChangeValue - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "selinux.bool_commit.state": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).SELinux.BoolCommitValue - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "selinux.enforce.status": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.EnforceStatus - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setgid.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setgid.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetgidEGroup(&(*Event)(ctx.Object).SetGID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setgid.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setgid.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetgidFSGroup(&(*Event)(ctx.Object).SetGID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setgid.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setgid.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetgidGroup(&(*Event)(ctx.Object).SetGID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setuid.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setuid.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetuidEUser(&(*Event)(ctx.Object).SetUID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setuid.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setuid.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetuidFSUser(&(*Event)(ctx.Object).SetUID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setuid.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setuid.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetuidUser(&(*Event)(ctx.Object).SetUID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.destination.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveXAttrName(&(*Event)(ctx.Object).SetXAttr) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.destination.namespace": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveXAttrNamespace(&(*Event)(ctx.Object).SetXAttr) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).SetXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).SetXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).SetXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).SetXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).SetXAttr.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).SetXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).SetXAttr.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).SetXAttr.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).SetXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.PID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.ancestors.args": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "signal.target.ancestors.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.args_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "signal.target.ancestors.argv0": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "signal.target.ancestors.cap_effective": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.cap_permitted": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.comm": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Comm - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.container.id": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ContainerID - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.cookie": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Cookie) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.created_at": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.egid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.egroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.envs_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.euid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.euser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.fsgid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.fsgroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.fsuid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.fsuser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.Group - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []bool{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} - } - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.is_kworker": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.PIDContext.IsKworker - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.is_thread": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.IsThread - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.pid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Pid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.ppid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PPid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.tid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Tid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.tty_name": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.TTYName - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.User - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt(&(*Event)(ctx.Object).Signal.Target.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.parent.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.parent.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.parent.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).Signal.Target.Parent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).Signal.Target.Parent.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).Signal.Target.Parent.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Type) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Splice.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Splice.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Splice.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Splice.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Splice.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Splice.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Splice.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Splice.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Splice.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.pipe_entry_flag": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.PipeEntryFlag) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.pipe_exit_flag": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.PipeExitFlag) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Unlink.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Unlink.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Unlink.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Unlink.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Unlink.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Unlink.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Unlink.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Unlink.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Unlink.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.flags": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.Flags) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unload_module.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).UnloadModule.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unload_module.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).UnloadModule.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Utimes.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Utimes.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Utimes.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Utimes.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Utimes.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Utimes.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Utimes.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Utimes.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Utimes.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - } - return nil, &eval.ErrFieldNotFound{Field: field} -} -func (e *Event) GetFields() []eval.Field { - return []eval.Field{ - "async", - "bind.addr.family", - "bind.addr.ip", - "bind.addr.port", - "bind.retval", - "bpf.cmd", - "bpf.map.name", - "bpf.map.type", - "bpf.prog.attach_type", - "bpf.prog.helpers", - "bpf.prog.name", - "bpf.prog.tag", - "bpf.prog.type", - "bpf.retval", - "capset.cap_effective", - "capset.cap_permitted", - "chmod.file.change_time", - "chmod.file.destination.mode", - "chmod.file.destination.rights", - "chmod.file.filesystem", - "chmod.file.gid", - "chmod.file.group", - "chmod.file.in_upper_layer", - "chmod.file.inode", - "chmod.file.mode", - "chmod.file.modification_time", - "chmod.file.mount_id", - "chmod.file.name", - "chmod.file.name.length", - "chmod.file.path", - "chmod.file.path.length", - "chmod.file.rights", - "chmod.file.uid", - "chmod.file.user", - "chmod.retval", - "chown.file.change_time", - "chown.file.destination.gid", - "chown.file.destination.group", - "chown.file.destination.uid", - "chown.file.destination.user", - "chown.file.filesystem", - "chown.file.gid", - "chown.file.group", - "chown.file.in_upper_layer", - "chown.file.inode", - "chown.file.mode", - "chown.file.modification_time", - "chown.file.mount_id", - "chown.file.name", - "chown.file.name.length", - "chown.file.path", - "chown.file.path.length", - "chown.file.rights", - "chown.file.uid", - "chown.file.user", - "chown.retval", - "container.id", - "container.tags", - "dns.id", - "dns.question.class", - "dns.question.count", - "dns.question.length", - "dns.question.name", - "dns.question.name.length", - "dns.question.type", - "exec.args", - "exec.args_flags", - "exec.args_options", - "exec.args_truncated", - "exec.argv", - "exec.argv0", - "exec.cap_effective", - "exec.cap_permitted", - "exec.comm", - "exec.container.id", - "exec.cookie", - "exec.created_at", - "exec.egid", - "exec.egroup", - "exec.envp", - "exec.envs", - "exec.envs_truncated", - "exec.euid", - "exec.euser", - "exec.file.change_time", - "exec.file.filesystem", - "exec.file.gid", - "exec.file.group", - "exec.file.in_upper_layer", - "exec.file.inode", - "exec.file.mode", - "exec.file.modification_time", - "exec.file.mount_id", - "exec.file.name", - "exec.file.name.length", - "exec.file.path", - "exec.file.path.length", - "exec.file.rights", - "exec.file.uid", - "exec.file.user", - "exec.fsgid", - "exec.fsgroup", - "exec.fsuid", - "exec.fsuser", - "exec.gid", - "exec.group", - "exec.interpreter.file.change_time", - "exec.interpreter.file.filesystem", - "exec.interpreter.file.gid", - "exec.interpreter.file.group", - "exec.interpreter.file.in_upper_layer", - "exec.interpreter.file.inode", - "exec.interpreter.file.mode", - "exec.interpreter.file.modification_time", - "exec.interpreter.file.mount_id", - "exec.interpreter.file.name", - "exec.interpreter.file.name.length", - "exec.interpreter.file.path", - "exec.interpreter.file.path.length", - "exec.interpreter.file.rights", - "exec.interpreter.file.uid", - "exec.interpreter.file.user", - "exec.is_kworker", - "exec.is_thread", - "exec.pid", - "exec.ppid", - "exec.tid", - "exec.tty_name", - "exec.uid", - "exec.user", - "exit.args", - "exit.args_flags", - "exit.args_options", - "exit.args_truncated", - "exit.argv", - "exit.argv0", - "exit.cap_effective", - "exit.cap_permitted", - "exit.cause", - "exit.code", - "exit.comm", - "exit.container.id", - "exit.cookie", - "exit.created_at", - "exit.egid", - "exit.egroup", - "exit.envp", - "exit.envs", - "exit.envs_truncated", - "exit.euid", - "exit.euser", - "exit.file.change_time", - "exit.file.filesystem", - "exit.file.gid", - "exit.file.group", - "exit.file.in_upper_layer", - "exit.file.inode", - "exit.file.mode", - "exit.file.modification_time", - "exit.file.mount_id", - "exit.file.name", - "exit.file.name.length", - "exit.file.path", - "exit.file.path.length", - "exit.file.rights", - "exit.file.uid", - "exit.file.user", - "exit.fsgid", - "exit.fsgroup", - "exit.fsuid", - "exit.fsuser", - "exit.gid", - "exit.group", - "exit.interpreter.file.change_time", - "exit.interpreter.file.filesystem", - "exit.interpreter.file.gid", - "exit.interpreter.file.group", - "exit.interpreter.file.in_upper_layer", - "exit.interpreter.file.inode", - "exit.interpreter.file.mode", - "exit.interpreter.file.modification_time", - "exit.interpreter.file.mount_id", - "exit.interpreter.file.name", - "exit.interpreter.file.name.length", - "exit.interpreter.file.path", - "exit.interpreter.file.path.length", - "exit.interpreter.file.rights", - "exit.interpreter.file.uid", - "exit.interpreter.file.user", - "exit.is_kworker", - "exit.is_thread", - "exit.pid", - "exit.ppid", - "exit.tid", - "exit.tty_name", - "exit.uid", - "exit.user", - "link.file.change_time", - "link.file.destination.change_time", - "link.file.destination.filesystem", - "link.file.destination.gid", - "link.file.destination.group", - "link.file.destination.in_upper_layer", - "link.file.destination.inode", - "link.file.destination.mode", - "link.file.destination.modification_time", - "link.file.destination.mount_id", - "link.file.destination.name", - "link.file.destination.name.length", - "link.file.destination.path", - "link.file.destination.path.length", - "link.file.destination.rights", - "link.file.destination.uid", - "link.file.destination.user", - "link.file.filesystem", - "link.file.gid", - "link.file.group", - "link.file.in_upper_layer", - "link.file.inode", - "link.file.mode", - "link.file.modification_time", - "link.file.mount_id", - "link.file.name", - "link.file.name.length", - "link.file.path", - "link.file.path.length", - "link.file.rights", - "link.file.uid", - "link.file.user", - "link.retval", - "load_module.file.change_time", - "load_module.file.filesystem", - "load_module.file.gid", - "load_module.file.group", - "load_module.file.in_upper_layer", - "load_module.file.inode", - "load_module.file.mode", - "load_module.file.modification_time", - "load_module.file.mount_id", - "load_module.file.name", - "load_module.file.name.length", - "load_module.file.path", - "load_module.file.path.length", - "load_module.file.rights", - "load_module.file.uid", - "load_module.file.user", - "load_module.loaded_from_memory", - "load_module.name", - "load_module.retval", - "mkdir.file.change_time", - "mkdir.file.destination.mode", - "mkdir.file.destination.rights", - "mkdir.file.filesystem", - "mkdir.file.gid", - "mkdir.file.group", - "mkdir.file.in_upper_layer", - "mkdir.file.inode", - "mkdir.file.mode", - "mkdir.file.modification_time", - "mkdir.file.mount_id", - "mkdir.file.name", - "mkdir.file.name.length", - "mkdir.file.path", - "mkdir.file.path.length", - "mkdir.file.rights", - "mkdir.file.uid", - "mkdir.file.user", - "mkdir.retval", - "mmap.file.change_time", - "mmap.file.filesystem", - "mmap.file.gid", - "mmap.file.group", - "mmap.file.in_upper_layer", - "mmap.file.inode", - "mmap.file.mode", - "mmap.file.modification_time", - "mmap.file.mount_id", - "mmap.file.name", - "mmap.file.name.length", - "mmap.file.path", - "mmap.file.path.length", - "mmap.file.rights", - "mmap.file.uid", - "mmap.file.user", - "mmap.flags", - "mmap.protection", - "mmap.retval", - "mprotect.req_protection", - "mprotect.retval", - "mprotect.vm_protection", - "network.destination.ip", - "network.destination.port", - "network.device.ifindex", - "network.device.ifname", - "network.l3_protocol", - "network.l4_protocol", - "network.size", - "network.source.ip", - "network.source.port", - "open.file.change_time", - "open.file.destination.mode", - "open.file.filesystem", - "open.file.gid", - "open.file.group", - "open.file.in_upper_layer", - "open.file.inode", - "open.file.mode", - "open.file.modification_time", - "open.file.mount_id", - "open.file.name", - "open.file.name.length", - "open.file.path", - "open.file.path.length", - "open.file.rights", - "open.file.uid", - "open.file.user", - "open.flags", - "open.retval", - "process.ancestors.args", - "process.ancestors.args_flags", - "process.ancestors.args_options", - "process.ancestors.args_truncated", - "process.ancestors.argv", - "process.ancestors.argv0", - "process.ancestors.cap_effective", - "process.ancestors.cap_permitted", - "process.ancestors.comm", - "process.ancestors.container.id", - "process.ancestors.cookie", - "process.ancestors.created_at", - "process.ancestors.egid", - "process.ancestors.egroup", - "process.ancestors.envp", - "process.ancestors.envs", - "process.ancestors.envs_truncated", - "process.ancestors.euid", - "process.ancestors.euser", - "process.ancestors.file.change_time", - "process.ancestors.file.filesystem", - "process.ancestors.file.gid", - "process.ancestors.file.group", - "process.ancestors.file.in_upper_layer", - "process.ancestors.file.inode", - "process.ancestors.file.mode", - "process.ancestors.file.modification_time", - "process.ancestors.file.mount_id", - "process.ancestors.file.name", - "process.ancestors.file.name.length", - "process.ancestors.file.path", - "process.ancestors.file.path.length", - "process.ancestors.file.rights", - "process.ancestors.file.uid", - "process.ancestors.file.user", - "process.ancestors.fsgid", - "process.ancestors.fsgroup", - "process.ancestors.fsuid", - "process.ancestors.fsuser", - "process.ancestors.gid", - "process.ancestors.group", - "process.ancestors.interpreter.file.change_time", - "process.ancestors.interpreter.file.filesystem", - "process.ancestors.interpreter.file.gid", - "process.ancestors.interpreter.file.group", - "process.ancestors.interpreter.file.in_upper_layer", - "process.ancestors.interpreter.file.inode", - "process.ancestors.interpreter.file.mode", - "process.ancestors.interpreter.file.modification_time", - "process.ancestors.interpreter.file.mount_id", - "process.ancestors.interpreter.file.name", - "process.ancestors.interpreter.file.name.length", - "process.ancestors.interpreter.file.path", - "process.ancestors.interpreter.file.path.length", - "process.ancestors.interpreter.file.rights", - "process.ancestors.interpreter.file.uid", - "process.ancestors.interpreter.file.user", - "process.ancestors.is_kworker", - "process.ancestors.is_thread", - "process.ancestors.pid", - "process.ancestors.ppid", - "process.ancestors.tid", - "process.ancestors.tty_name", - "process.ancestors.uid", - "process.ancestors.user", - "process.args", - "process.args_flags", - "process.args_options", - "process.args_truncated", - "process.argv", - "process.argv0", - "process.cap_effective", - "process.cap_permitted", - "process.comm", - "process.container.id", - "process.cookie", - "process.created_at", - "process.egid", - "process.egroup", - "process.envp", - "process.envs", - "process.envs_truncated", - "process.euid", - "process.euser", - "process.file.change_time", - "process.file.filesystem", - "process.file.gid", - "process.file.group", - "process.file.in_upper_layer", - "process.file.inode", - "process.file.mode", - "process.file.modification_time", - "process.file.mount_id", - "process.file.name", - "process.file.name.length", - "process.file.path", - "process.file.path.length", - "process.file.rights", - "process.file.uid", - "process.file.user", - "process.fsgid", - "process.fsgroup", - "process.fsuid", - "process.fsuser", - "process.gid", - "process.group", - "process.interpreter.file.change_time", - "process.interpreter.file.filesystem", - "process.interpreter.file.gid", - "process.interpreter.file.group", - "process.interpreter.file.in_upper_layer", - "process.interpreter.file.inode", - "process.interpreter.file.mode", - "process.interpreter.file.modification_time", - "process.interpreter.file.mount_id", - "process.interpreter.file.name", - "process.interpreter.file.name.length", - "process.interpreter.file.path", - "process.interpreter.file.path.length", - "process.interpreter.file.rights", - "process.interpreter.file.uid", - "process.interpreter.file.user", - "process.is_kworker", - "process.is_thread", - "process.parent.args", - "process.parent.args_flags", - "process.parent.args_options", - "process.parent.args_truncated", - "process.parent.argv", - "process.parent.argv0", - "process.parent.cap_effective", - "process.parent.cap_permitted", - "process.parent.comm", - "process.parent.container.id", - "process.parent.cookie", - "process.parent.created_at", - "process.parent.egid", - "process.parent.egroup", - "process.parent.envp", - "process.parent.envs", - "process.parent.envs_truncated", - "process.parent.euid", - "process.parent.euser", - "process.parent.file.change_time", - "process.parent.file.filesystem", - "process.parent.file.gid", - "process.parent.file.group", - "process.parent.file.in_upper_layer", - "process.parent.file.inode", - "process.parent.file.mode", - "process.parent.file.modification_time", - "process.parent.file.mount_id", - "process.parent.file.name", - "process.parent.file.name.length", - "process.parent.file.path", - "process.parent.file.path.length", - "process.parent.file.rights", - "process.parent.file.uid", - "process.parent.file.user", - "process.parent.fsgid", - "process.parent.fsgroup", - "process.parent.fsuid", - "process.parent.fsuser", - "process.parent.gid", - "process.parent.group", - "process.parent.interpreter.file.change_time", - "process.parent.interpreter.file.filesystem", - "process.parent.interpreter.file.gid", - "process.parent.interpreter.file.group", - "process.parent.interpreter.file.in_upper_layer", - "process.parent.interpreter.file.inode", - "process.parent.interpreter.file.mode", - "process.parent.interpreter.file.modification_time", - "process.parent.interpreter.file.mount_id", - "process.parent.interpreter.file.name", - "process.parent.interpreter.file.name.length", - "process.parent.interpreter.file.path", - "process.parent.interpreter.file.path.length", - "process.parent.interpreter.file.rights", - "process.parent.interpreter.file.uid", - "process.parent.interpreter.file.user", - "process.parent.is_kworker", - "process.parent.is_thread", - "process.parent.pid", - "process.parent.ppid", - "process.parent.tid", - "process.parent.tty_name", - "process.parent.uid", - "process.parent.user", - "process.pid", - "process.ppid", - "process.tid", - "process.tty_name", - "process.uid", - "process.user", - "ptrace.request", - "ptrace.retval", - "ptrace.tracee.ancestors.args", - "ptrace.tracee.ancestors.args_flags", - "ptrace.tracee.ancestors.args_options", - "ptrace.tracee.ancestors.args_truncated", - "ptrace.tracee.ancestors.argv", - "ptrace.tracee.ancestors.argv0", - "ptrace.tracee.ancestors.cap_effective", - "ptrace.tracee.ancestors.cap_permitted", - "ptrace.tracee.ancestors.comm", - "ptrace.tracee.ancestors.container.id", - "ptrace.tracee.ancestors.cookie", - "ptrace.tracee.ancestors.created_at", - "ptrace.tracee.ancestors.egid", - "ptrace.tracee.ancestors.egroup", - "ptrace.tracee.ancestors.envp", - "ptrace.tracee.ancestors.envs", - "ptrace.tracee.ancestors.envs_truncated", - "ptrace.tracee.ancestors.euid", - "ptrace.tracee.ancestors.euser", - "ptrace.tracee.ancestors.file.change_time", - "ptrace.tracee.ancestors.file.filesystem", - "ptrace.tracee.ancestors.file.gid", - "ptrace.tracee.ancestors.file.group", - "ptrace.tracee.ancestors.file.in_upper_layer", - "ptrace.tracee.ancestors.file.inode", - "ptrace.tracee.ancestors.file.mode", - "ptrace.tracee.ancestors.file.modification_time", - "ptrace.tracee.ancestors.file.mount_id", - "ptrace.tracee.ancestors.file.name", - "ptrace.tracee.ancestors.file.name.length", - "ptrace.tracee.ancestors.file.path", - "ptrace.tracee.ancestors.file.path.length", - "ptrace.tracee.ancestors.file.rights", - "ptrace.tracee.ancestors.file.uid", - "ptrace.tracee.ancestors.file.user", - "ptrace.tracee.ancestors.fsgid", - "ptrace.tracee.ancestors.fsgroup", - "ptrace.tracee.ancestors.fsuid", - "ptrace.tracee.ancestors.fsuser", - "ptrace.tracee.ancestors.gid", - "ptrace.tracee.ancestors.group", - "ptrace.tracee.ancestors.interpreter.file.change_time", - "ptrace.tracee.ancestors.interpreter.file.filesystem", - "ptrace.tracee.ancestors.interpreter.file.gid", - "ptrace.tracee.ancestors.interpreter.file.group", - "ptrace.tracee.ancestors.interpreter.file.in_upper_layer", - "ptrace.tracee.ancestors.interpreter.file.inode", - "ptrace.tracee.ancestors.interpreter.file.mode", - "ptrace.tracee.ancestors.interpreter.file.modification_time", - "ptrace.tracee.ancestors.interpreter.file.mount_id", - "ptrace.tracee.ancestors.interpreter.file.name", - "ptrace.tracee.ancestors.interpreter.file.name.length", - "ptrace.tracee.ancestors.interpreter.file.path", - "ptrace.tracee.ancestors.interpreter.file.path.length", - "ptrace.tracee.ancestors.interpreter.file.rights", - "ptrace.tracee.ancestors.interpreter.file.uid", - "ptrace.tracee.ancestors.interpreter.file.user", - "ptrace.tracee.ancestors.is_kworker", - "ptrace.tracee.ancestors.is_thread", - "ptrace.tracee.ancestors.pid", - "ptrace.tracee.ancestors.ppid", - "ptrace.tracee.ancestors.tid", - "ptrace.tracee.ancestors.tty_name", - "ptrace.tracee.ancestors.uid", - "ptrace.tracee.ancestors.user", - "ptrace.tracee.args", - "ptrace.tracee.args_flags", - "ptrace.tracee.args_options", - "ptrace.tracee.args_truncated", - "ptrace.tracee.argv", - "ptrace.tracee.argv0", - "ptrace.tracee.cap_effective", - "ptrace.tracee.cap_permitted", - "ptrace.tracee.comm", - "ptrace.tracee.container.id", - "ptrace.tracee.cookie", - "ptrace.tracee.created_at", - "ptrace.tracee.egid", - "ptrace.tracee.egroup", - "ptrace.tracee.envp", - "ptrace.tracee.envs", - "ptrace.tracee.envs_truncated", - "ptrace.tracee.euid", - "ptrace.tracee.euser", - "ptrace.tracee.file.change_time", - "ptrace.tracee.file.filesystem", - "ptrace.tracee.file.gid", - "ptrace.tracee.file.group", - "ptrace.tracee.file.in_upper_layer", - "ptrace.tracee.file.inode", - "ptrace.tracee.file.mode", - "ptrace.tracee.file.modification_time", - "ptrace.tracee.file.mount_id", - "ptrace.tracee.file.name", - "ptrace.tracee.file.name.length", - "ptrace.tracee.file.path", - "ptrace.tracee.file.path.length", - "ptrace.tracee.file.rights", - "ptrace.tracee.file.uid", - "ptrace.tracee.file.user", - "ptrace.tracee.fsgid", - "ptrace.tracee.fsgroup", - "ptrace.tracee.fsuid", - "ptrace.tracee.fsuser", - "ptrace.tracee.gid", - "ptrace.tracee.group", - "ptrace.tracee.interpreter.file.change_time", - "ptrace.tracee.interpreter.file.filesystem", - "ptrace.tracee.interpreter.file.gid", - "ptrace.tracee.interpreter.file.group", - "ptrace.tracee.interpreter.file.in_upper_layer", - "ptrace.tracee.interpreter.file.inode", - "ptrace.tracee.interpreter.file.mode", - "ptrace.tracee.interpreter.file.modification_time", - "ptrace.tracee.interpreter.file.mount_id", - "ptrace.tracee.interpreter.file.name", - "ptrace.tracee.interpreter.file.name.length", - "ptrace.tracee.interpreter.file.path", - "ptrace.tracee.interpreter.file.path.length", - "ptrace.tracee.interpreter.file.rights", - "ptrace.tracee.interpreter.file.uid", - "ptrace.tracee.interpreter.file.user", - "ptrace.tracee.is_kworker", - "ptrace.tracee.is_thread", - "ptrace.tracee.parent.args", - "ptrace.tracee.parent.args_flags", - "ptrace.tracee.parent.args_options", - "ptrace.tracee.parent.args_truncated", - "ptrace.tracee.parent.argv", - "ptrace.tracee.parent.argv0", - "ptrace.tracee.parent.cap_effective", - "ptrace.tracee.parent.cap_permitted", - "ptrace.tracee.parent.comm", - "ptrace.tracee.parent.container.id", - "ptrace.tracee.parent.cookie", - "ptrace.tracee.parent.created_at", - "ptrace.tracee.parent.egid", - "ptrace.tracee.parent.egroup", - "ptrace.tracee.parent.envp", - "ptrace.tracee.parent.envs", - "ptrace.tracee.parent.envs_truncated", - "ptrace.tracee.parent.euid", - "ptrace.tracee.parent.euser", - "ptrace.tracee.parent.file.change_time", - "ptrace.tracee.parent.file.filesystem", - "ptrace.tracee.parent.file.gid", - "ptrace.tracee.parent.file.group", - "ptrace.tracee.parent.file.in_upper_layer", - "ptrace.tracee.parent.file.inode", - "ptrace.tracee.parent.file.mode", - "ptrace.tracee.parent.file.modification_time", - "ptrace.tracee.parent.file.mount_id", - "ptrace.tracee.parent.file.name", - "ptrace.tracee.parent.file.name.length", - "ptrace.tracee.parent.file.path", - "ptrace.tracee.parent.file.path.length", - "ptrace.tracee.parent.file.rights", - "ptrace.tracee.parent.file.uid", - "ptrace.tracee.parent.file.user", - "ptrace.tracee.parent.fsgid", - "ptrace.tracee.parent.fsgroup", - "ptrace.tracee.parent.fsuid", - "ptrace.tracee.parent.fsuser", - "ptrace.tracee.parent.gid", - "ptrace.tracee.parent.group", - "ptrace.tracee.parent.interpreter.file.change_time", - "ptrace.tracee.parent.interpreter.file.filesystem", - "ptrace.tracee.parent.interpreter.file.gid", - "ptrace.tracee.parent.interpreter.file.group", - "ptrace.tracee.parent.interpreter.file.in_upper_layer", - "ptrace.tracee.parent.interpreter.file.inode", - "ptrace.tracee.parent.interpreter.file.mode", - "ptrace.tracee.parent.interpreter.file.modification_time", - "ptrace.tracee.parent.interpreter.file.mount_id", - "ptrace.tracee.parent.interpreter.file.name", - "ptrace.tracee.parent.interpreter.file.name.length", - "ptrace.tracee.parent.interpreter.file.path", - "ptrace.tracee.parent.interpreter.file.path.length", - "ptrace.tracee.parent.interpreter.file.rights", - "ptrace.tracee.parent.interpreter.file.uid", - "ptrace.tracee.parent.interpreter.file.user", - "ptrace.tracee.parent.is_kworker", - "ptrace.tracee.parent.is_thread", - "ptrace.tracee.parent.pid", - "ptrace.tracee.parent.ppid", - "ptrace.tracee.parent.tid", - "ptrace.tracee.parent.tty_name", - "ptrace.tracee.parent.uid", - "ptrace.tracee.parent.user", - "ptrace.tracee.pid", - "ptrace.tracee.ppid", - "ptrace.tracee.tid", - "ptrace.tracee.tty_name", - "ptrace.tracee.uid", - "ptrace.tracee.user", - "removexattr.file.change_time", - "removexattr.file.destination.name", - "removexattr.file.destination.namespace", - "removexattr.file.filesystem", - "removexattr.file.gid", - "removexattr.file.group", - "removexattr.file.in_upper_layer", - "removexattr.file.inode", - "removexattr.file.mode", - "removexattr.file.modification_time", - "removexattr.file.mount_id", - "removexattr.file.name", - "removexattr.file.name.length", - "removexattr.file.path", - "removexattr.file.path.length", - "removexattr.file.rights", - "removexattr.file.uid", - "removexattr.file.user", - "removexattr.retval", - "rename.file.change_time", - "rename.file.destination.change_time", - "rename.file.destination.filesystem", - "rename.file.destination.gid", - "rename.file.destination.group", - "rename.file.destination.in_upper_layer", - "rename.file.destination.inode", - "rename.file.destination.mode", - "rename.file.destination.modification_time", - "rename.file.destination.mount_id", - "rename.file.destination.name", - "rename.file.destination.name.length", - "rename.file.destination.path", - "rename.file.destination.path.length", - "rename.file.destination.rights", - "rename.file.destination.uid", - "rename.file.destination.user", - "rename.file.filesystem", - "rename.file.gid", - "rename.file.group", - "rename.file.in_upper_layer", - "rename.file.inode", - "rename.file.mode", - "rename.file.modification_time", - "rename.file.mount_id", - "rename.file.name", - "rename.file.name.length", - "rename.file.path", - "rename.file.path.length", - "rename.file.rights", - "rename.file.uid", - "rename.file.user", - "rename.retval", - "rmdir.file.change_time", - "rmdir.file.filesystem", - "rmdir.file.gid", - "rmdir.file.group", - "rmdir.file.in_upper_layer", - "rmdir.file.inode", - "rmdir.file.mode", - "rmdir.file.modification_time", - "rmdir.file.mount_id", - "rmdir.file.name", - "rmdir.file.name.length", - "rmdir.file.path", - "rmdir.file.path.length", - "rmdir.file.rights", - "rmdir.file.uid", - "rmdir.file.user", - "rmdir.retval", - "selinux.bool.name", - "selinux.bool.state", - "selinux.bool_commit.state", - "selinux.enforce.status", - "setgid.egid", - "setgid.egroup", - "setgid.fsgid", - "setgid.fsgroup", - "setgid.gid", - "setgid.group", - "setuid.euid", - "setuid.euser", - "setuid.fsuid", - "setuid.fsuser", - "setuid.uid", - "setuid.user", - "setxattr.file.change_time", - "setxattr.file.destination.name", - "setxattr.file.destination.namespace", - "setxattr.file.filesystem", - "setxattr.file.gid", - "setxattr.file.group", - "setxattr.file.in_upper_layer", - "setxattr.file.inode", - "setxattr.file.mode", - "setxattr.file.modification_time", - "setxattr.file.mount_id", - "setxattr.file.name", - "setxattr.file.name.length", - "setxattr.file.path", - "setxattr.file.path.length", - "setxattr.file.rights", - "setxattr.file.uid", - "setxattr.file.user", - "setxattr.retval", - "signal.pid", - "signal.retval", - "signal.target.ancestors.args", - "signal.target.ancestors.args_flags", - "signal.target.ancestors.args_options", - "signal.target.ancestors.args_truncated", - "signal.target.ancestors.argv", - "signal.target.ancestors.argv0", - "signal.target.ancestors.cap_effective", - "signal.target.ancestors.cap_permitted", - "signal.target.ancestors.comm", - "signal.target.ancestors.container.id", - "signal.target.ancestors.cookie", - "signal.target.ancestors.created_at", - "signal.target.ancestors.egid", - "signal.target.ancestors.egroup", - "signal.target.ancestors.envp", - "signal.target.ancestors.envs", - "signal.target.ancestors.envs_truncated", - "signal.target.ancestors.euid", - "signal.target.ancestors.euser", - "signal.target.ancestors.file.change_time", - "signal.target.ancestors.file.filesystem", - "signal.target.ancestors.file.gid", - "signal.target.ancestors.file.group", - "signal.target.ancestors.file.in_upper_layer", - "signal.target.ancestors.file.inode", - "signal.target.ancestors.file.mode", - "signal.target.ancestors.file.modification_time", - "signal.target.ancestors.file.mount_id", - "signal.target.ancestors.file.name", - "signal.target.ancestors.file.name.length", - "signal.target.ancestors.file.path", - "signal.target.ancestors.file.path.length", - "signal.target.ancestors.file.rights", - "signal.target.ancestors.file.uid", - "signal.target.ancestors.file.user", - "signal.target.ancestors.fsgid", - "signal.target.ancestors.fsgroup", - "signal.target.ancestors.fsuid", - "signal.target.ancestors.fsuser", - "signal.target.ancestors.gid", - "signal.target.ancestors.group", - "signal.target.ancestors.interpreter.file.change_time", - "signal.target.ancestors.interpreter.file.filesystem", - "signal.target.ancestors.interpreter.file.gid", - "signal.target.ancestors.interpreter.file.group", - "signal.target.ancestors.interpreter.file.in_upper_layer", - "signal.target.ancestors.interpreter.file.inode", - "signal.target.ancestors.interpreter.file.mode", - "signal.target.ancestors.interpreter.file.modification_time", - "signal.target.ancestors.interpreter.file.mount_id", - "signal.target.ancestors.interpreter.file.name", - "signal.target.ancestors.interpreter.file.name.length", - "signal.target.ancestors.interpreter.file.path", - "signal.target.ancestors.interpreter.file.path.length", - "signal.target.ancestors.interpreter.file.rights", - "signal.target.ancestors.interpreter.file.uid", - "signal.target.ancestors.interpreter.file.user", - "signal.target.ancestors.is_kworker", - "signal.target.ancestors.is_thread", - "signal.target.ancestors.pid", - "signal.target.ancestors.ppid", - "signal.target.ancestors.tid", - "signal.target.ancestors.tty_name", - "signal.target.ancestors.uid", - "signal.target.ancestors.user", - "signal.target.args", - "signal.target.args_flags", - "signal.target.args_options", - "signal.target.args_truncated", - "signal.target.argv", - "signal.target.argv0", - "signal.target.cap_effective", - "signal.target.cap_permitted", - "signal.target.comm", - "signal.target.container.id", - "signal.target.cookie", - "signal.target.created_at", - "signal.target.egid", - "signal.target.egroup", - "signal.target.envp", - "signal.target.envs", - "signal.target.envs_truncated", - "signal.target.euid", - "signal.target.euser", - "signal.target.file.change_time", - "signal.target.file.filesystem", - "signal.target.file.gid", - "signal.target.file.group", - "signal.target.file.in_upper_layer", - "signal.target.file.inode", - "signal.target.file.mode", - "signal.target.file.modification_time", - "signal.target.file.mount_id", - "signal.target.file.name", - "signal.target.file.name.length", - "signal.target.file.path", - "signal.target.file.path.length", - "signal.target.file.rights", - "signal.target.file.uid", - "signal.target.file.user", - "signal.target.fsgid", - "signal.target.fsgroup", - "signal.target.fsuid", - "signal.target.fsuser", - "signal.target.gid", - "signal.target.group", - "signal.target.interpreter.file.change_time", - "signal.target.interpreter.file.filesystem", - "signal.target.interpreter.file.gid", - "signal.target.interpreter.file.group", - "signal.target.interpreter.file.in_upper_layer", - "signal.target.interpreter.file.inode", - "signal.target.interpreter.file.mode", - "signal.target.interpreter.file.modification_time", - "signal.target.interpreter.file.mount_id", - "signal.target.interpreter.file.name", - "signal.target.interpreter.file.name.length", - "signal.target.interpreter.file.path", - "signal.target.interpreter.file.path.length", - "signal.target.interpreter.file.rights", - "signal.target.interpreter.file.uid", - "signal.target.interpreter.file.user", - "signal.target.is_kworker", - "signal.target.is_thread", - "signal.target.parent.args", - "signal.target.parent.args_flags", - "signal.target.parent.args_options", - "signal.target.parent.args_truncated", - "signal.target.parent.argv", - "signal.target.parent.argv0", - "signal.target.parent.cap_effective", - "signal.target.parent.cap_permitted", - "signal.target.parent.comm", - "signal.target.parent.container.id", - "signal.target.parent.cookie", - "signal.target.parent.created_at", - "signal.target.parent.egid", - "signal.target.parent.egroup", - "signal.target.parent.envp", - "signal.target.parent.envs", - "signal.target.parent.envs_truncated", - "signal.target.parent.euid", - "signal.target.parent.euser", - "signal.target.parent.file.change_time", - "signal.target.parent.file.filesystem", - "signal.target.parent.file.gid", - "signal.target.parent.file.group", - "signal.target.parent.file.in_upper_layer", - "signal.target.parent.file.inode", - "signal.target.parent.file.mode", - "signal.target.parent.file.modification_time", - "signal.target.parent.file.mount_id", - "signal.target.parent.file.name", - "signal.target.parent.file.name.length", - "signal.target.parent.file.path", - "signal.target.parent.file.path.length", - "signal.target.parent.file.rights", - "signal.target.parent.file.uid", - "signal.target.parent.file.user", - "signal.target.parent.fsgid", - "signal.target.parent.fsgroup", - "signal.target.parent.fsuid", - "signal.target.parent.fsuser", - "signal.target.parent.gid", - "signal.target.parent.group", - "signal.target.parent.interpreter.file.change_time", - "signal.target.parent.interpreter.file.filesystem", - "signal.target.parent.interpreter.file.gid", - "signal.target.parent.interpreter.file.group", - "signal.target.parent.interpreter.file.in_upper_layer", - "signal.target.parent.interpreter.file.inode", - "signal.target.parent.interpreter.file.mode", - "signal.target.parent.interpreter.file.modification_time", - "signal.target.parent.interpreter.file.mount_id", - "signal.target.parent.interpreter.file.name", - "signal.target.parent.interpreter.file.name.length", - "signal.target.parent.interpreter.file.path", - "signal.target.parent.interpreter.file.path.length", - "signal.target.parent.interpreter.file.rights", - "signal.target.parent.interpreter.file.uid", - "signal.target.parent.interpreter.file.user", - "signal.target.parent.is_kworker", - "signal.target.parent.is_thread", - "signal.target.parent.pid", - "signal.target.parent.ppid", - "signal.target.parent.tid", - "signal.target.parent.tty_name", - "signal.target.parent.uid", - "signal.target.parent.user", - "signal.target.pid", - "signal.target.ppid", - "signal.target.tid", - "signal.target.tty_name", - "signal.target.uid", - "signal.target.user", - "signal.type", - "splice.file.change_time", - "splice.file.filesystem", - "splice.file.gid", - "splice.file.group", - "splice.file.in_upper_layer", - "splice.file.inode", - "splice.file.mode", - "splice.file.modification_time", - "splice.file.mount_id", - "splice.file.name", - "splice.file.name.length", - "splice.file.path", - "splice.file.path.length", - "splice.file.rights", - "splice.file.uid", - "splice.file.user", - "splice.pipe_entry_flag", - "splice.pipe_exit_flag", - "splice.retval", - "unlink.file.change_time", - "unlink.file.filesystem", - "unlink.file.gid", - "unlink.file.group", - "unlink.file.in_upper_layer", - "unlink.file.inode", - "unlink.file.mode", - "unlink.file.modification_time", - "unlink.file.mount_id", - "unlink.file.name", - "unlink.file.name.length", - "unlink.file.path", - "unlink.file.path.length", - "unlink.file.rights", - "unlink.file.uid", - "unlink.file.user", - "unlink.flags", - "unlink.retval", - "unload_module.name", - "unload_module.retval", - "utimes.file.change_time", - "utimes.file.filesystem", - "utimes.file.gid", - "utimes.file.group", - "utimes.file.in_upper_layer", - "utimes.file.inode", - "utimes.file.mode", - "utimes.file.modification_time", - "utimes.file.mount_id", - "utimes.file.name", - "utimes.file.name.length", - "utimes.file.path", - "utimes.file.path.length", - "utimes.file.rights", - "utimes.file.uid", - "utimes.file.user", - "utimes.retval", - } -} -func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { - switch field { - case "async": - return e.Async, nil - case "bind.addr.family": - return int(e.Bind.AddrFamily), nil - case "bind.addr.ip": - return e.Bind.Addr.IPNet, nil - case "bind.addr.port": - return int(e.Bind.Addr.Port), nil - case "bind.retval": - return int(e.Bind.SyscallEvent.Retval), nil - case "bpf.cmd": - return int(e.BPF.Cmd), nil - case "bpf.map.name": - return e.BPF.Map.Name, nil - case "bpf.map.type": - return int(e.BPF.Map.Type), nil - case "bpf.prog.attach_type": - return int(e.BPF.Program.AttachType), nil - case "bpf.prog.helpers": - result := make([]int, len(e.ResolveHelpers(&e.BPF.Program))) - for i, v := range e.ResolveHelpers(&e.BPF.Program) { - result[i] = int(v) - } - return result, nil - case "bpf.prog.name": - return e.BPF.Program.Name, nil - case "bpf.prog.tag": - return e.BPF.Program.Tag, nil - case "bpf.prog.type": - return int(e.BPF.Program.Type), nil - case "bpf.retval": - return int(e.BPF.SyscallEvent.Retval), nil - case "capset.cap_effective": - return int(e.Capset.CapEffective), nil - case "capset.cap_permitted": - return int(e.Capset.CapPermitted), nil - case "chmod.file.change_time": - return int(e.Chmod.File.FileFields.CTime), nil - case "chmod.file.destination.mode": - return int(e.Chmod.Mode), nil - case "chmod.file.destination.rights": - return int(e.Chmod.Mode), nil - case "chmod.file.filesystem": - return e.ResolveFileFilesystem(&e.Chmod.File), nil - case "chmod.file.gid": - return int(e.Chmod.File.FileFields.GID), nil - case "chmod.file.group": - return e.ResolveFileFieldsGroup(&e.Chmod.File.FileFields), nil - case "chmod.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Chmod.File.FileFields), nil - case "chmod.file.inode": - return int(e.Chmod.File.FileFields.Inode), nil - case "chmod.file.mode": - return int(e.Chmod.File.FileFields.Mode), nil - case "chmod.file.modification_time": - return int(e.Chmod.File.FileFields.MTime), nil - case "chmod.file.mount_id": - return int(e.Chmod.File.FileFields.MountID), nil - case "chmod.file.name": - return e.ResolveFileBasename(&e.Chmod.File), nil - case "chmod.file.name.length": - return e.ResolveFileBasename(&e.Chmod.File), nil - case "chmod.file.path": - return e.ResolveFilePath(&e.Chmod.File), nil - case "chmod.file.path.length": - return e.ResolveFilePath(&e.Chmod.File), nil - case "chmod.file.rights": - return int(e.ResolveRights(&e.Chmod.File.FileFields)), nil - case "chmod.file.uid": - return int(e.Chmod.File.FileFields.UID), nil - case "chmod.file.user": - return e.ResolveFileFieldsUser(&e.Chmod.File.FileFields), nil - case "chmod.retval": - return int(e.Chmod.SyscallEvent.Retval), nil - case "chown.file.change_time": - return int(e.Chown.File.FileFields.CTime), nil - case "chown.file.destination.gid": - return int(e.Chown.GID), nil - case "chown.file.destination.group": - return e.ResolveChownGID(&e.Chown), nil - case "chown.file.destination.uid": - return int(e.Chown.UID), nil - case "chown.file.destination.user": - return e.ResolveChownUID(&e.Chown), nil - case "chown.file.filesystem": - return e.ResolveFileFilesystem(&e.Chown.File), nil - case "chown.file.gid": - return int(e.Chown.File.FileFields.GID), nil - case "chown.file.group": - return e.ResolveFileFieldsGroup(&e.Chown.File.FileFields), nil - case "chown.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Chown.File.FileFields), nil - case "chown.file.inode": - return int(e.Chown.File.FileFields.Inode), nil - case "chown.file.mode": - return int(e.Chown.File.FileFields.Mode), nil - case "chown.file.modification_time": - return int(e.Chown.File.FileFields.MTime), nil - case "chown.file.mount_id": - return int(e.Chown.File.FileFields.MountID), nil - case "chown.file.name": - return e.ResolveFileBasename(&e.Chown.File), nil - case "chown.file.name.length": - return e.ResolveFileBasename(&e.Chown.File), nil - case "chown.file.path": - return e.ResolveFilePath(&e.Chown.File), nil - case "chown.file.path.length": - return e.ResolveFilePath(&e.Chown.File), nil - case "chown.file.rights": - return int(e.ResolveRights(&e.Chown.File.FileFields)), nil - case "chown.file.uid": - return int(e.Chown.File.FileFields.UID), nil - case "chown.file.user": - return e.ResolveFileFieldsUser(&e.Chown.File.FileFields), nil - case "chown.retval": - return int(e.Chown.SyscallEvent.Retval), nil - case "container.id": - return e.ResolveContainerID(&e.ContainerContext), nil - case "container.tags": - return e.ResolveContainerTags(&e.ContainerContext), nil - case "dns.id": - return int(e.DNS.ID), nil - case "dns.question.class": - return int(e.DNS.Class), nil - case "dns.question.count": - return int(e.DNS.Count), nil - case "dns.question.length": - return int(e.DNS.Size), nil - case "dns.question.name": - return e.DNS.Name, nil - case "dns.question.name.length": - return len(e.DNS.Name), nil - case "dns.question.type": - return int(e.DNS.Type), nil - case "exec.args": - return e.ResolveProcessArgs(e.Exec.Process), nil - case "exec.args_flags": - return e.ResolveProcessArgsFlags(e.Exec.Process), nil - case "exec.args_options": - return e.ResolveProcessArgsOptions(e.Exec.Process), nil - case "exec.args_truncated": - return e.ResolveProcessArgsTruncated(e.Exec.Process), nil - case "exec.argv": - return e.ResolveProcessArgv(e.Exec.Process), nil - case "exec.argv0": - return e.ResolveProcessArgv0(e.Exec.Process), nil - case "exec.cap_effective": - return int(e.Exec.Process.Credentials.CapEffective), nil - case "exec.cap_permitted": - return int(e.Exec.Process.Credentials.CapPermitted), nil - case "exec.comm": - return e.Exec.Process.Comm, nil - case "exec.container.id": - return e.Exec.Process.ContainerID, nil - case "exec.cookie": - return int(e.Exec.Process.Cookie), nil - case "exec.created_at": - return int(e.ResolveProcessCreatedAt(e.Exec.Process)), nil - case "exec.egid": - return int(e.Exec.Process.Credentials.EGID), nil - case "exec.egroup": - return e.Exec.Process.Credentials.EGroup, nil - case "exec.envp": - return e.ResolveProcessEnvp(e.Exec.Process), nil - case "exec.envs": - return e.ResolveProcessEnvs(e.Exec.Process), nil - case "exec.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.Exec.Process), nil - case "exec.euid": - return int(e.Exec.Process.Credentials.EUID), nil - case "exec.euser": - return e.Exec.Process.Credentials.EUser, nil - case "exec.file.change_time": - return int(e.Exec.Process.FileEvent.FileFields.CTime), nil - case "exec.file.filesystem": - return e.ResolveFileFilesystem(&e.Exec.Process.FileEvent), nil - case "exec.file.gid": - return int(e.Exec.Process.FileEvent.FileFields.GID), nil - case "exec.file.group": - return e.ResolveFileFieldsGroup(&e.Exec.Process.FileEvent.FileFields), nil - case "exec.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Exec.Process.FileEvent.FileFields), nil - case "exec.file.inode": - return int(e.Exec.Process.FileEvent.FileFields.Inode), nil - case "exec.file.mode": - return int(e.Exec.Process.FileEvent.FileFields.Mode), nil - case "exec.file.modification_time": - return int(e.Exec.Process.FileEvent.FileFields.MTime), nil - case "exec.file.mount_id": - return int(e.Exec.Process.FileEvent.FileFields.MountID), nil - case "exec.file.name": - return e.ResolveFileBasename(&e.Exec.Process.FileEvent), nil - case "exec.file.name.length": - return e.ResolveFileBasename(&e.Exec.Process.FileEvent), nil - case "exec.file.path": - return e.ResolveFilePath(&e.Exec.Process.FileEvent), nil - case "exec.file.path.length": - return e.ResolveFilePath(&e.Exec.Process.FileEvent), nil - case "exec.file.rights": - return int(e.ResolveRights(&e.Exec.Process.FileEvent.FileFields)), nil - case "exec.file.uid": - return int(e.Exec.Process.FileEvent.FileFields.UID), nil - case "exec.file.user": - return e.ResolveFileFieldsUser(&e.Exec.Process.FileEvent.FileFields), nil - case "exec.fsgid": - return int(e.Exec.Process.Credentials.FSGID), nil - case "exec.fsgroup": - return e.Exec.Process.Credentials.FSGroup, nil - case "exec.fsuid": - return int(e.Exec.Process.Credentials.FSUID), nil - case "exec.fsuser": - return e.Exec.Process.Credentials.FSUser, nil - case "exec.gid": - return int(e.Exec.Process.Credentials.GID), nil - case "exec.group": - return e.Exec.Process.Credentials.Group, nil - case "exec.interpreter.file.change_time": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "exec.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.gid": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "exec.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exec.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exec.interpreter.file.inode": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "exec.interpreter.file.mode": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "exec.interpreter.file.modification_time": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "exec.interpreter.file.mount_id": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "exec.interpreter.file.name": - return e.ResolveFileBasename(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.name.length": - return e.ResolveFileBasename(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.path": - return e.ResolveFilePath(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.path.length": - return e.ResolveFilePath(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.rights": - return int(e.ResolveRights(&e.Exec.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "exec.interpreter.file.uid": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "exec.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exec.is_kworker": - return e.Exec.Process.PIDContext.IsKworker, nil - case "exec.is_thread": - return e.Exec.Process.IsThread, nil - case "exec.pid": - return int(e.Exec.Process.PIDContext.Pid), nil - case "exec.ppid": - return int(e.Exec.Process.PPid), nil - case "exec.tid": - return int(e.Exec.Process.PIDContext.Tid), nil - case "exec.tty_name": - return e.Exec.Process.TTYName, nil - case "exec.uid": - return int(e.Exec.Process.Credentials.UID), nil - case "exec.user": - return e.Exec.Process.Credentials.User, nil - case "exit.args": - return e.ResolveProcessArgs(e.Exit.Process), nil - case "exit.args_flags": - return e.ResolveProcessArgsFlags(e.Exit.Process), nil - case "exit.args_options": - return e.ResolveProcessArgsOptions(e.Exit.Process), nil - case "exit.args_truncated": - return e.ResolveProcessArgsTruncated(e.Exit.Process), nil - case "exit.argv": - return e.ResolveProcessArgv(e.Exit.Process), nil - case "exit.argv0": - return e.ResolveProcessArgv0(e.Exit.Process), nil - case "exit.cap_effective": - return int(e.Exit.Process.Credentials.CapEffective), nil - case "exit.cap_permitted": - return int(e.Exit.Process.Credentials.CapPermitted), nil - case "exit.cause": - return int(e.Exit.Cause), nil - case "exit.code": - return int(e.Exit.Code), nil - case "exit.comm": - return e.Exit.Process.Comm, nil - case "exit.container.id": - return e.Exit.Process.ContainerID, nil - case "exit.cookie": - return int(e.Exit.Process.Cookie), nil - case "exit.created_at": - return int(e.ResolveProcessCreatedAt(e.Exit.Process)), nil - case "exit.egid": - return int(e.Exit.Process.Credentials.EGID), nil - case "exit.egroup": - return e.Exit.Process.Credentials.EGroup, nil - case "exit.envp": - return e.ResolveProcessEnvp(e.Exit.Process), nil - case "exit.envs": - return e.ResolveProcessEnvs(e.Exit.Process), nil - case "exit.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.Exit.Process), nil - case "exit.euid": - return int(e.Exit.Process.Credentials.EUID), nil - case "exit.euser": - return e.Exit.Process.Credentials.EUser, nil - case "exit.file.change_time": - return int(e.Exit.Process.FileEvent.FileFields.CTime), nil - case "exit.file.filesystem": - return e.ResolveFileFilesystem(&e.Exit.Process.FileEvent), nil - case "exit.file.gid": - return int(e.Exit.Process.FileEvent.FileFields.GID), nil - case "exit.file.group": - return e.ResolveFileFieldsGroup(&e.Exit.Process.FileEvent.FileFields), nil - case "exit.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Exit.Process.FileEvent.FileFields), nil - case "exit.file.inode": - return int(e.Exit.Process.FileEvent.FileFields.Inode), nil - case "exit.file.mode": - return int(e.Exit.Process.FileEvent.FileFields.Mode), nil - case "exit.file.modification_time": - return int(e.Exit.Process.FileEvent.FileFields.MTime), nil - case "exit.file.mount_id": - return int(e.Exit.Process.FileEvent.FileFields.MountID), nil - case "exit.file.name": - return e.ResolveFileBasename(&e.Exit.Process.FileEvent), nil - case "exit.file.name.length": - return e.ResolveFileBasename(&e.Exit.Process.FileEvent), nil - case "exit.file.path": - return e.ResolveFilePath(&e.Exit.Process.FileEvent), nil - case "exit.file.path.length": - return e.ResolveFilePath(&e.Exit.Process.FileEvent), nil - case "exit.file.rights": - return int(e.ResolveRights(&e.Exit.Process.FileEvent.FileFields)), nil - case "exit.file.uid": - return int(e.Exit.Process.FileEvent.FileFields.UID), nil - case "exit.file.user": - return e.ResolveFileFieldsUser(&e.Exit.Process.FileEvent.FileFields), nil - case "exit.fsgid": - return int(e.Exit.Process.Credentials.FSGID), nil - case "exit.fsgroup": - return e.Exit.Process.Credentials.FSGroup, nil - case "exit.fsuid": - return int(e.Exit.Process.Credentials.FSUID), nil - case "exit.fsuser": - return e.Exit.Process.Credentials.FSUser, nil - case "exit.gid": - return int(e.Exit.Process.Credentials.GID), nil - case "exit.group": - return e.Exit.Process.Credentials.Group, nil - case "exit.interpreter.file.change_time": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "exit.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.gid": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "exit.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exit.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exit.interpreter.file.inode": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "exit.interpreter.file.mode": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "exit.interpreter.file.modification_time": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "exit.interpreter.file.mount_id": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "exit.interpreter.file.name": - return e.ResolveFileBasename(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.name.length": - return e.ResolveFileBasename(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.path": - return e.ResolveFilePath(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.path.length": - return e.ResolveFilePath(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.rights": - return int(e.ResolveRights(&e.Exit.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "exit.interpreter.file.uid": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "exit.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exit.is_kworker": - return e.Exit.Process.PIDContext.IsKworker, nil - case "exit.is_thread": - return e.Exit.Process.IsThread, nil - case "exit.pid": - return int(e.Exit.Process.PIDContext.Pid), nil - case "exit.ppid": - return int(e.Exit.Process.PPid), nil - case "exit.tid": - return int(e.Exit.Process.PIDContext.Tid), nil - case "exit.tty_name": - return e.Exit.Process.TTYName, nil - case "exit.uid": - return int(e.Exit.Process.Credentials.UID), nil - case "exit.user": - return e.Exit.Process.Credentials.User, nil - case "link.file.change_time": - return int(e.Link.Source.FileFields.CTime), nil - case "link.file.destination.change_time": - return int(e.Link.Target.FileFields.CTime), nil - case "link.file.destination.filesystem": - return e.ResolveFileFilesystem(&e.Link.Target), nil - case "link.file.destination.gid": - return int(e.Link.Target.FileFields.GID), nil - case "link.file.destination.group": - return e.ResolveFileFieldsGroup(&e.Link.Target.FileFields), nil - case "link.file.destination.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Link.Target.FileFields), nil - case "link.file.destination.inode": - return int(e.Link.Target.FileFields.Inode), nil - case "link.file.destination.mode": - return int(e.Link.Target.FileFields.Mode), nil - case "link.file.destination.modification_time": - return int(e.Link.Target.FileFields.MTime), nil - case "link.file.destination.mount_id": - return int(e.Link.Target.FileFields.MountID), nil - case "link.file.destination.name": - return e.ResolveFileBasename(&e.Link.Target), nil - case "link.file.destination.name.length": - return e.ResolveFileBasename(&e.Link.Target), nil - case "link.file.destination.path": - return e.ResolveFilePath(&e.Link.Target), nil - case "link.file.destination.path.length": - return e.ResolveFilePath(&e.Link.Target), nil - case "link.file.destination.rights": - return int(e.ResolveRights(&e.Link.Target.FileFields)), nil - case "link.file.destination.uid": - return int(e.Link.Target.FileFields.UID), nil - case "link.file.destination.user": - return e.ResolveFileFieldsUser(&e.Link.Target.FileFields), nil - case "link.file.filesystem": - return e.ResolveFileFilesystem(&e.Link.Source), nil - case "link.file.gid": - return int(e.Link.Source.FileFields.GID), nil - case "link.file.group": - return e.ResolveFileFieldsGroup(&e.Link.Source.FileFields), nil - case "link.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Link.Source.FileFields), nil - case "link.file.inode": - return int(e.Link.Source.FileFields.Inode), nil - case "link.file.mode": - return int(e.Link.Source.FileFields.Mode), nil - case "link.file.modification_time": - return int(e.Link.Source.FileFields.MTime), nil - case "link.file.mount_id": - return int(e.Link.Source.FileFields.MountID), nil - case "link.file.name": - return e.ResolveFileBasename(&e.Link.Source), nil - case "link.file.name.length": - return e.ResolveFileBasename(&e.Link.Source), nil - case "link.file.path": - return e.ResolveFilePath(&e.Link.Source), nil - case "link.file.path.length": - return e.ResolveFilePath(&e.Link.Source), nil - case "link.file.rights": - return int(e.ResolveRights(&e.Link.Source.FileFields)), nil - case "link.file.uid": - return int(e.Link.Source.FileFields.UID), nil - case "link.file.user": - return e.ResolveFileFieldsUser(&e.Link.Source.FileFields), nil - case "link.retval": - return int(e.Link.SyscallEvent.Retval), nil - case "load_module.file.change_time": - return int(e.LoadModule.File.FileFields.CTime), nil - case "load_module.file.filesystem": - return e.ResolveFileFilesystem(&e.LoadModule.File), nil - case "load_module.file.gid": - return int(e.LoadModule.File.FileFields.GID), nil - case "load_module.file.group": - return e.ResolveFileFieldsGroup(&e.LoadModule.File.FileFields), nil - case "load_module.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.LoadModule.File.FileFields), nil - case "load_module.file.inode": - return int(e.LoadModule.File.FileFields.Inode), nil - case "load_module.file.mode": - return int(e.LoadModule.File.FileFields.Mode), nil - case "load_module.file.modification_time": - return int(e.LoadModule.File.FileFields.MTime), nil - case "load_module.file.mount_id": - return int(e.LoadModule.File.FileFields.MountID), nil - case "load_module.file.name": - return e.ResolveFileBasename(&e.LoadModule.File), nil - case "load_module.file.name.length": - return e.ResolveFileBasename(&e.LoadModule.File), nil - case "load_module.file.path": - return e.ResolveFilePath(&e.LoadModule.File), nil - case "load_module.file.path.length": - return e.ResolveFilePath(&e.LoadModule.File), nil - case "load_module.file.rights": - return int(e.ResolveRights(&e.LoadModule.File.FileFields)), nil - case "load_module.file.uid": - return int(e.LoadModule.File.FileFields.UID), nil - case "load_module.file.user": - return e.ResolveFileFieldsUser(&e.LoadModule.File.FileFields), nil - case "load_module.loaded_from_memory": - return e.LoadModule.LoadedFromMemory, nil - case "load_module.name": - return e.LoadModule.Name, nil - case "load_module.retval": - return int(e.LoadModule.SyscallEvent.Retval), nil - case "mkdir.file.change_time": - return int(e.Mkdir.File.FileFields.CTime), nil - case "mkdir.file.destination.mode": - return int(e.Mkdir.Mode), nil - case "mkdir.file.destination.rights": - return int(e.Mkdir.Mode), nil - case "mkdir.file.filesystem": - return e.ResolveFileFilesystem(&e.Mkdir.File), nil - case "mkdir.file.gid": - return int(e.Mkdir.File.FileFields.GID), nil - case "mkdir.file.group": - return e.ResolveFileFieldsGroup(&e.Mkdir.File.FileFields), nil - case "mkdir.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Mkdir.File.FileFields), nil - case "mkdir.file.inode": - return int(e.Mkdir.File.FileFields.Inode), nil - case "mkdir.file.mode": - return int(e.Mkdir.File.FileFields.Mode), nil - case "mkdir.file.modification_time": - return int(e.Mkdir.File.FileFields.MTime), nil - case "mkdir.file.mount_id": - return int(e.Mkdir.File.FileFields.MountID), nil - case "mkdir.file.name": - return e.ResolveFileBasename(&e.Mkdir.File), nil - case "mkdir.file.name.length": - return e.ResolveFileBasename(&e.Mkdir.File), nil - case "mkdir.file.path": - return e.ResolveFilePath(&e.Mkdir.File), nil - case "mkdir.file.path.length": - return e.ResolveFilePath(&e.Mkdir.File), nil - case "mkdir.file.rights": - return int(e.ResolveRights(&e.Mkdir.File.FileFields)), nil - case "mkdir.file.uid": - return int(e.Mkdir.File.FileFields.UID), nil - case "mkdir.file.user": - return e.ResolveFileFieldsUser(&e.Mkdir.File.FileFields), nil - case "mkdir.retval": - return int(e.Mkdir.SyscallEvent.Retval), nil - case "mmap.file.change_time": - return int(e.MMap.File.FileFields.CTime), nil - case "mmap.file.filesystem": - return e.ResolveFileFilesystem(&e.MMap.File), nil - case "mmap.file.gid": - return int(e.MMap.File.FileFields.GID), nil - case "mmap.file.group": - return e.ResolveFileFieldsGroup(&e.MMap.File.FileFields), nil - case "mmap.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.MMap.File.FileFields), nil - case "mmap.file.inode": - return int(e.MMap.File.FileFields.Inode), nil - case "mmap.file.mode": - return int(e.MMap.File.FileFields.Mode), nil - case "mmap.file.modification_time": - return int(e.MMap.File.FileFields.MTime), nil - case "mmap.file.mount_id": - return int(e.MMap.File.FileFields.MountID), nil - case "mmap.file.name": - return e.ResolveFileBasename(&e.MMap.File), nil - case "mmap.file.name.length": - return e.ResolveFileBasename(&e.MMap.File), nil - case "mmap.file.path": - return e.ResolveFilePath(&e.MMap.File), nil - case "mmap.file.path.length": - return e.ResolveFilePath(&e.MMap.File), nil - case "mmap.file.rights": - return int(e.ResolveRights(&e.MMap.File.FileFields)), nil - case "mmap.file.uid": - return int(e.MMap.File.FileFields.UID), nil - case "mmap.file.user": - return e.ResolveFileFieldsUser(&e.MMap.File.FileFields), nil - case "mmap.flags": - return e.MMap.Flags, nil - case "mmap.protection": - return e.MMap.Protection, nil - case "mmap.retval": - return int(e.MMap.SyscallEvent.Retval), nil - case "mprotect.req_protection": - return e.MProtect.ReqProtection, nil - case "mprotect.retval": - return int(e.MProtect.SyscallEvent.Retval), nil - case "mprotect.vm_protection": - return e.MProtect.VMProtection, nil - case "network.destination.ip": - return e.NetworkContext.Destination.IPNet, nil - case "network.destination.port": - return int(e.NetworkContext.Destination.Port), nil - case "network.device.ifindex": - return int(e.NetworkContext.Device.IfIndex), nil - case "network.device.ifname": - return e.ResolveNetworkDeviceIfName(&e.NetworkContext.Device), nil - case "network.l3_protocol": - return int(e.NetworkContext.L3Protocol), nil - case "network.l4_protocol": - return int(e.NetworkContext.L4Protocol), nil - case "network.size": - return int(e.NetworkContext.Size), nil - case "network.source.ip": - return e.NetworkContext.Source.IPNet, nil - case "network.source.port": - return int(e.NetworkContext.Source.Port), nil - case "open.file.change_time": - return int(e.Open.File.FileFields.CTime), nil - case "open.file.destination.mode": - return int(e.Open.Mode), nil - case "open.file.filesystem": - return e.ResolveFileFilesystem(&e.Open.File), nil - case "open.file.gid": - return int(e.Open.File.FileFields.GID), nil - case "open.file.group": - return e.ResolveFileFieldsGroup(&e.Open.File.FileFields), nil - case "open.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Open.File.FileFields), nil - case "open.file.inode": - return int(e.Open.File.FileFields.Inode), nil - case "open.file.mode": - return int(e.Open.File.FileFields.Mode), nil - case "open.file.modification_time": - return int(e.Open.File.FileFields.MTime), nil - case "open.file.mount_id": - return int(e.Open.File.FileFields.MountID), nil - case "open.file.name": - return e.ResolveFileBasename(&e.Open.File), nil - case "open.file.name.length": - return e.ResolveFileBasename(&e.Open.File), nil - case "open.file.path": - return e.ResolveFilePath(&e.Open.File), nil - case "open.file.path.length": - return e.ResolveFilePath(&e.Open.File), nil - case "open.file.rights": - return int(e.ResolveRights(&e.Open.File.FileFields)), nil - case "open.file.uid": - return int(e.Open.File.FileFields.UID), nil - case "open.file.user": - return e.ResolveFileFieldsUser(&e.Open.File.FileFields), nil - case "open.flags": - return int(e.Open.Flags), nil - case "open.retval": - return int(e.Open.SyscallEvent.Retval), nil - case "process.ancestors.args": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.args_flags": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.args_options": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.args_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.argv": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.argv0": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.cap_effective": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.cap_permitted": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.comm": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Comm - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.container.id": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ContainerID - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.cookie": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Cookie) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.created_at": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.egid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.egroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.envp": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.envs": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.envs_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.euid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.euser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.fsgid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.fsgroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.fsuid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.fsuser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.Group - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.is_kworker": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.PIDContext.IsKworker - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.is_thread": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.IsThread - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.pid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Pid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.ppid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PPid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.tid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Tid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.tty_name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.TTYName - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.User - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.args": - return e.ResolveProcessArgs(&e.ProcessContext.Process), nil - case "process.args_flags": - return e.ResolveProcessArgsFlags(&e.ProcessContext.Process), nil - case "process.args_options": - return e.ResolveProcessArgsOptions(&e.ProcessContext.Process), nil - case "process.args_truncated": - return e.ResolveProcessArgsTruncated(&e.ProcessContext.Process), nil - case "process.argv": - return e.ResolveProcessArgv(&e.ProcessContext.Process), nil - case "process.argv0": - return e.ResolveProcessArgv0(&e.ProcessContext.Process), nil - case "process.cap_effective": - return int(e.ProcessContext.Process.Credentials.CapEffective), nil - case "process.cap_permitted": - return int(e.ProcessContext.Process.Credentials.CapPermitted), nil - case "process.comm": - return e.ProcessContext.Process.Comm, nil - case "process.container.id": - return e.ProcessContext.Process.ContainerID, nil - case "process.cookie": - return int(e.ProcessContext.Process.Cookie), nil - case "process.created_at": - return int(e.ResolveProcessCreatedAt(&e.ProcessContext.Process)), nil - case "process.egid": - return int(e.ProcessContext.Process.Credentials.EGID), nil - case "process.egroup": - return e.ProcessContext.Process.Credentials.EGroup, nil - case "process.envp": - return e.ResolveProcessEnvp(&e.ProcessContext.Process), nil - case "process.envs": - return e.ResolveProcessEnvs(&e.ProcessContext.Process), nil - case "process.envs_truncated": - return e.ResolveProcessEnvsTruncated(&e.ProcessContext.Process), nil - case "process.euid": - return int(e.ProcessContext.Process.Credentials.EUID), nil - case "process.euser": - return e.ProcessContext.Process.Credentials.EUser, nil - case "process.file.change_time": - return int(e.ProcessContext.Process.FileEvent.FileFields.CTime), nil - case "process.file.filesystem": - return e.ResolveFileFilesystem(&e.ProcessContext.Process.FileEvent), nil - case "process.file.gid": - return int(e.ProcessContext.Process.FileEvent.FileFields.GID), nil - case "process.file.group": - return e.ResolveFileFieldsGroup(&e.ProcessContext.Process.FileEvent.FileFields), nil - case "process.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.ProcessContext.Process.FileEvent.FileFields), nil - case "process.file.inode": - return int(e.ProcessContext.Process.FileEvent.FileFields.Inode), nil - case "process.file.mode": - return int(e.ProcessContext.Process.FileEvent.FileFields.Mode), nil - case "process.file.modification_time": - return int(e.ProcessContext.Process.FileEvent.FileFields.MTime), nil - case "process.file.mount_id": - return int(e.ProcessContext.Process.FileEvent.FileFields.MountID), nil - case "process.file.name": - return e.ResolveFileBasename(&e.ProcessContext.Process.FileEvent), nil - case "process.file.name.length": - return e.ResolveFileBasename(&e.ProcessContext.Process.FileEvent), nil - case "process.file.path": - return e.ResolveFilePath(&e.ProcessContext.Process.FileEvent), nil - case "process.file.path.length": - return e.ResolveFilePath(&e.ProcessContext.Process.FileEvent), nil - case "process.file.rights": - return int(e.ResolveRights(&e.ProcessContext.Process.FileEvent.FileFields)), nil - case "process.file.uid": - return int(e.ProcessContext.Process.FileEvent.FileFields.UID), nil - case "process.file.user": - return e.ResolveFileFieldsUser(&e.ProcessContext.Process.FileEvent.FileFields), nil - case "process.fsgid": - return int(e.ProcessContext.Process.Credentials.FSGID), nil - case "process.fsgroup": - return e.ProcessContext.Process.Credentials.FSGroup, nil - case "process.fsuid": - return int(e.ProcessContext.Process.Credentials.FSUID), nil - case "process.fsuser": - return e.ProcessContext.Process.Credentials.FSUser, nil - case "process.gid": - return int(e.ProcessContext.Process.Credentials.GID), nil - case "process.group": - return e.ProcessContext.Process.Credentials.Group, nil - case "process.interpreter.file.change_time": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "process.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.gid": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "process.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil - case "process.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil - case "process.interpreter.file.inode": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "process.interpreter.file.mode": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "process.interpreter.file.modification_time": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "process.interpreter.file.mount_id": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "process.interpreter.file.name": - return e.ResolveFileBasename(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.name.length": - return e.ResolveFileBasename(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.path": - return e.ResolveFilePath(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.path.length": - return e.ResolveFilePath(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.rights": - return int(e.ResolveRights(&e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "process.interpreter.file.uid": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "process.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil - case "process.is_kworker": - return e.ProcessContext.Process.PIDContext.IsKworker, nil - case "process.is_thread": - return e.ProcessContext.Process.IsThread, nil - case "process.parent.args": - return e.ResolveProcessArgs(e.ProcessContext.Parent), nil - case "process.parent.args_flags": - return e.ResolveProcessArgsFlags(e.ProcessContext.Parent), nil - case "process.parent.args_options": - return e.ResolveProcessArgsOptions(e.ProcessContext.Parent), nil - case "process.parent.args_truncated": - return e.ResolveProcessArgsTruncated(e.ProcessContext.Parent), nil - case "process.parent.argv": - return e.ResolveProcessArgv(e.ProcessContext.Parent), nil - case "process.parent.argv0": - return e.ResolveProcessArgv0(e.ProcessContext.Parent), nil - case "process.parent.cap_effective": - return int(e.ProcessContext.Parent.Credentials.CapEffective), nil - case "process.parent.cap_permitted": - return int(e.ProcessContext.Parent.Credentials.CapPermitted), nil - case "process.parent.comm": - return e.ProcessContext.Parent.Comm, nil - case "process.parent.container.id": - return e.ProcessContext.Parent.ContainerID, nil - case "process.parent.cookie": - return int(e.ProcessContext.Parent.Cookie), nil - case "process.parent.created_at": - return int(e.ResolveProcessCreatedAt(e.ProcessContext.Parent)), nil - case "process.parent.egid": - return int(e.ProcessContext.Parent.Credentials.EGID), nil - case "process.parent.egroup": - return e.ProcessContext.Parent.Credentials.EGroup, nil - case "process.parent.envp": - return e.ResolveProcessEnvp(e.ProcessContext.Parent), nil - case "process.parent.envs": - return e.ResolveProcessEnvs(e.ProcessContext.Parent), nil - case "process.parent.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.ProcessContext.Parent), nil - case "process.parent.euid": - return int(e.ProcessContext.Parent.Credentials.EUID), nil - case "process.parent.euser": - return e.ProcessContext.Parent.Credentials.EUser, nil - case "process.parent.file.change_time": - return int(e.ProcessContext.Parent.FileEvent.FileFields.CTime), nil - case "process.parent.file.filesystem": - return e.ResolveFileFilesystem(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.gid": - return int(e.ProcessContext.Parent.FileEvent.FileFields.GID), nil - case "process.parent.file.group": - return e.ResolveFileFieldsGroup(&e.ProcessContext.Parent.FileEvent.FileFields), nil - case "process.parent.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.ProcessContext.Parent.FileEvent.FileFields), nil - case "process.parent.file.inode": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Inode), nil - case "process.parent.file.mode": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Mode), nil - case "process.parent.file.modification_time": - return int(e.ProcessContext.Parent.FileEvent.FileFields.MTime), nil - case "process.parent.file.mount_id": - return int(e.ProcessContext.Parent.FileEvent.FileFields.MountID), nil - case "process.parent.file.name": - return e.ResolveFileBasename(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.name.length": - return e.ResolveFileBasename(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.path": - return e.ResolveFilePath(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.path.length": - return e.ResolveFilePath(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.rights": - return int(e.ResolveRights(&e.ProcessContext.Parent.FileEvent.FileFields)), nil - case "process.parent.file.uid": - return int(e.ProcessContext.Parent.FileEvent.FileFields.UID), nil - case "process.parent.file.user": - return e.ResolveFileFieldsUser(&e.ProcessContext.Parent.FileEvent.FileFields), nil - case "process.parent.fsgid": - return int(e.ProcessContext.Parent.Credentials.FSGID), nil - case "process.parent.fsgroup": - return e.ProcessContext.Parent.Credentials.FSGroup, nil - case "process.parent.fsuid": - return int(e.ProcessContext.Parent.Credentials.FSUID), nil - case "process.parent.fsuser": - return e.ProcessContext.Parent.Credentials.FSUser, nil - case "process.parent.gid": - return int(e.ProcessContext.Parent.Credentials.GID), nil - case "process.parent.group": - return e.ProcessContext.Parent.Credentials.Group, nil - case "process.parent.interpreter.file.change_time": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "process.parent.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.gid": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil - case "process.parent.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "process.parent.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "process.parent.interpreter.file.inode": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "process.parent.interpreter.file.mode": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "process.parent.interpreter.file.modification_time": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "process.parent.interpreter.file.mount_id": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "process.parent.interpreter.file.name": - return e.ResolveFileBasename(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.name.length": - return e.ResolveFileBasename(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.path": - return e.ResolveFilePath(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.path.length": - return e.ResolveFilePath(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.rights": - return int(e.ResolveRights(&e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields)), nil - case "process.parent.interpreter.file.uid": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil - case "process.parent.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "process.parent.is_kworker": - return e.ProcessContext.Parent.PIDContext.IsKworker, nil - case "process.parent.is_thread": - return e.ProcessContext.Parent.IsThread, nil - case "process.parent.pid": - return int(e.ProcessContext.Parent.PIDContext.Pid), nil - case "process.parent.ppid": - return int(e.ProcessContext.Parent.PPid), nil - case "process.parent.tid": - return int(e.ProcessContext.Parent.PIDContext.Tid), nil - case "process.parent.tty_name": - return e.ProcessContext.Parent.TTYName, nil - case "process.parent.uid": - return int(e.ProcessContext.Parent.Credentials.UID), nil - case "process.parent.user": - return e.ProcessContext.Parent.Credentials.User, nil - case "process.pid": - return int(e.ProcessContext.Process.PIDContext.Pid), nil - case "process.ppid": - return int(e.ProcessContext.Process.PPid), nil - case "process.tid": - return int(e.ProcessContext.Process.PIDContext.Tid), nil - case "process.tty_name": - return e.ProcessContext.Process.TTYName, nil - case "process.uid": - return int(e.ProcessContext.Process.Credentials.UID), nil - case "process.user": - return e.ProcessContext.Process.Credentials.User, nil - case "ptrace.request": - return int(e.PTrace.Request), nil - case "ptrace.retval": - return int(e.PTrace.SyscallEvent.Retval), nil - case "ptrace.tracee.ancestors.args": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.args_flags": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.args_options": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.args_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.argv": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.argv0": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.cap_effective": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.cap_permitted": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.comm": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Comm - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.container.id": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ContainerID - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.cookie": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Cookie) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.created_at": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.egid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.egroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.envp": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.envs": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.envs_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.euid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.euser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.fsgid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.fsgroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.fsuid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.fsuser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.Group - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.is_kworker": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.PIDContext.IsKworker - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.is_thread": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.IsThread - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.pid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Pid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.ppid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PPid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.tid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Tid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.tty_name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.TTYName - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.User - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.args": - return e.ResolveProcessArgs(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.args_flags": - return e.ResolveProcessArgsFlags(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.args_options": - return e.ResolveProcessArgsOptions(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.args_truncated": - return e.ResolveProcessArgsTruncated(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.argv": - return e.ResolveProcessArgv(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.argv0": - return e.ResolveProcessArgv0(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.cap_effective": - return int(e.PTrace.Tracee.Process.Credentials.CapEffective), nil - case "ptrace.tracee.cap_permitted": - return int(e.PTrace.Tracee.Process.Credentials.CapPermitted), nil - case "ptrace.tracee.comm": - return e.PTrace.Tracee.Process.Comm, nil - case "ptrace.tracee.container.id": - return e.PTrace.Tracee.Process.ContainerID, nil - case "ptrace.tracee.cookie": - return int(e.PTrace.Tracee.Process.Cookie), nil - case "ptrace.tracee.created_at": - return int(e.ResolveProcessCreatedAt(&e.PTrace.Tracee.Process)), nil - case "ptrace.tracee.egid": - return int(e.PTrace.Tracee.Process.Credentials.EGID), nil - case "ptrace.tracee.egroup": - return e.PTrace.Tracee.Process.Credentials.EGroup, nil - case "ptrace.tracee.envp": - return e.ResolveProcessEnvp(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.envs": - return e.ResolveProcessEnvs(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.envs_truncated": - return e.ResolveProcessEnvsTruncated(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.euid": - return int(e.PTrace.Tracee.Process.Credentials.EUID), nil - case "ptrace.tracee.euser": - return e.PTrace.Tracee.Process.Credentials.EUser, nil - case "ptrace.tracee.file.change_time": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.CTime), nil - case "ptrace.tracee.file.filesystem": - return e.ResolveFileFilesystem(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.gid": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.GID), nil - case "ptrace.tracee.file.group": - return e.ResolveFileFieldsGroup(&e.PTrace.Tracee.Process.FileEvent.FileFields), nil - case "ptrace.tracee.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.PTrace.Tracee.Process.FileEvent.FileFields), nil - case "ptrace.tracee.file.inode": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Inode), nil - case "ptrace.tracee.file.mode": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Mode), nil - case "ptrace.tracee.file.modification_time": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.MTime), nil - case "ptrace.tracee.file.mount_id": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.MountID), nil - case "ptrace.tracee.file.name": - return e.ResolveFileBasename(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.name.length": - return e.ResolveFileBasename(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.path": - return e.ResolveFilePath(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.path.length": - return e.ResolveFilePath(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.rights": - return int(e.ResolveRights(&e.PTrace.Tracee.Process.FileEvent.FileFields)), nil - case "ptrace.tracee.file.uid": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.UID), nil - case "ptrace.tracee.file.user": - return e.ResolveFileFieldsUser(&e.PTrace.Tracee.Process.FileEvent.FileFields), nil - case "ptrace.tracee.fsgid": - return int(e.PTrace.Tracee.Process.Credentials.FSGID), nil - case "ptrace.tracee.fsgroup": - return e.PTrace.Tracee.Process.Credentials.FSGroup, nil - case "ptrace.tracee.fsuid": - return int(e.PTrace.Tracee.Process.Credentials.FSUID), nil - case "ptrace.tracee.fsuser": - return e.PTrace.Tracee.Process.Credentials.FSUser, nil - case "ptrace.tracee.gid": - return int(e.PTrace.Tracee.Process.Credentials.GID), nil - case "ptrace.tracee.group": - return e.PTrace.Tracee.Process.Credentials.Group, nil - case "ptrace.tracee.interpreter.file.change_time": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "ptrace.tracee.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.gid": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "ptrace.tracee.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.interpreter.file.inode": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "ptrace.tracee.interpreter.file.mode": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "ptrace.tracee.interpreter.file.modification_time": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "ptrace.tracee.interpreter.file.mount_id": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "ptrace.tracee.interpreter.file.name": - return e.ResolveFileBasename(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.name.length": - return e.ResolveFileBasename(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.path": - return e.ResolveFilePath(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.path.length": - return e.ResolveFilePath(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.rights": - return int(e.ResolveRights(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "ptrace.tracee.interpreter.file.uid": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "ptrace.tracee.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.is_kworker": - return e.PTrace.Tracee.Process.PIDContext.IsKworker, nil - case "ptrace.tracee.is_thread": - return e.PTrace.Tracee.Process.IsThread, nil - case "ptrace.tracee.parent.args": - return e.ResolveProcessArgs(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.args_flags": - return e.ResolveProcessArgsFlags(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.args_options": - return e.ResolveProcessArgsOptions(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.args_truncated": - return e.ResolveProcessArgsTruncated(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.argv": - return e.ResolveProcessArgv(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.argv0": - return e.ResolveProcessArgv0(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.cap_effective": - return int(e.PTrace.Tracee.Parent.Credentials.CapEffective), nil - case "ptrace.tracee.parent.cap_permitted": - return int(e.PTrace.Tracee.Parent.Credentials.CapPermitted), nil - case "ptrace.tracee.parent.comm": - return e.PTrace.Tracee.Parent.Comm, nil - case "ptrace.tracee.parent.container.id": - return e.PTrace.Tracee.Parent.ContainerID, nil - case "ptrace.tracee.parent.cookie": - return int(e.PTrace.Tracee.Parent.Cookie), nil - case "ptrace.tracee.parent.created_at": - return int(e.ResolveProcessCreatedAt(e.PTrace.Tracee.Parent)), nil - case "ptrace.tracee.parent.egid": - return int(e.PTrace.Tracee.Parent.Credentials.EGID), nil - case "ptrace.tracee.parent.egroup": - return e.PTrace.Tracee.Parent.Credentials.EGroup, nil - case "ptrace.tracee.parent.envp": - return e.ResolveProcessEnvp(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.envs": - return e.ResolveProcessEnvs(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.euid": - return int(e.PTrace.Tracee.Parent.Credentials.EUID), nil - case "ptrace.tracee.parent.euser": - return e.PTrace.Tracee.Parent.Credentials.EUser, nil - case "ptrace.tracee.parent.file.change_time": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.CTime), nil - case "ptrace.tracee.parent.file.filesystem": - return e.ResolveFileFilesystem(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.gid": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.GID), nil - case "ptrace.tracee.parent.file.group": - return e.ResolveFileFieldsGroup(&e.PTrace.Tracee.Parent.FileEvent.FileFields), nil - case "ptrace.tracee.parent.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.PTrace.Tracee.Parent.FileEvent.FileFields), nil - case "ptrace.tracee.parent.file.inode": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Inode), nil - case "ptrace.tracee.parent.file.mode": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode), nil - case "ptrace.tracee.parent.file.modification_time": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.MTime), nil - case "ptrace.tracee.parent.file.mount_id": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.MountID), nil - case "ptrace.tracee.parent.file.name": - return e.ResolveFileBasename(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.name.length": - return e.ResolveFileBasename(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.path": - return e.ResolveFilePath(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.path.length": - return e.ResolveFilePath(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.rights": - return int(e.ResolveRights(&e.PTrace.Tracee.Parent.FileEvent.FileFields)), nil - case "ptrace.tracee.parent.file.uid": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.UID), nil - case "ptrace.tracee.parent.file.user": - return e.ResolveFileFieldsUser(&e.PTrace.Tracee.Parent.FileEvent.FileFields), nil - case "ptrace.tracee.parent.fsgid": - return int(e.PTrace.Tracee.Parent.Credentials.FSGID), nil - case "ptrace.tracee.parent.fsgroup": - return e.PTrace.Tracee.Parent.Credentials.FSGroup, nil - case "ptrace.tracee.parent.fsuid": - return int(e.PTrace.Tracee.Parent.Credentials.FSUID), nil - case "ptrace.tracee.parent.fsuser": - return e.PTrace.Tracee.Parent.Credentials.FSUser, nil - case "ptrace.tracee.parent.gid": - return int(e.PTrace.Tracee.Parent.Credentials.GID), nil - case "ptrace.tracee.parent.group": - return e.PTrace.Tracee.Parent.Credentials.Group, nil - case "ptrace.tracee.parent.interpreter.file.change_time": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.gid": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil - case "ptrace.tracee.parent.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.parent.interpreter.file.inode": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "ptrace.tracee.parent.interpreter.file.mode": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "ptrace.tracee.parent.interpreter.file.name": - return e.ResolveFileBasename(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.name.length": - return e.ResolveFileBasename(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.path": - return e.ResolveFilePath(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.path.length": - return e.ResolveFilePath(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.rights": - return int(e.ResolveRights(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields)), nil - case "ptrace.tracee.parent.interpreter.file.uid": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil - case "ptrace.tracee.parent.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.parent.is_kworker": - return e.PTrace.Tracee.Parent.PIDContext.IsKworker, nil - case "ptrace.tracee.parent.is_thread": - return e.PTrace.Tracee.Parent.IsThread, nil - case "ptrace.tracee.parent.pid": - return int(e.PTrace.Tracee.Parent.PIDContext.Pid), nil - case "ptrace.tracee.parent.ppid": - return int(e.PTrace.Tracee.Parent.PPid), nil - case "ptrace.tracee.parent.tid": - return int(e.PTrace.Tracee.Parent.PIDContext.Tid), nil - case "ptrace.tracee.parent.tty_name": - return e.PTrace.Tracee.Parent.TTYName, nil - case "ptrace.tracee.parent.uid": - return int(e.PTrace.Tracee.Parent.Credentials.UID), nil - case "ptrace.tracee.parent.user": - return e.PTrace.Tracee.Parent.Credentials.User, nil - case "ptrace.tracee.pid": - return int(e.PTrace.Tracee.Process.PIDContext.Pid), nil - case "ptrace.tracee.ppid": - return int(e.PTrace.Tracee.Process.PPid), nil - case "ptrace.tracee.tid": - return int(e.PTrace.Tracee.Process.PIDContext.Tid), nil - case "ptrace.tracee.tty_name": - return e.PTrace.Tracee.Process.TTYName, nil - case "ptrace.tracee.uid": - return int(e.PTrace.Tracee.Process.Credentials.UID), nil - case "ptrace.tracee.user": - return e.PTrace.Tracee.Process.Credentials.User, nil - case "removexattr.file.change_time": - return int(e.RemoveXAttr.File.FileFields.CTime), nil - case "removexattr.file.destination.name": - return e.ResolveXAttrName(&e.RemoveXAttr), nil - case "removexattr.file.destination.namespace": - return e.ResolveXAttrNamespace(&e.RemoveXAttr), nil - case "removexattr.file.filesystem": - return e.ResolveFileFilesystem(&e.RemoveXAttr.File), nil - case "removexattr.file.gid": - return int(e.RemoveXAttr.File.FileFields.GID), nil - case "removexattr.file.group": - return e.ResolveFileFieldsGroup(&e.RemoveXAttr.File.FileFields), nil - case "removexattr.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.RemoveXAttr.File.FileFields), nil - case "removexattr.file.inode": - return int(e.RemoveXAttr.File.FileFields.Inode), nil - case "removexattr.file.mode": - return int(e.RemoveXAttr.File.FileFields.Mode), nil - case "removexattr.file.modification_time": - return int(e.RemoveXAttr.File.FileFields.MTime), nil - case "removexattr.file.mount_id": - return int(e.RemoveXAttr.File.FileFields.MountID), nil - case "removexattr.file.name": - return e.ResolveFileBasename(&e.RemoveXAttr.File), nil - case "removexattr.file.name.length": - return e.ResolveFileBasename(&e.RemoveXAttr.File), nil - case "removexattr.file.path": - return e.ResolveFilePath(&e.RemoveXAttr.File), nil - case "removexattr.file.path.length": - return e.ResolveFilePath(&e.RemoveXAttr.File), nil - case "removexattr.file.rights": - return int(e.ResolveRights(&e.RemoveXAttr.File.FileFields)), nil - case "removexattr.file.uid": - return int(e.RemoveXAttr.File.FileFields.UID), nil - case "removexattr.file.user": - return e.ResolveFileFieldsUser(&e.RemoveXAttr.File.FileFields), nil - case "removexattr.retval": - return int(e.RemoveXAttr.SyscallEvent.Retval), nil - case "rename.file.change_time": - return int(e.Rename.Old.FileFields.CTime), nil - case "rename.file.destination.change_time": - return int(e.Rename.New.FileFields.CTime), nil - case "rename.file.destination.filesystem": - return e.ResolveFileFilesystem(&e.Rename.New), nil - case "rename.file.destination.gid": - return int(e.Rename.New.FileFields.GID), nil - case "rename.file.destination.group": - return e.ResolveFileFieldsGroup(&e.Rename.New.FileFields), nil - case "rename.file.destination.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Rename.New.FileFields), nil - case "rename.file.destination.inode": - return int(e.Rename.New.FileFields.Inode), nil - case "rename.file.destination.mode": - return int(e.Rename.New.FileFields.Mode), nil - case "rename.file.destination.modification_time": - return int(e.Rename.New.FileFields.MTime), nil - case "rename.file.destination.mount_id": - return int(e.Rename.New.FileFields.MountID), nil - case "rename.file.destination.name": - return e.ResolveFileBasename(&e.Rename.New), nil - case "rename.file.destination.name.length": - return e.ResolveFileBasename(&e.Rename.New), nil - case "rename.file.destination.path": - return e.ResolveFilePath(&e.Rename.New), nil - case "rename.file.destination.path.length": - return e.ResolveFilePath(&e.Rename.New), nil - case "rename.file.destination.rights": - return int(e.ResolveRights(&e.Rename.New.FileFields)), nil - case "rename.file.destination.uid": - return int(e.Rename.New.FileFields.UID), nil - case "rename.file.destination.user": - return e.ResolveFileFieldsUser(&e.Rename.New.FileFields), nil - case "rename.file.filesystem": - return e.ResolveFileFilesystem(&e.Rename.Old), nil - case "rename.file.gid": - return int(e.Rename.Old.FileFields.GID), nil - case "rename.file.group": - return e.ResolveFileFieldsGroup(&e.Rename.Old.FileFields), nil - case "rename.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Rename.Old.FileFields), nil - case "rename.file.inode": - return int(e.Rename.Old.FileFields.Inode), nil - case "rename.file.mode": - return int(e.Rename.Old.FileFields.Mode), nil - case "rename.file.modification_time": - return int(e.Rename.Old.FileFields.MTime), nil - case "rename.file.mount_id": - return int(e.Rename.Old.FileFields.MountID), nil - case "rename.file.name": - return e.ResolveFileBasename(&e.Rename.Old), nil - case "rename.file.name.length": - return e.ResolveFileBasename(&e.Rename.Old), nil - case "rename.file.path": - return e.ResolveFilePath(&e.Rename.Old), nil - case "rename.file.path.length": - return e.ResolveFilePath(&e.Rename.Old), nil - case "rename.file.rights": - return int(e.ResolveRights(&e.Rename.Old.FileFields)), nil - case "rename.file.uid": - return int(e.Rename.Old.FileFields.UID), nil - case "rename.file.user": - return e.ResolveFileFieldsUser(&e.Rename.Old.FileFields), nil - case "rename.retval": - return int(e.Rename.SyscallEvent.Retval), nil - case "rmdir.file.change_time": - return int(e.Rmdir.File.FileFields.CTime), nil - case "rmdir.file.filesystem": - return e.ResolveFileFilesystem(&e.Rmdir.File), nil - case "rmdir.file.gid": - return int(e.Rmdir.File.FileFields.GID), nil - case "rmdir.file.group": - return e.ResolveFileFieldsGroup(&e.Rmdir.File.FileFields), nil - case "rmdir.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Rmdir.File.FileFields), nil - case "rmdir.file.inode": - return int(e.Rmdir.File.FileFields.Inode), nil - case "rmdir.file.mode": - return int(e.Rmdir.File.FileFields.Mode), nil - case "rmdir.file.modification_time": - return int(e.Rmdir.File.FileFields.MTime), nil - case "rmdir.file.mount_id": - return int(e.Rmdir.File.FileFields.MountID), nil - case "rmdir.file.name": - return e.ResolveFileBasename(&e.Rmdir.File), nil - case "rmdir.file.name.length": - return e.ResolveFileBasename(&e.Rmdir.File), nil - case "rmdir.file.path": - return e.ResolveFilePath(&e.Rmdir.File), nil - case "rmdir.file.path.length": - return e.ResolveFilePath(&e.Rmdir.File), nil - case "rmdir.file.rights": - return int(e.ResolveRights(&e.Rmdir.File.FileFields)), nil - case "rmdir.file.uid": - return int(e.Rmdir.File.FileFields.UID), nil - case "rmdir.file.user": - return e.ResolveFileFieldsUser(&e.Rmdir.File.FileFields), nil - case "rmdir.retval": - return int(e.Rmdir.SyscallEvent.Retval), nil - case "selinux.bool.name": - return e.ResolveSELinuxBoolName(&e.SELinux), nil - case "selinux.bool.state": - return e.SELinux.BoolChangeValue, nil - case "selinux.bool_commit.state": - return e.SELinux.BoolCommitValue, nil - case "selinux.enforce.status": - return e.SELinux.EnforceStatus, nil - case "setgid.egid": - return int(e.SetGID.EGID), nil - case "setgid.egroup": - return e.ResolveSetgidEGroup(&e.SetGID), nil - case "setgid.fsgid": - return int(e.SetGID.FSGID), nil - case "setgid.fsgroup": - return e.ResolveSetgidFSGroup(&e.SetGID), nil - case "setgid.gid": - return int(e.SetGID.GID), nil - case "setgid.group": - return e.ResolveSetgidGroup(&e.SetGID), nil - case "setuid.euid": - return int(e.SetUID.EUID), nil - case "setuid.euser": - return e.ResolveSetuidEUser(&e.SetUID), nil - case "setuid.fsuid": - return int(e.SetUID.FSUID), nil - case "setuid.fsuser": - return e.ResolveSetuidFSUser(&e.SetUID), nil - case "setuid.uid": - return int(e.SetUID.UID), nil - case "setuid.user": - return e.ResolveSetuidUser(&e.SetUID), nil - case "setxattr.file.change_time": - return int(e.SetXAttr.File.FileFields.CTime), nil - case "setxattr.file.destination.name": - return e.ResolveXAttrName(&e.SetXAttr), nil - case "setxattr.file.destination.namespace": - return e.ResolveXAttrNamespace(&e.SetXAttr), nil - case "setxattr.file.filesystem": - return e.ResolveFileFilesystem(&e.SetXAttr.File), nil - case "setxattr.file.gid": - return int(e.SetXAttr.File.FileFields.GID), nil - case "setxattr.file.group": - return e.ResolveFileFieldsGroup(&e.SetXAttr.File.FileFields), nil - case "setxattr.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.SetXAttr.File.FileFields), nil - case "setxattr.file.inode": - return int(e.SetXAttr.File.FileFields.Inode), nil - case "setxattr.file.mode": - return int(e.SetXAttr.File.FileFields.Mode), nil - case "setxattr.file.modification_time": - return int(e.SetXAttr.File.FileFields.MTime), nil - case "setxattr.file.mount_id": - return int(e.SetXAttr.File.FileFields.MountID), nil - case "setxattr.file.name": - return e.ResolveFileBasename(&e.SetXAttr.File), nil - case "setxattr.file.name.length": - return e.ResolveFileBasename(&e.SetXAttr.File), nil - case "setxattr.file.path": - return e.ResolveFilePath(&e.SetXAttr.File), nil - case "setxattr.file.path.length": - return e.ResolveFilePath(&e.SetXAttr.File), nil - case "setxattr.file.rights": - return int(e.ResolveRights(&e.SetXAttr.File.FileFields)), nil - case "setxattr.file.uid": - return int(e.SetXAttr.File.FileFields.UID), nil - case "setxattr.file.user": - return e.ResolveFileFieldsUser(&e.SetXAttr.File.FileFields), nil - case "setxattr.retval": - return int(e.SetXAttr.SyscallEvent.Retval), nil - case "signal.pid": - return int(e.Signal.PID), nil - case "signal.retval": - return int(e.Signal.SyscallEvent.Retval), nil - case "signal.target.ancestors.args": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.args_flags": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.args_options": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.args_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.argv": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.argv0": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.cap_effective": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.cap_permitted": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.comm": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Comm - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.container.id": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ContainerID - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.cookie": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Cookie) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.created_at": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.egid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.egroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.envp": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.envs": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.envs_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.euid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.euser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.fsgid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.fsgroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.fsuid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.fsuser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.Group - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.is_kworker": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.PIDContext.IsKworker - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.is_thread": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.IsThread - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.pid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Pid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.ppid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PPid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.tid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Tid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.tty_name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.TTYName - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.User - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.args": - return e.ResolveProcessArgs(&e.Signal.Target.Process), nil - case "signal.target.args_flags": - return e.ResolveProcessArgsFlags(&e.Signal.Target.Process), nil - case "signal.target.args_options": - return e.ResolveProcessArgsOptions(&e.Signal.Target.Process), nil - case "signal.target.args_truncated": - return e.ResolveProcessArgsTruncated(&e.Signal.Target.Process), nil - case "signal.target.argv": - return e.ResolveProcessArgv(&e.Signal.Target.Process), nil - case "signal.target.argv0": - return e.ResolveProcessArgv0(&e.Signal.Target.Process), nil - case "signal.target.cap_effective": - return int(e.Signal.Target.Process.Credentials.CapEffective), nil - case "signal.target.cap_permitted": - return int(e.Signal.Target.Process.Credentials.CapPermitted), nil - case "signal.target.comm": - return e.Signal.Target.Process.Comm, nil - case "signal.target.container.id": - return e.Signal.Target.Process.ContainerID, nil - case "signal.target.cookie": - return int(e.Signal.Target.Process.Cookie), nil - case "signal.target.created_at": - return int(e.ResolveProcessCreatedAt(&e.Signal.Target.Process)), nil - case "signal.target.egid": - return int(e.Signal.Target.Process.Credentials.EGID), nil - case "signal.target.egroup": - return e.Signal.Target.Process.Credentials.EGroup, nil - case "signal.target.envp": - return e.ResolveProcessEnvp(&e.Signal.Target.Process), nil - case "signal.target.envs": - return e.ResolveProcessEnvs(&e.Signal.Target.Process), nil - case "signal.target.envs_truncated": - return e.ResolveProcessEnvsTruncated(&e.Signal.Target.Process), nil - case "signal.target.euid": - return int(e.Signal.Target.Process.Credentials.EUID), nil - case "signal.target.euser": - return e.Signal.Target.Process.Credentials.EUser, nil - case "signal.target.file.change_time": - return int(e.Signal.Target.Process.FileEvent.FileFields.CTime), nil - case "signal.target.file.filesystem": - return e.ResolveFileFilesystem(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.gid": - return int(e.Signal.Target.Process.FileEvent.FileFields.GID), nil - case "signal.target.file.group": - return e.ResolveFileFieldsGroup(&e.Signal.Target.Process.FileEvent.FileFields), nil - case "signal.target.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Signal.Target.Process.FileEvent.FileFields), nil - case "signal.target.file.inode": - return int(e.Signal.Target.Process.FileEvent.FileFields.Inode), nil - case "signal.target.file.mode": - return int(e.Signal.Target.Process.FileEvent.FileFields.Mode), nil - case "signal.target.file.modification_time": - return int(e.Signal.Target.Process.FileEvent.FileFields.MTime), nil - case "signal.target.file.mount_id": - return int(e.Signal.Target.Process.FileEvent.FileFields.MountID), nil - case "signal.target.file.name": - return e.ResolveFileBasename(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.name.length": - return e.ResolveFileBasename(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.path": - return e.ResolveFilePath(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.path.length": - return e.ResolveFilePath(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.rights": - return int(e.ResolveRights(&e.Signal.Target.Process.FileEvent.FileFields)), nil - case "signal.target.file.uid": - return int(e.Signal.Target.Process.FileEvent.FileFields.UID), nil - case "signal.target.file.user": - return e.ResolveFileFieldsUser(&e.Signal.Target.Process.FileEvent.FileFields), nil - case "signal.target.fsgid": - return int(e.Signal.Target.Process.Credentials.FSGID), nil - case "signal.target.fsgroup": - return e.Signal.Target.Process.Credentials.FSGroup, nil - case "signal.target.fsuid": - return int(e.Signal.Target.Process.Credentials.FSUID), nil - case "signal.target.fsuser": - return e.Signal.Target.Process.Credentials.FSUser, nil - case "signal.target.gid": - return int(e.Signal.Target.Process.Credentials.GID), nil - case "signal.target.group": - return e.Signal.Target.Process.Credentials.Group, nil - case "signal.target.interpreter.file.change_time": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "signal.target.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.gid": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "signal.target.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.interpreter.file.inode": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "signal.target.interpreter.file.mode": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "signal.target.interpreter.file.modification_time": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "signal.target.interpreter.file.mount_id": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "signal.target.interpreter.file.name": - return e.ResolveFileBasename(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.name.length": - return e.ResolveFileBasename(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.path": - return e.ResolveFilePath(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.path.length": - return e.ResolveFilePath(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.rights": - return int(e.ResolveRights(&e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "signal.target.interpreter.file.uid": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "signal.target.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.is_kworker": - return e.Signal.Target.Process.PIDContext.IsKworker, nil - case "signal.target.is_thread": - return e.Signal.Target.Process.IsThread, nil - case "signal.target.parent.args": - return e.ResolveProcessArgs(e.Signal.Target.Parent), nil - case "signal.target.parent.args_flags": - return e.ResolveProcessArgsFlags(e.Signal.Target.Parent), nil - case "signal.target.parent.args_options": - return e.ResolveProcessArgsOptions(e.Signal.Target.Parent), nil - case "signal.target.parent.args_truncated": - return e.ResolveProcessArgsTruncated(e.Signal.Target.Parent), nil - case "signal.target.parent.argv": - return e.ResolveProcessArgv(e.Signal.Target.Parent), nil - case "signal.target.parent.argv0": - return e.ResolveProcessArgv0(e.Signal.Target.Parent), nil - case "signal.target.parent.cap_effective": - return int(e.Signal.Target.Parent.Credentials.CapEffective), nil - case "signal.target.parent.cap_permitted": - return int(e.Signal.Target.Parent.Credentials.CapPermitted), nil - case "signal.target.parent.comm": - return e.Signal.Target.Parent.Comm, nil - case "signal.target.parent.container.id": - return e.Signal.Target.Parent.ContainerID, nil - case "signal.target.parent.cookie": - return int(e.Signal.Target.Parent.Cookie), nil - case "signal.target.parent.created_at": - return int(e.ResolveProcessCreatedAt(e.Signal.Target.Parent)), nil - case "signal.target.parent.egid": - return int(e.Signal.Target.Parent.Credentials.EGID), nil - case "signal.target.parent.egroup": - return e.Signal.Target.Parent.Credentials.EGroup, nil - case "signal.target.parent.envp": - return e.ResolveProcessEnvp(e.Signal.Target.Parent), nil - case "signal.target.parent.envs": - return e.ResolveProcessEnvs(e.Signal.Target.Parent), nil - case "signal.target.parent.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.Signal.Target.Parent), nil - case "signal.target.parent.euid": - return int(e.Signal.Target.Parent.Credentials.EUID), nil - case "signal.target.parent.euser": - return e.Signal.Target.Parent.Credentials.EUser, nil - case "signal.target.parent.file.change_time": - return int(e.Signal.Target.Parent.FileEvent.FileFields.CTime), nil - case "signal.target.parent.file.filesystem": - return e.ResolveFileFilesystem(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.gid": - return int(e.Signal.Target.Parent.FileEvent.FileFields.GID), nil - case "signal.target.parent.file.group": - return e.ResolveFileFieldsGroup(&e.Signal.Target.Parent.FileEvent.FileFields), nil - case "signal.target.parent.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Signal.Target.Parent.FileEvent.FileFields), nil - case "signal.target.parent.file.inode": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Inode), nil - case "signal.target.parent.file.mode": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Mode), nil - case "signal.target.parent.file.modification_time": - return int(e.Signal.Target.Parent.FileEvent.FileFields.MTime), nil - case "signal.target.parent.file.mount_id": - return int(e.Signal.Target.Parent.FileEvent.FileFields.MountID), nil - case "signal.target.parent.file.name": - return e.ResolveFileBasename(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.name.length": - return e.ResolveFileBasename(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.path": - return e.ResolveFilePath(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.path.length": - return e.ResolveFilePath(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.rights": - return int(e.ResolveRights(&e.Signal.Target.Parent.FileEvent.FileFields)), nil - case "signal.target.parent.file.uid": - return int(e.Signal.Target.Parent.FileEvent.FileFields.UID), nil - case "signal.target.parent.file.user": - return e.ResolveFileFieldsUser(&e.Signal.Target.Parent.FileEvent.FileFields), nil - case "signal.target.parent.fsgid": - return int(e.Signal.Target.Parent.Credentials.FSGID), nil - case "signal.target.parent.fsgroup": - return e.Signal.Target.Parent.Credentials.FSGroup, nil - case "signal.target.parent.fsuid": - return int(e.Signal.Target.Parent.Credentials.FSUID), nil - case "signal.target.parent.fsuser": - return e.Signal.Target.Parent.Credentials.FSUser, nil - case "signal.target.parent.gid": - return int(e.Signal.Target.Parent.Credentials.GID), nil - case "signal.target.parent.group": - return e.Signal.Target.Parent.Credentials.Group, nil - case "signal.target.parent.interpreter.file.change_time": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "signal.target.parent.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.gid": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil - case "signal.target.parent.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.parent.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.parent.interpreter.file.inode": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "signal.target.parent.interpreter.file.mode": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "signal.target.parent.interpreter.file.modification_time": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "signal.target.parent.interpreter.file.mount_id": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "signal.target.parent.interpreter.file.name": - return e.ResolveFileBasename(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.name.length": - return e.ResolveFileBasename(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.path": - return e.ResolveFilePath(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.path.length": - return e.ResolveFilePath(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.rights": - return int(e.ResolveRights(&e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields)), nil - case "signal.target.parent.interpreter.file.uid": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil - case "signal.target.parent.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.parent.is_kworker": - return e.Signal.Target.Parent.PIDContext.IsKworker, nil - case "signal.target.parent.is_thread": - return e.Signal.Target.Parent.IsThread, nil - case "signal.target.parent.pid": - return int(e.Signal.Target.Parent.PIDContext.Pid), nil - case "signal.target.parent.ppid": - return int(e.Signal.Target.Parent.PPid), nil - case "signal.target.parent.tid": - return int(e.Signal.Target.Parent.PIDContext.Tid), nil - case "signal.target.parent.tty_name": - return e.Signal.Target.Parent.TTYName, nil - case "signal.target.parent.uid": - return int(e.Signal.Target.Parent.Credentials.UID), nil - case "signal.target.parent.user": - return e.Signal.Target.Parent.Credentials.User, nil - case "signal.target.pid": - return int(e.Signal.Target.Process.PIDContext.Pid), nil - case "signal.target.ppid": - return int(e.Signal.Target.Process.PPid), nil - case "signal.target.tid": - return int(e.Signal.Target.Process.PIDContext.Tid), nil - case "signal.target.tty_name": - return e.Signal.Target.Process.TTYName, nil - case "signal.target.uid": - return int(e.Signal.Target.Process.Credentials.UID), nil - case "signal.target.user": - return e.Signal.Target.Process.Credentials.User, nil - case "signal.type": - return int(e.Signal.Type), nil - case "splice.file.change_time": - return int(e.Splice.File.FileFields.CTime), nil - case "splice.file.filesystem": - return e.ResolveFileFilesystem(&e.Splice.File), nil - case "splice.file.gid": - return int(e.Splice.File.FileFields.GID), nil - case "splice.file.group": - return e.ResolveFileFieldsGroup(&e.Splice.File.FileFields), nil - case "splice.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Splice.File.FileFields), nil - case "splice.file.inode": - return int(e.Splice.File.FileFields.Inode), nil - case "splice.file.mode": - return int(e.Splice.File.FileFields.Mode), nil - case "splice.file.modification_time": - return int(e.Splice.File.FileFields.MTime), nil - case "splice.file.mount_id": - return int(e.Splice.File.FileFields.MountID), nil - case "splice.file.name": - return e.ResolveFileBasename(&e.Splice.File), nil - case "splice.file.name.length": - return e.ResolveFileBasename(&e.Splice.File), nil - case "splice.file.path": - return e.ResolveFilePath(&e.Splice.File), nil - case "splice.file.path.length": - return e.ResolveFilePath(&e.Splice.File), nil - case "splice.file.rights": - return int(e.ResolveRights(&e.Splice.File.FileFields)), nil - case "splice.file.uid": - return int(e.Splice.File.FileFields.UID), nil - case "splice.file.user": - return e.ResolveFileFieldsUser(&e.Splice.File.FileFields), nil - case "splice.pipe_entry_flag": - return int(e.Splice.PipeEntryFlag), nil - case "splice.pipe_exit_flag": - return int(e.Splice.PipeExitFlag), nil - case "splice.retval": - return int(e.Splice.SyscallEvent.Retval), nil - case "unlink.file.change_time": - return int(e.Unlink.File.FileFields.CTime), nil - case "unlink.file.filesystem": - return e.ResolveFileFilesystem(&e.Unlink.File), nil - case "unlink.file.gid": - return int(e.Unlink.File.FileFields.GID), nil - case "unlink.file.group": - return e.ResolveFileFieldsGroup(&e.Unlink.File.FileFields), nil - case "unlink.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Unlink.File.FileFields), nil - case "unlink.file.inode": - return int(e.Unlink.File.FileFields.Inode), nil - case "unlink.file.mode": - return int(e.Unlink.File.FileFields.Mode), nil - case "unlink.file.modification_time": - return int(e.Unlink.File.FileFields.MTime), nil - case "unlink.file.mount_id": - return int(e.Unlink.File.FileFields.MountID), nil - case "unlink.file.name": - return e.ResolveFileBasename(&e.Unlink.File), nil - case "unlink.file.name.length": - return e.ResolveFileBasename(&e.Unlink.File), nil - case "unlink.file.path": - return e.ResolveFilePath(&e.Unlink.File), nil - case "unlink.file.path.length": - return e.ResolveFilePath(&e.Unlink.File), nil - case "unlink.file.rights": - return int(e.ResolveRights(&e.Unlink.File.FileFields)), nil - case "unlink.file.uid": - return int(e.Unlink.File.FileFields.UID), nil - case "unlink.file.user": - return e.ResolveFileFieldsUser(&e.Unlink.File.FileFields), nil - case "unlink.flags": - return int(e.Unlink.Flags), nil - case "unlink.retval": - return int(e.Unlink.SyscallEvent.Retval), nil - case "unload_module.name": - return e.UnloadModule.Name, nil - case "unload_module.retval": - return int(e.UnloadModule.SyscallEvent.Retval), nil - case "utimes.file.change_time": - return int(e.Utimes.File.FileFields.CTime), nil - case "utimes.file.filesystem": - return e.ResolveFileFilesystem(&e.Utimes.File), nil - case "utimes.file.gid": - return int(e.Utimes.File.FileFields.GID), nil - case "utimes.file.group": - return e.ResolveFileFieldsGroup(&e.Utimes.File.FileFields), nil - case "utimes.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Utimes.File.FileFields), nil - case "utimes.file.inode": - return int(e.Utimes.File.FileFields.Inode), nil - case "utimes.file.mode": - return int(e.Utimes.File.FileFields.Mode), nil - case "utimes.file.modification_time": - return int(e.Utimes.File.FileFields.MTime), nil - case "utimes.file.mount_id": - return int(e.Utimes.File.FileFields.MountID), nil - case "utimes.file.name": - return e.ResolveFileBasename(&e.Utimes.File), nil - case "utimes.file.name.length": - return e.ResolveFileBasename(&e.Utimes.File), nil - case "utimes.file.path": - return e.ResolveFilePath(&e.Utimes.File), nil - case "utimes.file.path.length": - return e.ResolveFilePath(&e.Utimes.File), nil - case "utimes.file.rights": - return int(e.ResolveRights(&e.Utimes.File.FileFields)), nil - case "utimes.file.uid": - return int(e.Utimes.File.FileFields.UID), nil - case "utimes.file.user": - return e.ResolveFileFieldsUser(&e.Utimes.File.FileFields), nil - case "utimes.retval": - return int(e.Utimes.SyscallEvent.Retval), nil - } - return nil, &eval.ErrFieldNotFound{Field: field} -} -func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { - switch field { - case "async": - return "*", nil - case "bind.addr.family": - return "bind", nil - case "bind.addr.ip": - return "bind", nil - case "bind.addr.port": - return "bind", nil - case "bind.retval": - return "bind", nil - case "bpf.cmd": - return "bpf", nil - case "bpf.map.name": - return "bpf", nil - case "bpf.map.type": - return "bpf", nil - case "bpf.prog.attach_type": - return "bpf", nil - case "bpf.prog.helpers": - return "bpf", nil - case "bpf.prog.name": - return "bpf", nil - case "bpf.prog.tag": - return "bpf", nil - case "bpf.prog.type": - return "bpf", nil - case "bpf.retval": - return "bpf", nil - case "capset.cap_effective": - return "capset", nil - case "capset.cap_permitted": - return "capset", nil - case "chmod.file.change_time": - return "chmod", nil - case "chmod.file.destination.mode": - return "chmod", nil - case "chmod.file.destination.rights": - return "chmod", nil - case "chmod.file.filesystem": - return "chmod", nil - case "chmod.file.gid": - return "chmod", nil - case "chmod.file.group": - return "chmod", nil - case "chmod.file.in_upper_layer": - return "chmod", nil - case "chmod.file.inode": - return "chmod", nil - case "chmod.file.mode": - return "chmod", nil - case "chmod.file.modification_time": - return "chmod", nil - case "chmod.file.mount_id": - return "chmod", nil - case "chmod.file.name": - return "chmod", nil - case "chmod.file.name.length": - return "chmod", nil - case "chmod.file.path": - return "chmod", nil - case "chmod.file.path.length": - return "chmod", nil - case "chmod.file.rights": - return "chmod", nil - case "chmod.file.uid": - return "chmod", nil - case "chmod.file.user": - return "chmod", nil - case "chmod.retval": - return "chmod", nil - case "chown.file.change_time": - return "chown", nil - case "chown.file.destination.gid": - return "chown", nil - case "chown.file.destination.group": - return "chown", nil - case "chown.file.destination.uid": - return "chown", nil - case "chown.file.destination.user": - return "chown", nil - case "chown.file.filesystem": - return "chown", nil - case "chown.file.gid": - return "chown", nil - case "chown.file.group": - return "chown", nil - case "chown.file.in_upper_layer": - return "chown", nil - case "chown.file.inode": - return "chown", nil - case "chown.file.mode": - return "chown", nil - case "chown.file.modification_time": - return "chown", nil - case "chown.file.mount_id": - return "chown", nil - case "chown.file.name": - return "chown", nil - case "chown.file.name.length": - return "chown", nil - case "chown.file.path": - return "chown", nil - case "chown.file.path.length": - return "chown", nil - case "chown.file.rights": - return "chown", nil - case "chown.file.uid": - return "chown", nil - case "chown.file.user": - return "chown", nil - case "chown.retval": - return "chown", nil - case "container.id": - return "*", nil - case "container.tags": - return "*", nil - case "dns.id": - return "dns", nil - case "dns.question.class": - return "dns", nil - case "dns.question.count": - return "dns", nil - case "dns.question.length": - return "dns", nil - case "dns.question.name": - return "dns", nil - case "dns.question.name.length": - return "dns", nil - case "dns.question.type": - return "dns", nil - case "exec.args": - return "exec", nil - case "exec.args_flags": - return "exec", nil - case "exec.args_options": - return "exec", nil - case "exec.args_truncated": - return "exec", nil - case "exec.argv": - return "exec", nil - case "exec.argv0": - return "exec", nil - case "exec.cap_effective": - return "exec", nil - case "exec.cap_permitted": - return "exec", nil - case "exec.comm": - return "exec", nil - case "exec.container.id": - return "exec", nil - case "exec.cookie": - return "exec", nil - case "exec.created_at": - return "exec", nil - case "exec.egid": - return "exec", nil - case "exec.egroup": - return "exec", nil - case "exec.envp": - return "exec", nil - case "exec.envs": - return "exec", nil - case "exec.envs_truncated": - return "exec", nil - case "exec.euid": - return "exec", nil - case "exec.euser": - return "exec", nil - case "exec.file.change_time": - return "exec", nil - case "exec.file.filesystem": - return "exec", nil - case "exec.file.gid": - return "exec", nil - case "exec.file.group": - return "exec", nil - case "exec.file.in_upper_layer": - return "exec", nil - case "exec.file.inode": - return "exec", nil - case "exec.file.mode": - return "exec", nil - case "exec.file.modification_time": - return "exec", nil - case "exec.file.mount_id": - return "exec", nil - case "exec.file.name": - return "exec", nil - case "exec.file.name.length": - return "exec", nil - case "exec.file.path": - return "exec", nil - case "exec.file.path.length": - return "exec", nil - case "exec.file.rights": - return "exec", nil - case "exec.file.uid": - return "exec", nil - case "exec.file.user": - return "exec", nil - case "exec.fsgid": - return "exec", nil - case "exec.fsgroup": - return "exec", nil - case "exec.fsuid": - return "exec", nil - case "exec.fsuser": - return "exec", nil - case "exec.gid": - return "exec", nil - case "exec.group": - return "exec", nil - case "exec.interpreter.file.change_time": - return "exec", nil - case "exec.interpreter.file.filesystem": - return "exec", nil - case "exec.interpreter.file.gid": - return "exec", nil - case "exec.interpreter.file.group": - return "exec", nil - case "exec.interpreter.file.in_upper_layer": - return "exec", nil - case "exec.interpreter.file.inode": - return "exec", nil - case "exec.interpreter.file.mode": - return "exec", nil - case "exec.interpreter.file.modification_time": - return "exec", nil - case "exec.interpreter.file.mount_id": - return "exec", nil - case "exec.interpreter.file.name": - return "exec", nil - case "exec.interpreter.file.name.length": - return "exec", nil - case "exec.interpreter.file.path": - return "exec", nil - case "exec.interpreter.file.path.length": - return "exec", nil - case "exec.interpreter.file.rights": - return "exec", nil - case "exec.interpreter.file.uid": - return "exec", nil - case "exec.interpreter.file.user": - return "exec", nil - case "exec.is_kworker": - return "exec", nil - case "exec.is_thread": - return "exec", nil - case "exec.pid": - return "exec", nil - case "exec.ppid": - return "exec", nil - case "exec.tid": - return "exec", nil - case "exec.tty_name": - return "exec", nil - case "exec.uid": - return "exec", nil - case "exec.user": - return "exec", nil - case "exit.args": - return "exit", nil - case "exit.args_flags": - return "exit", nil - case "exit.args_options": - return "exit", nil - case "exit.args_truncated": - return "exit", nil - case "exit.argv": - return "exit", nil - case "exit.argv0": - return "exit", nil - case "exit.cap_effective": - return "exit", nil - case "exit.cap_permitted": - return "exit", nil - case "exit.cause": - return "exit", nil - case "exit.code": - return "exit", nil - case "exit.comm": - return "exit", nil - case "exit.container.id": - return "exit", nil - case "exit.cookie": - return "exit", nil - case "exit.created_at": - return "exit", nil - case "exit.egid": - return "exit", nil - case "exit.egroup": - return "exit", nil - case "exit.envp": - return "exit", nil - case "exit.envs": - return "exit", nil - case "exit.envs_truncated": - return "exit", nil - case "exit.euid": - return "exit", nil - case "exit.euser": - return "exit", nil - case "exit.file.change_time": - return "exit", nil - case "exit.file.filesystem": - return "exit", nil - case "exit.file.gid": - return "exit", nil - case "exit.file.group": - return "exit", nil - case "exit.file.in_upper_layer": - return "exit", nil - case "exit.file.inode": - return "exit", nil - case "exit.file.mode": - return "exit", nil - case "exit.file.modification_time": - return "exit", nil - case "exit.file.mount_id": - return "exit", nil - case "exit.file.name": - return "exit", nil - case "exit.file.name.length": - return "exit", nil - case "exit.file.path": - return "exit", nil - case "exit.file.path.length": - return "exit", nil - case "exit.file.rights": - return "exit", nil - case "exit.file.uid": - return "exit", nil - case "exit.file.user": - return "exit", nil - case "exit.fsgid": - return "exit", nil - case "exit.fsgroup": - return "exit", nil - case "exit.fsuid": - return "exit", nil - case "exit.fsuser": - return "exit", nil - case "exit.gid": - return "exit", nil - case "exit.group": - return "exit", nil - case "exit.interpreter.file.change_time": - return "exit", nil - case "exit.interpreter.file.filesystem": - return "exit", nil - case "exit.interpreter.file.gid": - return "exit", nil - case "exit.interpreter.file.group": - return "exit", nil - case "exit.interpreter.file.in_upper_layer": - return "exit", nil - case "exit.interpreter.file.inode": - return "exit", nil - case "exit.interpreter.file.mode": - return "exit", nil - case "exit.interpreter.file.modification_time": - return "exit", nil - case "exit.interpreter.file.mount_id": - return "exit", nil - case "exit.interpreter.file.name": - return "exit", nil - case "exit.interpreter.file.name.length": - return "exit", nil - case "exit.interpreter.file.path": - return "exit", nil - case "exit.interpreter.file.path.length": - return "exit", nil - case "exit.interpreter.file.rights": - return "exit", nil - case "exit.interpreter.file.uid": - return "exit", nil - case "exit.interpreter.file.user": - return "exit", nil - case "exit.is_kworker": - return "exit", nil - case "exit.is_thread": - return "exit", nil - case "exit.pid": - return "exit", nil - case "exit.ppid": - return "exit", nil - case "exit.tid": - return "exit", nil - case "exit.tty_name": - return "exit", nil - case "exit.uid": - return "exit", nil - case "exit.user": - return "exit", nil - case "link.file.change_time": - return "link", nil - case "link.file.destination.change_time": - return "link", nil - case "link.file.destination.filesystem": - return "link", nil - case "link.file.destination.gid": - return "link", nil - case "link.file.destination.group": - return "link", nil - case "link.file.destination.in_upper_layer": - return "link", nil - case "link.file.destination.inode": - return "link", nil - case "link.file.destination.mode": - return "link", nil - case "link.file.destination.modification_time": - return "link", nil - case "link.file.destination.mount_id": - return "link", nil - case "link.file.destination.name": - return "link", nil - case "link.file.destination.name.length": - return "link", nil - case "link.file.destination.path": - return "link", nil - case "link.file.destination.path.length": - return "link", nil - case "link.file.destination.rights": - return "link", nil - case "link.file.destination.uid": - return "link", nil - case "link.file.destination.user": - return "link", nil - case "link.file.filesystem": - return "link", nil - case "link.file.gid": - return "link", nil - case "link.file.group": - return "link", nil - case "link.file.in_upper_layer": - return "link", nil - case "link.file.inode": - return "link", nil - case "link.file.mode": - return "link", nil - case "link.file.modification_time": - return "link", nil - case "link.file.mount_id": - return "link", nil - case "link.file.name": - return "link", nil - case "link.file.name.length": - return "link", nil - case "link.file.path": - return "link", nil - case "link.file.path.length": - return "link", nil - case "link.file.rights": - return "link", nil - case "link.file.uid": - return "link", nil - case "link.file.user": - return "link", nil - case "link.retval": - return "link", nil - case "load_module.file.change_time": - return "load_module", nil - case "load_module.file.filesystem": - return "load_module", nil - case "load_module.file.gid": - return "load_module", nil - case "load_module.file.group": - return "load_module", nil - case "load_module.file.in_upper_layer": - return "load_module", nil - case "load_module.file.inode": - return "load_module", nil - case "load_module.file.mode": - return "load_module", nil - case "load_module.file.modification_time": - return "load_module", nil - case "load_module.file.mount_id": - return "load_module", nil - case "load_module.file.name": - return "load_module", nil - case "load_module.file.name.length": - return "load_module", nil - case "load_module.file.path": - return "load_module", nil - case "load_module.file.path.length": - return "load_module", nil - case "load_module.file.rights": - return "load_module", nil - case "load_module.file.uid": - return "load_module", nil - case "load_module.file.user": - return "load_module", nil - case "load_module.loaded_from_memory": - return "load_module", nil - case "load_module.name": - return "load_module", nil - case "load_module.retval": - return "load_module", nil - case "mkdir.file.change_time": - return "mkdir", nil - case "mkdir.file.destination.mode": - return "mkdir", nil - case "mkdir.file.destination.rights": - return "mkdir", nil - case "mkdir.file.filesystem": - return "mkdir", nil - case "mkdir.file.gid": - return "mkdir", nil - case "mkdir.file.group": - return "mkdir", nil - case "mkdir.file.in_upper_layer": - return "mkdir", nil - case "mkdir.file.inode": - return "mkdir", nil - case "mkdir.file.mode": - return "mkdir", nil - case "mkdir.file.modification_time": - return "mkdir", nil - case "mkdir.file.mount_id": - return "mkdir", nil - case "mkdir.file.name": - return "mkdir", nil - case "mkdir.file.name.length": - return "mkdir", nil - case "mkdir.file.path": - return "mkdir", nil - case "mkdir.file.path.length": - return "mkdir", nil - case "mkdir.file.rights": - return "mkdir", nil - case "mkdir.file.uid": - return "mkdir", nil - case "mkdir.file.user": - return "mkdir", nil - case "mkdir.retval": - return "mkdir", nil - case "mmap.file.change_time": - return "mmap", nil - case "mmap.file.filesystem": - return "mmap", nil - case "mmap.file.gid": - return "mmap", nil - case "mmap.file.group": - return "mmap", nil - case "mmap.file.in_upper_layer": - return "mmap", nil - case "mmap.file.inode": - return "mmap", nil - case "mmap.file.mode": - return "mmap", nil - case "mmap.file.modification_time": - return "mmap", nil - case "mmap.file.mount_id": - return "mmap", nil - case "mmap.file.name": - return "mmap", nil - case "mmap.file.name.length": - return "mmap", nil - case "mmap.file.path": - return "mmap", nil - case "mmap.file.path.length": - return "mmap", nil - case "mmap.file.rights": - return "mmap", nil - case "mmap.file.uid": - return "mmap", nil - case "mmap.file.user": - return "mmap", nil - case "mmap.flags": - return "mmap", nil - case "mmap.protection": - return "mmap", nil - case "mmap.retval": - return "mmap", nil - case "mprotect.req_protection": - return "mprotect", nil - case "mprotect.retval": - return "mprotect", nil - case "mprotect.vm_protection": - return "mprotect", nil - case "network.destination.ip": - return "*", nil - case "network.destination.port": - return "*", nil - case "network.device.ifindex": - return "*", nil - case "network.device.ifname": - return "*", nil - case "network.l3_protocol": - return "*", nil - case "network.l4_protocol": - return "*", nil - case "network.size": - return "*", nil - case "network.source.ip": - return "*", nil - case "network.source.port": - return "*", nil - case "open.file.change_time": - return "open", nil - case "open.file.destination.mode": - return "open", nil - case "open.file.filesystem": - return "open", nil - case "open.file.gid": - return "open", nil - case "open.file.group": - return "open", nil - case "open.file.in_upper_layer": - return "open", nil - case "open.file.inode": - return "open", nil - case "open.file.mode": - return "open", nil - case "open.file.modification_time": - return "open", nil - case "open.file.mount_id": - return "open", nil - case "open.file.name": - return "open", nil - case "open.file.name.length": - return "open", nil - case "open.file.path": - return "open", nil - case "open.file.path.length": - return "open", nil - case "open.file.rights": - return "open", nil - case "open.file.uid": - return "open", nil - case "open.file.user": - return "open", nil - case "open.flags": - return "open", nil - case "open.retval": - return "open", nil - case "process.ancestors.args": - return "*", nil - case "process.ancestors.args_flags": - return "*", nil - case "process.ancestors.args_options": - return "*", nil - case "process.ancestors.args_truncated": - return "*", nil - case "process.ancestors.argv": - return "*", nil - case "process.ancestors.argv0": - return "*", nil - case "process.ancestors.cap_effective": - return "*", nil - case "process.ancestors.cap_permitted": - return "*", nil - case "process.ancestors.comm": - return "*", nil - case "process.ancestors.container.id": - return "*", nil - case "process.ancestors.cookie": - return "*", nil - case "process.ancestors.created_at": - return "*", nil - case "process.ancestors.egid": - return "*", nil - case "process.ancestors.egroup": - return "*", nil - case "process.ancestors.envp": - return "*", nil - case "process.ancestors.envs": - return "*", nil - case "process.ancestors.envs_truncated": - return "*", nil - case "process.ancestors.euid": - return "*", nil - case "process.ancestors.euser": - return "*", nil - case "process.ancestors.file.change_time": - return "*", nil - case "process.ancestors.file.filesystem": - return "*", nil - case "process.ancestors.file.gid": - return "*", nil - case "process.ancestors.file.group": - return "*", nil - case "process.ancestors.file.in_upper_layer": - return "*", nil - case "process.ancestors.file.inode": - return "*", nil - case "process.ancestors.file.mode": - return "*", nil - case "process.ancestors.file.modification_time": - return "*", nil - case "process.ancestors.file.mount_id": - return "*", nil - case "process.ancestors.file.name": - return "*", nil - case "process.ancestors.file.name.length": - return "*", nil - case "process.ancestors.file.path": - return "*", nil - case "process.ancestors.file.path.length": - return "*", nil - case "process.ancestors.file.rights": - return "*", nil - case "process.ancestors.file.uid": - return "*", nil - case "process.ancestors.file.user": - return "*", nil - case "process.ancestors.fsgid": - return "*", nil - case "process.ancestors.fsgroup": - return "*", nil - case "process.ancestors.fsuid": - return "*", nil - case "process.ancestors.fsuser": - return "*", nil - case "process.ancestors.gid": - return "*", nil - case "process.ancestors.group": - return "*", nil - case "process.ancestors.interpreter.file.change_time": - return "*", nil - case "process.ancestors.interpreter.file.filesystem": - return "*", nil - case "process.ancestors.interpreter.file.gid": - return "*", nil - case "process.ancestors.interpreter.file.group": - return "*", nil - case "process.ancestors.interpreter.file.in_upper_layer": - return "*", nil - case "process.ancestors.interpreter.file.inode": - return "*", nil - case "process.ancestors.interpreter.file.mode": - return "*", nil - case "process.ancestors.interpreter.file.modification_time": - return "*", nil - case "process.ancestors.interpreter.file.mount_id": - return "*", nil - case "process.ancestors.interpreter.file.name": - return "*", nil - case "process.ancestors.interpreter.file.name.length": - return "*", nil - case "process.ancestors.interpreter.file.path": - return "*", nil - case "process.ancestors.interpreter.file.path.length": - return "*", nil - case "process.ancestors.interpreter.file.rights": - return "*", nil - case "process.ancestors.interpreter.file.uid": - return "*", nil - case "process.ancestors.interpreter.file.user": - return "*", nil - case "process.ancestors.is_kworker": - return "*", nil - case "process.ancestors.is_thread": - return "*", nil - case "process.ancestors.pid": - return "*", nil - case "process.ancestors.ppid": - return "*", nil - case "process.ancestors.tid": - return "*", nil - case "process.ancestors.tty_name": - return "*", nil - case "process.ancestors.uid": - return "*", nil - case "process.ancestors.user": - return "*", nil - case "process.args": - return "*", nil - case "process.args_flags": - return "*", nil - case "process.args_options": - return "*", nil - case "process.args_truncated": - return "*", nil - case "process.argv": - return "*", nil - case "process.argv0": - return "*", nil - case "process.cap_effective": - return "*", nil - case "process.cap_permitted": - return "*", nil - case "process.comm": - return "*", nil - case "process.container.id": - return "*", nil - case "process.cookie": - return "*", nil - case "process.created_at": - return "*", nil - case "process.egid": - return "*", nil - case "process.egroup": - return "*", nil - case "process.envp": - return "*", nil - case "process.envs": - return "*", nil - case "process.envs_truncated": - return "*", nil - case "process.euid": - return "*", nil - case "process.euser": - return "*", nil - case "process.file.change_time": - return "*", nil - case "process.file.filesystem": - return "*", nil - case "process.file.gid": - return "*", nil - case "process.file.group": - return "*", nil - case "process.file.in_upper_layer": - return "*", nil - case "process.file.inode": - return "*", nil - case "process.file.mode": - return "*", nil - case "process.file.modification_time": - return "*", nil - case "process.file.mount_id": - return "*", nil - case "process.file.name": - return "*", nil - case "process.file.name.length": - return "*", nil - case "process.file.path": - return "*", nil - case "process.file.path.length": - return "*", nil - case "process.file.rights": - return "*", nil - case "process.file.uid": - return "*", nil - case "process.file.user": - return "*", nil - case "process.fsgid": - return "*", nil - case "process.fsgroup": - return "*", nil - case "process.fsuid": - return "*", nil - case "process.fsuser": - return "*", nil - case "process.gid": - return "*", nil - case "process.group": - return "*", nil - case "process.interpreter.file.change_time": - return "*", nil - case "process.interpreter.file.filesystem": - return "*", nil - case "process.interpreter.file.gid": - return "*", nil - case "process.interpreter.file.group": - return "*", nil - case "process.interpreter.file.in_upper_layer": - return "*", nil - case "process.interpreter.file.inode": - return "*", nil - case "process.interpreter.file.mode": - return "*", nil - case "process.interpreter.file.modification_time": - return "*", nil - case "process.interpreter.file.mount_id": - return "*", nil - case "process.interpreter.file.name": - return "*", nil - case "process.interpreter.file.name.length": - return "*", nil - case "process.interpreter.file.path": - return "*", nil - case "process.interpreter.file.path.length": - return "*", nil - case "process.interpreter.file.rights": - return "*", nil - case "process.interpreter.file.uid": - return "*", nil - case "process.interpreter.file.user": - return "*", nil - case "process.is_kworker": - return "*", nil - case "process.is_thread": - return "*", nil - case "process.parent.args": - return "*", nil - case "process.parent.args_flags": - return "*", nil - case "process.parent.args_options": - return "*", nil - case "process.parent.args_truncated": - return "*", nil - case "process.parent.argv": - return "*", nil - case "process.parent.argv0": - return "*", nil - case "process.parent.cap_effective": - return "*", nil - case "process.parent.cap_permitted": - return "*", nil - case "process.parent.comm": - return "*", nil - case "process.parent.container.id": - return "*", nil - case "process.parent.cookie": - return "*", nil - case "process.parent.created_at": - return "*", nil - case "process.parent.egid": - return "*", nil - case "process.parent.egroup": - return "*", nil - case "process.parent.envp": - return "*", nil - case "process.parent.envs": - return "*", nil - case "process.parent.envs_truncated": - return "*", nil - case "process.parent.euid": - return "*", nil - case "process.parent.euser": - return "*", nil - case "process.parent.file.change_time": - return "*", nil - case "process.parent.file.filesystem": - return "*", nil - case "process.parent.file.gid": - return "*", nil - case "process.parent.file.group": - return "*", nil - case "process.parent.file.in_upper_layer": - return "*", nil - case "process.parent.file.inode": - return "*", nil - case "process.parent.file.mode": - return "*", nil - case "process.parent.file.modification_time": - return "*", nil - case "process.parent.file.mount_id": - return "*", nil - case "process.parent.file.name": - return "*", nil - case "process.parent.file.name.length": - return "*", nil - case "process.parent.file.path": - return "*", nil - case "process.parent.file.path.length": - return "*", nil - case "process.parent.file.rights": - return "*", nil - case "process.parent.file.uid": - return "*", nil - case "process.parent.file.user": - return "*", nil - case "process.parent.fsgid": - return "*", nil - case "process.parent.fsgroup": - return "*", nil - case "process.parent.fsuid": - return "*", nil - case "process.parent.fsuser": - return "*", nil - case "process.parent.gid": - return "*", nil - case "process.parent.group": - return "*", nil - case "process.parent.interpreter.file.change_time": - return "*", nil - case "process.parent.interpreter.file.filesystem": - return "*", nil - case "process.parent.interpreter.file.gid": - return "*", nil - case "process.parent.interpreter.file.group": - return "*", nil - case "process.parent.interpreter.file.in_upper_layer": - return "*", nil - case "process.parent.interpreter.file.inode": - return "*", nil - case "process.parent.interpreter.file.mode": - return "*", nil - case "process.parent.interpreter.file.modification_time": - return "*", nil - case "process.parent.interpreter.file.mount_id": - return "*", nil - case "process.parent.interpreter.file.name": - return "*", nil - case "process.parent.interpreter.file.name.length": - return "*", nil - case "process.parent.interpreter.file.path": - return "*", nil - case "process.parent.interpreter.file.path.length": - return "*", nil - case "process.parent.interpreter.file.rights": - return "*", nil - case "process.parent.interpreter.file.uid": - return "*", nil - case "process.parent.interpreter.file.user": - return "*", nil - case "process.parent.is_kworker": - return "*", nil - case "process.parent.is_thread": - return "*", nil - case "process.parent.pid": - return "*", nil - case "process.parent.ppid": - return "*", nil - case "process.parent.tid": - return "*", nil - case "process.parent.tty_name": - return "*", nil - case "process.parent.uid": - return "*", nil - case "process.parent.user": - return "*", nil - case "process.pid": - return "*", nil - case "process.ppid": - return "*", nil - case "process.tid": - return "*", nil - case "process.tty_name": - return "*", nil - case "process.uid": - return "*", nil - case "process.user": - return "*", nil - case "ptrace.request": - return "ptrace", nil - case "ptrace.retval": - return "ptrace", nil - case "ptrace.tracee.ancestors.args": - return "ptrace", nil - case "ptrace.tracee.ancestors.args_flags": - return "ptrace", nil - case "ptrace.tracee.ancestors.args_options": - return "ptrace", nil - case "ptrace.tracee.ancestors.args_truncated": - return "ptrace", nil - case "ptrace.tracee.ancestors.argv": - return "ptrace", nil - case "ptrace.tracee.ancestors.argv0": - return "ptrace", nil - case "ptrace.tracee.ancestors.cap_effective": - return "ptrace", nil - case "ptrace.tracee.ancestors.cap_permitted": - return "ptrace", nil - case "ptrace.tracee.ancestors.comm": - return "ptrace", nil - case "ptrace.tracee.ancestors.container.id": - return "ptrace", nil - case "ptrace.tracee.ancestors.cookie": - return "ptrace", nil - case "ptrace.tracee.ancestors.created_at": - return "ptrace", nil - case "ptrace.tracee.ancestors.egid": - return "ptrace", nil - case "ptrace.tracee.ancestors.egroup": - return "ptrace", nil - case "ptrace.tracee.ancestors.envp": - return "ptrace", nil - case "ptrace.tracee.ancestors.envs": - return "ptrace", nil - case "ptrace.tracee.ancestors.envs_truncated": - return "ptrace", nil - case "ptrace.tracee.ancestors.euid": - return "ptrace", nil - case "ptrace.tracee.ancestors.euser": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.change_time": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.gid": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.group": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.inode": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.mode": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.name": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.name.length": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.path": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.path.length": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.rights": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.uid": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.user": - return "ptrace", nil - case "ptrace.tracee.ancestors.fsgid": - return "ptrace", nil - case "ptrace.tracee.ancestors.fsgroup": - return "ptrace", nil - case "ptrace.tracee.ancestors.fsuid": - return "ptrace", nil - case "ptrace.tracee.ancestors.fsuser": - return "ptrace", nil - case "ptrace.tracee.ancestors.gid": - return "ptrace", nil - case "ptrace.tracee.ancestors.group": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.group": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.name": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.path": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.rights": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.user": - return "ptrace", nil - case "ptrace.tracee.ancestors.is_kworker": - return "ptrace", nil - case "ptrace.tracee.ancestors.is_thread": - return "ptrace", nil - case "ptrace.tracee.ancestors.pid": - return "ptrace", nil - case "ptrace.tracee.ancestors.ppid": - return "ptrace", nil - case "ptrace.tracee.ancestors.tid": - return "ptrace", nil - case "ptrace.tracee.ancestors.tty_name": - return "ptrace", nil - case "ptrace.tracee.ancestors.uid": - return "ptrace", nil - case "ptrace.tracee.ancestors.user": - return "ptrace", nil - case "ptrace.tracee.args": - return "ptrace", nil - case "ptrace.tracee.args_flags": - return "ptrace", nil - case "ptrace.tracee.args_options": - return "ptrace", nil - case "ptrace.tracee.args_truncated": - return "ptrace", nil - case "ptrace.tracee.argv": - return "ptrace", nil - case "ptrace.tracee.argv0": - return "ptrace", nil - case "ptrace.tracee.cap_effective": - return "ptrace", nil - case "ptrace.tracee.cap_permitted": - return "ptrace", nil - case "ptrace.tracee.comm": - return "ptrace", nil - case "ptrace.tracee.container.id": - return "ptrace", nil - case "ptrace.tracee.cookie": - return "ptrace", nil - case "ptrace.tracee.created_at": - return "ptrace", nil - case "ptrace.tracee.egid": - return "ptrace", nil - case "ptrace.tracee.egroup": - return "ptrace", nil - case "ptrace.tracee.envp": - return "ptrace", nil - case "ptrace.tracee.envs": - return "ptrace", nil - case "ptrace.tracee.envs_truncated": - return "ptrace", nil - case "ptrace.tracee.euid": - return "ptrace", nil - case "ptrace.tracee.euser": - return "ptrace", nil - case "ptrace.tracee.file.change_time": - return "ptrace", nil - case "ptrace.tracee.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.file.gid": - return "ptrace", nil - case "ptrace.tracee.file.group": - return "ptrace", nil - case "ptrace.tracee.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.file.inode": - return "ptrace", nil - case "ptrace.tracee.file.mode": - return "ptrace", nil - case "ptrace.tracee.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.file.name": - return "ptrace", nil - case "ptrace.tracee.file.name.length": - return "ptrace", nil - case "ptrace.tracee.file.path": - return "ptrace", nil - case "ptrace.tracee.file.path.length": - return "ptrace", nil - case "ptrace.tracee.file.rights": - return "ptrace", nil - case "ptrace.tracee.file.uid": - return "ptrace", nil - case "ptrace.tracee.file.user": - return "ptrace", nil - case "ptrace.tracee.fsgid": - return "ptrace", nil - case "ptrace.tracee.fsgroup": - return "ptrace", nil - case "ptrace.tracee.fsuid": - return "ptrace", nil - case "ptrace.tracee.fsuser": - return "ptrace", nil - case "ptrace.tracee.gid": - return "ptrace", nil - case "ptrace.tracee.group": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.change_time": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.gid": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.group": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.inode": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.mode": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.name": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.name.length": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.path": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.path.length": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.rights": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.uid": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.user": - return "ptrace", nil - case "ptrace.tracee.is_kworker": - return "ptrace", nil - case "ptrace.tracee.is_thread": - return "ptrace", nil - case "ptrace.tracee.parent.args": - return "ptrace", nil - case "ptrace.tracee.parent.args_flags": - return "ptrace", nil - case "ptrace.tracee.parent.args_options": - return "ptrace", nil - case "ptrace.tracee.parent.args_truncated": - return "ptrace", nil - case "ptrace.tracee.parent.argv": - return "ptrace", nil - case "ptrace.tracee.parent.argv0": - return "ptrace", nil - case "ptrace.tracee.parent.cap_effective": - return "ptrace", nil - case "ptrace.tracee.parent.cap_permitted": - return "ptrace", nil - case "ptrace.tracee.parent.comm": - return "ptrace", nil - case "ptrace.tracee.parent.container.id": - return "ptrace", nil - case "ptrace.tracee.parent.cookie": - return "ptrace", nil - case "ptrace.tracee.parent.created_at": - return "ptrace", nil - case "ptrace.tracee.parent.egid": - return "ptrace", nil - case "ptrace.tracee.parent.egroup": - return "ptrace", nil - case "ptrace.tracee.parent.envp": - return "ptrace", nil - case "ptrace.tracee.parent.envs": - return "ptrace", nil - case "ptrace.tracee.parent.envs_truncated": - return "ptrace", nil - case "ptrace.tracee.parent.euid": - return "ptrace", nil - case "ptrace.tracee.parent.euser": - return "ptrace", nil - case "ptrace.tracee.parent.file.change_time": - return "ptrace", nil - case "ptrace.tracee.parent.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.parent.file.gid": - return "ptrace", nil - case "ptrace.tracee.parent.file.group": - return "ptrace", nil - case "ptrace.tracee.parent.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.parent.file.inode": - return "ptrace", nil - case "ptrace.tracee.parent.file.mode": - return "ptrace", nil - case "ptrace.tracee.parent.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.parent.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.parent.file.name": - return "ptrace", nil - case "ptrace.tracee.parent.file.name.length": - return "ptrace", nil - case "ptrace.tracee.parent.file.path": - return "ptrace", nil - case "ptrace.tracee.parent.file.path.length": - return "ptrace", nil - case "ptrace.tracee.parent.file.rights": - return "ptrace", nil - case "ptrace.tracee.parent.file.uid": - return "ptrace", nil - case "ptrace.tracee.parent.file.user": - return "ptrace", nil - case "ptrace.tracee.parent.fsgid": - return "ptrace", nil - case "ptrace.tracee.parent.fsgroup": - return "ptrace", nil - case "ptrace.tracee.parent.fsuid": - return "ptrace", nil - case "ptrace.tracee.parent.fsuser": - return "ptrace", nil - case "ptrace.tracee.parent.gid": - return "ptrace", nil - case "ptrace.tracee.parent.group": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.change_time": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.gid": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.group": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.inode": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.mode": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.name": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.name.length": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.path": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.path.length": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.rights": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.uid": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.user": - return "ptrace", nil - case "ptrace.tracee.parent.is_kworker": - return "ptrace", nil - case "ptrace.tracee.parent.is_thread": - return "ptrace", nil - case "ptrace.tracee.parent.pid": - return "ptrace", nil - case "ptrace.tracee.parent.ppid": - return "ptrace", nil - case "ptrace.tracee.parent.tid": - return "ptrace", nil - case "ptrace.tracee.parent.tty_name": - return "ptrace", nil - case "ptrace.tracee.parent.uid": - return "ptrace", nil - case "ptrace.tracee.parent.user": - return "ptrace", nil - case "ptrace.tracee.pid": - return "ptrace", nil - case "ptrace.tracee.ppid": - return "ptrace", nil - case "ptrace.tracee.tid": - return "ptrace", nil - case "ptrace.tracee.tty_name": - return "ptrace", nil - case "ptrace.tracee.uid": - return "ptrace", nil - case "ptrace.tracee.user": - return "ptrace", nil - case "removexattr.file.change_time": - return "removexattr", nil - case "removexattr.file.destination.name": - return "removexattr", nil - case "removexattr.file.destination.namespace": - return "removexattr", nil - case "removexattr.file.filesystem": - return "removexattr", nil - case "removexattr.file.gid": - return "removexattr", nil - case "removexattr.file.group": - return "removexattr", nil - case "removexattr.file.in_upper_layer": - return "removexattr", nil - case "removexattr.file.inode": - return "removexattr", nil - case "removexattr.file.mode": - return "removexattr", nil - case "removexattr.file.modification_time": - return "removexattr", nil - case "removexattr.file.mount_id": - return "removexattr", nil - case "removexattr.file.name": - return "removexattr", nil - case "removexattr.file.name.length": - return "removexattr", nil - case "removexattr.file.path": - return "removexattr", nil - case "removexattr.file.path.length": - return "removexattr", nil - case "removexattr.file.rights": - return "removexattr", nil - case "removexattr.file.uid": - return "removexattr", nil - case "removexattr.file.user": - return "removexattr", nil - case "removexattr.retval": - return "removexattr", nil - case "rename.file.change_time": - return "rename", nil - case "rename.file.destination.change_time": - return "rename", nil - case "rename.file.destination.filesystem": - return "rename", nil - case "rename.file.destination.gid": - return "rename", nil - case "rename.file.destination.group": - return "rename", nil - case "rename.file.destination.in_upper_layer": - return "rename", nil - case "rename.file.destination.inode": - return "rename", nil - case "rename.file.destination.mode": - return "rename", nil - case "rename.file.destination.modification_time": - return "rename", nil - case "rename.file.destination.mount_id": - return "rename", nil - case "rename.file.destination.name": - return "rename", nil - case "rename.file.destination.name.length": - return "rename", nil - case "rename.file.destination.path": - return "rename", nil - case "rename.file.destination.path.length": - return "rename", nil - case "rename.file.destination.rights": - return "rename", nil - case "rename.file.destination.uid": - return "rename", nil - case "rename.file.destination.user": - return "rename", nil - case "rename.file.filesystem": - return "rename", nil - case "rename.file.gid": - return "rename", nil - case "rename.file.group": - return "rename", nil - case "rename.file.in_upper_layer": - return "rename", nil - case "rename.file.inode": - return "rename", nil - case "rename.file.mode": - return "rename", nil - case "rename.file.modification_time": - return "rename", nil - case "rename.file.mount_id": - return "rename", nil - case "rename.file.name": - return "rename", nil - case "rename.file.name.length": - return "rename", nil - case "rename.file.path": - return "rename", nil - case "rename.file.path.length": - return "rename", nil - case "rename.file.rights": - return "rename", nil - case "rename.file.uid": - return "rename", nil - case "rename.file.user": - return "rename", nil - case "rename.retval": - return "rename", nil - case "rmdir.file.change_time": - return "rmdir", nil - case "rmdir.file.filesystem": - return "rmdir", nil - case "rmdir.file.gid": - return "rmdir", nil - case "rmdir.file.group": - return "rmdir", nil - case "rmdir.file.in_upper_layer": - return "rmdir", nil - case "rmdir.file.inode": - return "rmdir", nil - case "rmdir.file.mode": - return "rmdir", nil - case "rmdir.file.modification_time": - return "rmdir", nil - case "rmdir.file.mount_id": - return "rmdir", nil - case "rmdir.file.name": - return "rmdir", nil - case "rmdir.file.name.length": - return "rmdir", nil - case "rmdir.file.path": - return "rmdir", nil - case "rmdir.file.path.length": - return "rmdir", nil - case "rmdir.file.rights": - return "rmdir", nil - case "rmdir.file.uid": - return "rmdir", nil - case "rmdir.file.user": - return "rmdir", nil - case "rmdir.retval": - return "rmdir", nil - case "selinux.bool.name": - return "selinux", nil - case "selinux.bool.state": - return "selinux", nil - case "selinux.bool_commit.state": - return "selinux", nil - case "selinux.enforce.status": - return "selinux", nil - case "setgid.egid": - return "setgid", nil - case "setgid.egroup": - return "setgid", nil - case "setgid.fsgid": - return "setgid", nil - case "setgid.fsgroup": - return "setgid", nil - case "setgid.gid": - return "setgid", nil - case "setgid.group": - return "setgid", nil - case "setuid.euid": - return "setuid", nil - case "setuid.euser": - return "setuid", nil - case "setuid.fsuid": - return "setuid", nil - case "setuid.fsuser": - return "setuid", nil - case "setuid.uid": - return "setuid", nil - case "setuid.user": - return "setuid", nil - case "setxattr.file.change_time": - return "setxattr", nil - case "setxattr.file.destination.name": - return "setxattr", nil - case "setxattr.file.destination.namespace": - return "setxattr", nil - case "setxattr.file.filesystem": - return "setxattr", nil - case "setxattr.file.gid": - return "setxattr", nil - case "setxattr.file.group": - return "setxattr", nil - case "setxattr.file.in_upper_layer": - return "setxattr", nil - case "setxattr.file.inode": - return "setxattr", nil - case "setxattr.file.mode": - return "setxattr", nil - case "setxattr.file.modification_time": - return "setxattr", nil - case "setxattr.file.mount_id": - return "setxattr", nil - case "setxattr.file.name": - return "setxattr", nil - case "setxattr.file.name.length": - return "setxattr", nil - case "setxattr.file.path": - return "setxattr", nil - case "setxattr.file.path.length": - return "setxattr", nil - case "setxattr.file.rights": - return "setxattr", nil - case "setxattr.file.uid": - return "setxattr", nil - case "setxattr.file.user": - return "setxattr", nil - case "setxattr.retval": - return "setxattr", nil - case "signal.pid": - return "signal", nil - case "signal.retval": - return "signal", nil - case "signal.target.ancestors.args": - return "signal", nil - case "signal.target.ancestors.args_flags": - return "signal", nil - case "signal.target.ancestors.args_options": - return "signal", nil - case "signal.target.ancestors.args_truncated": - return "signal", nil - case "signal.target.ancestors.argv": - return "signal", nil - case "signal.target.ancestors.argv0": - return "signal", nil - case "signal.target.ancestors.cap_effective": - return "signal", nil - case "signal.target.ancestors.cap_permitted": - return "signal", nil - case "signal.target.ancestors.comm": - return "signal", nil - case "signal.target.ancestors.container.id": - return "signal", nil - case "signal.target.ancestors.cookie": - return "signal", nil - case "signal.target.ancestors.created_at": - return "signal", nil - case "signal.target.ancestors.egid": - return "signal", nil - case "signal.target.ancestors.egroup": - return "signal", nil - case "signal.target.ancestors.envp": - return "signal", nil - case "signal.target.ancestors.envs": - return "signal", nil - case "signal.target.ancestors.envs_truncated": - return "signal", nil - case "signal.target.ancestors.euid": - return "signal", nil - case "signal.target.ancestors.euser": - return "signal", nil - case "signal.target.ancestors.file.change_time": - return "signal", nil - case "signal.target.ancestors.file.filesystem": - return "signal", nil - case "signal.target.ancestors.file.gid": - return "signal", nil - case "signal.target.ancestors.file.group": - return "signal", nil - case "signal.target.ancestors.file.in_upper_layer": - return "signal", nil - case "signal.target.ancestors.file.inode": - return "signal", nil - case "signal.target.ancestors.file.mode": - return "signal", nil - case "signal.target.ancestors.file.modification_time": - return "signal", nil - case "signal.target.ancestors.file.mount_id": - return "signal", nil - case "signal.target.ancestors.file.name": - return "signal", nil - case "signal.target.ancestors.file.name.length": - return "signal", nil - case "signal.target.ancestors.file.path": - return "signal", nil - case "signal.target.ancestors.file.path.length": - return "signal", nil - case "signal.target.ancestors.file.rights": - return "signal", nil - case "signal.target.ancestors.file.uid": - return "signal", nil - case "signal.target.ancestors.file.user": - return "signal", nil - case "signal.target.ancestors.fsgid": - return "signal", nil - case "signal.target.ancestors.fsgroup": - return "signal", nil - case "signal.target.ancestors.fsuid": - return "signal", nil - case "signal.target.ancestors.fsuser": - return "signal", nil - case "signal.target.ancestors.gid": - return "signal", nil - case "signal.target.ancestors.group": - return "signal", nil - case "signal.target.ancestors.interpreter.file.change_time": - return "signal", nil - case "signal.target.ancestors.interpreter.file.filesystem": - return "signal", nil - case "signal.target.ancestors.interpreter.file.gid": - return "signal", nil - case "signal.target.ancestors.interpreter.file.group": - return "signal", nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - return "signal", nil - case "signal.target.ancestors.interpreter.file.inode": - return "signal", nil - case "signal.target.ancestors.interpreter.file.mode": - return "signal", nil - case "signal.target.ancestors.interpreter.file.modification_time": - return "signal", nil - case "signal.target.ancestors.interpreter.file.mount_id": - return "signal", nil - case "signal.target.ancestors.interpreter.file.name": - return "signal", nil - case "signal.target.ancestors.interpreter.file.name.length": - return "signal", nil - case "signal.target.ancestors.interpreter.file.path": - return "signal", nil - case "signal.target.ancestors.interpreter.file.path.length": - return "signal", nil - case "signal.target.ancestors.interpreter.file.rights": - return "signal", nil - case "signal.target.ancestors.interpreter.file.uid": - return "signal", nil - case "signal.target.ancestors.interpreter.file.user": - return "signal", nil - case "signal.target.ancestors.is_kworker": - return "signal", nil - case "signal.target.ancestors.is_thread": - return "signal", nil - case "signal.target.ancestors.pid": - return "signal", nil - case "signal.target.ancestors.ppid": - return "signal", nil - case "signal.target.ancestors.tid": - return "signal", nil - case "signal.target.ancestors.tty_name": - return "signal", nil - case "signal.target.ancestors.uid": - return "signal", nil - case "signal.target.ancestors.user": - return "signal", nil - case "signal.target.args": - return "signal", nil - case "signal.target.args_flags": - return "signal", nil - case "signal.target.args_options": - return "signal", nil - case "signal.target.args_truncated": - return "signal", nil - case "signal.target.argv": - return "signal", nil - case "signal.target.argv0": - return "signal", nil - case "signal.target.cap_effective": - return "signal", nil - case "signal.target.cap_permitted": - return "signal", nil - case "signal.target.comm": - return "signal", nil - case "signal.target.container.id": - return "signal", nil - case "signal.target.cookie": - return "signal", nil - case "signal.target.created_at": - return "signal", nil - case "signal.target.egid": - return "signal", nil - case "signal.target.egroup": - return "signal", nil - case "signal.target.envp": - return "signal", nil - case "signal.target.envs": - return "signal", nil - case "signal.target.envs_truncated": - return "signal", nil - case "signal.target.euid": - return "signal", nil - case "signal.target.euser": - return "signal", nil - case "signal.target.file.change_time": - return "signal", nil - case "signal.target.file.filesystem": - return "signal", nil - case "signal.target.file.gid": - return "signal", nil - case "signal.target.file.group": - return "signal", nil - case "signal.target.file.in_upper_layer": - return "signal", nil - case "signal.target.file.inode": - return "signal", nil - case "signal.target.file.mode": - return "signal", nil - case "signal.target.file.modification_time": - return "signal", nil - case "signal.target.file.mount_id": - return "signal", nil - case "signal.target.file.name": - return "signal", nil - case "signal.target.file.name.length": - return "signal", nil - case "signal.target.file.path": - return "signal", nil - case "signal.target.file.path.length": - return "signal", nil - case "signal.target.file.rights": - return "signal", nil - case "signal.target.file.uid": - return "signal", nil - case "signal.target.file.user": - return "signal", nil - case "signal.target.fsgid": - return "signal", nil - case "signal.target.fsgroup": - return "signal", nil - case "signal.target.fsuid": - return "signal", nil - case "signal.target.fsuser": - return "signal", nil - case "signal.target.gid": - return "signal", nil - case "signal.target.group": - return "signal", nil - case "signal.target.interpreter.file.change_time": - return "signal", nil - case "signal.target.interpreter.file.filesystem": - return "signal", nil - case "signal.target.interpreter.file.gid": - return "signal", nil - case "signal.target.interpreter.file.group": - return "signal", nil - case "signal.target.interpreter.file.in_upper_layer": - return "signal", nil - case "signal.target.interpreter.file.inode": - return "signal", nil - case "signal.target.interpreter.file.mode": - return "signal", nil - case "signal.target.interpreter.file.modification_time": - return "signal", nil - case "signal.target.interpreter.file.mount_id": - return "signal", nil - case "signal.target.interpreter.file.name": - return "signal", nil - case "signal.target.interpreter.file.name.length": - return "signal", nil - case "signal.target.interpreter.file.path": - return "signal", nil - case "signal.target.interpreter.file.path.length": - return "signal", nil - case "signal.target.interpreter.file.rights": - return "signal", nil - case "signal.target.interpreter.file.uid": - return "signal", nil - case "signal.target.interpreter.file.user": - return "signal", nil - case "signal.target.is_kworker": - return "signal", nil - case "signal.target.is_thread": - return "signal", nil - case "signal.target.parent.args": - return "signal", nil - case "signal.target.parent.args_flags": - return "signal", nil - case "signal.target.parent.args_options": - return "signal", nil - case "signal.target.parent.args_truncated": - return "signal", nil - case "signal.target.parent.argv": - return "signal", nil - case "signal.target.parent.argv0": - return "signal", nil - case "signal.target.parent.cap_effective": - return "signal", nil - case "signal.target.parent.cap_permitted": - return "signal", nil - case "signal.target.parent.comm": - return "signal", nil - case "signal.target.parent.container.id": - return "signal", nil - case "signal.target.parent.cookie": - return "signal", nil - case "signal.target.parent.created_at": - return "signal", nil - case "signal.target.parent.egid": - return "signal", nil - case "signal.target.parent.egroup": - return "signal", nil - case "signal.target.parent.envp": - return "signal", nil - case "signal.target.parent.envs": - return "signal", nil - case "signal.target.parent.envs_truncated": - return "signal", nil - case "signal.target.parent.euid": - return "signal", nil - case "signal.target.parent.euser": - return "signal", nil - case "signal.target.parent.file.change_time": - return "signal", nil - case "signal.target.parent.file.filesystem": - return "signal", nil - case "signal.target.parent.file.gid": - return "signal", nil - case "signal.target.parent.file.group": - return "signal", nil - case "signal.target.parent.file.in_upper_layer": - return "signal", nil - case "signal.target.parent.file.inode": - return "signal", nil - case "signal.target.parent.file.mode": - return "signal", nil - case "signal.target.parent.file.modification_time": - return "signal", nil - case "signal.target.parent.file.mount_id": - return "signal", nil - case "signal.target.parent.file.name": - return "signal", nil - case "signal.target.parent.file.name.length": - return "signal", nil - case "signal.target.parent.file.path": - return "signal", nil - case "signal.target.parent.file.path.length": - return "signal", nil - case "signal.target.parent.file.rights": - return "signal", nil - case "signal.target.parent.file.uid": - return "signal", nil - case "signal.target.parent.file.user": - return "signal", nil - case "signal.target.parent.fsgid": - return "signal", nil - case "signal.target.parent.fsgroup": - return "signal", nil - case "signal.target.parent.fsuid": - return "signal", nil - case "signal.target.parent.fsuser": - return "signal", nil - case "signal.target.parent.gid": - return "signal", nil - case "signal.target.parent.group": - return "signal", nil - case "signal.target.parent.interpreter.file.change_time": - return "signal", nil - case "signal.target.parent.interpreter.file.filesystem": - return "signal", nil - case "signal.target.parent.interpreter.file.gid": - return "signal", nil - case "signal.target.parent.interpreter.file.group": - return "signal", nil - case "signal.target.parent.interpreter.file.in_upper_layer": - return "signal", nil - case "signal.target.parent.interpreter.file.inode": - return "signal", nil - case "signal.target.parent.interpreter.file.mode": - return "signal", nil - case "signal.target.parent.interpreter.file.modification_time": - return "signal", nil - case "signal.target.parent.interpreter.file.mount_id": - return "signal", nil - case "signal.target.parent.interpreter.file.name": - return "signal", nil - case "signal.target.parent.interpreter.file.name.length": - return "signal", nil - case "signal.target.parent.interpreter.file.path": - return "signal", nil - case "signal.target.parent.interpreter.file.path.length": - return "signal", nil - case "signal.target.parent.interpreter.file.rights": - return "signal", nil - case "signal.target.parent.interpreter.file.uid": - return "signal", nil - case "signal.target.parent.interpreter.file.user": - return "signal", nil - case "signal.target.parent.is_kworker": - return "signal", nil - case "signal.target.parent.is_thread": - return "signal", nil - case "signal.target.parent.pid": - return "signal", nil - case "signal.target.parent.ppid": - return "signal", nil - case "signal.target.parent.tid": - return "signal", nil - case "signal.target.parent.tty_name": - return "signal", nil - case "signal.target.parent.uid": - return "signal", nil - case "signal.target.parent.user": - return "signal", nil - case "signal.target.pid": - return "signal", nil - case "signal.target.ppid": - return "signal", nil - case "signal.target.tid": - return "signal", nil - case "signal.target.tty_name": - return "signal", nil - case "signal.target.uid": - return "signal", nil - case "signal.target.user": - return "signal", nil - case "signal.type": - return "signal", nil - case "splice.file.change_time": - return "splice", nil - case "splice.file.filesystem": - return "splice", nil - case "splice.file.gid": - return "splice", nil - case "splice.file.group": - return "splice", nil - case "splice.file.in_upper_layer": - return "splice", nil - case "splice.file.inode": - return "splice", nil - case "splice.file.mode": - return "splice", nil - case "splice.file.modification_time": - return "splice", nil - case "splice.file.mount_id": - return "splice", nil - case "splice.file.name": - return "splice", nil - case "splice.file.name.length": - return "splice", nil - case "splice.file.path": - return "splice", nil - case "splice.file.path.length": - return "splice", nil - case "splice.file.rights": - return "splice", nil - case "splice.file.uid": - return "splice", nil - case "splice.file.user": - return "splice", nil - case "splice.pipe_entry_flag": - return "splice", nil - case "splice.pipe_exit_flag": - return "splice", nil - case "splice.retval": - return "splice", nil - case "unlink.file.change_time": - return "unlink", nil - case "unlink.file.filesystem": - return "unlink", nil - case "unlink.file.gid": - return "unlink", nil - case "unlink.file.group": - return "unlink", nil - case "unlink.file.in_upper_layer": - return "unlink", nil - case "unlink.file.inode": - return "unlink", nil - case "unlink.file.mode": - return "unlink", nil - case "unlink.file.modification_time": - return "unlink", nil - case "unlink.file.mount_id": - return "unlink", nil - case "unlink.file.name": - return "unlink", nil - case "unlink.file.name.length": - return "unlink", nil - case "unlink.file.path": - return "unlink", nil - case "unlink.file.path.length": - return "unlink", nil - case "unlink.file.rights": - return "unlink", nil - case "unlink.file.uid": - return "unlink", nil - case "unlink.file.user": - return "unlink", nil - case "unlink.flags": - return "unlink", nil - case "unlink.retval": - return "unlink", nil - case "unload_module.name": - return "unload_module", nil - case "unload_module.retval": - return "unload_module", nil - case "utimes.file.change_time": - return "utimes", nil - case "utimes.file.filesystem": - return "utimes", nil - case "utimes.file.gid": - return "utimes", nil - case "utimes.file.group": - return "utimes", nil - case "utimes.file.in_upper_layer": - return "utimes", nil - case "utimes.file.inode": - return "utimes", nil - case "utimes.file.mode": - return "utimes", nil - case "utimes.file.modification_time": - return "utimes", nil - case "utimes.file.mount_id": - return "utimes", nil - case "utimes.file.name": - return "utimes", nil - case "utimes.file.name.length": - return "utimes", nil - case "utimes.file.path": - return "utimes", nil - case "utimes.file.path.length": - return "utimes", nil - case "utimes.file.rights": - return "utimes", nil - case "utimes.file.uid": - return "utimes", nil - case "utimes.file.user": - return "utimes", nil - case "utimes.retval": - return "utimes", nil - } - return "", &eval.ErrFieldNotFound{Field: field} -} -func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { - switch field { - case "async": - return reflect.Bool, nil - case "bind.addr.family": - return reflect.Int, nil - case "bind.addr.ip": - return reflect.Struct, nil - case "bind.addr.port": - return reflect.Int, nil - case "bind.retval": - return reflect.Int, nil - case "bpf.cmd": - return reflect.Int, nil - case "bpf.map.name": - return reflect.String, nil - case "bpf.map.type": - return reflect.Int, nil - case "bpf.prog.attach_type": - return reflect.Int, nil - case "bpf.prog.helpers": - return reflect.Int, nil - case "bpf.prog.name": - return reflect.String, nil - case "bpf.prog.tag": - return reflect.String, nil - case "bpf.prog.type": - return reflect.Int, nil - case "bpf.retval": - return reflect.Int, nil - case "capset.cap_effective": - return reflect.Int, nil - case "capset.cap_permitted": - return reflect.Int, nil - case "chmod.file.change_time": - return reflect.Int, nil - case "chmod.file.destination.mode": - return reflect.Int, nil - case "chmod.file.destination.rights": - return reflect.Int, nil - case "chmod.file.filesystem": - return reflect.String, nil - case "chmod.file.gid": - return reflect.Int, nil - case "chmod.file.group": - return reflect.String, nil - case "chmod.file.in_upper_layer": - return reflect.Bool, nil - case "chmod.file.inode": - return reflect.Int, nil - case "chmod.file.mode": - return reflect.Int, nil - case "chmod.file.modification_time": - return reflect.Int, nil - case "chmod.file.mount_id": - return reflect.Int, nil - case "chmod.file.name": - return reflect.String, nil - case "chmod.file.name.length": - return reflect.Int, nil - case "chmod.file.path": - return reflect.String, nil - case "chmod.file.path.length": - return reflect.Int, nil - case "chmod.file.rights": - return reflect.Int, nil - case "chmod.file.uid": - return reflect.Int, nil - case "chmod.file.user": - return reflect.String, nil - case "chmod.retval": - return reflect.Int, nil - case "chown.file.change_time": - return reflect.Int, nil - case "chown.file.destination.gid": - return reflect.Int, nil - case "chown.file.destination.group": - return reflect.String, nil - case "chown.file.destination.uid": - return reflect.Int, nil - case "chown.file.destination.user": - return reflect.String, nil - case "chown.file.filesystem": - return reflect.String, nil - case "chown.file.gid": - return reflect.Int, nil - case "chown.file.group": - return reflect.String, nil - case "chown.file.in_upper_layer": - return reflect.Bool, nil - case "chown.file.inode": - return reflect.Int, nil - case "chown.file.mode": - return reflect.Int, nil - case "chown.file.modification_time": - return reflect.Int, nil - case "chown.file.mount_id": - return reflect.Int, nil - case "chown.file.name": - return reflect.String, nil - case "chown.file.name.length": - return reflect.Int, nil - case "chown.file.path": - return reflect.String, nil - case "chown.file.path.length": - return reflect.Int, nil - case "chown.file.rights": - return reflect.Int, nil - case "chown.file.uid": - return reflect.Int, nil - case "chown.file.user": - return reflect.String, nil - case "chown.retval": - return reflect.Int, nil - case "container.id": - return reflect.String, nil - case "container.tags": - return reflect.String, nil - case "dns.id": - return reflect.Int, nil - case "dns.question.class": - return reflect.Int, nil - case "dns.question.count": - return reflect.Int, nil - case "dns.question.length": - return reflect.Int, nil - case "dns.question.name": - return reflect.String, nil - case "dns.question.name.length": - return reflect.Int, nil - case "dns.question.type": - return reflect.Int, nil - case "exec.args": - return reflect.String, nil - case "exec.args_flags": - return reflect.String, nil - case "exec.args_options": - return reflect.String, nil - case "exec.args_truncated": - return reflect.Bool, nil - case "exec.argv": - return reflect.String, nil - case "exec.argv0": - return reflect.String, nil - case "exec.cap_effective": - return reflect.Int, nil - case "exec.cap_permitted": - return reflect.Int, nil - case "exec.comm": - return reflect.String, nil - case "exec.container.id": - return reflect.String, nil - case "exec.cookie": - return reflect.Int, nil - case "exec.created_at": - return reflect.Int, nil - case "exec.egid": - return reflect.Int, nil - case "exec.egroup": - return reflect.String, nil - case "exec.envp": - return reflect.String, nil - case "exec.envs": - return reflect.String, nil - case "exec.envs_truncated": - return reflect.Bool, nil - case "exec.euid": - return reflect.Int, nil - case "exec.euser": - return reflect.String, nil - case "exec.file.change_time": - return reflect.Int, nil - case "exec.file.filesystem": - return reflect.String, nil - case "exec.file.gid": - return reflect.Int, nil - case "exec.file.group": - return reflect.String, nil - case "exec.file.in_upper_layer": - return reflect.Bool, nil - case "exec.file.inode": - return reflect.Int, nil - case "exec.file.mode": - return reflect.Int, nil - case "exec.file.modification_time": - return reflect.Int, nil - case "exec.file.mount_id": - return reflect.Int, nil - case "exec.file.name": - return reflect.String, nil - case "exec.file.name.length": - return reflect.Int, nil - case "exec.file.path": - return reflect.String, nil - case "exec.file.path.length": - return reflect.Int, nil - case "exec.file.rights": - return reflect.Int, nil - case "exec.file.uid": - return reflect.Int, nil - case "exec.file.user": - return reflect.String, nil - case "exec.fsgid": - return reflect.Int, nil - case "exec.fsgroup": - return reflect.String, nil - case "exec.fsuid": - return reflect.Int, nil - case "exec.fsuser": - return reflect.String, nil - case "exec.gid": - return reflect.Int, nil - case "exec.group": - return reflect.String, nil - case "exec.interpreter.file.change_time": - return reflect.Int, nil - case "exec.interpreter.file.filesystem": - return reflect.String, nil - case "exec.interpreter.file.gid": - return reflect.Int, nil - case "exec.interpreter.file.group": - return reflect.String, nil - case "exec.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "exec.interpreter.file.inode": - return reflect.Int, nil - case "exec.interpreter.file.mode": - return reflect.Int, nil - case "exec.interpreter.file.modification_time": - return reflect.Int, nil - case "exec.interpreter.file.mount_id": - return reflect.Int, nil - case "exec.interpreter.file.name": - return reflect.String, nil - case "exec.interpreter.file.name.length": - return reflect.Int, nil - case "exec.interpreter.file.path": - return reflect.String, nil - case "exec.interpreter.file.path.length": - return reflect.Int, nil - case "exec.interpreter.file.rights": - return reflect.Int, nil - case "exec.interpreter.file.uid": - return reflect.Int, nil - case "exec.interpreter.file.user": - return reflect.String, nil - case "exec.is_kworker": - return reflect.Bool, nil - case "exec.is_thread": - return reflect.Bool, nil - case "exec.pid": - return reflect.Int, nil - case "exec.ppid": - return reflect.Int, nil - case "exec.tid": - return reflect.Int, nil - case "exec.tty_name": - return reflect.String, nil - case "exec.uid": - return reflect.Int, nil - case "exec.user": - return reflect.String, nil - case "exit.args": - return reflect.String, nil - case "exit.args_flags": - return reflect.String, nil - case "exit.args_options": - return reflect.String, nil - case "exit.args_truncated": - return reflect.Bool, nil - case "exit.argv": - return reflect.String, nil - case "exit.argv0": - return reflect.String, nil - case "exit.cap_effective": - return reflect.Int, nil - case "exit.cap_permitted": - return reflect.Int, nil - case "exit.cause": - return reflect.Int, nil - case "exit.code": - return reflect.Int, nil - case "exit.comm": - return reflect.String, nil - case "exit.container.id": - return reflect.String, nil - case "exit.cookie": - return reflect.Int, nil - case "exit.created_at": - return reflect.Int, nil - case "exit.egid": - return reflect.Int, nil - case "exit.egroup": - return reflect.String, nil - case "exit.envp": - return reflect.String, nil - case "exit.envs": - return reflect.String, nil - case "exit.envs_truncated": - return reflect.Bool, nil - case "exit.euid": - return reflect.Int, nil - case "exit.euser": - return reflect.String, nil - case "exit.file.change_time": - return reflect.Int, nil - case "exit.file.filesystem": - return reflect.String, nil - case "exit.file.gid": - return reflect.Int, nil - case "exit.file.group": - return reflect.String, nil - case "exit.file.in_upper_layer": - return reflect.Bool, nil - case "exit.file.inode": - return reflect.Int, nil - case "exit.file.mode": - return reflect.Int, nil - case "exit.file.modification_time": - return reflect.Int, nil - case "exit.file.mount_id": - return reflect.Int, nil - case "exit.file.name": - return reflect.String, nil - case "exit.file.name.length": - return reflect.Int, nil - case "exit.file.path": - return reflect.String, nil - case "exit.file.path.length": - return reflect.Int, nil - case "exit.file.rights": - return reflect.Int, nil - case "exit.file.uid": - return reflect.Int, nil - case "exit.file.user": - return reflect.String, nil - case "exit.fsgid": - return reflect.Int, nil - case "exit.fsgroup": - return reflect.String, nil - case "exit.fsuid": - return reflect.Int, nil - case "exit.fsuser": - return reflect.String, nil - case "exit.gid": - return reflect.Int, nil - case "exit.group": - return reflect.String, nil - case "exit.interpreter.file.change_time": - return reflect.Int, nil - case "exit.interpreter.file.filesystem": - return reflect.String, nil - case "exit.interpreter.file.gid": - return reflect.Int, nil - case "exit.interpreter.file.group": - return reflect.String, nil - case "exit.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "exit.interpreter.file.inode": - return reflect.Int, nil - case "exit.interpreter.file.mode": - return reflect.Int, nil - case "exit.interpreter.file.modification_time": - return reflect.Int, nil - case "exit.interpreter.file.mount_id": - return reflect.Int, nil - case "exit.interpreter.file.name": - return reflect.String, nil - case "exit.interpreter.file.name.length": - return reflect.Int, nil - case "exit.interpreter.file.path": - return reflect.String, nil - case "exit.interpreter.file.path.length": - return reflect.Int, nil - case "exit.interpreter.file.rights": - return reflect.Int, nil - case "exit.interpreter.file.uid": - return reflect.Int, nil - case "exit.interpreter.file.user": - return reflect.String, nil - case "exit.is_kworker": - return reflect.Bool, nil - case "exit.is_thread": - return reflect.Bool, nil - case "exit.pid": - return reflect.Int, nil - case "exit.ppid": - return reflect.Int, nil - case "exit.tid": - return reflect.Int, nil - case "exit.tty_name": - return reflect.String, nil - case "exit.uid": - return reflect.Int, nil - case "exit.user": - return reflect.String, nil - case "link.file.change_time": - return reflect.Int, nil - case "link.file.destination.change_time": - return reflect.Int, nil - case "link.file.destination.filesystem": - return reflect.String, nil - case "link.file.destination.gid": - return reflect.Int, nil - case "link.file.destination.group": - return reflect.String, nil - case "link.file.destination.in_upper_layer": - return reflect.Bool, nil - case "link.file.destination.inode": - return reflect.Int, nil - case "link.file.destination.mode": - return reflect.Int, nil - case "link.file.destination.modification_time": - return reflect.Int, nil - case "link.file.destination.mount_id": - return reflect.Int, nil - case "link.file.destination.name": - return reflect.String, nil - case "link.file.destination.name.length": - return reflect.Int, nil - case "link.file.destination.path": - return reflect.String, nil - case "link.file.destination.path.length": - return reflect.Int, nil - case "link.file.destination.rights": - return reflect.Int, nil - case "link.file.destination.uid": - return reflect.Int, nil - case "link.file.destination.user": - return reflect.String, nil - case "link.file.filesystem": - return reflect.String, nil - case "link.file.gid": - return reflect.Int, nil - case "link.file.group": - return reflect.String, nil - case "link.file.in_upper_layer": - return reflect.Bool, nil - case "link.file.inode": - return reflect.Int, nil - case "link.file.mode": - return reflect.Int, nil - case "link.file.modification_time": - return reflect.Int, nil - case "link.file.mount_id": - return reflect.Int, nil - case "link.file.name": - return reflect.String, nil - case "link.file.name.length": - return reflect.Int, nil - case "link.file.path": - return reflect.String, nil - case "link.file.path.length": - return reflect.Int, nil - case "link.file.rights": - return reflect.Int, nil - case "link.file.uid": - return reflect.Int, nil - case "link.file.user": - return reflect.String, nil - case "link.retval": - return reflect.Int, nil - case "load_module.file.change_time": - return reflect.Int, nil - case "load_module.file.filesystem": - return reflect.String, nil - case "load_module.file.gid": - return reflect.Int, nil - case "load_module.file.group": - return reflect.String, nil - case "load_module.file.in_upper_layer": - return reflect.Bool, nil - case "load_module.file.inode": - return reflect.Int, nil - case "load_module.file.mode": - return reflect.Int, nil - case "load_module.file.modification_time": - return reflect.Int, nil - case "load_module.file.mount_id": - return reflect.Int, nil - case "load_module.file.name": - return reflect.String, nil - case "load_module.file.name.length": - return reflect.Int, nil - case "load_module.file.path": - return reflect.String, nil - case "load_module.file.path.length": - return reflect.Int, nil - case "load_module.file.rights": - return reflect.Int, nil - case "load_module.file.uid": - return reflect.Int, nil - case "load_module.file.user": - return reflect.String, nil - case "load_module.loaded_from_memory": - return reflect.Bool, nil - case "load_module.name": - return reflect.String, nil - case "load_module.retval": - return reflect.Int, nil - case "mkdir.file.change_time": - return reflect.Int, nil - case "mkdir.file.destination.mode": - return reflect.Int, nil - case "mkdir.file.destination.rights": - return reflect.Int, nil - case "mkdir.file.filesystem": - return reflect.String, nil - case "mkdir.file.gid": - return reflect.Int, nil - case "mkdir.file.group": - return reflect.String, nil - case "mkdir.file.in_upper_layer": - return reflect.Bool, nil - case "mkdir.file.inode": - return reflect.Int, nil - case "mkdir.file.mode": - return reflect.Int, nil - case "mkdir.file.modification_time": - return reflect.Int, nil - case "mkdir.file.mount_id": - return reflect.Int, nil - case "mkdir.file.name": - return reflect.String, nil - case "mkdir.file.name.length": - return reflect.Int, nil - case "mkdir.file.path": - return reflect.String, nil - case "mkdir.file.path.length": - return reflect.Int, nil - case "mkdir.file.rights": - return reflect.Int, nil - case "mkdir.file.uid": - return reflect.Int, nil - case "mkdir.file.user": - return reflect.String, nil - case "mkdir.retval": - return reflect.Int, nil - case "mmap.file.change_time": - return reflect.Int, nil - case "mmap.file.filesystem": - return reflect.String, nil - case "mmap.file.gid": - return reflect.Int, nil - case "mmap.file.group": - return reflect.String, nil - case "mmap.file.in_upper_layer": - return reflect.Bool, nil - case "mmap.file.inode": - return reflect.Int, nil - case "mmap.file.mode": - return reflect.Int, nil - case "mmap.file.modification_time": - return reflect.Int, nil - case "mmap.file.mount_id": - return reflect.Int, nil - case "mmap.file.name": - return reflect.String, nil - case "mmap.file.name.length": - return reflect.Int, nil - case "mmap.file.path": - return reflect.String, nil - case "mmap.file.path.length": - return reflect.Int, nil - case "mmap.file.rights": - return reflect.Int, nil - case "mmap.file.uid": - return reflect.Int, nil - case "mmap.file.user": - return reflect.String, nil - case "mmap.flags": - return reflect.Int, nil - case "mmap.protection": - return reflect.Int, nil - case "mmap.retval": - return reflect.Int, nil - case "mprotect.req_protection": - return reflect.Int, nil - case "mprotect.retval": - return reflect.Int, nil - case "mprotect.vm_protection": - return reflect.Int, nil - case "network.destination.ip": - return reflect.Struct, nil - case "network.destination.port": - return reflect.Int, nil - case "network.device.ifindex": - return reflect.Int, nil - case "network.device.ifname": - return reflect.String, nil - case "network.l3_protocol": - return reflect.Int, nil - case "network.l4_protocol": - return reflect.Int, nil - case "network.size": - return reflect.Int, nil - case "network.source.ip": - return reflect.Struct, nil - case "network.source.port": - return reflect.Int, nil - case "open.file.change_time": - return reflect.Int, nil - case "open.file.destination.mode": - return reflect.Int, nil - case "open.file.filesystem": - return reflect.String, nil - case "open.file.gid": - return reflect.Int, nil - case "open.file.group": - return reflect.String, nil - case "open.file.in_upper_layer": - return reflect.Bool, nil - case "open.file.inode": - return reflect.Int, nil - case "open.file.mode": - return reflect.Int, nil - case "open.file.modification_time": - return reflect.Int, nil - case "open.file.mount_id": - return reflect.Int, nil - case "open.file.name": - return reflect.String, nil - case "open.file.name.length": - return reflect.Int, nil - case "open.file.path": - return reflect.String, nil - case "open.file.path.length": - return reflect.Int, nil - case "open.file.rights": - return reflect.Int, nil - case "open.file.uid": - return reflect.Int, nil - case "open.file.user": - return reflect.String, nil - case "open.flags": - return reflect.Int, nil - case "open.retval": - return reflect.Int, nil - case "process.ancestors.args": - return reflect.String, nil - case "process.ancestors.args_flags": - return reflect.String, nil - case "process.ancestors.args_options": - return reflect.String, nil - case "process.ancestors.args_truncated": - return reflect.Bool, nil - case "process.ancestors.argv": - return reflect.String, nil - case "process.ancestors.argv0": - return reflect.String, nil - case "process.ancestors.cap_effective": - return reflect.Int, nil - case "process.ancestors.cap_permitted": - return reflect.Int, nil - case "process.ancestors.comm": - return reflect.String, nil - case "process.ancestors.container.id": - return reflect.String, nil - case "process.ancestors.cookie": - return reflect.Int, nil - case "process.ancestors.created_at": - return reflect.Int, nil - case "process.ancestors.egid": - return reflect.Int, nil - case "process.ancestors.egroup": - return reflect.String, nil - case "process.ancestors.envp": - return reflect.String, nil - case "process.ancestors.envs": - return reflect.String, nil - case "process.ancestors.envs_truncated": - return reflect.Bool, nil - case "process.ancestors.euid": - return reflect.Int, nil - case "process.ancestors.euser": - return reflect.String, nil - case "process.ancestors.file.change_time": - return reflect.Int, nil - case "process.ancestors.file.filesystem": - return reflect.String, nil - case "process.ancestors.file.gid": - return reflect.Int, nil - case "process.ancestors.file.group": - return reflect.String, nil - case "process.ancestors.file.in_upper_layer": - return reflect.Bool, nil - case "process.ancestors.file.inode": - return reflect.Int, nil - case "process.ancestors.file.mode": - return reflect.Int, nil - case "process.ancestors.file.modification_time": - return reflect.Int, nil - case "process.ancestors.file.mount_id": - return reflect.Int, nil - case "process.ancestors.file.name": - return reflect.String, nil - case "process.ancestors.file.name.length": - return reflect.Int, nil - case "process.ancestors.file.path": - return reflect.String, nil - case "process.ancestors.file.path.length": - return reflect.Int, nil - case "process.ancestors.file.rights": - return reflect.Int, nil - case "process.ancestors.file.uid": - return reflect.Int, nil - case "process.ancestors.file.user": - return reflect.String, nil - case "process.ancestors.fsgid": - return reflect.Int, nil - case "process.ancestors.fsgroup": - return reflect.String, nil - case "process.ancestors.fsuid": - return reflect.Int, nil - case "process.ancestors.fsuser": - return reflect.String, nil - case "process.ancestors.gid": - return reflect.Int, nil - case "process.ancestors.group": - return reflect.String, nil - case "process.ancestors.interpreter.file.change_time": - return reflect.Int, nil - case "process.ancestors.interpreter.file.filesystem": - return reflect.String, nil - case "process.ancestors.interpreter.file.gid": - return reflect.Int, nil - case "process.ancestors.interpreter.file.group": - return reflect.String, nil - case "process.ancestors.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "process.ancestors.interpreter.file.inode": - return reflect.Int, nil - case "process.ancestors.interpreter.file.mode": - return reflect.Int, nil - case "process.ancestors.interpreter.file.modification_time": - return reflect.Int, nil - case "process.ancestors.interpreter.file.mount_id": - return reflect.Int, nil - case "process.ancestors.interpreter.file.name": - return reflect.String, nil - case "process.ancestors.interpreter.file.name.length": - return reflect.Int, nil - case "process.ancestors.interpreter.file.path": - return reflect.String, nil - case "process.ancestors.interpreter.file.path.length": - return reflect.Int, nil - case "process.ancestors.interpreter.file.rights": - return reflect.Int, nil - case "process.ancestors.interpreter.file.uid": - return reflect.Int, nil - case "process.ancestors.interpreter.file.user": - return reflect.String, nil - case "process.ancestors.is_kworker": - return reflect.Bool, nil - case "process.ancestors.is_thread": - return reflect.Bool, nil - case "process.ancestors.pid": - return reflect.Int, nil - case "process.ancestors.ppid": - return reflect.Int, nil - case "process.ancestors.tid": - return reflect.Int, nil - case "process.ancestors.tty_name": - return reflect.String, nil - case "process.ancestors.uid": - return reflect.Int, nil - case "process.ancestors.user": - return reflect.String, nil - case "process.args": - return reflect.String, nil - case "process.args_flags": - return reflect.String, nil - case "process.args_options": - return reflect.String, nil - case "process.args_truncated": - return reflect.Bool, nil - case "process.argv": - return reflect.String, nil - case "process.argv0": - return reflect.String, nil - case "process.cap_effective": - return reflect.Int, nil - case "process.cap_permitted": - return reflect.Int, nil - case "process.comm": - return reflect.String, nil - case "process.container.id": - return reflect.String, nil - case "process.cookie": - return reflect.Int, nil - case "process.created_at": - return reflect.Int, nil - case "process.egid": - return reflect.Int, nil - case "process.egroup": - return reflect.String, nil - case "process.envp": - return reflect.String, nil - case "process.envs": - return reflect.String, nil - case "process.envs_truncated": - return reflect.Bool, nil - case "process.euid": - return reflect.Int, nil - case "process.euser": - return reflect.String, nil - case "process.file.change_time": - return reflect.Int, nil - case "process.file.filesystem": - return reflect.String, nil - case "process.file.gid": - return reflect.Int, nil - case "process.file.group": - return reflect.String, nil - case "process.file.in_upper_layer": - return reflect.Bool, nil - case "process.file.inode": - return reflect.Int, nil - case "process.file.mode": - return reflect.Int, nil - case "process.file.modification_time": - return reflect.Int, nil - case "process.file.mount_id": - return reflect.Int, nil - case "process.file.name": - return reflect.String, nil - case "process.file.name.length": - return reflect.Int, nil - case "process.file.path": - return reflect.String, nil - case "process.file.path.length": - return reflect.Int, nil - case "process.file.rights": - return reflect.Int, nil - case "process.file.uid": - return reflect.Int, nil - case "process.file.user": - return reflect.String, nil - case "process.fsgid": - return reflect.Int, nil - case "process.fsgroup": - return reflect.String, nil - case "process.fsuid": - return reflect.Int, nil - case "process.fsuser": - return reflect.String, nil - case "process.gid": - return reflect.Int, nil - case "process.group": - return reflect.String, nil - case "process.interpreter.file.change_time": - return reflect.Int, nil - case "process.interpreter.file.filesystem": - return reflect.String, nil - case "process.interpreter.file.gid": - return reflect.Int, nil - case "process.interpreter.file.group": - return reflect.String, nil - case "process.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "process.interpreter.file.inode": - return reflect.Int, nil - case "process.interpreter.file.mode": - return reflect.Int, nil - case "process.interpreter.file.modification_time": - return reflect.Int, nil - case "process.interpreter.file.mount_id": - return reflect.Int, nil - case "process.interpreter.file.name": - return reflect.String, nil - case "process.interpreter.file.name.length": - return reflect.Int, nil - case "process.interpreter.file.path": - return reflect.String, nil - case "process.interpreter.file.path.length": - return reflect.Int, nil - case "process.interpreter.file.rights": - return reflect.Int, nil - case "process.interpreter.file.uid": - return reflect.Int, nil - case "process.interpreter.file.user": - return reflect.String, nil - case "process.is_kworker": - return reflect.Bool, nil - case "process.is_thread": - return reflect.Bool, nil - case "process.parent.args": - return reflect.String, nil - case "process.parent.args_flags": - return reflect.String, nil - case "process.parent.args_options": - return reflect.String, nil - case "process.parent.args_truncated": - return reflect.Bool, nil - case "process.parent.argv": - return reflect.String, nil - case "process.parent.argv0": - return reflect.String, nil - case "process.parent.cap_effective": - return reflect.Int, nil - case "process.parent.cap_permitted": - return reflect.Int, nil - case "process.parent.comm": - return reflect.String, nil - case "process.parent.container.id": - return reflect.String, nil - case "process.parent.cookie": - return reflect.Int, nil - case "process.parent.created_at": - return reflect.Int, nil - case "process.parent.egid": - return reflect.Int, nil - case "process.parent.egroup": - return reflect.String, nil - case "process.parent.envp": - return reflect.String, nil - case "process.parent.envs": - return reflect.String, nil - case "process.parent.envs_truncated": - return reflect.Bool, nil - case "process.parent.euid": - return reflect.Int, nil - case "process.parent.euser": - return reflect.String, nil - case "process.parent.file.change_time": - return reflect.Int, nil - case "process.parent.file.filesystem": - return reflect.String, nil - case "process.parent.file.gid": - return reflect.Int, nil - case "process.parent.file.group": - return reflect.String, nil - case "process.parent.file.in_upper_layer": - return reflect.Bool, nil - case "process.parent.file.inode": - return reflect.Int, nil - case "process.parent.file.mode": - return reflect.Int, nil - case "process.parent.file.modification_time": - return reflect.Int, nil - case "process.parent.file.mount_id": - return reflect.Int, nil - case "process.parent.file.name": - return reflect.String, nil - case "process.parent.file.name.length": - return reflect.Int, nil - case "process.parent.file.path": - return reflect.String, nil - case "process.parent.file.path.length": - return reflect.Int, nil - case "process.parent.file.rights": - return reflect.Int, nil - case "process.parent.file.uid": - return reflect.Int, nil - case "process.parent.file.user": - return reflect.String, nil - case "process.parent.fsgid": - return reflect.Int, nil - case "process.parent.fsgroup": - return reflect.String, nil - case "process.parent.fsuid": - return reflect.Int, nil - case "process.parent.fsuser": - return reflect.String, nil - case "process.parent.gid": - return reflect.Int, nil - case "process.parent.group": - return reflect.String, nil - case "process.parent.interpreter.file.change_time": - return reflect.Int, nil - case "process.parent.interpreter.file.filesystem": - return reflect.String, nil - case "process.parent.interpreter.file.gid": - return reflect.Int, nil - case "process.parent.interpreter.file.group": - return reflect.String, nil - case "process.parent.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "process.parent.interpreter.file.inode": - return reflect.Int, nil - case "process.parent.interpreter.file.mode": - return reflect.Int, nil - case "process.parent.interpreter.file.modification_time": - return reflect.Int, nil - case "process.parent.interpreter.file.mount_id": - return reflect.Int, nil - case "process.parent.interpreter.file.name": - return reflect.String, nil - case "process.parent.interpreter.file.name.length": - return reflect.Int, nil - case "process.parent.interpreter.file.path": - return reflect.String, nil - case "process.parent.interpreter.file.path.length": - return reflect.Int, nil - case "process.parent.interpreter.file.rights": - return reflect.Int, nil - case "process.parent.interpreter.file.uid": - return reflect.Int, nil - case "process.parent.interpreter.file.user": - return reflect.String, nil - case "process.parent.is_kworker": - return reflect.Bool, nil - case "process.parent.is_thread": - return reflect.Bool, nil - case "process.parent.pid": - return reflect.Int, nil - case "process.parent.ppid": - return reflect.Int, nil - case "process.parent.tid": - return reflect.Int, nil - case "process.parent.tty_name": - return reflect.String, nil - case "process.parent.uid": - return reflect.Int, nil - case "process.parent.user": - return reflect.String, nil - case "process.pid": - return reflect.Int, nil - case "process.ppid": - return reflect.Int, nil - case "process.tid": - return reflect.Int, nil - case "process.tty_name": - return reflect.String, nil - case "process.uid": - return reflect.Int, nil - case "process.user": - return reflect.String, nil - case "ptrace.request": - return reflect.Int, nil - case "ptrace.retval": - return reflect.Int, nil - case "ptrace.tracee.ancestors.args": - return reflect.String, nil - case "ptrace.tracee.ancestors.args_flags": - return reflect.String, nil - case "ptrace.tracee.ancestors.args_options": - return reflect.String, nil - case "ptrace.tracee.ancestors.args_truncated": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.argv": - return reflect.String, nil - case "ptrace.tracee.ancestors.argv0": - return reflect.String, nil - case "ptrace.tracee.ancestors.cap_effective": - return reflect.Int, nil - case "ptrace.tracee.ancestors.cap_permitted": - return reflect.Int, nil - case "ptrace.tracee.ancestors.comm": - return reflect.String, nil - case "ptrace.tracee.ancestors.container.id": - return reflect.String, nil - case "ptrace.tracee.ancestors.cookie": - return reflect.Int, nil - case "ptrace.tracee.ancestors.created_at": - return reflect.Int, nil - case "ptrace.tracee.ancestors.egid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.egroup": - return reflect.String, nil - case "ptrace.tracee.ancestors.envp": - return reflect.String, nil - case "ptrace.tracee.ancestors.envs": - return reflect.String, nil - case "ptrace.tracee.ancestors.envs_truncated": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.euid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.euser": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.gid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.group": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.file.inode": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.mode": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.name": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.path": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.rights": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.uid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.user": - return reflect.String, nil - case "ptrace.tracee.ancestors.fsgid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.fsgroup": - return reflect.String, nil - case "ptrace.tracee.ancestors.fsuid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.fsuser": - return reflect.String, nil - case "ptrace.tracee.ancestors.gid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.group": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.group": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.name": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.path": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.rights": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.user": - return reflect.String, nil - case "ptrace.tracee.ancestors.is_kworker": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.is_thread": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.pid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.ppid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.tid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.tty_name": - return reflect.String, nil - case "ptrace.tracee.ancestors.uid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.user": - return reflect.String, nil - case "ptrace.tracee.args": - return reflect.String, nil - case "ptrace.tracee.args_flags": - return reflect.String, nil - case "ptrace.tracee.args_options": - return reflect.String, nil - case "ptrace.tracee.args_truncated": - return reflect.Bool, nil - case "ptrace.tracee.argv": - return reflect.String, nil - case "ptrace.tracee.argv0": - return reflect.String, nil - case "ptrace.tracee.cap_effective": - return reflect.Int, nil - case "ptrace.tracee.cap_permitted": - return reflect.Int, nil - case "ptrace.tracee.comm": - return reflect.String, nil - case "ptrace.tracee.container.id": - return reflect.String, nil - case "ptrace.tracee.cookie": - return reflect.Int, nil - case "ptrace.tracee.created_at": - return reflect.Int, nil - case "ptrace.tracee.egid": - return reflect.Int, nil - case "ptrace.tracee.egroup": - return reflect.String, nil - case "ptrace.tracee.envp": - return reflect.String, nil - case "ptrace.tracee.envs": - return reflect.String, nil - case "ptrace.tracee.envs_truncated": - return reflect.Bool, nil - case "ptrace.tracee.euid": - return reflect.Int, nil - case "ptrace.tracee.euser": - return reflect.String, nil - case "ptrace.tracee.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.file.gid": - return reflect.Int, nil - case "ptrace.tracee.file.group": - return reflect.String, nil - case "ptrace.tracee.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.file.inode": - return reflect.Int, nil - case "ptrace.tracee.file.mode": - return reflect.Int, nil - case "ptrace.tracee.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.file.name": - return reflect.String, nil - case "ptrace.tracee.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.file.path": - return reflect.String, nil - case "ptrace.tracee.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.file.rights": - return reflect.Int, nil - case "ptrace.tracee.file.uid": - return reflect.Int, nil - case "ptrace.tracee.file.user": - return reflect.String, nil - case "ptrace.tracee.fsgid": - return reflect.Int, nil - case "ptrace.tracee.fsgroup": - return reflect.String, nil - case "ptrace.tracee.fsuid": - return reflect.Int, nil - case "ptrace.tracee.fsuser": - return reflect.String, nil - case "ptrace.tracee.gid": - return reflect.Int, nil - case "ptrace.tracee.group": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.gid": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.group": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.interpreter.file.inode": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.mode": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.name": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.path": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.rights": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.uid": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.user": - return reflect.String, nil - case "ptrace.tracee.is_kworker": - return reflect.Bool, nil - case "ptrace.tracee.is_thread": - return reflect.Bool, nil - case "ptrace.tracee.parent.args": - return reflect.String, nil - case "ptrace.tracee.parent.args_flags": - return reflect.String, nil - case "ptrace.tracee.parent.args_options": - return reflect.String, nil - case "ptrace.tracee.parent.args_truncated": - return reflect.Bool, nil - case "ptrace.tracee.parent.argv": - return reflect.String, nil - case "ptrace.tracee.parent.argv0": - return reflect.String, nil - case "ptrace.tracee.parent.cap_effective": - return reflect.Int, nil - case "ptrace.tracee.parent.cap_permitted": - return reflect.Int, nil - case "ptrace.tracee.parent.comm": - return reflect.String, nil - case "ptrace.tracee.parent.container.id": - return reflect.String, nil - case "ptrace.tracee.parent.cookie": - return reflect.Int, nil - case "ptrace.tracee.parent.created_at": - return reflect.Int, nil - case "ptrace.tracee.parent.egid": - return reflect.Int, nil - case "ptrace.tracee.parent.egroup": - return reflect.String, nil - case "ptrace.tracee.parent.envp": - return reflect.String, nil - case "ptrace.tracee.parent.envs": - return reflect.String, nil - case "ptrace.tracee.parent.envs_truncated": - return reflect.Bool, nil - case "ptrace.tracee.parent.euid": - return reflect.Int, nil - case "ptrace.tracee.parent.euser": - return reflect.String, nil - case "ptrace.tracee.parent.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.parent.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.parent.file.gid": - return reflect.Int, nil - case "ptrace.tracee.parent.file.group": - return reflect.String, nil - case "ptrace.tracee.parent.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.parent.file.inode": - return reflect.Int, nil - case "ptrace.tracee.parent.file.mode": - return reflect.Int, nil - case "ptrace.tracee.parent.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.parent.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.parent.file.name": - return reflect.String, nil - case "ptrace.tracee.parent.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.parent.file.path": - return reflect.String, nil - case "ptrace.tracee.parent.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.parent.file.rights": - return reflect.Int, nil - case "ptrace.tracee.parent.file.uid": - return reflect.Int, nil - case "ptrace.tracee.parent.file.user": - return reflect.String, nil - case "ptrace.tracee.parent.fsgid": - return reflect.Int, nil - case "ptrace.tracee.parent.fsgroup": - return reflect.String, nil - case "ptrace.tracee.parent.fsuid": - return reflect.Int, nil - case "ptrace.tracee.parent.fsuser": - return reflect.String, nil - case "ptrace.tracee.parent.gid": - return reflect.Int, nil - case "ptrace.tracee.parent.group": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.gid": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.group": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.parent.interpreter.file.inode": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.mode": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.name": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.path": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.rights": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.uid": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.user": - return reflect.String, nil - case "ptrace.tracee.parent.is_kworker": - return reflect.Bool, nil - case "ptrace.tracee.parent.is_thread": - return reflect.Bool, nil - case "ptrace.tracee.parent.pid": - return reflect.Int, nil - case "ptrace.tracee.parent.ppid": - return reflect.Int, nil - case "ptrace.tracee.parent.tid": - return reflect.Int, nil - case "ptrace.tracee.parent.tty_name": - return reflect.String, nil - case "ptrace.tracee.parent.uid": - return reflect.Int, nil - case "ptrace.tracee.parent.user": - return reflect.String, nil - case "ptrace.tracee.pid": - return reflect.Int, nil - case "ptrace.tracee.ppid": - return reflect.Int, nil - case "ptrace.tracee.tid": - return reflect.Int, nil - case "ptrace.tracee.tty_name": - return reflect.String, nil - case "ptrace.tracee.uid": - return reflect.Int, nil - case "ptrace.tracee.user": - return reflect.String, nil - case "removexattr.file.change_time": - return reflect.Int, nil - case "removexattr.file.destination.name": - return reflect.String, nil - case "removexattr.file.destination.namespace": - return reflect.String, nil - case "removexattr.file.filesystem": - return reflect.String, nil - case "removexattr.file.gid": - return reflect.Int, nil - case "removexattr.file.group": - return reflect.String, nil - case "removexattr.file.in_upper_layer": - return reflect.Bool, nil - case "removexattr.file.inode": - return reflect.Int, nil - case "removexattr.file.mode": - return reflect.Int, nil - case "removexattr.file.modification_time": - return reflect.Int, nil - case "removexattr.file.mount_id": - return reflect.Int, nil - case "removexattr.file.name": - return reflect.String, nil - case "removexattr.file.name.length": - return reflect.Int, nil - case "removexattr.file.path": - return reflect.String, nil - case "removexattr.file.path.length": - return reflect.Int, nil - case "removexattr.file.rights": - return reflect.Int, nil - case "removexattr.file.uid": - return reflect.Int, nil - case "removexattr.file.user": - return reflect.String, nil - case "removexattr.retval": - return reflect.Int, nil - case "rename.file.change_time": - return reflect.Int, nil - case "rename.file.destination.change_time": - return reflect.Int, nil - case "rename.file.destination.filesystem": - return reflect.String, nil - case "rename.file.destination.gid": - return reflect.Int, nil - case "rename.file.destination.group": - return reflect.String, nil - case "rename.file.destination.in_upper_layer": - return reflect.Bool, nil - case "rename.file.destination.inode": - return reflect.Int, nil - case "rename.file.destination.mode": - return reflect.Int, nil - case "rename.file.destination.modification_time": - return reflect.Int, nil - case "rename.file.destination.mount_id": - return reflect.Int, nil - case "rename.file.destination.name": - return reflect.String, nil - case "rename.file.destination.name.length": - return reflect.Int, nil - case "rename.file.destination.path": - return reflect.String, nil - case "rename.file.destination.path.length": - return reflect.Int, nil - case "rename.file.destination.rights": - return reflect.Int, nil - case "rename.file.destination.uid": - return reflect.Int, nil - case "rename.file.destination.user": - return reflect.String, nil - case "rename.file.filesystem": - return reflect.String, nil - case "rename.file.gid": - return reflect.Int, nil - case "rename.file.group": - return reflect.String, nil - case "rename.file.in_upper_layer": - return reflect.Bool, nil - case "rename.file.inode": - return reflect.Int, nil - case "rename.file.mode": - return reflect.Int, nil - case "rename.file.modification_time": - return reflect.Int, nil - case "rename.file.mount_id": - return reflect.Int, nil - case "rename.file.name": - return reflect.String, nil - case "rename.file.name.length": - return reflect.Int, nil - case "rename.file.path": - return reflect.String, nil - case "rename.file.path.length": - return reflect.Int, nil - case "rename.file.rights": - return reflect.Int, nil - case "rename.file.uid": - return reflect.Int, nil - case "rename.file.user": - return reflect.String, nil - case "rename.retval": - return reflect.Int, nil - case "rmdir.file.change_time": - return reflect.Int, nil - case "rmdir.file.filesystem": - return reflect.String, nil - case "rmdir.file.gid": - return reflect.Int, nil - case "rmdir.file.group": - return reflect.String, nil - case "rmdir.file.in_upper_layer": - return reflect.Bool, nil - case "rmdir.file.inode": - return reflect.Int, nil - case "rmdir.file.mode": - return reflect.Int, nil - case "rmdir.file.modification_time": - return reflect.Int, nil - case "rmdir.file.mount_id": - return reflect.Int, nil - case "rmdir.file.name": - return reflect.String, nil - case "rmdir.file.name.length": - return reflect.Int, nil - case "rmdir.file.path": - return reflect.String, nil - case "rmdir.file.path.length": - return reflect.Int, nil - case "rmdir.file.rights": - return reflect.Int, nil - case "rmdir.file.uid": - return reflect.Int, nil - case "rmdir.file.user": - return reflect.String, nil - case "rmdir.retval": - return reflect.Int, nil - case "selinux.bool.name": - return reflect.String, nil - case "selinux.bool.state": - return reflect.String, nil - case "selinux.bool_commit.state": - return reflect.Bool, nil - case "selinux.enforce.status": - return reflect.String, nil - case "setgid.egid": - return reflect.Int, nil - case "setgid.egroup": - return reflect.String, nil - case "setgid.fsgid": - return reflect.Int, nil - case "setgid.fsgroup": - return reflect.String, nil - case "setgid.gid": - return reflect.Int, nil - case "setgid.group": - return reflect.String, nil - case "setuid.euid": - return reflect.Int, nil - case "setuid.euser": - return reflect.String, nil - case "setuid.fsuid": - return reflect.Int, nil - case "setuid.fsuser": - return reflect.String, nil - case "setuid.uid": - return reflect.Int, nil - case "setuid.user": - return reflect.String, nil - case "setxattr.file.change_time": - return reflect.Int, nil - case "setxattr.file.destination.name": - return reflect.String, nil - case "setxattr.file.destination.namespace": - return reflect.String, nil - case "setxattr.file.filesystem": - return reflect.String, nil - case "setxattr.file.gid": - return reflect.Int, nil - case "setxattr.file.group": - return reflect.String, nil - case "setxattr.file.in_upper_layer": - return reflect.Bool, nil - case "setxattr.file.inode": - return reflect.Int, nil - case "setxattr.file.mode": - return reflect.Int, nil - case "setxattr.file.modification_time": - return reflect.Int, nil - case "setxattr.file.mount_id": - return reflect.Int, nil - case "setxattr.file.name": - return reflect.String, nil - case "setxattr.file.name.length": - return reflect.Int, nil - case "setxattr.file.path": - return reflect.String, nil - case "setxattr.file.path.length": - return reflect.Int, nil - case "setxattr.file.rights": - return reflect.Int, nil - case "setxattr.file.uid": - return reflect.Int, nil - case "setxattr.file.user": - return reflect.String, nil - case "setxattr.retval": - return reflect.Int, nil - case "signal.pid": - return reflect.Int, nil - case "signal.retval": - return reflect.Int, nil - case "signal.target.ancestors.args": - return reflect.String, nil - case "signal.target.ancestors.args_flags": - return reflect.String, nil - case "signal.target.ancestors.args_options": - return reflect.String, nil - case "signal.target.ancestors.args_truncated": - return reflect.Bool, nil - case "signal.target.ancestors.argv": - return reflect.String, nil - case "signal.target.ancestors.argv0": - return reflect.String, nil - case "signal.target.ancestors.cap_effective": - return reflect.Int, nil - case "signal.target.ancestors.cap_permitted": - return reflect.Int, nil - case "signal.target.ancestors.comm": - return reflect.String, nil - case "signal.target.ancestors.container.id": - return reflect.String, nil - case "signal.target.ancestors.cookie": - return reflect.Int, nil - case "signal.target.ancestors.created_at": - return reflect.Int, nil - case "signal.target.ancestors.egid": - return reflect.Int, nil - case "signal.target.ancestors.egroup": - return reflect.String, nil - case "signal.target.ancestors.envp": - return reflect.String, nil - case "signal.target.ancestors.envs": - return reflect.String, nil - case "signal.target.ancestors.envs_truncated": - return reflect.Bool, nil - case "signal.target.ancestors.euid": - return reflect.Int, nil - case "signal.target.ancestors.euser": - return reflect.String, nil - case "signal.target.ancestors.file.change_time": - return reflect.Int, nil - case "signal.target.ancestors.file.filesystem": - return reflect.String, nil - case "signal.target.ancestors.file.gid": - return reflect.Int, nil - case "signal.target.ancestors.file.group": - return reflect.String, nil - case "signal.target.ancestors.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.ancestors.file.inode": - return reflect.Int, nil - case "signal.target.ancestors.file.mode": - return reflect.Int, nil - case "signal.target.ancestors.file.modification_time": - return reflect.Int, nil - case "signal.target.ancestors.file.mount_id": - return reflect.Int, nil - case "signal.target.ancestors.file.name": - return reflect.String, nil - case "signal.target.ancestors.file.name.length": - return reflect.Int, nil - case "signal.target.ancestors.file.path": - return reflect.String, nil - case "signal.target.ancestors.file.path.length": - return reflect.Int, nil - case "signal.target.ancestors.file.rights": - return reflect.Int, nil - case "signal.target.ancestors.file.uid": - return reflect.Int, nil - case "signal.target.ancestors.file.user": - return reflect.String, nil - case "signal.target.ancestors.fsgid": - return reflect.Int, nil - case "signal.target.ancestors.fsgroup": - return reflect.String, nil - case "signal.target.ancestors.fsuid": - return reflect.Int, nil - case "signal.target.ancestors.fsuser": - return reflect.String, nil - case "signal.target.ancestors.gid": - return reflect.Int, nil - case "signal.target.ancestors.group": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.change_time": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.filesystem": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.gid": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.group": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.ancestors.interpreter.file.inode": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.mode": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.modification_time": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.mount_id": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.name": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.name.length": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.path": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.path.length": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.rights": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.uid": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.user": - return reflect.String, nil - case "signal.target.ancestors.is_kworker": - return reflect.Bool, nil - case "signal.target.ancestors.is_thread": - return reflect.Bool, nil - case "signal.target.ancestors.pid": - return reflect.Int, nil - case "signal.target.ancestors.ppid": - return reflect.Int, nil - case "signal.target.ancestors.tid": - return reflect.Int, nil - case "signal.target.ancestors.tty_name": - return reflect.String, nil - case "signal.target.ancestors.uid": - return reflect.Int, nil - case "signal.target.ancestors.user": - return reflect.String, nil - case "signal.target.args": - return reflect.String, nil - case "signal.target.args_flags": - return reflect.String, nil - case "signal.target.args_options": - return reflect.String, nil - case "signal.target.args_truncated": - return reflect.Bool, nil - case "signal.target.argv": - return reflect.String, nil - case "signal.target.argv0": - return reflect.String, nil - case "signal.target.cap_effective": - return reflect.Int, nil - case "signal.target.cap_permitted": - return reflect.Int, nil - case "signal.target.comm": - return reflect.String, nil - case "signal.target.container.id": - return reflect.String, nil - case "signal.target.cookie": - return reflect.Int, nil - case "signal.target.created_at": - return reflect.Int, nil - case "signal.target.egid": - return reflect.Int, nil - case "signal.target.egroup": - return reflect.String, nil - case "signal.target.envp": - return reflect.String, nil - case "signal.target.envs": - return reflect.String, nil - case "signal.target.envs_truncated": - return reflect.Bool, nil - case "signal.target.euid": - return reflect.Int, nil - case "signal.target.euser": - return reflect.String, nil - case "signal.target.file.change_time": - return reflect.Int, nil - case "signal.target.file.filesystem": - return reflect.String, nil - case "signal.target.file.gid": - return reflect.Int, nil - case "signal.target.file.group": - return reflect.String, nil - case "signal.target.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.file.inode": - return reflect.Int, nil - case "signal.target.file.mode": - return reflect.Int, nil - case "signal.target.file.modification_time": - return reflect.Int, nil - case "signal.target.file.mount_id": - return reflect.Int, nil - case "signal.target.file.name": - return reflect.String, nil - case "signal.target.file.name.length": - return reflect.Int, nil - case "signal.target.file.path": - return reflect.String, nil - case "signal.target.file.path.length": - return reflect.Int, nil - case "signal.target.file.rights": - return reflect.Int, nil - case "signal.target.file.uid": - return reflect.Int, nil - case "signal.target.file.user": - return reflect.String, nil - case "signal.target.fsgid": - return reflect.Int, nil - case "signal.target.fsgroup": - return reflect.String, nil - case "signal.target.fsuid": - return reflect.Int, nil - case "signal.target.fsuser": - return reflect.String, nil - case "signal.target.gid": - return reflect.Int, nil - case "signal.target.group": - return reflect.String, nil - case "signal.target.interpreter.file.change_time": - return reflect.Int, nil - case "signal.target.interpreter.file.filesystem": - return reflect.String, nil - case "signal.target.interpreter.file.gid": - return reflect.Int, nil - case "signal.target.interpreter.file.group": - return reflect.String, nil - case "signal.target.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.interpreter.file.inode": - return reflect.Int, nil - case "signal.target.interpreter.file.mode": - return reflect.Int, nil - case "signal.target.interpreter.file.modification_time": - return reflect.Int, nil - case "signal.target.interpreter.file.mount_id": - return reflect.Int, nil - case "signal.target.interpreter.file.name": - return reflect.String, nil - case "signal.target.interpreter.file.name.length": - return reflect.Int, nil - case "signal.target.interpreter.file.path": - return reflect.String, nil - case "signal.target.interpreter.file.path.length": - return reflect.Int, nil - case "signal.target.interpreter.file.rights": - return reflect.Int, nil - case "signal.target.interpreter.file.uid": - return reflect.Int, nil - case "signal.target.interpreter.file.user": - return reflect.String, nil - case "signal.target.is_kworker": - return reflect.Bool, nil - case "signal.target.is_thread": - return reflect.Bool, nil - case "signal.target.parent.args": - return reflect.String, nil - case "signal.target.parent.args_flags": - return reflect.String, nil - case "signal.target.parent.args_options": - return reflect.String, nil - case "signal.target.parent.args_truncated": - return reflect.Bool, nil - case "signal.target.parent.argv": - return reflect.String, nil - case "signal.target.parent.argv0": - return reflect.String, nil - case "signal.target.parent.cap_effective": - return reflect.Int, nil - case "signal.target.parent.cap_permitted": - return reflect.Int, nil - case "signal.target.parent.comm": - return reflect.String, nil - case "signal.target.parent.container.id": - return reflect.String, nil - case "signal.target.parent.cookie": - return reflect.Int, nil - case "signal.target.parent.created_at": - return reflect.Int, nil - case "signal.target.parent.egid": - return reflect.Int, nil - case "signal.target.parent.egroup": - return reflect.String, nil - case "signal.target.parent.envp": - return reflect.String, nil - case "signal.target.parent.envs": - return reflect.String, nil - case "signal.target.parent.envs_truncated": - return reflect.Bool, nil - case "signal.target.parent.euid": - return reflect.Int, nil - case "signal.target.parent.euser": - return reflect.String, nil - case "signal.target.parent.file.change_time": - return reflect.Int, nil - case "signal.target.parent.file.filesystem": - return reflect.String, nil - case "signal.target.parent.file.gid": - return reflect.Int, nil - case "signal.target.parent.file.group": - return reflect.String, nil - case "signal.target.parent.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.parent.file.inode": - return reflect.Int, nil - case "signal.target.parent.file.mode": - return reflect.Int, nil - case "signal.target.parent.file.modification_time": - return reflect.Int, nil - case "signal.target.parent.file.mount_id": - return reflect.Int, nil - case "signal.target.parent.file.name": - return reflect.String, nil - case "signal.target.parent.file.name.length": - return reflect.Int, nil - case "signal.target.parent.file.path": - return reflect.String, nil - case "signal.target.parent.file.path.length": - return reflect.Int, nil - case "signal.target.parent.file.rights": - return reflect.Int, nil - case "signal.target.parent.file.uid": - return reflect.Int, nil - case "signal.target.parent.file.user": - return reflect.String, nil - case "signal.target.parent.fsgid": - return reflect.Int, nil - case "signal.target.parent.fsgroup": - return reflect.String, nil - case "signal.target.parent.fsuid": - return reflect.Int, nil - case "signal.target.parent.fsuser": - return reflect.String, nil - case "signal.target.parent.gid": - return reflect.Int, nil - case "signal.target.parent.group": - return reflect.String, nil - case "signal.target.parent.interpreter.file.change_time": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.filesystem": - return reflect.String, nil - case "signal.target.parent.interpreter.file.gid": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.group": - return reflect.String, nil - case "signal.target.parent.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.parent.interpreter.file.inode": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.mode": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.modification_time": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.mount_id": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.name": - return reflect.String, nil - case "signal.target.parent.interpreter.file.name.length": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.path": - return reflect.String, nil - case "signal.target.parent.interpreter.file.path.length": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.rights": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.uid": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.user": - return reflect.String, nil - case "signal.target.parent.is_kworker": - return reflect.Bool, nil - case "signal.target.parent.is_thread": - return reflect.Bool, nil - case "signal.target.parent.pid": - return reflect.Int, nil - case "signal.target.parent.ppid": - return reflect.Int, nil - case "signal.target.parent.tid": - return reflect.Int, nil - case "signal.target.parent.tty_name": - return reflect.String, nil - case "signal.target.parent.uid": - return reflect.Int, nil - case "signal.target.parent.user": - return reflect.String, nil - case "signal.target.pid": - return reflect.Int, nil - case "signal.target.ppid": - return reflect.Int, nil - case "signal.target.tid": - return reflect.Int, nil - case "signal.target.tty_name": - return reflect.String, nil - case "signal.target.uid": - return reflect.Int, nil - case "signal.target.user": - return reflect.String, nil - case "signal.type": - return reflect.Int, nil - case "splice.file.change_time": - return reflect.Int, nil - case "splice.file.filesystem": - return reflect.String, nil - case "splice.file.gid": - return reflect.Int, nil - case "splice.file.group": - return reflect.String, nil - case "splice.file.in_upper_layer": - return reflect.Bool, nil - case "splice.file.inode": - return reflect.Int, nil - case "splice.file.mode": - return reflect.Int, nil - case "splice.file.modification_time": - return reflect.Int, nil - case "splice.file.mount_id": - return reflect.Int, nil - case "splice.file.name": - return reflect.String, nil - case "splice.file.name.length": - return reflect.Int, nil - case "splice.file.path": - return reflect.String, nil - case "splice.file.path.length": - return reflect.Int, nil - case "splice.file.rights": - return reflect.Int, nil - case "splice.file.uid": - return reflect.Int, nil - case "splice.file.user": - return reflect.String, nil - case "splice.pipe_entry_flag": - return reflect.Int, nil - case "splice.pipe_exit_flag": - return reflect.Int, nil - case "splice.retval": - return reflect.Int, nil - case "unlink.file.change_time": - return reflect.Int, nil - case "unlink.file.filesystem": - return reflect.String, nil - case "unlink.file.gid": - return reflect.Int, nil - case "unlink.file.group": - return reflect.String, nil - case "unlink.file.in_upper_layer": - return reflect.Bool, nil - case "unlink.file.inode": - return reflect.Int, nil - case "unlink.file.mode": - return reflect.Int, nil - case "unlink.file.modification_time": - return reflect.Int, nil - case "unlink.file.mount_id": - return reflect.Int, nil - case "unlink.file.name": - return reflect.String, nil - case "unlink.file.name.length": - return reflect.Int, nil - case "unlink.file.path": - return reflect.String, nil - case "unlink.file.path.length": - return reflect.Int, nil - case "unlink.file.rights": - return reflect.Int, nil - case "unlink.file.uid": - return reflect.Int, nil - case "unlink.file.user": - return reflect.String, nil - case "unlink.flags": - return reflect.Int, nil - case "unlink.retval": - return reflect.Int, nil - case "unload_module.name": - return reflect.String, nil - case "unload_module.retval": - return reflect.Int, nil - case "utimes.file.change_time": - return reflect.Int, nil - case "utimes.file.filesystem": - return reflect.String, nil - case "utimes.file.gid": - return reflect.Int, nil - case "utimes.file.group": - return reflect.String, nil - case "utimes.file.in_upper_layer": - return reflect.Bool, nil - case "utimes.file.inode": - return reflect.Int, nil - case "utimes.file.mode": - return reflect.Int, nil - case "utimes.file.modification_time": - return reflect.Int, nil - case "utimes.file.mount_id": - return reflect.Int, nil - case "utimes.file.name": - return reflect.String, nil - case "utimes.file.name.length": - return reflect.Int, nil - case "utimes.file.path": - return reflect.String, nil - case "utimes.file.path.length": - return reflect.Int, nil - case "utimes.file.rights": - return reflect.Int, nil - case "utimes.file.uid": - return reflect.Int, nil - case "utimes.file.user": - return reflect.String, nil - case "utimes.retval": - return reflect.Int, nil - } - return reflect.Invalid, &eval.ErrFieldNotFound{Field: field} -} -func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { - switch field { - case "async": - var ok bool - if e.Async, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Async"} - } - return nil - case "bind.addr.family": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Bind.AddrFamily"} - } - e.Bind.AddrFamily = uint16(v) - return nil - case "bind.addr.ip": - v, ok := value.(net.IPNet) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Bind.Addr.IPNet"} - } - e.Bind.Addr.IPNet = v - return nil - case "bind.addr.port": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Bind.Addr.Port"} - } - e.Bind.Addr.Port = uint16(v) - return nil - case "bind.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Bind.SyscallEvent.Retval"} - } - e.Bind.SyscallEvent.Retval = int64(v) - return nil - case "bpf.cmd": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Cmd"} - } - e.BPF.Cmd = uint32(v) - return nil - case "bpf.map.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Map.Name"} - } - e.BPF.Map.Name = str - return nil - case "bpf.map.type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Map.Type"} - } - e.BPF.Map.Type = uint32(v) - return nil - case "bpf.prog.attach_type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.AttachType"} - } - e.BPF.Program.AttachType = uint32(v) - return nil - case "bpf.prog.helpers": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Helpers"} - } - e.BPF.Program.Helpers = append(e.BPF.Program.Helpers, uint32(v)) - return nil - case "bpf.prog.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Name"} - } - e.BPF.Program.Name = str - return nil - case "bpf.prog.tag": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Tag"} - } - e.BPF.Program.Tag = str - return nil - case "bpf.prog.type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Type"} - } - e.BPF.Program.Type = uint32(v) - return nil - case "bpf.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.SyscallEvent.Retval"} - } - e.BPF.SyscallEvent.Retval = int64(v) - return nil - case "capset.cap_effective": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Capset.CapEffective"} - } - e.Capset.CapEffective = uint64(v) - return nil - case "capset.cap_permitted": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Capset.CapPermitted"} - } - e.Capset.CapPermitted = uint64(v) - return nil - case "chmod.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.CTime"} - } - e.Chmod.File.FileFields.CTime = uint64(v) - return nil - case "chmod.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.Mode"} - } - e.Chmod.Mode = uint32(v) - return nil - case "chmod.file.destination.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.Mode"} - } - e.Chmod.Mode = uint32(v) - return nil - case "chmod.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.Filesystem"} - } - e.Chmod.File.Filesystem = str - return nil - case "chmod.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.GID"} - } - e.Chmod.File.FileFields.GID = uint32(v) - return nil - case "chmod.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Group"} - } - e.Chmod.File.FileFields.Group = str - return nil - case "chmod.file.in_upper_layer": - var ok bool - if e.Chmod.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.InUpperLayer"} - } - return nil - case "chmod.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Inode"} - } - e.Chmod.File.FileFields.Inode = uint64(v) - return nil - case "chmod.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Mode"} - } - e.Chmod.File.FileFields.Mode = uint16(v) - return nil - case "chmod.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.MTime"} - } - e.Chmod.File.FileFields.MTime = uint64(v) - return nil - case "chmod.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.MountID"} - } - e.Chmod.File.FileFields.MountID = uint32(v) - return nil - case "chmod.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.BasenameStr"} - } - e.Chmod.File.BasenameStr = str - return nil - case "chmod.file.name.length": - return &eval.ErrFieldReadOnly{Field: "chmod.file.name.length"} - case "chmod.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.PathnameStr"} - } - e.Chmod.File.PathnameStr = str - return nil - case "chmod.file.path.length": - return &eval.ErrFieldReadOnly{Field: "chmod.file.path.length"} - case "chmod.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Mode"} - } - e.Chmod.File.FileFields.Mode = uint16(v) - return nil - case "chmod.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.UID"} - } - e.Chmod.File.FileFields.UID = uint32(v) - return nil - case "chmod.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.User"} - } - e.Chmod.File.FileFields.User = str - return nil - case "chmod.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.SyscallEvent.Retval"} - } - e.Chmod.SyscallEvent.Retval = int64(v) - return nil - case "chown.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.CTime"} - } - e.Chown.File.FileFields.CTime = uint64(v) - return nil - case "chown.file.destination.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.GID"} - } - e.Chown.GID = int64(v) - return nil - case "chown.file.destination.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.Group"} - } - e.Chown.Group = str - return nil - case "chown.file.destination.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.UID"} - } - e.Chown.UID = int64(v) - return nil - case "chown.file.destination.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.User"} - } - e.Chown.User = str - return nil - case "chown.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.Filesystem"} - } - e.Chown.File.Filesystem = str - return nil - case "chown.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.GID"} - } - e.Chown.File.FileFields.GID = uint32(v) - return nil - case "chown.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Group"} - } - e.Chown.File.FileFields.Group = str - return nil - case "chown.file.in_upper_layer": - var ok bool - if e.Chown.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.InUpperLayer"} - } - return nil - case "chown.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Inode"} - } - e.Chown.File.FileFields.Inode = uint64(v) - return nil - case "chown.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Mode"} - } - e.Chown.File.FileFields.Mode = uint16(v) - return nil - case "chown.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.MTime"} - } - e.Chown.File.FileFields.MTime = uint64(v) - return nil - case "chown.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.MountID"} - } - e.Chown.File.FileFields.MountID = uint32(v) - return nil - case "chown.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.BasenameStr"} - } - e.Chown.File.BasenameStr = str - return nil - case "chown.file.name.length": - return &eval.ErrFieldReadOnly{Field: "chown.file.name.length"} - case "chown.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.PathnameStr"} - } - e.Chown.File.PathnameStr = str - return nil - case "chown.file.path.length": - return &eval.ErrFieldReadOnly{Field: "chown.file.path.length"} - case "chown.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Mode"} - } - e.Chown.File.FileFields.Mode = uint16(v) - return nil - case "chown.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.UID"} - } - e.Chown.File.FileFields.UID = uint32(v) - return nil - case "chown.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.User"} - } - e.Chown.File.FileFields.User = str - return nil - case "chown.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.SyscallEvent.Retval"} - } - e.Chown.SyscallEvent.Retval = int64(v) - return nil - case "container.id": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ContainerContext.ID"} - } - e.ContainerContext.ID = str - return nil - case "container.tags": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ContainerContext.Tags"} - } - e.ContainerContext.Tags = append(e.ContainerContext.Tags, str) - return nil - case "dns.id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.ID"} - } - e.DNS.ID = uint16(v) - return nil - case "dns.question.class": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Class"} - } - e.DNS.Class = uint16(v) - return nil - case "dns.question.count": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Count"} - } - e.DNS.Count = uint16(v) - return nil - case "dns.question.length": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Size"} - } - e.DNS.Size = uint16(v) - return nil - case "dns.question.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Name"} - } - e.DNS.Name = str - return nil - case "dns.question.name.length": - return &eval.ErrFieldReadOnly{Field: "dns.question.name.length"} - case "dns.question.type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Type"} - } - e.DNS.Type = uint16(v) - return nil - case "exec.args": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Args"} - } - e.Exec.Process.Args = str - return nil - case "exec.args_flags": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} - } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) - return nil - case "exec.args_options": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} - } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) - return nil - case "exec.args_truncated": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.ArgsTruncated"} - } - return nil - case "exec.argv": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} - } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) - return nil - case "exec.argv0": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv0"} - } - e.Exec.Process.Argv0 = str - return nil - case "exec.cap_effective": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.CapEffective"} - } - e.Exec.Process.Credentials.CapEffective = uint64(v) - return nil - case "exec.cap_permitted": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.CapPermitted"} - } - e.Exec.Process.Credentials.CapPermitted = uint64(v) - return nil - case "exec.comm": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Comm"} - } - e.Exec.Process.Comm = str - return nil - case "exec.container.id": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.ContainerID"} - } - e.Exec.Process.ContainerID = str - return nil - case "exec.cookie": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Cookie"} - } - e.Exec.Process.Cookie = uint32(v) - return nil - case "exec.created_at": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.CreatedAt"} - } - e.Exec.Process.CreatedAt = uint64(v) - return nil - case "exec.egid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EGID"} - } - e.Exec.Process.Credentials.EGID = uint32(v) - return nil - case "exec.egroup": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EGroup"} - } - e.Exec.Process.Credentials.EGroup = str - return nil - case "exec.envp": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Envp"} - } - e.Exec.Process.Envp = append(e.Exec.Process.Envp, str) - return nil - case "exec.envs": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Envs"} - } - e.Exec.Process.Envs = append(e.Exec.Process.Envs, str) - return nil - case "exec.envs_truncated": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.EnvsTruncated"} - } - return nil - case "exec.euid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EUID"} - } - e.Exec.Process.Credentials.EUID = uint32(v) - return nil - case "exec.euser": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EUser"} - } - e.Exec.Process.Credentials.EUser = str - return nil - case "exec.file.change_time": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.CTime"} - } - e.Exec.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "exec.file.filesystem": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.Filesystem"} - } - e.Exec.Process.FileEvent.Filesystem = str - return nil - case "exec.file.gid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.GID"} - } - e.Exec.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "exec.file.group": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Group"} - } - e.Exec.Process.FileEvent.FileFields.Group = str - return nil - case "exec.file.in_upper_layer": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "exec.file.inode": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Inode"} - } - e.Exec.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "exec.file.mode": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Mode"} - } - e.Exec.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exec.file.modification_time": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.MTime"} - } - e.Exec.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "exec.file.mount_id": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.MountID"} - } - e.Exec.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "exec.file.name": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.BasenameStr"} - } - e.Exec.Process.FileEvent.BasenameStr = str - return nil - case "exec.file.name.length": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exec.file.name.length"} - case "exec.file.path": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.PathnameStr"} - } - e.Exec.Process.FileEvent.PathnameStr = str - return nil - case "exec.file.path.length": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exec.file.path.length"} - case "exec.file.rights": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Mode"} - } - e.Exec.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exec.file.uid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.UID"} - } - e.Exec.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "exec.file.user": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.User"} - } - e.Exec.Process.FileEvent.FileFields.User = str - return nil - case "exec.fsgid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSGID"} - } - e.Exec.Process.Credentials.FSGID = uint32(v) - return nil - case "exec.fsgroup": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSGroup"} - } - e.Exec.Process.Credentials.FSGroup = str - return nil - case "exec.fsuid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSUID"} - } - e.Exec.Process.Credentials.FSUID = uint32(v) - return nil - case "exec.fsuser": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSUser"} - } - e.Exec.Process.Credentials.FSUser = str - return nil - case "exec.gid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.GID"} - } - e.Exec.Process.Credentials.GID = uint32(v) - return nil - case "exec.group": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.Group"} - } - e.Exec.Process.Credentials.Group = str - return nil - case "exec.interpreter.file.change_time": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "exec.interpreter.file.filesystem": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.Exec.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "exec.interpreter.file.gid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "exec.interpreter.file.group": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "exec.interpreter.file.in_upper_layer": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "exec.interpreter.file.inode": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "exec.interpreter.file.mode": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exec.interpreter.file.modification_time": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "exec.interpreter.file.mount_id": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "exec.interpreter.file.name": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Exec.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "exec.interpreter.file.name.length": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exec.interpreter.file.name.length"} - case "exec.interpreter.file.path": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Exec.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "exec.interpreter.file.path.length": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exec.interpreter.file.path.length"} - case "exec.interpreter.file.rights": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exec.interpreter.file.uid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "exec.interpreter.file.user": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "exec.is_kworker": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.IsKworker"} - } - return nil - case "exec.is_thread": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.IsThread"} - } - return nil - case "exec.pid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.Pid"} - } - e.Exec.Process.PIDContext.Pid = uint32(v) - return nil - case "exec.ppid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PPid"} - } - e.Exec.Process.PPid = uint32(v) - return nil - case "exec.tid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.Tid"} - } - e.Exec.Process.PIDContext.Tid = uint32(v) - return nil - case "exec.tty_name": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.TTYName"} - } - e.Exec.Process.TTYName = str - return nil - case "exec.uid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.UID"} - } - e.Exec.Process.Credentials.UID = uint32(v) - return nil - case "exec.user": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.User"} - } - e.Exec.Process.Credentials.User = str - return nil - case "exit.args": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Args"} - } - e.Exit.Process.Args = str - return nil - case "exit.args_flags": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} - } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) - return nil - case "exit.args_options": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} - } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) - return nil - case "exit.args_truncated": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.ArgsTruncated"} - } - return nil - case "exit.argv": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} - } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) - return nil - case "exit.argv0": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv0"} - } - e.Exit.Process.Argv0 = str - return nil - case "exit.cap_effective": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.CapEffective"} - } - e.Exit.Process.Credentials.CapEffective = uint64(v) - return nil - case "exit.cap_permitted": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.CapPermitted"} - } - e.Exit.Process.Credentials.CapPermitted = uint64(v) - return nil - case "exit.cause": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Cause"} - } - e.Exit.Cause = uint32(v) - return nil - case "exit.code": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Code"} - } - e.Exit.Code = uint32(v) - return nil - case "exit.comm": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Comm"} - } - e.Exit.Process.Comm = str - return nil - case "exit.container.id": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.ContainerID"} - } - e.Exit.Process.ContainerID = str - return nil - case "exit.cookie": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Cookie"} - } - e.Exit.Process.Cookie = uint32(v) - return nil - case "exit.created_at": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.CreatedAt"} - } - e.Exit.Process.CreatedAt = uint64(v) - return nil - case "exit.egid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EGID"} - } - e.Exit.Process.Credentials.EGID = uint32(v) - return nil - case "exit.egroup": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EGroup"} - } - e.Exit.Process.Credentials.EGroup = str - return nil - case "exit.envp": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Envp"} - } - e.Exit.Process.Envp = append(e.Exit.Process.Envp, str) - return nil - case "exit.envs": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Envs"} - } - e.Exit.Process.Envs = append(e.Exit.Process.Envs, str) - return nil - case "exit.envs_truncated": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.EnvsTruncated"} - } - return nil - case "exit.euid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EUID"} - } - e.Exit.Process.Credentials.EUID = uint32(v) - return nil - case "exit.euser": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EUser"} - } - e.Exit.Process.Credentials.EUser = str - return nil - case "exit.file.change_time": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.CTime"} - } - e.Exit.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "exit.file.filesystem": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.Filesystem"} - } - e.Exit.Process.FileEvent.Filesystem = str - return nil - case "exit.file.gid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.GID"} - } - e.Exit.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "exit.file.group": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Group"} - } - e.Exit.Process.FileEvent.FileFields.Group = str - return nil - case "exit.file.in_upper_layer": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "exit.file.inode": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Inode"} - } - e.Exit.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "exit.file.mode": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Mode"} - } - e.Exit.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exit.file.modification_time": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.MTime"} - } - e.Exit.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "exit.file.mount_id": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.MountID"} - } - e.Exit.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "exit.file.name": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.BasenameStr"} - } - e.Exit.Process.FileEvent.BasenameStr = str - return nil - case "exit.file.name.length": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exit.file.name.length"} - case "exit.file.path": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.PathnameStr"} - } - e.Exit.Process.FileEvent.PathnameStr = str - return nil - case "exit.file.path.length": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exit.file.path.length"} - case "exit.file.rights": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Mode"} - } - e.Exit.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exit.file.uid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.UID"} - } - e.Exit.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "exit.file.user": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.User"} - } - e.Exit.Process.FileEvent.FileFields.User = str - return nil - case "exit.fsgid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSGID"} - } - e.Exit.Process.Credentials.FSGID = uint32(v) - return nil - case "exit.fsgroup": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSGroup"} - } - e.Exit.Process.Credentials.FSGroup = str - return nil - case "exit.fsuid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSUID"} - } - e.Exit.Process.Credentials.FSUID = uint32(v) - return nil - case "exit.fsuser": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSUser"} - } - e.Exit.Process.Credentials.FSUser = str - return nil - case "exit.gid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.GID"} - } - e.Exit.Process.Credentials.GID = uint32(v) - return nil - case "exit.group": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.Group"} - } - e.Exit.Process.Credentials.Group = str - return nil - case "exit.interpreter.file.change_time": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "exit.interpreter.file.filesystem": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.Exit.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "exit.interpreter.file.gid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "exit.interpreter.file.group": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "exit.interpreter.file.in_upper_layer": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "exit.interpreter.file.inode": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "exit.interpreter.file.mode": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exit.interpreter.file.modification_time": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "exit.interpreter.file.mount_id": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "exit.interpreter.file.name": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Exit.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "exit.interpreter.file.name.length": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exit.interpreter.file.name.length"} - case "exit.interpreter.file.path": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Exit.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "exit.interpreter.file.path.length": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exit.interpreter.file.path.length"} - case "exit.interpreter.file.rights": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exit.interpreter.file.uid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "exit.interpreter.file.user": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "exit.is_kworker": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.IsKworker"} - } - return nil - case "exit.is_thread": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.IsThread"} - } - return nil - case "exit.pid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.Pid"} - } - e.Exit.Process.PIDContext.Pid = uint32(v) - return nil - case "exit.ppid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PPid"} - } - e.Exit.Process.PPid = uint32(v) - return nil - case "exit.tid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.Tid"} - } - e.Exit.Process.PIDContext.Tid = uint32(v) - return nil - case "exit.tty_name": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.TTYName"} - } - e.Exit.Process.TTYName = str - return nil - case "exit.uid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.UID"} - } - e.Exit.Process.Credentials.UID = uint32(v) - return nil - case "exit.user": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.User"} - } - e.Exit.Process.Credentials.User = str - return nil - case "link.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.CTime"} - } - e.Link.Source.FileFields.CTime = uint64(v) - return nil - case "link.file.destination.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.CTime"} - } - e.Link.Target.FileFields.CTime = uint64(v) - return nil - case "link.file.destination.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.Filesystem"} - } - e.Link.Target.Filesystem = str - return nil - case "link.file.destination.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.GID"} - } - e.Link.Target.FileFields.GID = uint32(v) - return nil - case "link.file.destination.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Group"} - } - e.Link.Target.FileFields.Group = str - return nil - case "link.file.destination.in_upper_layer": - var ok bool - if e.Link.Target.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.InUpperLayer"} - } - return nil - case "link.file.destination.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Inode"} - } - e.Link.Target.FileFields.Inode = uint64(v) - return nil - case "link.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Mode"} - } - e.Link.Target.FileFields.Mode = uint16(v) - return nil - case "link.file.destination.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.MTime"} - } - e.Link.Target.FileFields.MTime = uint64(v) - return nil - case "link.file.destination.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.MountID"} - } - e.Link.Target.FileFields.MountID = uint32(v) - return nil - case "link.file.destination.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.BasenameStr"} - } - e.Link.Target.BasenameStr = str - return nil - case "link.file.destination.name.length": - return &eval.ErrFieldReadOnly{Field: "link.file.destination.name.length"} - case "link.file.destination.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.PathnameStr"} - } - e.Link.Target.PathnameStr = str - return nil - case "link.file.destination.path.length": - return &eval.ErrFieldReadOnly{Field: "link.file.destination.path.length"} - case "link.file.destination.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Mode"} - } - e.Link.Target.FileFields.Mode = uint16(v) - return nil - case "link.file.destination.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.UID"} - } - e.Link.Target.FileFields.UID = uint32(v) - return nil - case "link.file.destination.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.User"} - } - e.Link.Target.FileFields.User = str - return nil - case "link.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.Filesystem"} - } - e.Link.Source.Filesystem = str - return nil - case "link.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.GID"} - } - e.Link.Source.FileFields.GID = uint32(v) - return nil - case "link.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Group"} - } - e.Link.Source.FileFields.Group = str - return nil - case "link.file.in_upper_layer": - var ok bool - if e.Link.Source.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.InUpperLayer"} - } - return nil - case "link.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Inode"} - } - e.Link.Source.FileFields.Inode = uint64(v) - return nil - case "link.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Mode"} - } - e.Link.Source.FileFields.Mode = uint16(v) - return nil - case "link.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.MTime"} - } - e.Link.Source.FileFields.MTime = uint64(v) - return nil - case "link.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.MountID"} - } - e.Link.Source.FileFields.MountID = uint32(v) - return nil - case "link.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.BasenameStr"} - } - e.Link.Source.BasenameStr = str - return nil - case "link.file.name.length": - return &eval.ErrFieldReadOnly{Field: "link.file.name.length"} - case "link.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.PathnameStr"} - } - e.Link.Source.PathnameStr = str - return nil - case "link.file.path.length": - return &eval.ErrFieldReadOnly{Field: "link.file.path.length"} - case "link.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Mode"} - } - e.Link.Source.FileFields.Mode = uint16(v) - return nil - case "link.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.UID"} - } - e.Link.Source.FileFields.UID = uint32(v) - return nil - case "link.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.User"} - } - e.Link.Source.FileFields.User = str - return nil - case "link.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.SyscallEvent.Retval"} - } - e.Link.SyscallEvent.Retval = int64(v) - return nil - case "load_module.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.CTime"} - } - e.LoadModule.File.FileFields.CTime = uint64(v) - return nil - case "load_module.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.Filesystem"} - } - e.LoadModule.File.Filesystem = str - return nil - case "load_module.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.GID"} - } - e.LoadModule.File.FileFields.GID = uint32(v) - return nil - case "load_module.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Group"} - } - e.LoadModule.File.FileFields.Group = str - return nil - case "load_module.file.in_upper_layer": - var ok bool - if e.LoadModule.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.InUpperLayer"} - } - return nil - case "load_module.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Inode"} - } - e.LoadModule.File.FileFields.Inode = uint64(v) - return nil - case "load_module.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Mode"} - } - e.LoadModule.File.FileFields.Mode = uint16(v) - return nil - case "load_module.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.MTime"} - } - e.LoadModule.File.FileFields.MTime = uint64(v) - return nil - case "load_module.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.MountID"} - } - e.LoadModule.File.FileFields.MountID = uint32(v) - return nil - case "load_module.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.BasenameStr"} - } - e.LoadModule.File.BasenameStr = str - return nil - case "load_module.file.name.length": - return &eval.ErrFieldReadOnly{Field: "load_module.file.name.length"} - case "load_module.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.PathnameStr"} - } - e.LoadModule.File.PathnameStr = str - return nil - case "load_module.file.path.length": - return &eval.ErrFieldReadOnly{Field: "load_module.file.path.length"} - case "load_module.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Mode"} - } - e.LoadModule.File.FileFields.Mode = uint16(v) - return nil - case "load_module.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.UID"} - } - e.LoadModule.File.FileFields.UID = uint32(v) - return nil - case "load_module.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.User"} - } - e.LoadModule.File.FileFields.User = str - return nil - case "load_module.loaded_from_memory": - var ok bool - if e.LoadModule.LoadedFromMemory, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.LoadedFromMemory"} - } - return nil - case "load_module.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.Name"} - } - e.LoadModule.Name = str - return nil - case "load_module.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.SyscallEvent.Retval"} - } - e.LoadModule.SyscallEvent.Retval = int64(v) - return nil - case "mkdir.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.CTime"} - } - e.Mkdir.File.FileFields.CTime = uint64(v) - return nil - case "mkdir.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.Mode"} - } - e.Mkdir.Mode = uint32(v) - return nil - case "mkdir.file.destination.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.Mode"} - } - e.Mkdir.Mode = uint32(v) - return nil - case "mkdir.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.Filesystem"} - } - e.Mkdir.File.Filesystem = str - return nil - case "mkdir.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.GID"} - } - e.Mkdir.File.FileFields.GID = uint32(v) - return nil - case "mkdir.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Group"} - } - e.Mkdir.File.FileFields.Group = str - return nil - case "mkdir.file.in_upper_layer": - var ok bool - if e.Mkdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.InUpperLayer"} - } - return nil - case "mkdir.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Inode"} - } - e.Mkdir.File.FileFields.Inode = uint64(v) - return nil - case "mkdir.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Mode"} - } - e.Mkdir.File.FileFields.Mode = uint16(v) - return nil - case "mkdir.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.MTime"} - } - e.Mkdir.File.FileFields.MTime = uint64(v) - return nil - case "mkdir.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.MountID"} - } - e.Mkdir.File.FileFields.MountID = uint32(v) - return nil - case "mkdir.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.BasenameStr"} - } - e.Mkdir.File.BasenameStr = str - return nil - case "mkdir.file.name.length": - return &eval.ErrFieldReadOnly{Field: "mkdir.file.name.length"} - case "mkdir.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.PathnameStr"} - } - e.Mkdir.File.PathnameStr = str - return nil - case "mkdir.file.path.length": - return &eval.ErrFieldReadOnly{Field: "mkdir.file.path.length"} - case "mkdir.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Mode"} - } - e.Mkdir.File.FileFields.Mode = uint16(v) - return nil - case "mkdir.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.UID"} - } - e.Mkdir.File.FileFields.UID = uint32(v) - return nil - case "mkdir.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.User"} - } - e.Mkdir.File.FileFields.User = str - return nil - case "mkdir.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.SyscallEvent.Retval"} - } - e.Mkdir.SyscallEvent.Retval = int64(v) - return nil - case "mmap.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.CTime"} - } - e.MMap.File.FileFields.CTime = uint64(v) - return nil - case "mmap.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.Filesystem"} - } - e.MMap.File.Filesystem = str - return nil - case "mmap.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.GID"} - } - e.MMap.File.FileFields.GID = uint32(v) - return nil - case "mmap.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Group"} - } - e.MMap.File.FileFields.Group = str - return nil - case "mmap.file.in_upper_layer": - var ok bool - if e.MMap.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.InUpperLayer"} - } - return nil - case "mmap.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Inode"} - } - e.MMap.File.FileFields.Inode = uint64(v) - return nil - case "mmap.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Mode"} - } - e.MMap.File.FileFields.Mode = uint16(v) - return nil - case "mmap.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.MTime"} - } - e.MMap.File.FileFields.MTime = uint64(v) - return nil - case "mmap.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.MountID"} - } - e.MMap.File.FileFields.MountID = uint32(v) - return nil - case "mmap.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.BasenameStr"} - } - e.MMap.File.BasenameStr = str - return nil - case "mmap.file.name.length": - return &eval.ErrFieldReadOnly{Field: "mmap.file.name.length"} - case "mmap.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.PathnameStr"} - } - e.MMap.File.PathnameStr = str - return nil - case "mmap.file.path.length": - return &eval.ErrFieldReadOnly{Field: "mmap.file.path.length"} - case "mmap.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Mode"} - } - e.MMap.File.FileFields.Mode = uint16(v) - return nil - case "mmap.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.UID"} - } - e.MMap.File.FileFields.UID = uint32(v) - return nil - case "mmap.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.User"} - } - e.MMap.File.FileFields.User = str - return nil - case "mmap.flags": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.Flags"} - } - e.MMap.Flags = int(v) - return nil - case "mmap.protection": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.Protection"} - } - e.MMap.Protection = int(v) - return nil - case "mmap.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.SyscallEvent.Retval"} - } - e.MMap.SyscallEvent.Retval = int64(v) - return nil - case "mprotect.req_protection": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MProtect.ReqProtection"} - } - e.MProtect.ReqProtection = int(v) - return nil - case "mprotect.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MProtect.SyscallEvent.Retval"} - } - e.MProtect.SyscallEvent.Retval = int64(v) - return nil - case "mprotect.vm_protection": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MProtect.VMProtection"} - } - e.MProtect.VMProtection = int(v) - return nil - case "network.destination.ip": - v, ok := value.(net.IPNet) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Destination.IPNet"} - } - e.NetworkContext.Destination.IPNet = v - return nil - case "network.destination.port": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Destination.Port"} - } - e.NetworkContext.Destination.Port = uint16(v) - return nil - case "network.device.ifindex": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Device.IfIndex"} - } - e.NetworkContext.Device.IfIndex = uint32(v) - return nil - case "network.device.ifname": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Device.IfName"} - } - e.NetworkContext.Device.IfName = str - return nil - case "network.l3_protocol": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.L3Protocol"} - } - e.NetworkContext.L3Protocol = uint16(v) - return nil - case "network.l4_protocol": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.L4Protocol"} - } - e.NetworkContext.L4Protocol = uint16(v) - return nil - case "network.size": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Size"} - } - e.NetworkContext.Size = uint32(v) - return nil - case "network.source.ip": - v, ok := value.(net.IPNet) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Source.IPNet"} - } - e.NetworkContext.Source.IPNet = v - return nil - case "network.source.port": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Source.Port"} - } - e.NetworkContext.Source.Port = uint16(v) - return nil - case "open.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.CTime"} - } - e.Open.File.FileFields.CTime = uint64(v) - return nil - case "open.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.Mode"} - } - e.Open.Mode = uint32(v) - return nil - case "open.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.Filesystem"} - } - e.Open.File.Filesystem = str - return nil - case "open.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.GID"} - } - e.Open.File.FileFields.GID = uint32(v) - return nil - case "open.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Group"} - } - e.Open.File.FileFields.Group = str - return nil - case "open.file.in_upper_layer": - var ok bool - if e.Open.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.InUpperLayer"} - } - return nil - case "open.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Inode"} - } - e.Open.File.FileFields.Inode = uint64(v) - return nil - case "open.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Mode"} - } - e.Open.File.FileFields.Mode = uint16(v) - return nil - case "open.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.MTime"} - } - e.Open.File.FileFields.MTime = uint64(v) - return nil - case "open.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.MountID"} - } - e.Open.File.FileFields.MountID = uint32(v) - return nil - case "open.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.BasenameStr"} - } - e.Open.File.BasenameStr = str - return nil - case "open.file.name.length": - return &eval.ErrFieldReadOnly{Field: "open.file.name.length"} - case "open.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.PathnameStr"} - } - e.Open.File.PathnameStr = str - return nil - case "open.file.path.length": - return &eval.ErrFieldReadOnly{Field: "open.file.path.length"} - case "open.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Mode"} - } - e.Open.File.FileFields.Mode = uint16(v) - return nil - case "open.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.UID"} - } - e.Open.File.FileFields.UID = uint32(v) - return nil - case "open.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.User"} - } - e.Open.File.FileFields.User = str - return nil - case "open.flags": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.Flags"} - } - e.Open.Flags = uint32(v) - return nil - case "open.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.SyscallEvent.Retval"} - } - e.Open.SyscallEvent.Retval = int64(v) - return nil - case "process.ancestors.args": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Args"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Args = str - return nil - case "process.ancestors.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "process.ancestors.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "process.ancestors.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated"} - } - return nil - case "process.ancestors.argv": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "process.ancestors.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv0"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv0 = str - return nil - case "process.ancestors.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) - return nil - case "process.ancestors.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) - return nil - case "process.ancestors.comm": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Comm"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Comm = str - return nil - case "process.ancestors.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.ContainerID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.ContainerID = str - return nil - case "process.ancestors.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Cookie"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Cookie = uint32(v) - return nil - case "process.ancestors.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.CreatedAt"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) - return nil - case "process.ancestors.egid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) - return nil - case "process.ancestors.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup = str - return nil - case "process.ancestors.envp": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Envp"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Envp = append(e.ProcessContext.Ancestor.ProcessContext.Process.Envp, str) - return nil - case "process.ancestors.envs": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Envs"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Envs = append(e.ProcessContext.Ancestor.ProcessContext.Process.Envs, str) - return nil - case "process.ancestors.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated"} - } - return nil - case "process.ancestors.euid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) - return nil - case "process.ancestors.euser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser = str - return nil - case "process.ancestors.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.ancestors.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str - return nil - case "process.ancestors.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.ancestors.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str - return nil - case "process.ancestors.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.ancestors.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.ancestors.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.ancestors.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.ancestors.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.ancestors.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str - return nil - case "process.ancestors.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "process.ancestors.file.name.length"} - case "process.ancestors.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str - return nil - case "process.ancestors.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "process.ancestors.file.path.length"} - case "process.ancestors.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.ancestors.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.ancestors.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str - return nil - case "process.ancestors.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) - return nil - case "process.ancestors.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup = str - return nil - case "process.ancestors.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) - return nil - case "process.ancestors.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser = str - return nil - case "process.ancestors.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) - return nil - case "process.ancestors.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group = str - return nil - case "process.ancestors.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.ancestors.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "process.ancestors.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.ancestors.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "process.ancestors.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.ancestors.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.ancestors.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.ancestors.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.ancestors.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.ancestors.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "process.ancestors.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "process.ancestors.interpreter.file.name.length"} - case "process.ancestors.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "process.ancestors.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "process.ancestors.interpreter.file.path.length"} - case "process.ancestors.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.ancestors.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.ancestors.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "process.ancestors.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} - } - return nil - case "process.ancestors.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.IsThread"} - } - return nil - case "process.ancestors.pid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) - return nil - case "process.ancestors.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PPid"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.PPid = uint32(v) - return nil - case "process.ancestors.tid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) - return nil - case "process.ancestors.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.TTYName"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.TTYName = str - return nil - case "process.ancestors.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) - return nil - case "process.ancestors.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.User"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.User = str - return nil - case "process.args": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Args"} - } - e.ProcessContext.Process.Args = str - return nil - case "process.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} - } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) - return nil - case "process.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} - } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) - return nil - case "process.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.ArgsTruncated"} - } - return nil - case "process.argv": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} - } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) - return nil - case "process.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv0"} - } - e.ProcessContext.Process.Argv0 = str - return nil - case "process.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.CapEffective"} - } - e.ProcessContext.Process.Credentials.CapEffective = uint64(v) - return nil - case "process.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.CapPermitted"} - } - e.ProcessContext.Process.Credentials.CapPermitted = uint64(v) - return nil - case "process.comm": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Comm"} - } - e.ProcessContext.Process.Comm = str - return nil - case "process.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.ContainerID"} - } - e.ProcessContext.Process.ContainerID = str - return nil - case "process.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Cookie"} - } - e.ProcessContext.Process.Cookie = uint32(v) - return nil - case "process.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.CreatedAt"} - } - e.ProcessContext.Process.CreatedAt = uint64(v) - return nil - case "process.egid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EGID"} - } - e.ProcessContext.Process.Credentials.EGID = uint32(v) - return nil - case "process.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EGroup"} - } - e.ProcessContext.Process.Credentials.EGroup = str - return nil - case "process.envp": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Envp"} - } - e.ProcessContext.Process.Envp = append(e.ProcessContext.Process.Envp, str) - return nil - case "process.envs": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Envs"} - } - e.ProcessContext.Process.Envs = append(e.ProcessContext.Process.Envs, str) - return nil - case "process.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.EnvsTruncated"} - } - return nil - case "process.euid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EUID"} - } - e.ProcessContext.Process.Credentials.EUID = uint32(v) - return nil - case "process.euser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EUser"} - } - e.ProcessContext.Process.Credentials.EUser = str - return nil - case "process.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.Filesystem"} - } - e.ProcessContext.Process.FileEvent.Filesystem = str - return nil - case "process.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.GID"} - } - e.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Group"} - } - e.ProcessContext.Process.FileEvent.FileFields.Group = str - return nil - case "process.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.BasenameStr"} - } - e.ProcessContext.Process.FileEvent.BasenameStr = str - return nil - case "process.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "process.file.name.length"} - case "process.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.PathnameStr"} - } - e.ProcessContext.Process.FileEvent.PathnameStr = str - return nil - case "process.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "process.file.path.length"} - case "process.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.UID"} - } - e.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.User"} - } - e.ProcessContext.Process.FileEvent.FileFields.User = str - return nil - case "process.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSGID"} - } - e.ProcessContext.Process.Credentials.FSGID = uint32(v) - return nil - case "process.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSGroup"} - } - e.ProcessContext.Process.Credentials.FSGroup = str - return nil - case "process.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSUID"} - } - e.ProcessContext.Process.Credentials.FSUID = uint32(v) - return nil - case "process.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSUser"} - } - e.ProcessContext.Process.Credentials.FSUser = str - return nil - case "process.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.GID"} - } - e.ProcessContext.Process.Credentials.GID = uint32(v) - return nil - case "process.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.Group"} - } - e.ProcessContext.Process.Credentials.Group = str - return nil - case "process.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "process.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "process.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "process.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "process.interpreter.file.name.length"} - case "process.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "process.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "process.interpreter.file.path.length"} - case "process.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "process.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.IsKworker"} - } - return nil - case "process.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.IsThread"} - } - return nil - case "process.parent.args": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Args"} - } - e.ProcessContext.Parent.Args = str - return nil - case "process.parent.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} - } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) - return nil - case "process.parent.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} - } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) - return nil - case "process.parent.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.ArgsTruncated"} - } - return nil - case "process.parent.argv": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} - } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) - return nil - case "process.parent.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv0"} - } - e.ProcessContext.Parent.Argv0 = str - return nil - case "process.parent.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.CapEffective"} - } - e.ProcessContext.Parent.Credentials.CapEffective = uint64(v) - return nil - case "process.parent.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.CapPermitted"} - } - e.ProcessContext.Parent.Credentials.CapPermitted = uint64(v) - return nil - case "process.parent.comm": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Comm"} - } - e.ProcessContext.Parent.Comm = str - return nil - case "process.parent.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.ContainerID"} - } - e.ProcessContext.Parent.ContainerID = str - return nil - case "process.parent.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Cookie"} - } - e.ProcessContext.Parent.Cookie = uint32(v) - return nil - case "process.parent.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.CreatedAt"} - } - e.ProcessContext.Parent.CreatedAt = uint64(v) - return nil - case "process.parent.egid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EGID"} - } - e.ProcessContext.Parent.Credentials.EGID = uint32(v) - return nil - case "process.parent.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EGroup"} - } - e.ProcessContext.Parent.Credentials.EGroup = str - return nil - case "process.parent.envp": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Envp"} - } - e.ProcessContext.Parent.Envp = append(e.ProcessContext.Parent.Envp, str) - return nil - case "process.parent.envs": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Envs"} - } - e.ProcessContext.Parent.Envs = append(e.ProcessContext.Parent.Envs, str) - return nil - case "process.parent.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.EnvsTruncated"} - } - return nil - case "process.parent.euid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EUID"} - } - e.ProcessContext.Parent.Credentials.EUID = uint32(v) - return nil - case "process.parent.euser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EUser"} - } - e.ProcessContext.Parent.Credentials.EUser = str - return nil - case "process.parent.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Parent.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.parent.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.Filesystem"} - } - e.ProcessContext.Parent.FileEvent.Filesystem = str - return nil - case "process.parent.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.GID"} - } - e.ProcessContext.Parent.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.parent.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Group"} - } - e.ProcessContext.Parent.FileEvent.FileFields.Group = str - return nil - case "process.parent.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.parent.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Parent.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.parent.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.parent.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Parent.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.parent.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Parent.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.parent.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.BasenameStr"} - } - e.ProcessContext.Parent.FileEvent.BasenameStr = str - return nil - case "process.parent.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "process.parent.file.name.length"} - case "process.parent.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.PathnameStr"} - } - e.ProcessContext.Parent.FileEvent.PathnameStr = str - return nil - case "process.parent.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "process.parent.file.path.length"} - case "process.parent.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.parent.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.UID"} - } - e.ProcessContext.Parent.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.parent.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.User"} - } - e.ProcessContext.Parent.FileEvent.FileFields.User = str - return nil - case "process.parent.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSGID"} - } - e.ProcessContext.Parent.Credentials.FSGID = uint32(v) - return nil - case "process.parent.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSGroup"} - } - e.ProcessContext.Parent.Credentials.FSGroup = str - return nil - case "process.parent.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSUID"} - } - e.ProcessContext.Parent.Credentials.FSUID = uint32(v) - return nil - case "process.parent.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSUser"} - } - e.ProcessContext.Parent.Credentials.FSUser = str - return nil - case "process.parent.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.GID"} - } - e.ProcessContext.Parent.Credentials.GID = uint32(v) - return nil - case "process.parent.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.Group"} - } - e.ProcessContext.Parent.Credentials.Group = str - return nil - case "process.parent.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.parent.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "process.parent.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.parent.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "process.parent.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.parent.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.parent.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.parent.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.parent.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.parent.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "process.parent.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "process.parent.interpreter.file.name.length"} - case "process.parent.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "process.parent.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "process.parent.interpreter.file.path.length"} - case "process.parent.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.parent.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.parent.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "process.parent.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.IsKworker"} - } - return nil - case "process.parent.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.IsThread"} - } - return nil - case "process.parent.pid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.Pid"} - } - e.ProcessContext.Parent.PIDContext.Pid = uint32(v) - return nil - case "process.parent.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PPid"} - } - e.ProcessContext.Parent.PPid = uint32(v) - return nil - case "process.parent.tid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.Tid"} - } - e.ProcessContext.Parent.PIDContext.Tid = uint32(v) - return nil - case "process.parent.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.TTYName"} - } - e.ProcessContext.Parent.TTYName = str - return nil - case "process.parent.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.UID"} - } - e.ProcessContext.Parent.Credentials.UID = uint32(v) - return nil - case "process.parent.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.User"} - } - e.ProcessContext.Parent.Credentials.User = str - return nil - case "process.pid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.Pid"} - } - e.ProcessContext.Process.PIDContext.Pid = uint32(v) - return nil - case "process.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PPid"} - } - e.ProcessContext.Process.PPid = uint32(v) - return nil - case "process.tid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.Tid"} - } - e.ProcessContext.Process.PIDContext.Tid = uint32(v) - return nil - case "process.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.TTYName"} - } - e.ProcessContext.Process.TTYName = str - return nil - case "process.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.UID"} - } - e.ProcessContext.Process.Credentials.UID = uint32(v) - return nil - case "process.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.User"} - } - e.ProcessContext.Process.Credentials.User = str - return nil - case "ptrace.request": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Request"} - } - e.PTrace.Request = uint32(v) - return nil - case "ptrace.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.SyscallEvent.Retval"} - } - e.PTrace.SyscallEvent.Retval = int64(v) - return nil - case "ptrace.tracee.ancestors.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Args"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Args = str - return nil - case "ptrace.tracee.ancestors.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "ptrace.tracee.ancestors.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "ptrace.tracee.ancestors.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated"} - } - return nil - case "ptrace.tracee.ancestors.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "ptrace.tracee.ancestors.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0 = str - return nil - case "ptrace.tracee.ancestors.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) - return nil - case "ptrace.tracee.ancestors.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) - return nil - case "ptrace.tracee.ancestors.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Comm"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Comm = str - return nil - case "ptrace.tracee.ancestors.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID = str - return nil - case "ptrace.tracee.ancestors.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie = uint32(v) - return nil - case "ptrace.tracee.ancestors.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) - return nil - case "ptrace.tracee.ancestors.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) - return nil - case "ptrace.tracee.ancestors.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup = str - return nil - case "ptrace.tracee.ancestors.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Envp"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp, str) - return nil - case "ptrace.tracee.ancestors.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Envs"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs, str) - return nil - case "ptrace.tracee.ancestors.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated"} - } - return nil - case "ptrace.tracee.ancestors.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) - return nil - case "ptrace.tracee.ancestors.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser = str - return nil - case "ptrace.tracee.ancestors.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.ancestors.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.ancestors.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.ancestors.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.ancestors.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.ancestors.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.ancestors.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.ancestors.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.ancestors.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.ancestors.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.file.name.length"} - case "ptrace.tracee.ancestors.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.ancestors.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.file.path.length"} - case "ptrace.tracee.ancestors.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.ancestors.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.ancestors.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.ancestors.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) - return nil - case "ptrace.tracee.ancestors.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup = str - return nil - case "ptrace.tracee.ancestors.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) - return nil - case "ptrace.tracee.ancestors.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser = str - return nil - case "ptrace.tracee.ancestors.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) - return nil - case "ptrace.tracee.ancestors.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.interpreter.file.name.length"} - case "ptrace.tracee.ancestors.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.interpreter.file.path.length"} - case "ptrace.tracee.ancestors.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.ancestors.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} - } - return nil - case "ptrace.tracee.ancestors.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread"} - } - return nil - case "ptrace.tracee.ancestors.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) - return nil - case "ptrace.tracee.ancestors.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PPid"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PPid = uint32(v) - return nil - case "ptrace.tracee.ancestors.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) - return nil - case "ptrace.tracee.ancestors.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName = str - return nil - case "ptrace.tracee.ancestors.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) - return nil - case "ptrace.tracee.ancestors.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User = str - return nil - case "ptrace.tracee.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Args"} - } - e.PTrace.Tracee.Process.Args = str - return nil - case "ptrace.tracee.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} - } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) - return nil - case "ptrace.tracee.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} - } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) - return nil - case "ptrace.tracee.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.ArgsTruncated"} - } - return nil - case "ptrace.tracee.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} - } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) - return nil - case "ptrace.tracee.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv0"} - } - e.PTrace.Tracee.Process.Argv0 = str - return nil - case "ptrace.tracee.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.CapEffective"} - } - e.PTrace.Tracee.Process.Credentials.CapEffective = uint64(v) - return nil - case "ptrace.tracee.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.CapPermitted"} - } - e.PTrace.Tracee.Process.Credentials.CapPermitted = uint64(v) - return nil - case "ptrace.tracee.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Comm"} - } - e.PTrace.Tracee.Process.Comm = str - return nil - case "ptrace.tracee.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.ContainerID"} - } - e.PTrace.Tracee.Process.ContainerID = str - return nil - case "ptrace.tracee.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Cookie"} - } - e.PTrace.Tracee.Process.Cookie = uint32(v) - return nil - case "ptrace.tracee.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.CreatedAt"} - } - e.PTrace.Tracee.Process.CreatedAt = uint64(v) - return nil - case "ptrace.tracee.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EGID"} - } - e.PTrace.Tracee.Process.Credentials.EGID = uint32(v) - return nil - case "ptrace.tracee.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EGroup"} - } - e.PTrace.Tracee.Process.Credentials.EGroup = str - return nil - case "ptrace.tracee.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Envp"} - } - e.PTrace.Tracee.Process.Envp = append(e.PTrace.Tracee.Process.Envp, str) - return nil - case "ptrace.tracee.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Envs"} - } - e.PTrace.Tracee.Process.Envs = append(e.PTrace.Tracee.Process.Envs, str) - return nil - case "ptrace.tracee.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.EnvsTruncated"} - } - return nil - case "ptrace.tracee.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EUID"} - } - e.PTrace.Tracee.Process.Credentials.EUID = uint32(v) - return nil - case "ptrace.tracee.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EUser"} - } - e.PTrace.Tracee.Process.Credentials.EUser = str - return nil - case "ptrace.tracee.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Process.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Process.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.file.name.length"} - case "ptrace.tracee.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Process.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.file.path.length"} - case "ptrace.tracee.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSGID"} - } - e.PTrace.Tracee.Process.Credentials.FSGID = uint32(v) - return nil - case "ptrace.tracee.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSGroup"} - } - e.PTrace.Tracee.Process.Credentials.FSGroup = str - return nil - case "ptrace.tracee.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSUID"} - } - e.PTrace.Tracee.Process.Credentials.FSUID = uint32(v) - return nil - case "ptrace.tracee.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSUser"} - } - e.PTrace.Tracee.Process.Credentials.FSUser = str - return nil - case "ptrace.tracee.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.GID"} - } - e.PTrace.Tracee.Process.Credentials.GID = uint32(v) - return nil - case "ptrace.tracee.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.Group"} - } - e.PTrace.Tracee.Process.Credentials.Group = str - return nil - case "ptrace.tracee.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.interpreter.file.name.length"} - case "ptrace.tracee.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.interpreter.file.path.length"} - case "ptrace.tracee.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.IsKworker"} - } - return nil - case "ptrace.tracee.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.IsThread"} - } - return nil - case "ptrace.tracee.parent.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Args"} - } - e.PTrace.Tracee.Parent.Args = str - return nil - case "ptrace.tracee.parent.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} - } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) - return nil - case "ptrace.tracee.parent.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} - } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) - return nil - case "ptrace.tracee.parent.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.ArgsTruncated"} - } - return nil - case "ptrace.tracee.parent.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} - } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) - return nil - case "ptrace.tracee.parent.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv0"} - } - e.PTrace.Tracee.Parent.Argv0 = str - return nil - case "ptrace.tracee.parent.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.CapEffective"} - } - e.PTrace.Tracee.Parent.Credentials.CapEffective = uint64(v) - return nil - case "ptrace.tracee.parent.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.CapPermitted"} - } - e.PTrace.Tracee.Parent.Credentials.CapPermitted = uint64(v) - return nil - case "ptrace.tracee.parent.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Comm"} - } - e.PTrace.Tracee.Parent.Comm = str - return nil - case "ptrace.tracee.parent.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.ContainerID"} - } - e.PTrace.Tracee.Parent.ContainerID = str - return nil - case "ptrace.tracee.parent.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Cookie"} - } - e.PTrace.Tracee.Parent.Cookie = uint32(v) - return nil - case "ptrace.tracee.parent.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.CreatedAt"} - } - e.PTrace.Tracee.Parent.CreatedAt = uint64(v) - return nil - case "ptrace.tracee.parent.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EGID"} - } - e.PTrace.Tracee.Parent.Credentials.EGID = uint32(v) - return nil - case "ptrace.tracee.parent.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EGroup"} - } - e.PTrace.Tracee.Parent.Credentials.EGroup = str - return nil - case "ptrace.tracee.parent.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Envp"} - } - e.PTrace.Tracee.Parent.Envp = append(e.PTrace.Tracee.Parent.Envp, str) - return nil - case "ptrace.tracee.parent.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Envs"} - } - e.PTrace.Tracee.Parent.Envs = append(e.PTrace.Tracee.Parent.Envs, str) - return nil - case "ptrace.tracee.parent.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.EnvsTruncated"} - } - return nil - case "ptrace.tracee.parent.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EUID"} - } - e.PTrace.Tracee.Parent.Credentials.EUID = uint32(v) - return nil - case "ptrace.tracee.parent.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EUser"} - } - e.PTrace.Tracee.Parent.Credentials.EUser = str - return nil - case "ptrace.tracee.parent.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.parent.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Parent.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.parent.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.parent.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.parent.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.parent.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.parent.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.parent.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.parent.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.parent.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Parent.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.parent.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.file.name.length"} - case "ptrace.tracee.parent.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Parent.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.parent.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.file.path.length"} - case "ptrace.tracee.parent.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.parent.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.parent.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.parent.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSGID"} - } - e.PTrace.Tracee.Parent.Credentials.FSGID = uint32(v) - return nil - case "ptrace.tracee.parent.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSGroup"} - } - e.PTrace.Tracee.Parent.Credentials.FSGroup = str - return nil - case "ptrace.tracee.parent.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSUID"} - } - e.PTrace.Tracee.Parent.Credentials.FSUID = uint32(v) - return nil - case "ptrace.tracee.parent.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSUser"} - } - e.PTrace.Tracee.Parent.Credentials.FSUser = str - return nil - case "ptrace.tracee.parent.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.GID"} - } - e.PTrace.Tracee.Parent.Credentials.GID = uint32(v) - return nil - case "ptrace.tracee.parent.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.Group"} - } - e.PTrace.Tracee.Parent.Credentials.Group = str - return nil - case "ptrace.tracee.parent.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.parent.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.parent.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.parent.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.parent.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.parent.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.parent.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.interpreter.file.name.length"} - case "ptrace.tracee.parent.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.parent.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.interpreter.file.path.length"} - case "ptrace.tracee.parent.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.parent.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.parent.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.parent.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.IsKworker"} - } - return nil - case "ptrace.tracee.parent.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.IsThread"} - } - return nil - case "ptrace.tracee.parent.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.Pid"} - } - e.PTrace.Tracee.Parent.PIDContext.Pid = uint32(v) - return nil - case "ptrace.tracee.parent.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PPid"} - } - e.PTrace.Tracee.Parent.PPid = uint32(v) - return nil - case "ptrace.tracee.parent.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.Tid"} - } - e.PTrace.Tracee.Parent.PIDContext.Tid = uint32(v) - return nil - case "ptrace.tracee.parent.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.TTYName"} - } - e.PTrace.Tracee.Parent.TTYName = str - return nil - case "ptrace.tracee.parent.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.UID"} - } - e.PTrace.Tracee.Parent.Credentials.UID = uint32(v) - return nil - case "ptrace.tracee.parent.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.User"} - } - e.PTrace.Tracee.Parent.Credentials.User = str - return nil - case "ptrace.tracee.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.Pid"} - } - e.PTrace.Tracee.Process.PIDContext.Pid = uint32(v) - return nil - case "ptrace.tracee.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PPid"} - } - e.PTrace.Tracee.Process.PPid = uint32(v) - return nil - case "ptrace.tracee.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.Tid"} - } - e.PTrace.Tracee.Process.PIDContext.Tid = uint32(v) - return nil - case "ptrace.tracee.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.TTYName"} - } - e.PTrace.Tracee.Process.TTYName = str - return nil - case "ptrace.tracee.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.UID"} - } - e.PTrace.Tracee.Process.Credentials.UID = uint32(v) - return nil - case "ptrace.tracee.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.User"} - } - e.PTrace.Tracee.Process.Credentials.User = str - return nil - case "removexattr.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.CTime"} - } - e.RemoveXAttr.File.FileFields.CTime = uint64(v) - return nil - case "removexattr.file.destination.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.Name"} - } - e.RemoveXAttr.Name = str - return nil - case "removexattr.file.destination.namespace": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.Namespace"} - } - e.RemoveXAttr.Namespace = str - return nil - case "removexattr.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.Filesystem"} - } - e.RemoveXAttr.File.Filesystem = str - return nil - case "removexattr.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.GID"} - } - e.RemoveXAttr.File.FileFields.GID = uint32(v) - return nil - case "removexattr.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Group"} - } - e.RemoveXAttr.File.FileFields.Group = str - return nil - case "removexattr.file.in_upper_layer": - var ok bool - if e.RemoveXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.InUpperLayer"} - } - return nil - case "removexattr.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Inode"} - } - e.RemoveXAttr.File.FileFields.Inode = uint64(v) - return nil - case "removexattr.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Mode"} - } - e.RemoveXAttr.File.FileFields.Mode = uint16(v) - return nil - case "removexattr.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.MTime"} - } - e.RemoveXAttr.File.FileFields.MTime = uint64(v) - return nil - case "removexattr.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.MountID"} - } - e.RemoveXAttr.File.FileFields.MountID = uint32(v) - return nil - case "removexattr.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.BasenameStr"} - } - e.RemoveXAttr.File.BasenameStr = str - return nil - case "removexattr.file.name.length": - return &eval.ErrFieldReadOnly{Field: "removexattr.file.name.length"} - case "removexattr.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.PathnameStr"} - } - e.RemoveXAttr.File.PathnameStr = str - return nil - case "removexattr.file.path.length": - return &eval.ErrFieldReadOnly{Field: "removexattr.file.path.length"} - case "removexattr.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Mode"} - } - e.RemoveXAttr.File.FileFields.Mode = uint16(v) - return nil - case "removexattr.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.UID"} - } - e.RemoveXAttr.File.FileFields.UID = uint32(v) - return nil - case "removexattr.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.User"} - } - e.RemoveXAttr.File.FileFields.User = str - return nil - case "removexattr.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.SyscallEvent.Retval"} - } - e.RemoveXAttr.SyscallEvent.Retval = int64(v) - return nil - case "rename.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.CTime"} - } - e.Rename.Old.FileFields.CTime = uint64(v) - return nil - case "rename.file.destination.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.CTime"} - } - e.Rename.New.FileFields.CTime = uint64(v) - return nil - case "rename.file.destination.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.Filesystem"} - } - e.Rename.New.Filesystem = str - return nil - case "rename.file.destination.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.GID"} - } - e.Rename.New.FileFields.GID = uint32(v) - return nil - case "rename.file.destination.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Group"} - } - e.Rename.New.FileFields.Group = str - return nil - case "rename.file.destination.in_upper_layer": - var ok bool - if e.Rename.New.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.InUpperLayer"} - } - return nil - case "rename.file.destination.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Inode"} - } - e.Rename.New.FileFields.Inode = uint64(v) - return nil - case "rename.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Mode"} - } - e.Rename.New.FileFields.Mode = uint16(v) - return nil - case "rename.file.destination.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.MTime"} - } - e.Rename.New.FileFields.MTime = uint64(v) - return nil - case "rename.file.destination.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.MountID"} - } - e.Rename.New.FileFields.MountID = uint32(v) - return nil - case "rename.file.destination.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.BasenameStr"} - } - e.Rename.New.BasenameStr = str - return nil - case "rename.file.destination.name.length": - return &eval.ErrFieldReadOnly{Field: "rename.file.destination.name.length"} - case "rename.file.destination.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.PathnameStr"} - } - e.Rename.New.PathnameStr = str - return nil - case "rename.file.destination.path.length": - return &eval.ErrFieldReadOnly{Field: "rename.file.destination.path.length"} - case "rename.file.destination.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Mode"} - } - e.Rename.New.FileFields.Mode = uint16(v) - return nil - case "rename.file.destination.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.UID"} - } - e.Rename.New.FileFields.UID = uint32(v) - return nil - case "rename.file.destination.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.User"} - } - e.Rename.New.FileFields.User = str - return nil - case "rename.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.Filesystem"} - } - e.Rename.Old.Filesystem = str - return nil - case "rename.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.GID"} - } - e.Rename.Old.FileFields.GID = uint32(v) - return nil - case "rename.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Group"} - } - e.Rename.Old.FileFields.Group = str - return nil - case "rename.file.in_upper_layer": - var ok bool - if e.Rename.Old.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.InUpperLayer"} - } - return nil - case "rename.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Inode"} - } - e.Rename.Old.FileFields.Inode = uint64(v) - return nil - case "rename.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Mode"} - } - e.Rename.Old.FileFields.Mode = uint16(v) - return nil - case "rename.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.MTime"} - } - e.Rename.Old.FileFields.MTime = uint64(v) - return nil - case "rename.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.MountID"} - } - e.Rename.Old.FileFields.MountID = uint32(v) - return nil - case "rename.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.BasenameStr"} - } - e.Rename.Old.BasenameStr = str - return nil - case "rename.file.name.length": - return &eval.ErrFieldReadOnly{Field: "rename.file.name.length"} - case "rename.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.PathnameStr"} - } - e.Rename.Old.PathnameStr = str - return nil - case "rename.file.path.length": - return &eval.ErrFieldReadOnly{Field: "rename.file.path.length"} - case "rename.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Mode"} - } - e.Rename.Old.FileFields.Mode = uint16(v) - return nil - case "rename.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.UID"} - } - e.Rename.Old.FileFields.UID = uint32(v) - return nil - case "rename.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.User"} - } - e.Rename.Old.FileFields.User = str - return nil - case "rename.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.SyscallEvent.Retval"} - } - e.Rename.SyscallEvent.Retval = int64(v) - return nil - case "rmdir.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.CTime"} - } - e.Rmdir.File.FileFields.CTime = uint64(v) - return nil - case "rmdir.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.Filesystem"} - } - e.Rmdir.File.Filesystem = str - return nil - case "rmdir.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.GID"} - } - e.Rmdir.File.FileFields.GID = uint32(v) - return nil - case "rmdir.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Group"} - } - e.Rmdir.File.FileFields.Group = str - return nil - case "rmdir.file.in_upper_layer": - var ok bool - if e.Rmdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.InUpperLayer"} - } - return nil - case "rmdir.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Inode"} - } - e.Rmdir.File.FileFields.Inode = uint64(v) - return nil - case "rmdir.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Mode"} - } - e.Rmdir.File.FileFields.Mode = uint16(v) - return nil - case "rmdir.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.MTime"} - } - e.Rmdir.File.FileFields.MTime = uint64(v) - return nil - case "rmdir.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.MountID"} - } - e.Rmdir.File.FileFields.MountID = uint32(v) - return nil - case "rmdir.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.BasenameStr"} - } - e.Rmdir.File.BasenameStr = str - return nil - case "rmdir.file.name.length": - return &eval.ErrFieldReadOnly{Field: "rmdir.file.name.length"} - case "rmdir.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.PathnameStr"} - } - e.Rmdir.File.PathnameStr = str - return nil - case "rmdir.file.path.length": - return &eval.ErrFieldReadOnly{Field: "rmdir.file.path.length"} - case "rmdir.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Mode"} - } - e.Rmdir.File.FileFields.Mode = uint16(v) - return nil - case "rmdir.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.UID"} - } - e.Rmdir.File.FileFields.UID = uint32(v) - return nil - case "rmdir.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.User"} - } - e.Rmdir.File.FileFields.User = str - return nil - case "rmdir.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.SyscallEvent.Retval"} - } - e.Rmdir.SyscallEvent.Retval = int64(v) - return nil - case "selinux.bool.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolName"} - } - e.SELinux.BoolName = str - return nil - case "selinux.bool.state": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolChangeValue"} - } - e.SELinux.BoolChangeValue = str - return nil - case "selinux.bool_commit.state": - var ok bool - if e.SELinux.BoolCommitValue, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolCommitValue"} - } - return nil - case "selinux.enforce.status": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SELinux.EnforceStatus"} - } - e.SELinux.EnforceStatus = str - return nil - case "setgid.egid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.EGID"} - } - e.SetGID.EGID = uint32(v) - return nil - case "setgid.egroup": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.EGroup"} - } - e.SetGID.EGroup = str - return nil - case "setgid.fsgid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.FSGID"} - } - e.SetGID.FSGID = uint32(v) - return nil - case "setgid.fsgroup": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.FSGroup"} - } - e.SetGID.FSGroup = str - return nil - case "setgid.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.GID"} - } - e.SetGID.GID = uint32(v) - return nil - case "setgid.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.Group"} - } - e.SetGID.Group = str - return nil - case "setuid.euid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.EUID"} - } - e.SetUID.EUID = uint32(v) - return nil - case "setuid.euser": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.EUser"} - } - e.SetUID.EUser = str - return nil - case "setuid.fsuid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.FSUID"} - } - e.SetUID.FSUID = uint32(v) - return nil - case "setuid.fsuser": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.FSUser"} - } - e.SetUID.FSUser = str - return nil - case "setuid.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.UID"} - } - e.SetUID.UID = uint32(v) - return nil - case "setuid.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.User"} - } - e.SetUID.User = str - return nil - case "setxattr.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.CTime"} - } - e.SetXAttr.File.FileFields.CTime = uint64(v) - return nil - case "setxattr.file.destination.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.Name"} - } - e.SetXAttr.Name = str - return nil - case "setxattr.file.destination.namespace": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.Namespace"} - } - e.SetXAttr.Namespace = str - return nil - case "setxattr.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.Filesystem"} - } - e.SetXAttr.File.Filesystem = str - return nil - case "setxattr.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.GID"} - } - e.SetXAttr.File.FileFields.GID = uint32(v) - return nil - case "setxattr.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Group"} - } - e.SetXAttr.File.FileFields.Group = str - return nil - case "setxattr.file.in_upper_layer": - var ok bool - if e.SetXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.InUpperLayer"} - } - return nil - case "setxattr.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Inode"} - } - e.SetXAttr.File.FileFields.Inode = uint64(v) - return nil - case "setxattr.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Mode"} - } - e.SetXAttr.File.FileFields.Mode = uint16(v) - return nil - case "setxattr.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.MTime"} - } - e.SetXAttr.File.FileFields.MTime = uint64(v) - return nil - case "setxattr.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.MountID"} - } - e.SetXAttr.File.FileFields.MountID = uint32(v) - return nil - case "setxattr.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.BasenameStr"} - } - e.SetXAttr.File.BasenameStr = str - return nil - case "setxattr.file.name.length": - return &eval.ErrFieldReadOnly{Field: "setxattr.file.name.length"} - case "setxattr.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.PathnameStr"} - } - e.SetXAttr.File.PathnameStr = str - return nil - case "setxattr.file.path.length": - return &eval.ErrFieldReadOnly{Field: "setxattr.file.path.length"} - case "setxattr.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Mode"} - } - e.SetXAttr.File.FileFields.Mode = uint16(v) - return nil - case "setxattr.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.UID"} - } - e.SetXAttr.File.FileFields.UID = uint32(v) - return nil - case "setxattr.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.User"} - } - e.SetXAttr.File.FileFields.User = str - return nil - case "setxattr.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.SyscallEvent.Retval"} - } - e.SetXAttr.SyscallEvent.Retval = int64(v) - return nil - case "signal.pid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.PID"} - } - e.Signal.PID = uint32(v) - return nil - case "signal.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.SyscallEvent.Retval"} - } - e.Signal.SyscallEvent.Retval = int64(v) - return nil - case "signal.target.ancestors.args": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Args"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Args = str - return nil - case "signal.target.ancestors.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "signal.target.ancestors.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "signal.target.ancestors.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated"} - } - return nil - case "signal.target.ancestors.argv": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "signal.target.ancestors.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv0"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv0 = str - return nil - case "signal.target.ancestors.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) - return nil - case "signal.target.ancestors.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) - return nil - case "signal.target.ancestors.comm": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Comm"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Comm = str - return nil - case "signal.target.ancestors.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.ContainerID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.ContainerID = str - return nil - case "signal.target.ancestors.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Cookie"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Cookie = uint32(v) - return nil - case "signal.target.ancestors.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.CreatedAt"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) - return nil - case "signal.target.ancestors.egid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) - return nil - case "signal.target.ancestors.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup = str - return nil - case "signal.target.ancestors.envp": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Envp"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Envp = append(e.Signal.Target.Ancestor.ProcessContext.Process.Envp, str) - return nil - case "signal.target.ancestors.envs": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Envs"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Envs = append(e.Signal.Target.Ancestor.ProcessContext.Process.Envs, str) - return nil - case "signal.target.ancestors.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated"} - } - return nil - case "signal.target.ancestors.euid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) - return nil - case "signal.target.ancestors.euser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser = str - return nil - case "signal.target.ancestors.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.ancestors.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str - return nil - case "signal.target.ancestors.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.ancestors.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str - return nil - case "signal.target.ancestors.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.ancestors.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.ancestors.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.ancestors.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.ancestors.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.ancestors.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str - return nil - case "signal.target.ancestors.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.file.name.length"} - case "signal.target.ancestors.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str - return nil - case "signal.target.ancestors.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.file.path.length"} - case "signal.target.ancestors.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.ancestors.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.ancestors.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str - return nil - case "signal.target.ancestors.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) - return nil - case "signal.target.ancestors.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup = str - return nil - case "signal.target.ancestors.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) - return nil - case "signal.target.ancestors.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser = str - return nil - case "signal.target.ancestors.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) - return nil - case "signal.target.ancestors.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group = str - return nil - case "signal.target.ancestors.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.ancestors.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "signal.target.ancestors.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.ancestors.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.ancestors.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.ancestors.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.ancestors.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.ancestors.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.ancestors.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "signal.target.ancestors.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.interpreter.file.name.length"} - case "signal.target.ancestors.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "signal.target.ancestors.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.interpreter.file.path.length"} - case "signal.target.ancestors.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.ancestors.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.ancestors.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "signal.target.ancestors.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} - } - return nil - case "signal.target.ancestors.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.IsThread"} - } - return nil - case "signal.target.ancestors.pid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) - return nil - case "signal.target.ancestors.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PPid"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.PPid = uint32(v) - return nil - case "signal.target.ancestors.tid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) - return nil - case "signal.target.ancestors.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.TTYName"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.TTYName = str - return nil - case "signal.target.ancestors.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) - return nil - case "signal.target.ancestors.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.User"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.User = str - return nil - case "signal.target.args": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Args"} - } - e.Signal.Target.Process.Args = str - return nil - case "signal.target.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} - } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) - return nil - case "signal.target.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} - } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) - return nil - case "signal.target.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.ArgsTruncated"} - } - return nil - case "signal.target.argv": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} - } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) - return nil - case "signal.target.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv0"} - } - e.Signal.Target.Process.Argv0 = str - return nil - case "signal.target.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.CapEffective"} - } - e.Signal.Target.Process.Credentials.CapEffective = uint64(v) - return nil - case "signal.target.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.CapPermitted"} - } - e.Signal.Target.Process.Credentials.CapPermitted = uint64(v) - return nil - case "signal.target.comm": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Comm"} - } - e.Signal.Target.Process.Comm = str - return nil - case "signal.target.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.ContainerID"} - } - e.Signal.Target.Process.ContainerID = str - return nil - case "signal.target.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Cookie"} - } - e.Signal.Target.Process.Cookie = uint32(v) - return nil - case "signal.target.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.CreatedAt"} - } - e.Signal.Target.Process.CreatedAt = uint64(v) - return nil - case "signal.target.egid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EGID"} - } - e.Signal.Target.Process.Credentials.EGID = uint32(v) - return nil - case "signal.target.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EGroup"} - } - e.Signal.Target.Process.Credentials.EGroup = str - return nil - case "signal.target.envp": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Envp"} - } - e.Signal.Target.Process.Envp = append(e.Signal.Target.Process.Envp, str) - return nil - case "signal.target.envs": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Envs"} - } - e.Signal.Target.Process.Envs = append(e.Signal.Target.Process.Envs, str) - return nil - case "signal.target.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.EnvsTruncated"} - } - return nil - case "signal.target.euid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EUID"} - } - e.Signal.Target.Process.Credentials.EUID = uint32(v) - return nil - case "signal.target.euser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EUser"} - } - e.Signal.Target.Process.Credentials.EUser = str - return nil - case "signal.target.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.Filesystem"} - } - e.Signal.Target.Process.FileEvent.Filesystem = str - return nil - case "signal.target.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.GID"} - } - e.Signal.Target.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Group"} - } - e.Signal.Target.Process.FileEvent.FileFields.Group = str - return nil - case "signal.target.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.BasenameStr"} - } - e.Signal.Target.Process.FileEvent.BasenameStr = str - return nil - case "signal.target.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.file.name.length"} - case "signal.target.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.PathnameStr"} - } - e.Signal.Target.Process.FileEvent.PathnameStr = str - return nil - case "signal.target.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.file.path.length"} - case "signal.target.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.UID"} - } - e.Signal.Target.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.User"} - } - e.Signal.Target.Process.FileEvent.FileFields.User = str - return nil - case "signal.target.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSGID"} - } - e.Signal.Target.Process.Credentials.FSGID = uint32(v) - return nil - case "signal.target.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSGroup"} - } - e.Signal.Target.Process.Credentials.FSGroup = str - return nil - case "signal.target.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSUID"} - } - e.Signal.Target.Process.Credentials.FSUID = uint32(v) - return nil - case "signal.target.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSUser"} - } - e.Signal.Target.Process.Credentials.FSUser = str - return nil - case "signal.target.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.GID"} - } - e.Signal.Target.Process.Credentials.GID = uint32(v) - return nil - case "signal.target.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.Group"} - } - e.Signal.Target.Process.Credentials.Group = str - return nil - case "signal.target.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "signal.target.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "signal.target.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "signal.target.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.interpreter.file.name.length"} - case "signal.target.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "signal.target.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.interpreter.file.path.length"} - case "signal.target.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "signal.target.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.IsKworker"} - } - return nil - case "signal.target.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.IsThread"} - } - return nil - case "signal.target.parent.args": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Args"} - } - e.Signal.Target.Parent.Args = str - return nil - case "signal.target.parent.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} - } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) - return nil - case "signal.target.parent.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} - } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) - return nil - case "signal.target.parent.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.ArgsTruncated"} - } - return nil - case "signal.target.parent.argv": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} - } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) - return nil - case "signal.target.parent.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv0"} - } - e.Signal.Target.Parent.Argv0 = str - return nil - case "signal.target.parent.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.CapEffective"} - } - e.Signal.Target.Parent.Credentials.CapEffective = uint64(v) - return nil - case "signal.target.parent.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.CapPermitted"} - } - e.Signal.Target.Parent.Credentials.CapPermitted = uint64(v) - return nil - case "signal.target.parent.comm": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Comm"} - } - e.Signal.Target.Parent.Comm = str - return nil - case "signal.target.parent.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.ContainerID"} - } - e.Signal.Target.Parent.ContainerID = str - return nil - case "signal.target.parent.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Cookie"} - } - e.Signal.Target.Parent.Cookie = uint32(v) - return nil - case "signal.target.parent.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.CreatedAt"} - } - e.Signal.Target.Parent.CreatedAt = uint64(v) - return nil - case "signal.target.parent.egid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EGID"} - } - e.Signal.Target.Parent.Credentials.EGID = uint32(v) - return nil - case "signal.target.parent.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EGroup"} - } - e.Signal.Target.Parent.Credentials.EGroup = str - return nil - case "signal.target.parent.envp": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Envp"} - } - e.Signal.Target.Parent.Envp = append(e.Signal.Target.Parent.Envp, str) - return nil - case "signal.target.parent.envs": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Envs"} - } - e.Signal.Target.Parent.Envs = append(e.Signal.Target.Parent.Envs, str) - return nil - case "signal.target.parent.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.EnvsTruncated"} - } - return nil - case "signal.target.parent.euid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EUID"} - } - e.Signal.Target.Parent.Credentials.EUID = uint32(v) - return nil - case "signal.target.parent.euser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EUser"} - } - e.Signal.Target.Parent.Credentials.EUser = str - return nil - case "signal.target.parent.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Parent.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.parent.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.Filesystem"} - } - e.Signal.Target.Parent.FileEvent.Filesystem = str - return nil - case "signal.target.parent.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.GID"} - } - e.Signal.Target.Parent.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.parent.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Group"} - } - e.Signal.Target.Parent.FileEvent.FileFields.Group = str - return nil - case "signal.target.parent.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.parent.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Parent.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.parent.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.parent.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Parent.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.parent.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Parent.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.parent.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.BasenameStr"} - } - e.Signal.Target.Parent.FileEvent.BasenameStr = str - return nil - case "signal.target.parent.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.parent.file.name.length"} - case "signal.target.parent.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.PathnameStr"} - } - e.Signal.Target.Parent.FileEvent.PathnameStr = str - return nil - case "signal.target.parent.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.parent.file.path.length"} - case "signal.target.parent.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.parent.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.UID"} - } - e.Signal.Target.Parent.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.parent.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.User"} - } - e.Signal.Target.Parent.FileEvent.FileFields.User = str - return nil - case "signal.target.parent.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSGID"} - } - e.Signal.Target.Parent.Credentials.FSGID = uint32(v) - return nil - case "signal.target.parent.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSGroup"} - } - e.Signal.Target.Parent.Credentials.FSGroup = str - return nil - case "signal.target.parent.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSUID"} - } - e.Signal.Target.Parent.Credentials.FSUID = uint32(v) - return nil - case "signal.target.parent.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSUser"} - } - e.Signal.Target.Parent.Credentials.FSUser = str - return nil - case "signal.target.parent.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.GID"} - } - e.Signal.Target.Parent.Credentials.GID = uint32(v) - return nil - case "signal.target.parent.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.Group"} - } - e.Signal.Target.Parent.Credentials.Group = str - return nil - case "signal.target.parent.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.parent.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "signal.target.parent.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.parent.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "signal.target.parent.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.parent.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.parent.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.parent.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.parent.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.parent.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "signal.target.parent.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.parent.interpreter.file.name.length"} - case "signal.target.parent.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "signal.target.parent.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.parent.interpreter.file.path.length"} - case "signal.target.parent.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.parent.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.parent.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "signal.target.parent.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.IsKworker"} - } - return nil - case "signal.target.parent.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.IsThread"} - } - return nil - case "signal.target.parent.pid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.Pid"} - } - e.Signal.Target.Parent.PIDContext.Pid = uint32(v) - return nil - case "signal.target.parent.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PPid"} - } - e.Signal.Target.Parent.PPid = uint32(v) - return nil - case "signal.target.parent.tid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.Tid"} - } - e.Signal.Target.Parent.PIDContext.Tid = uint32(v) - return nil - case "signal.target.parent.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.TTYName"} - } - e.Signal.Target.Parent.TTYName = str - return nil - case "signal.target.parent.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.UID"} - } - e.Signal.Target.Parent.Credentials.UID = uint32(v) - return nil - case "signal.target.parent.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.User"} - } - e.Signal.Target.Parent.Credentials.User = str - return nil - case "signal.target.pid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.Pid"} - } - e.Signal.Target.Process.PIDContext.Pid = uint32(v) - return nil - case "signal.target.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PPid"} - } - e.Signal.Target.Process.PPid = uint32(v) - return nil - case "signal.target.tid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.Tid"} - } - e.Signal.Target.Process.PIDContext.Tid = uint32(v) - return nil - case "signal.target.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.TTYName"} - } - e.Signal.Target.Process.TTYName = str - return nil - case "signal.target.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.UID"} - } - e.Signal.Target.Process.Credentials.UID = uint32(v) - return nil - case "signal.target.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.User"} - } - e.Signal.Target.Process.Credentials.User = str - return nil - case "signal.type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Type"} - } - e.Signal.Type = uint32(v) - return nil - case "splice.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.CTime"} - } - e.Splice.File.FileFields.CTime = uint64(v) - return nil - case "splice.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.Filesystem"} - } - e.Splice.File.Filesystem = str - return nil - case "splice.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.GID"} - } - e.Splice.File.FileFields.GID = uint32(v) - return nil - case "splice.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Group"} - } - e.Splice.File.FileFields.Group = str - return nil - case "splice.file.in_upper_layer": - var ok bool - if e.Splice.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.InUpperLayer"} - } - return nil - case "splice.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Inode"} - } - e.Splice.File.FileFields.Inode = uint64(v) - return nil - case "splice.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Mode"} - } - e.Splice.File.FileFields.Mode = uint16(v) - return nil - case "splice.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.MTime"} - } - e.Splice.File.FileFields.MTime = uint64(v) - return nil - case "splice.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.MountID"} - } - e.Splice.File.FileFields.MountID = uint32(v) - return nil - case "splice.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.BasenameStr"} - } - e.Splice.File.BasenameStr = str - return nil - case "splice.file.name.length": - return &eval.ErrFieldReadOnly{Field: "splice.file.name.length"} - case "splice.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.PathnameStr"} - } - e.Splice.File.PathnameStr = str - return nil - case "splice.file.path.length": - return &eval.ErrFieldReadOnly{Field: "splice.file.path.length"} - case "splice.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Mode"} - } - e.Splice.File.FileFields.Mode = uint16(v) - return nil - case "splice.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.UID"} - } - e.Splice.File.FileFields.UID = uint32(v) - return nil - case "splice.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.User"} - } - e.Splice.File.FileFields.User = str - return nil - case "splice.pipe_entry_flag": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.PipeEntryFlag"} - } - e.Splice.PipeEntryFlag = uint32(v) - return nil - case "splice.pipe_exit_flag": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.PipeExitFlag"} - } - e.Splice.PipeExitFlag = uint32(v) - return nil - case "splice.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.SyscallEvent.Retval"} - } - e.Splice.SyscallEvent.Retval = int64(v) - return nil - case "unlink.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.CTime"} - } - e.Unlink.File.FileFields.CTime = uint64(v) - return nil - case "unlink.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.Filesystem"} - } - e.Unlink.File.Filesystem = str - return nil - case "unlink.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.GID"} - } - e.Unlink.File.FileFields.GID = uint32(v) - return nil - case "unlink.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Group"} - } - e.Unlink.File.FileFields.Group = str - return nil - case "unlink.file.in_upper_layer": - var ok bool - if e.Unlink.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.InUpperLayer"} - } - return nil - case "unlink.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Inode"} - } - e.Unlink.File.FileFields.Inode = uint64(v) - return nil - case "unlink.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Mode"} - } - e.Unlink.File.FileFields.Mode = uint16(v) - return nil - case "unlink.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.MTime"} - } - e.Unlink.File.FileFields.MTime = uint64(v) - return nil - case "unlink.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.MountID"} - } - e.Unlink.File.FileFields.MountID = uint32(v) - return nil - case "unlink.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.BasenameStr"} - } - e.Unlink.File.BasenameStr = str - return nil - case "unlink.file.name.length": - return &eval.ErrFieldReadOnly{Field: "unlink.file.name.length"} - case "unlink.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.PathnameStr"} - } - e.Unlink.File.PathnameStr = str - return nil - case "unlink.file.path.length": - return &eval.ErrFieldReadOnly{Field: "unlink.file.path.length"} - case "unlink.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Mode"} - } - e.Unlink.File.FileFields.Mode = uint16(v) - return nil - case "unlink.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.UID"} - } - e.Unlink.File.FileFields.UID = uint32(v) - return nil - case "unlink.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.User"} - } - e.Unlink.File.FileFields.User = str - return nil - case "unlink.flags": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.Flags"} - } - e.Unlink.Flags = uint32(v) - return nil - case "unlink.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.SyscallEvent.Retval"} - } - e.Unlink.SyscallEvent.Retval = int64(v) - return nil - case "unload_module.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "UnloadModule.Name"} - } - e.UnloadModule.Name = str - return nil - case "unload_module.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "UnloadModule.SyscallEvent.Retval"} - } - e.UnloadModule.SyscallEvent.Retval = int64(v) - return nil - case "utimes.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.CTime"} - } - e.Utimes.File.FileFields.CTime = uint64(v) - return nil - case "utimes.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.Filesystem"} - } - e.Utimes.File.Filesystem = str - return nil - case "utimes.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.GID"} - } - e.Utimes.File.FileFields.GID = uint32(v) - return nil - case "utimes.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Group"} - } - e.Utimes.File.FileFields.Group = str - return nil - case "utimes.file.in_upper_layer": - var ok bool - if e.Utimes.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.InUpperLayer"} - } - return nil - case "utimes.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Inode"} - } - e.Utimes.File.FileFields.Inode = uint64(v) - return nil - case "utimes.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Mode"} - } - e.Utimes.File.FileFields.Mode = uint16(v) - return nil - case "utimes.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.MTime"} - } - e.Utimes.File.FileFields.MTime = uint64(v) - return nil - case "utimes.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.MountID"} - } - e.Utimes.File.FileFields.MountID = uint32(v) - return nil - case "utimes.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.BasenameStr"} - } - e.Utimes.File.BasenameStr = str - return nil - case "utimes.file.name.length": - return &eval.ErrFieldReadOnly{Field: "utimes.file.name.length"} - case "utimes.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.PathnameStr"} - } - e.Utimes.File.PathnameStr = str - return nil - case "utimes.file.path.length": - return &eval.ErrFieldReadOnly{Field: "utimes.file.path.length"} - case "utimes.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Mode"} - } - e.Utimes.File.FileFields.Mode = uint16(v) - return nil - case "utimes.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.UID"} - } - e.Utimes.File.FileFields.UID = uint32(v) - return nil - case "utimes.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.User"} - } - e.Utimes.File.FileFields.User = str - return nil - case "utimes.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.SyscallEvent.Retval"} - } - e.Utimes.SyscallEvent.Retval = int64(v) - return nil - } - return &eval.ErrFieldNotFound{Field: field} -} diff --git a/pkg/security/probe/activity_dump.go b/pkg/security/probe/activity_dump.go index d0eae9a22eb7b..e182677008724 100644 --- a/pkg/security/probe/activity_dump.go +++ b/pkg/security/probe/activity_dump.go @@ -504,7 +504,7 @@ func (ad *ActivityDump) debug(w io.Writer) { } } -func (ad *ActivityDump) isEventTypeTraced(event *Event) bool { +func (ad *ActivityDump) isEventTypeTraced(event *model.Event) bool { for _, evtType := range ad.LoadConfig.TracedEventTypes { if evtType == event.GetEventType() { return true @@ -515,7 +515,7 @@ func (ad *ActivityDump) isEventTypeTraced(event *Event) bool { // Insert inserts the provided event in the active ActivityDump. This function returns true if a new entry was added, // false if the event was dropped. -func (ad *ActivityDump) Insert(event *Event) (newEntry bool) { +func (ad *ActivityDump) Insert(event *model.Event) (newEntry bool) { ad.Lock() defer ad.Unlock() @@ -541,7 +541,8 @@ func (ad *ActivityDump) Insert(event *Event) (newEntry bool) { }() // find the node where the event should be inserted - node := ad.findOrCreateProcessActivityNode(event.ResolveProcessCacheEntry(), Runtime) + entry, _ := event.FieldHandlers.ResolveProcessCacheEntry(event) + node := ad.findOrCreateProcessActivityNode(entry, Runtime) if node == nil { // a process node couldn't be found for the provided event as it doesn't match the ActivityDump query return false @@ -575,6 +576,11 @@ func (ad *ActivityDump) findOrCreateProcessActivityNode(entry *model.ProcessCach return node } + // drop processes with abnormal paths + if entry.GetPathResolutionError() != "" { + return node + } + // look for a ProcessActivityNode by process cookie if entry.Cookie > 0 { var found bool @@ -776,6 +782,8 @@ func (ad *ActivityDump) resolveTags() error { // ToSecurityActivityDumpMessage returns a pointer to a SecurityActivityDumpMessage func (ad *ActivityDump) ToSecurityActivityDumpMessage() *api.ActivityDumpMessage { + ad.Lock() + defer ad.Unlock() var storage []*api.StorageRequestMessage for _, requests := range ad.StorageRequests { for _, request := range requests { @@ -1095,14 +1103,19 @@ func extractFirstParent(path string) (string, int) { // InsertFileEventInProcess inserts the provided file event in the current node. This function returns true if a new entry was // added, false if the event was dropped. -func (ad *ActivityDump) InsertFileEventInProcess(pan *ProcessActivityNode, fileEvent *model.FileEvent, event *Event, generationType NodeGenerationType) bool { +func (ad *ActivityDump) InsertFileEventInProcess(pan *ProcessActivityNode, fileEvent *model.FileEvent, event *model.Event, generationType NodeGenerationType) bool { var filePath string if generationType != Snapshot { - filePath = event.ResolveFilePath(fileEvent) + filePath = event.FieldHandlers.ResolveFilePath(event, fileEvent) } else { filePath = fileEvent.PathnameStr } + // drop file events with abnormal paths + if event != nil && event.PathResolutionError != nil { + return false + } + parent, nextParentIndex := extractFirstParent(filePath) if nextParentIndex == 0 { return false @@ -1160,8 +1173,8 @@ func (ad *ActivityDump) snapshotProcess(pan *ProcessActivityNode) error { } func (ad *ActivityDump) insertSnapshotedSocket(pan *ProcessActivityNode, p *process.Process, family uint16, ip net.IP, port uint16) { - evt := NewEvent(ad.adm.resolvers, ad.adm.scrubber, ad.adm.probe) - evt.Event.Type = uint32(model.BindEventType) + evt := NewEvent(ad.adm.fieldHandlers, ad.adm.EventMarshaler) + evt.Type = uint32(model.BindEventType) evt.Bind.SyscallEvent.Retval = 0 evt.Bind.AddrFamily = family @@ -1302,8 +1315,8 @@ func (pan *ProcessActivityNode) snapshotFiles(p *process.Process, ad *ActivityDu continue } - evt := NewEvent(ad.adm.resolvers, ad.adm.scrubber, ad.adm.probe) - evt.Event.Type = uint32(model.FileOpenEventType) + evt := NewEvent(ad.adm.fieldHandlers, ad.adm.EventMarshaler) + evt.Type = uint32(model.FileOpenEventType) resolvedPath, err = filepath.EvalSymlinks(f) if err != nil { @@ -1415,7 +1428,7 @@ type OpenNode struct { } // NewFileActivityNode returns a new FileActivityNode instance -func NewFileActivityNode(fileEvent *model.FileEvent, event *Event, name string, generationType NodeGenerationType, nodeStats *ActivityDumpNodeStats) *FileActivityNode { +func NewFileActivityNode(fileEvent *model.FileEvent, event *model.Event, name string, generationType NodeGenerationType, nodeStats *ActivityDumpNodeStats) *FileActivityNode { nodeStats.fileNodes++ fan := &FileActivityNode{ Name: name, @@ -1438,12 +1451,12 @@ func (fan *FileActivityNode) getNodeLabel() string { return label } -func (fan *FileActivityNode) enrichFromEvent(event *Event) { +func (fan *FileActivityNode) enrichFromEvent(event *model.Event) { if event == nil { return } if fan.FirstSeen.IsZero() { - fan.FirstSeen = event.ResolveEventTimestamp() + fan.FirstSeen = event.FieldHandlers.ResolveEventTimestamp(event) } switch event.GetEventType() { @@ -1458,7 +1471,7 @@ func (fan *FileActivityNode) enrichFromEvent(event *Event) { // InsertFileEventInFile inserts an event in a FileActivityNode. This function returns true if a new entry was added, false if // the event was dropped. -func (ad *ActivityDump) InsertFileEventInFile(fan *FileActivityNode, fileEvent *model.FileEvent, event *Event, remainingPath string, generationType NodeGenerationType) bool { +func (ad *ActivityDump) InsertFileEventInFile(fan *FileActivityNode, fileEvent *model.FileEvent, event *model.Event, remainingPath string, generationType NodeGenerationType) bool { currentFan := fan currentPath := remainingPath somethingChanged := false diff --git a/pkg/security/probe/activity_dump_manager.go b/pkg/security/probe/activity_dump_manager.go index df6357d46c1c0..897263794e211 100644 --- a/pkg/security/probe/activity_dump_manager.go +++ b/pkg/security/probe/activity_dump_manager.go @@ -18,7 +18,7 @@ import ( "github.com/cilium/ebpf" coreconfig "github.com/DataDog/datadog-agent/pkg/config" - pconfig "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/security/api" "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" @@ -38,13 +38,13 @@ func areCGroupADsEnabled(c *config.Config) bool { // ActivityDumpManager is used to manage ActivityDumps type ActivityDumpManager struct { sync.RWMutex - probe *Probe - config *config.Config - statsdClient statsd.ClientInterface - resolvers *Resolvers - kernelVersion *kernel.Version - scrubber *pconfig.DataScrubber - manager *manager.Manager + config *config.Config + statsdClient statsd.ClientInterface + fieldHandlers *FieldHandlers + EventMarshaler *EventMarshaler + resolvers *Resolvers + kernelVersion *kernel.Version + manager *manager.Manager tracedPIDsMap *ebpf.Map tracedCommsMap *ebpf.Map @@ -169,7 +169,7 @@ func (adm *ActivityDumpManager) resolveTags() { // NewActivityDumpManager returns a new ActivityDumpManager instance func NewActivityDumpManager(p *Probe, config *config.Config, statsdClient statsd.ClientInterface, resolvers *Resolvers, - kernelVersion *kernel.Version, scrubber *pconfig.DataScrubber, manager *manager.Manager) (*ActivityDumpManager, error) { + kernelVersion *kernel.Version, scrubber *procutil.DataScrubber, manager *manager.Manager) (*ActivityDumpManager, error) { tracedPIDs, err := managerhelper.Map(manager, "traced_pids") if err != nil { return nil, err @@ -203,9 +203,10 @@ func NewActivityDumpManager(p *Probe, config *config.Config, statsdClient statsd adm := &ActivityDumpManager{ config: config, statsdClient: statsdClient, + fieldHandlers: p.fieldHandlers, + EventMarshaler: p.eventMarshaler, resolvers: resolvers, kernelVersion: kernelVersion, - scrubber: scrubber, manager: manager, tracedPIDsMap: tracedPIDs, tracedCommsMap: tracedComms, @@ -240,7 +241,7 @@ func (adm *ActivityDumpManager) prepareContextTags() { adm.contextTags = append(adm.contextTags, fmt.Sprintf("host:%s", adm.hostname)) // merge tags from config - for _, tag := range coreconfig.GetConfiguredTags(true) { + for _, tag := range coreconfig.GetGlobalConfiguredTags(true) { if strings.HasPrefix(tag, "host") { continue } @@ -424,18 +425,12 @@ func (adm *ActivityDumpManager) StopActivityDump(params *api.ActivityDumpStopPar } // ProcessEvent processes a new event and insert it in an activity dump if applicable -func (adm *ActivityDumpManager) ProcessEvent(event *Event) { - +func (adm *ActivityDumpManager) ProcessEvent(event *model.Event) { // is this event sampled for activity dumps ? if !event.IsActivityDumpSample { return } - // reject event with abnormal path - if event.GetPathResolutionError() != nil { - return - } - adm.Lock() defer adm.Unlock() @@ -636,3 +631,14 @@ func (adm *ActivityDumpManager) getOverweightDumps() []*ActivityDump { } return dumps } + +// FakeDumpOverweight fakes a dump stats to force triggering the load controller. For unitary tests purpose only. +func (adm *ActivityDumpManager) FakeDumpOverweight(name string) { + adm.Lock() + defer adm.Unlock() + for _, ad := range adm.activeDumps { + if ad.Name == name { + ad.nodeStats.processNodes = int64(99999) + } + } +} diff --git a/pkg/security/probe/activity_dump_manager_test.go b/pkg/security/probe/activity_dump_manager_test.go index 1cd294012c996..e62ee17a9fd54 100644 --- a/pkg/security/probe/activity_dump_manager_test.go +++ b/pkg/security/probe/activity_dump_manager_test.go @@ -346,19 +346,15 @@ func TestActivityDumpManager_getOverweightDumps(t *testing.T) { } for _, tt := range tests { - probe := &Probe{ - StatsdClient: &statsd.NoOpClient{}, - Config: &config.Config{ - ActivityDumpMaxDumpSize: func() int { - return 2048 - }, - }} t.Run(tt.name, func(t *testing.T) { adm := &ActivityDumpManager{ - activeDumps: tt.fields.activeDumps, - probe: probe, - config: probe.Config, - statsdClient: probe.StatsdClient, + activeDumps: tt.fields.activeDumps, + config: &config.Config{ + ActivityDumpMaxDumpSize: func() int { + return 2048 + }, + }, + statsdClient: &statsd.NoOpClient{}, ignoreFromSnapshot: make(map[string]bool), } diff --git a/pkg/security/probe/activity_dump_proto_dec_v1.go b/pkg/security/probe/activity_dump_proto_dec_v1.go index dcb124b14b3aa..c01b8b526d562 100644 --- a/pkg/security/probe/activity_dump_proto_dec_v1.go +++ b/pkg/security/probe/activity_dump_proto_dec_v1.go @@ -129,7 +129,7 @@ func protoDecodeProcessNode(p *adproto.ProcessInfo) model.Process { Credentials: protoDecodeCredentials(p.Credentials), - ScrubbedArgv: make([]string, len(p.Args)), + Argv: make([]string, len(p.Args)), Argv0: p.Argv0, ArgsTruncated: p.ArgsTruncated, @@ -137,7 +137,7 @@ func protoDecodeProcessNode(p *adproto.ProcessInfo) model.Process { EnvsTruncated: p.EnvsTruncated, } - copy(mp.ScrubbedArgv, p.Args) + copy(mp.Argv, p.Args) copy(mp.Envs, p.Envs) return mp } diff --git a/pkg/security/probe/activity_dump_test.go b/pkg/security/probe/activity_dump_test.go index 83f76f0001cb6..05fb7b7326429 100644 --- a/pkg/security/probe/activity_dump_test.go +++ b/pkg/security/probe/activity_dump_test.go @@ -116,11 +116,16 @@ func TestInsertFileEvent(t *testing.T) { ad := NewEmptyActivityDump() for _, path := range pathToInserts { - fileEvent := &model.FileEvent{ - IsPathnameStrResolved: true, - PathnameStr: path, + event := &model.Event{ + Open: model.OpenEvent{ + File: model.FileEvent{ + IsPathnameStrResolved: true, + PathnameStr: path, + }, + }, + FieldHandlers: &model.DefaultFieldHandlers{}, } - ad.InsertFileEventInProcess(&pan, fileEvent, nil, Unknown) + ad.InsertFileEventInProcess(&pan, &event.Open.File, event, Unknown) } var builder strings.Builder diff --git a/pkg/security/probe/applier.go b/pkg/security/probe/applier.go index a92ecfad2dc02..1e523f53abce2 100644 --- a/pkg/security/probe/applier.go +++ b/pkg/security/probe/applier.go @@ -14,6 +14,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -53,8 +54,8 @@ func (rsa *RuleSetApplier) applyApprovers(eventType eval.EventType, approvers ru // applyDefaultPolicy this will apply the deny policy if kernel filters are enabled func (rsa *RuleSetApplier) applyDefaultFilterPolicies() { - var model Model - for _, eventType := range model.GetEventTypes() { + var m model.Model + for _, eventType := range m.GetEventTypes() { if !rsa.config.EnableKernelFilters { _ = rsa.applyFilterPolicy(eventType, PolicyModeNoFilter, math.MaxUint8) } else { diff --git a/pkg/security/probe/approvers_test.go b/pkg/security/probe/approvers_test.go index a1ac1a57c389e..c83f7939c78de 100644 --- a/pkg/security/probe/approvers_test.go +++ b/pkg/security/probe/approvers_test.go @@ -30,8 +30,7 @@ func TestApproverAncestors1(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - m := &model.Model{} - rs := rules.NewRuleSet(m, m.NewEvent, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path == "/etc/passwd" && process.ancestors.file.name == "vipw"`, `open.file.path == "/etc/shadow" && process.ancestors.file.name == "vipw"`) capabilities, exists := allCapabilities["open"] @@ -62,8 +61,7 @@ func TestApproverAncestors2(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - m := &model.Model{} - rs := rules.NewRuleSet(m, m.NewEvent, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `(open.file.path == "/etc/shadow" || open.file.path == "/etc/gshadow") && process.ancestors.file.path not in ["/usr/bin/dpkg"]`) capabilities, exists := allCapabilities["open"] if !exists { @@ -91,8 +89,7 @@ func TestApproverAncestors3(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - m := &model.Model{} - rs := rules.NewRuleSet(m, m.NewEvent, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/var/run/secrets/eks.amazonaws.com/serviceaccount/*/token" && process.file.path not in ["/bin/kubectl"]`) capabilities, exists := allCapabilities["open"] if !exists { diff --git a/pkg/security/probe/cgroups_monitor.go b/pkg/security/probe/cgroups_monitor.go index 0a3af6fec86b9..e9989dd2df7ea 100644 --- a/pkg/security/probe/cgroups_monitor.go +++ b/pkg/security/probe/cgroups_monitor.go @@ -9,58 +9,28 @@ package probe import ( - "sync" - "github.com/DataDog/datadog-agent/pkg/security/metrics" + "github.com/DataDog/datadog-agent/pkg/security/probe/resolvers" "github.com/DataDog/datadog-go/v5/statsd" ) // CgroupsMonitor defines a cgroup monitor type CgroupsMonitor struct { - sync.Mutex - statsdClient statsd.ClientInterface - ids map[string]uint64 // pid having a container ID -} - -// AddID add a new ID -func (cm *CgroupsMonitor) AddID(id string) { - cm.Lock() - if count, exists := cm.ids[id]; exists { - cm.ids[id] = count + 1 - } else { - cm.ids[id] = 1 - } - cm.Unlock() -} - -// AddID add a new ID -func (cm *CgroupsMonitor) DelID(id string) { - cm.Lock() - if count, exists := cm.ids[id]; exists { - if count == 1 { - delete(cm.ids, id) - } else { - cm.ids[id] = count - 1 - } - } - cm.Unlock() + statsdClient statsd.ClientInterface + cgroupsResolver *resolvers.CgroupsResolver } // SendStats send stats func (cm *CgroupsMonitor) SendStats() error { - cm.Lock() - defer cm.Unlock() - - count := len(cm.ids) + count := cm.cgroupsResolver.Len() _ = cm.statsdClient.Gauge(metrics.MetricRuntimeCgroupsRunning, float64(count), []string{}, 1.0) - return nil } // NewCgroupsMonitor returns a new cgroups monitor -func NewCgroupsMonitor(statsdClient statsd.ClientInterface) *CgroupsMonitor { +func NewCgroupsMonitor(statsdClient statsd.ClientInterface, cgrouspResolver *resolvers.CgroupsResolver) *CgroupsMonitor { return &CgroupsMonitor{ - statsdClient: statsdClient, - ids: make(map[string]uint64), + statsdClient: statsdClient, + cgroupsResolver: cgrouspResolver, } } diff --git a/pkg/security/probe/constantfetch/btfhub/constants.json b/pkg/security/probe/constantfetch/btfhub/constants.json index 912fd378f08e8..21ad885cca88a 100644 --- a/pkg/security/probe/constantfetch/btfhub/constants.json +++ b/pkg/security/probe/constantfetch/btfhub/constants.json @@ -1,5 +1,5 @@ { - "commit": "cc5e57e0fc5d9ae5064ee3cfbb34dc9d811cfbae", + "commit": "fa7de76440ec9865967483301b2bf32eebac2690", "constants": [ { "binprm_file_offset": 168, @@ -1014,6 +1014,72 @@ "tty_name_offset": 496, "tty_offset": 440 }, + { + "binprm_file_offset": 64, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 88, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 496, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "net_device_ifindex_offset": 256, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 96, + "pipe_inode_info_bufs_offset": 152, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 360, + "tty_offset": 400 + }, + { + "binprm_file_offset": 64, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 88, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 512, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 168, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "net_device_ifindex_offset": 256, + "net_ns_offset": 264, + "nf_conn_ct_net_offset": 192, + "pid_level_offset": 4, + "pid_numbers_offset": 176, + "pipe_inode_info_bufs_offset": 240, + "sb_magic_offset": 96, + "sizeof_inode": 760, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 488, + "tty_offset": 440 + }, { "binprm_file_offset": 168, "bpf_map_type_offset": 8, @@ -1287,105 +1353,6 @@ "tty_name_offset": 368, "tty_offset": 408 }, - { - "binprm_file_offset": 48, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 168, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_name_offset": 176, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, - "bpf_prog_type_offset": 4, - "creds_uid_offset": 4, - "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 88, - "net_device_ifindex_offset": 264, - "net_ns_offset": 112, - "nf_conn_ct_net_offset": 144, - "pid_level_offset": 4, - "pid_numbers_offset": 80, - "pipe_inode_info_bufs_offset": 120, - "sb_magic_offset": 96, - "sizeof_inode": 584, - "sizeof_upid": 16, - "sock_common_skc_family_offset": 16, - "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, - "tty_name_offset": 368, - "tty_offset": 400 - }, - { - "binprm_file_offset": 64, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 88, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 28, - "bpf_prog_aux_name_offset": 416, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, - "bpf_prog_type_offset": 4, - "creds_uid_offset": 4, - "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 80, - "net_device_ifindex_offset": 256, - "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, - "pid_level_offset": 4, - "pid_numbers_offset": 96, - "pipe_inode_info_bufs_offset": 152, - "sb_magic_offset": 96, - "sizeof_inode": 600, - "sizeof_upid": 16, - "sock_common_skc_family_offset": 16, - "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, - "tty_name_offset": 368, - "tty_offset": 408 - }, - { - "binprm_file_offset": 48, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 168, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_name_offset": 176, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, - "bpf_prog_type_offset": 4, - "creds_uid_offset": 4, - "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 88, - "net_device_ifindex_offset": 264, - "net_ns_offset": 112, - "nf_conn_ct_net_offset": 144, - "pid_level_offset": 4, - "pid_numbers_offset": 80, - "pipe_inode_info_bufs_offset": 120, - "sb_magic_offset": 96, - "sizeof_inode": 584, - "sizeof_upid": 16, - "sock_common_skc_family_offset": 16, - "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, - "tty_name_offset": 368, - "tty_offset": 408 - }, { "binprm_file_offset": 168, "bpf_map_id_offset": 48, @@ -1662,10 +1629,110 @@ "tty_name_offset": 368, "tty_offset": 368 }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 8, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 96, + "sizeof_inode": 560, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 408 + }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 8, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 96, + "sizeof_inode": 568, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 408 + }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 8, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 96, + "sizeof_inode": 568, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 384 + }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 4, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 96, + "sizeof_inode": 560, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 408 + }, { "binprm_file_offset": 168, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 176, + "bpf_map_name_offset": 112, "bpf_map_type_offset": 24, "bpf_prog_aux_id_offset": 16, "bpf_prog_aux_name_offset": 128, @@ -1680,7 +1747,6 @@ "flowi6_uli_offset": 76, "net_device_ifindex_offset": 264, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, @@ -1694,15 +1760,14 @@ "tty_offset": 368 }, { - "binprm_file_offset": 48, + "binprm_file_offset": 168, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 168, + "bpf_map_name_offset": 112, "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_name_offset": 176, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1710,21 +1775,19 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 96, "net_device_ifindex_offset": 264, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 80, + "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, "sizeof_inode": 600, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, + "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 400 + "tty_offset": 368 }, { "binprm_file_offset": 168, @@ -1785,7 +1848,7 @@ "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 368 + "tty_offset": 376 }, { "binprm_file_offset": 168, @@ -1805,6 +1868,7 @@ "flowi6_uli_offset": 76, "net_device_ifindex_offset": 264, "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, @@ -1835,7 +1899,6 @@ "flowi6_uli_offset": 76, "net_device_ifindex_offset": 264, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, @@ -1846,12 +1909,12 @@ "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 368 + "tty_offset": 376 }, { "binprm_file_offset": 168, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 112, + "bpf_map_name_offset": 176, "bpf_map_type_offset": 24, "bpf_prog_aux_id_offset": 16, "bpf_prog_aux_name_offset": 128, @@ -1866,6 +1929,7 @@ "flowi6_uli_offset": 76, "net_device_ifindex_offset": 264, "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, @@ -1876,7 +1940,40 @@ "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 376 + "tty_offset": 368 + }, + { + "binprm_file_offset": 48, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 168, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 24, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 96, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 80, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 368, + "tty_offset": 400 }, { "binprm_file_offset": 168, @@ -2074,6 +2171,39 @@ "tty_name_offset": 360, "tty_offset": 400 }, + { + "binprm_file_offset": 64, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 88, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 416, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "net_device_ifindex_offset": 256, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 96, + "pipe_inode_info_bufs_offset": 152, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 368, + "tty_offset": 408 + }, { "binprm_file_offset": 64, "bpf_map_id_offset": 48, @@ -2571,6 +2701,20 @@ "uname_release": "4.14.296-222.539.amzn2.aarch64", "cindex": 2 }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.299-223.520.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.301-224.520.amzn2.aarch64", + "cindex": 2 + }, { "distrib": "amzn", "version": "2", @@ -3089,6 +3233,20 @@ "uname_release": "4.14.296-222.539.amzn2.x86_64", "cindex": 5 }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.299-223.520.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.301-224.520.amzn2.x86_64", + "cindex": 5 + }, { "distrib": "amzn", "version": "2", @@ -4419,6 +4577,13 @@ "uname_release": "3.10.0-1160.76.1.el7.x86_64", "cindex": 25 }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.80.1.el7.x86_64", + "cindex": 25 + }, { "distrib": "centos", "version": "7", @@ -5175,10988 +5340,14355 @@ "uname_release": "4.19.0-21-rt-amd64", "cindex": 35 }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "5.10.0-0.deb10.20-amd64", + "cindex": 36 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "5.10.0-0.deb10.20-cloud-amd64", + "cindex": 36 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "5.10.0-0.deb10.20-rt-amd64", + "cindex": 37 + }, { "distrib": "debian", "version": "9", "arch": "arm64", "uname_release": "4.9.0-13-arm64", - "cindex": 36 + "cindex": 38 }, { "distrib": "debian", "version": "9", "arch": "x86_64", "uname_release": "4.9.0-13-amd64", - "cindex": 36 + "cindex": 38 }, { "distrib": "debian", "version": "9", "arch": "x86_64", "uname_release": "4.9.0-13-rt-amd64", - "cindex": 37 + "cindex": 39 }, { "distrib": "fedora", "version": "29", "arch": "arm64", "uname_release": "4.18.16-300.fc29.aarch64", - "cindex": 38 + "cindex": 40 }, { "distrib": "fedora", "version": "29", "arch": "arm64", "uname_release": "5.3.11-100.fc29.aarch64", - "cindex": 39 + "cindex": 41 }, { "distrib": "fedora", "version": "29", "arch": "x86_64", "uname_release": "4.18.16-300.fc29.x86_64", - "cindex": 40 + "cindex": 42 }, { "distrib": "fedora", "version": "29", "arch": "x86_64", "uname_release": "5.3.11-100.fc29.x86_64", - "cindex": 41 + "cindex": 43 }, { "distrib": "fedora", "version": "30", "arch": "arm64", "uname_release": "5.0.9-301.fc30.aarch64", - "cindex": 42 + "cindex": 44 }, { "distrib": "fedora", "version": "30", "arch": "arm64", "uname_release": "5.6.13-100.fc30.aarch64", - "cindex": 43 + "cindex": 45 }, { "distrib": "fedora", "version": "30", "arch": "x86_64", "uname_release": "5.0.9-301.fc30.x86_64", - "cindex": 44 + "cindex": 46 }, { "distrib": "fedora", "version": "30", "arch": "x86_64", "uname_release": "5.6.13-100.fc30.x86_64", - "cindex": 43 - }, - { - "distrib": "fedora", - "version": "31", - "arch": "arm64", - "uname_release": "5.3.7-301.fc31.aarch64", "cindex": 45 }, - { - "distrib": "fedora", - "version": "31", - "arch": "arm64", - "uname_release": "5.8.18-100.fc31.aarch64", - "cindex": 46 - }, - { - "distrib": "fedora", - "version": "31", - "arch": "x86_64", - "uname_release": "5.3.7-301.fc31.x86_64", - "cindex": 47 - }, - { - "distrib": "fedora", - "version": "31", - "arch": "x86_64", - "uname_release": "5.8.18-100.fc31.x86_64", - "cindex": 46 - }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.300.11.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.301.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.302.0.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.302.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.302.2.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.303.0.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.303.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.303.2.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.303.4.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.303.5.3.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.304.5.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.304.6.3.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.304.6.4.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.304.6.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.305.0.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.305.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.305.4.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.305.4.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.306.2.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.306.2.10.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.306.2.12.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.306.2.13.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.306.2.14.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.306.2.2.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.306.2.4.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.306.2.5.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.306.2.7.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.306.2.8.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1902.306.2.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1903.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1904.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1905.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1906.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1907.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1908.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1909.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1910a.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1911.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1912.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1915.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1916.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1917.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1923.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1929.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1933.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-1941.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2013.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2015.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2016.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2017.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2018.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2019.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2020.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.400.3.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.400.8.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.400.9.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.400.9.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.401.4.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.402.0.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.402.2.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.403.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.403.2.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.403.3.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.403.4.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.403.5.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.404.0.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.404.1.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.404.1.2.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.405.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.405.2.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2025.405.3.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2039.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2040.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2041.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.500.10.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.500.5.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.500.9.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.500.9.3.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.501.0.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.501.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.501.2.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.502.3.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.502.4.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.502.4.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.502.5.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.503.0.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.503.1.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.503.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.504.0.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.504.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.504.2.3.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.504.2.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.505.0.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.505.1.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.505.2.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.505.3.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.505.4.2.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.505.4.3.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.505.4.4.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.505.4.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.506.0.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.506.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.506.10.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.506.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.506.4.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.506.8.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.506.8.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.507.0.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.507.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.507.7.4.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.507.7.5.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.507.7.6.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.508.3.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.508.3.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.508.3.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.508.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.509.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.509.2.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.509.2.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.510.0.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.510.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.510.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.510.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.510.4.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.510.5.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.510.5.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.510.5.4.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.510.5.5.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.510.5.6.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.0.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.5.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.5.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.5.4.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.5.5.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.5.5.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.5.5.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.5.6.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.5.7.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.5.8.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.511.5.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.512.0.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.512.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.512.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.512.4.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.512.5.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.512.6.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.513.0.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.513.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.513.2.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.513.2.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.513.2.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.513.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.514.0.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.514.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.514.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.514.5.1.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.514.5.1.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.514.5.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.515.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.516.1.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.516.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.516.2.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.516.2.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.516.2.4.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.516.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.517.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.517.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.517.3.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.517.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.518.0.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.518.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.518.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.518.3.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.518.4.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.518.4.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.518.4.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.519.0.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.519.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.519.2.1.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.519.2.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2047.520.0.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", - "uname_release": "4.14.35-2048.el7uek.aarch64", + "uname_release": "4.14.35-2047.520.1.el7uek.aarch64", "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", - "uname_release": "4.14.35-2049.el7uek.aarch64", + "uname_release": "4.14.35-2047.520.2.el7uek.aarch64", "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", - "uname_release": "4.14.35-2050.el7uek.aarch64", + "uname_release": "4.14.35-2047.520.3.1.el7uek.aarch64", "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", - "uname_release": "4.14.35-2051.el7uek.aarch64", + "uname_release": "4.14.35-2047.521.1.el7uek.aarch64", "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", - "uname_release": "4.14.35-2052.el7uek.aarch64", + "uname_release": "4.14.35-2047.521.2.el7uek.aarch64", "cindex": 48 }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2048.el7uek.aarch64", + "cindex": 47 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2049.el7uek.aarch64", + "cindex": 47 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2050.el7uek.aarch64", + "cindex": 47 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2051.el7uek.aarch64", + "cindex": 47 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2052.el7uek.aarch64", + "cindex": 47 + }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2102.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2103.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2104.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2105.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2106.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2108.el7uek.aarch64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2109.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2110.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2111.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2112.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2113.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2114.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2115.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2116.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2118.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2120.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2121.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2122.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "4.14.35-2124.el7uek.aarch64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.0-1948.3.el7uek.aarch64", - "cindex": 50 + "cindex": 49 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2006.5.el7uek.aarch64", - "cindex": 50 + "cindex": 49 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2011.4.6.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2011.6.2.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2028.2.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2036.100.1.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2036.100.3.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2036.100.6.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2036.101.0.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2036.101.1.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2036.101.2.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2036.102.0.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2036.103.2.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2036.104.0.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2036.104.2.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2036.105.1.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2036.105.3.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2040.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2041.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2051.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.200.7.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.200.9.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.202.4.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.202.5.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.203.3.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.203.4.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.204.0.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.204.1.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.204.2.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.204.3.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.204.4.3.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.205.2.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.205.7.2.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.205.7.3.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2102.206.1.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2106.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2108.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2109.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2111.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2114.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2118.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2120.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2122.303.5.el7uek.aarch64", - "cindex": 52 + "cindex": 51 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2122.el7uek.aarch64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2136.300.7.el7uek.aarch64", - "cindex": 52 + "cindex": 51 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.17-2136.301.0.el7uek.aarch64", - "cindex": 52 + "cindex": 51 }, { "distrib": "ol", "version": "7", "arch": "arm64", "uname_release": "5.4.2-1950.2.el7uek.aarch64", - "cindex": 50 + "cindex": 49 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1127.0.0.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1127.10.1.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1127.10.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1127.13.1.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1127.13.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1127.18.2.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1127.18.2.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1127.19.1.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1127.19.1.0.2.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1127.19.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1127.8.2.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1127.8.2.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.11.1.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.11.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.15.2.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.15.2.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.2.1.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.2.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.2.2.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.2.2.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.21.1.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.21.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.24.1.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.24.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.25.1.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.25.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.31.1.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.31.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.36.2.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.36.2.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.41.1.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.41.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.42.2.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.42.2.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.45.1.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.45.1.0.2.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.45.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.6.1.0.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.6.1.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "3.10.0-1160.el7.x86_64", - "cindex": 53 + "cindex": 52 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.300.11.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.301.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.302.0.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.302.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.302.2.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.303.0.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.303.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.303.2.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.303.4.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.303.5.3.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.304.4.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.304.5.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.304.6.3.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.304.6.4.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.304.6.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.305.0.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.305.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.305.4.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.305.4.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.306.2.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.306.2.12.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.306.2.13.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.306.2.14.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.306.2.2.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.306.2.4.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.306.2.5.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.306.2.7.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.306.2.8.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1902.306.2.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1903.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1904.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1905.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1906.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1907.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1908.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1909.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1910a.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1911.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1912.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1915.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1916.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1917.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1923.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1929.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1933.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-1941.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2013.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2015.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2016.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2017.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2018.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2019.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2020.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.400.3.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.400.8.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.400.9.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.400.9.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.401.4.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.402.0.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.402.2.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.403.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.403.2.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.403.3.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.403.4.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.403.5.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.404.0.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.404.1.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.404.1.2.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.405.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.405.2.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2025.405.3.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2039.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2040.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2041.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.500.10.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.500.5.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.500.9.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.500.9.3.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.501.0.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.501.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.501.2.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.502.3.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.502.4.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.502.4.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.502.5.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.503.0.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.503.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.504.0.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.504.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.504.2.3.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.504.2.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.505.0.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.505.1.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.505.2.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.505.3.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.505.4.2.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.505.4.3.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.505.4.4.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.505.4.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.506.0.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.506.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.506.10.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.506.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.506.4.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.506.8.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.506.8.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.507.0.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.507.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.507.7.4.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.507.7.5.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.507.7.6.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.508.3.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.508.3.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.508.3.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.508.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.509.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.509.2.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.509.2.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.510.0.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.510.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.510.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.510.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.510.4.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.510.5.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.510.5.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.510.5.4.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.510.5.5.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.510.5.6.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.0.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.5.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.5.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.5.4.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.5.5.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.5.5.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.5.5.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.5.6.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.5.7.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.5.8.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.511.5.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.512.0.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.512.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.512.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.512.4.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.512.5.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.512.6.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.513.0.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.513.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.513.2.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.513.2.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.513.2.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.513.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.514.0.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.514.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.514.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.514.5.1.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.514.5.1.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.514.5.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.515.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.516.1.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.516.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.516.2.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.516.2.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.516.2.4.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.516.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.517.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.517.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.517.3.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.517.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.518.0.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.518.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.518.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.518.3.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.518.4.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.518.4.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.518.4.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.519.0.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.519.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.519.2.1.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.519.2.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2047.520.0.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", - "uname_release": "4.14.35-2048.el7uek.x86_64", + "uname_release": "4.14.35-2047.520.1.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", - "uname_release": "4.14.35-2049.el7uek.x86_64", + "uname_release": "4.14.35-2047.520.2.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", - "uname_release": "4.14.35-2050.el7uek.x86_64", + "uname_release": "4.14.35-2047.520.3.1.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", - "uname_release": "4.14.35-2051.el7uek.x86_64", + "uname_release": "4.14.35-2047.521.1.el7uek.x86_64", "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", - "uname_release": "4.14.35-2052.el7uek.x86_64", + "uname_release": "4.14.35-2047.521.2.el7uek.x86_64", "cindex": 48 }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2048.el7uek.x86_64", + "cindex": 47 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2049.el7uek.x86_64", + "cindex": 47 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2050.el7uek.x86_64", + "cindex": 47 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2051.el7uek.x86_64", + "cindex": 47 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2052.el7uek.x86_64", + "cindex": 47 + }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2102.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2103.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2104.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2105.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2106.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2108.el7uek.x86_64", - "cindex": 48 + "cindex": 47 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2109.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2110.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2111.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2112.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2113.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2114.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2115.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2116.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2118.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2120.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2121.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2122.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "4.14.35-2124.el7uek.x86_64", - "cindex": 49 + "cindex": 48 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.0-1948.3.el7uek.x86_64", - "cindex": 54 + "cindex": 53 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2006.5.el7uek.x86_64", - "cindex": 50 + "cindex": 49 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2011.0.7.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2011.1.2.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2011.2.2.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2011.3.2.1.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2011.4.4.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2011.4.6.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2011.5.3.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2011.6.2.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2011.7.4.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2028.2.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.100.1.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.100.3.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.100.6.1.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.100.6.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.101.0.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.101.1.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.101.2.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.102.0.2.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.102.0.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.103.2.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.103.3.1.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.103.3.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.104.0.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.104.2.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.104.4.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.104.5.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.105.1.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2036.105.3.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2040.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2041.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2051.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2102.200.13.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2102.200.7.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2102.200.9.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2102.201.3.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2102.202.4.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2102.202.5.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2102.203.3.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2102.203.4.el7uek.x86_64", - "cindex": 51 + "cindex": 50 }, { "distrib": "ol", "version": "7", "arch": "x86_64", "uname_release": "5.4.17-2102.203.5.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.6.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.0.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.1.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.2.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.3.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.4.2.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.4.3.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.4.4.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.2.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.7.2.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.7.3.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.206.1.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2106.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2108.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2109.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2111.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2114.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2118.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2120.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2122.303.5.el7uek.x86_64", + "cindex": 51 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2122.el7uek.x86_64", + "cindex": 50 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2136.300.7.el7uek.x86_64", + "cindex": 51 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2136.301.0.el7uek.x86_64", "cindex": 51 }, { - "distrib": "ol", - "version": "7", + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.2-1950.2.el7uek.x86_64", + "cindex": 49 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.0.2.el8_1.aarch64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.0.3.el8_1.aarch64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.3.1.el8_1.aarch64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.5.1.el8_1.aarch64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.8.1.el8_1.aarch64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.el8.aarch64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.1.2.el8_0.aarch64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.11.1.el8_0.aarch64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.11.2.el8_0.aarch64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.4.2.el8_0.aarch64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.7.1.el8_0.aarch64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.7.2.el8_0.aarch64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.el8.aarch64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.0.2.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.0.3.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.13.2.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.20.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.24.2.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.27.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.3.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.32.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.34.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.38.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.43.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.44.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.48.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.5.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.51.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.51.2.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.52.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.54.2.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.56.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.57.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.8.1.el8_1.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.el8.x86_64", + "cindex": 32 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.1.2.el8_0.x86_64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.11.1.el8_0.x86_64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.11.2.el8_0.x86_64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.4.2.el8_0.x86_64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.7.1.el8_0.x86_64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.7.2.el8_0.x86_64", + "cindex": 33 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.el8.x86_64", + "cindex": 33 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-101-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-106-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-107-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1094-aws", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1095-aws", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1096-aws", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1097-aws", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1098-aws", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1099-aws", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-112-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-115-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-117-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-118-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-120-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-122-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-123-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-128-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-129-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-132-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-133-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-136-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-137-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-139-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-140-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-142-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-52-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-54-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-55-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-58-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-60-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-62-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-64-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-65-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-66-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-69-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-70-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-72-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-74-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-76-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-88-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-91-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-96-generic", + "cindex": 55 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-99-generic", + "cindex": 54 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-150-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-151-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-154-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-157-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-159-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-161-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-164-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-165-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-166-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-168-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-169-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-170-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-171-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-173-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-174-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-176-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-177-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-178-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-179-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-184-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-185-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-186-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-187-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-189-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-190-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-193-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-194-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-197-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-198-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-200-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-201-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-203-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-204-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-206-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-208-generic", + "cindex": 58 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-209-generic", + "cindex": 58 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-21-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-210-generic", + "cindex": 58 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-101-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1013-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1014-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1018-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1018-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1019-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1019-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1021-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1021-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1022-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1023-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1023-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1024-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1025-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1025-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1026-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1027-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1028-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1028-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1029-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1030-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1030-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1031-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1032-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1032-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1033-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1034-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1035-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1036-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1036-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1037-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1037-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1039-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1040-azure", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1040-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1041-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1041-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1042-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1042-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1044-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1045-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1046-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1046-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1047-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1047-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1049-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1049-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1050-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1050-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1051-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1052-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1052-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1055-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1055-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1056-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1057-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1058-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1059-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-106-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1060-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1060-gcp", + "cindex": 62 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1061-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1061-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1063-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1064-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1066-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1067-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1069-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-107-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1071-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1071-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1075-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1077-azure", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1077-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1078-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1080-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1081-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1082-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1083-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1083-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1084-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1086-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1087-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1089-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1090-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1091-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1091-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1092-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1092-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1093-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1093-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1094-aws", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1094-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1095-aws", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1095-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1095-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1096-aws", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1096-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1096-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1097-aws", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1097-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1098-aws", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1098-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1098-gcp", + "cindex": 64 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1099-aws", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1102-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1103-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1106-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1108-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1109-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1110-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1111-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1112-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1113-azure", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-112-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-115-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-117-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-118-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-120-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-122-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-123-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-128-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-129-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-13-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-132-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-133-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-136-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-137-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-139-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-140-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-142-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-15-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-20-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-22-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-23-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-24-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-29-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-30-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-32-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-33-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-34-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-36-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-38-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-39-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-42-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-43-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-45-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-46-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-47-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-48-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-50-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-51-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-52-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-54-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-55-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-58-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-60-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-62-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-64-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-65-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-66-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-69-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-70-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-72-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-74-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-76-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-88-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-91-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-96-generic", + "cindex": 61 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-99-generic", + "cindex": 60 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-101-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1016-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1017-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1018-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1020-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1022-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1026-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1028-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-103-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1030-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1031-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1032-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1035-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1037-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1038-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1039-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-104-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1041-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1043-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1044-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1047-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1048-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1049-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1050-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1052-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1054-aws", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1055-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1057-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1060-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1061-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1062-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1063-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1065-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1066-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1067-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1069-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1070-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1072-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1073-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1074-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1075-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1077-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1079-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-108-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1081-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1083-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1084-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1085-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1087-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1088-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-109-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1090-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1092-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1094-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1095-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1096-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1098-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1099-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1100-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1101-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1102-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1104-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1105-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1106-aws", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1107-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1109-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1110-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1111-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1112-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1113-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1114-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1117-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1118-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1119-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-112-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1121-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1122-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1123-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1124-aws", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1126-aws", + "cindex": 58 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1127-aws", + "cindex": 58 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1128-aws", + "cindex": 58 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-116-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-119-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-121-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-122-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-124-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-127-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-128-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-130-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-131-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-133-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-134-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-135-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-137-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-138-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-139-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-140-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-141-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-142-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-143-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-145-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-146-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-148-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-150-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-151-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-154-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-157-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-159-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-161-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-164-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-165-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-166-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-168-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-169-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-170-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-171-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-173-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-174-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-176-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-177-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-178-generic", + "cindex": 56 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-179-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-184-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-185-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-186-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-187-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-189-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-190-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-193-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-194-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-197-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-198-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-200-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-201-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-203-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-204-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-206-generic", + "cindex": 57 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-208-generic", + "cindex": 58 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-209-generic", + "cindex": 58 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-21-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-210-generic", + "cindex": 58 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-22-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-24-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-28-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-31-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-34-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-36-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-38-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-42-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-43-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-45-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-47-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-51-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-53-generic", + "cindex": 59 + }, + { + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.203.6.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-57-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.0.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-59-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.1.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-62-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-63-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.3.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-64-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.4.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-66-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.4.3.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-67-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.4.4.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-70-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.205.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-71-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.205.7.2.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-72-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.205.7.3.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-75-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.206.1.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-77-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2106.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-78-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2108.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-79-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2109.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-81-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2111.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-83-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2114.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-87-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2118.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-89-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2120.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-91-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2122.303.5.el7uek.x86_64", - "cindex": 52 + "uname_release": "4.4.0-92-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2122.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.4.0-93-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2136.300.7.el7uek.x86_64", - "cindex": 52 + "uname_release": "4.4.0-96-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.17-2136.301.0.el7uek.x86_64", - "cindex": 52 + "uname_release": "4.4.0-97-generic", + "cindex": 59 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.2-1950.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.4.0-98-generic", + "cindex": 59 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-101-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1041-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1043-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1044-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1045-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1047-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1048-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1050-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1051-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1052-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1054-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1056-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1057-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1058-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-106-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1060-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1063-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1065-aws", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1066-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1067-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1073-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1076-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1077-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1079-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-108-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1080-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1082-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1083-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1086-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1087-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-109-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1090-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1091-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1092-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1093-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1094-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1095-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1096-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1097-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1098-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1099-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1101-aws", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1102-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1103-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1106-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1109-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-111-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1110-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1111-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1112-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1114-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1115-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1116-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1118-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1119-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-112-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1121-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1123-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1124-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1126-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1127-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1128-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1130-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1133-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1136-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1139-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1140-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1141-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-1142-aws", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-115-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-117-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-118-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-121-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-122-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-123-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-124-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-128-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-129-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-130-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-132-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-134-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-135-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-136-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-137-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-139-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-140-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-141-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-142-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-143-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-144-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-147-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-151-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-153-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-154-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-156-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-158-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-159-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-161-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-162-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-163-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-166-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-167-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-169-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-171-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-173-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-175-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-176-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-177-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-180-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-184-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-187-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-188-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-189-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-191-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-192-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-193-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-194-generic", - "cindex": 57 + "cindex": 66 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-20-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-52-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-54-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-55-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-58-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-60-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-62-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-64-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-65-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-66-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-69-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-70-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-72-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-74-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-76-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-88-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-91-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-96-generic", - "cindex": 56 + "cindex": 55 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "4.15.0-99-generic", - "cindex": 55 + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1018-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1020-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1022-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1024-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1025-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1028-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1029-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1032-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1034-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1035-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1037-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1038-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1039-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1041-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1043-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1045-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1047-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1048-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1049-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1051-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1054-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1055-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1056-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1057-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1058-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1059-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-1060-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-37-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-39-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-40-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-42-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-45-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-47-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-48-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-51-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-52-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-53-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-54-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-58-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-59-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-60-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-62-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-64-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-65-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-66-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-67-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-70-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-71-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-72-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-73-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-74-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-77-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-80-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-81-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-84-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-86-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-87-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-89-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-90-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "arm64", "uname_release": "5.4.0-91-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1006-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1007-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1008-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1009-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1009-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1009-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-101-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1010-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1010-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1011-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1012-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1013-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1014-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1014-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1015-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1016-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1017-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1017-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1018-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1018-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1019-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1019-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1019-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1020-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1021-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1021-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1021-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1022-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1023-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1023-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1023-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1024-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1025-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1025-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1025-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1026-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1027-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1027-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1028-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1028-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1029-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1029-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1030-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1030-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1030-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1031-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1031-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1032-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1032-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1032-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1032-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1033-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1033-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1033-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1034-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1034-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1034-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1035-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1035-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1036-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1036-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1036-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1037-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1037-azure", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1037-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1037-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1039-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1040-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1040-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1040-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1041-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1041-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1042-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1042-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1043-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1044-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1044-gcp", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1044-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1045-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1045-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1046-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1047-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1048-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1048-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1049-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1050-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1050-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1051-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1052-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1052-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1054-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1055-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1056-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1057-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1057-gke", - "cindex": 59 + "cindex": 62 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1058-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1058-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1059-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-106-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1060-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1063-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1063-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1064-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1065-aws", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1066-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1066-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1067-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1067-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1069-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1070-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1072-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1073-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1073-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1076-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1076-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1077-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1077-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1078-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1079-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1079-gke", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-108-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1080-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1082-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1082-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1083-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1083-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1086-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1087-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1089-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-109-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1090-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1091-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1091-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1092-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1092-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1093-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1093-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1093-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1094-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1094-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1095-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1095-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1095-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1096-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1096-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1096-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1097-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1097-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1098-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1098-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1099-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1099-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1099-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1100-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1101-aws", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1102-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1102-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1103-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1103-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1103-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1104-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1106-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1106-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1106-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1107-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1108-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1108-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1109-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1109-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1109-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-111-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1110-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1110-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1110-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1111-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1111-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1111-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1112-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1112-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1112-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1113-azure", - "cindex": 63 + "cindex": 65 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1114-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1114-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1114-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1115-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1115-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1115-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1116-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1116-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1118-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1118-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1118-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1119-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1119-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-112-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1120-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1121-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1121-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1121-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1122-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1122-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1123-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1123-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1124-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1124-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1124-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1125-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1126-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1126-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1127-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1127-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1127-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1128-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1129-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1130-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1130-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1130-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1131-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1131-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1133-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1133-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1134-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1134-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1135-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1136-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1136-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1136-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1137-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1137-gcp", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1138-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1139-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1139-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1140-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1141-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1142-aws", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1142-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1145-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1149-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-115-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1150-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1151-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-1153-azure", - "cindex": 64 + "cindex": 68 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-117-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-118-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-121-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-122-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-123-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-124-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-128-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-129-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-130-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-132-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-134-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-135-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-136-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-137-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-139-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-140-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-141-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-142-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-143-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-144-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-147-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-151-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-153-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-154-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-156-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-158-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-159-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-161-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-162-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-163-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-166-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-167-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-169-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-171-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-173-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-175-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-176-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-177-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-180-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-184-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-187-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-188-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-191-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-192-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-193-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-194-generic", - "cindex": 62 + "cindex": 64 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-20-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-22-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-23-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-24-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-29-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-30-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-32-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-33-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-34-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-36-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-38-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-39-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-42-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-43-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-44-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-45-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-46-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-47-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-48-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-50-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-51-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-52-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-54-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-55-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-58-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-60-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-62-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-64-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-65-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-66-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-69-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-70-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-72-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-74-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-76-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-88-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-91-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-96-generic", - "cindex": 60 + "cindex": 61 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "4.15.0-99-generic", - "cindex": 61 + "cindex": 60 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1018-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1019-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1020-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1020-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1021-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1022-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1022-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1022-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1023-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1024-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1024-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1025-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1025-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1025-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1025-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1026-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1027-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1028-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1028-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1029-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1029-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1029-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1031-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1032-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1032-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1032-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1033-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1033-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1034-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1034-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1034-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1035-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1035-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1035-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1036-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1036-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1036-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1037-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1037-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1037-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1038-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1038-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1039-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1039-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1039-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1040-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1040-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1040-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1041-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1041-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1041-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1042-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1042-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1043-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1043-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1043-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1043-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1044-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1044-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1044-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1045-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1046-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1046-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1046-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1047-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1047-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1048-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1048-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1049-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1049-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1049-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1049-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1051-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1051-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1051-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1051-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1052-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1052-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1053-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1053-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1054-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1054-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1055-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1055-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1055-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1055-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1056-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1056-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1056-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1056-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1057-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1057-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1057-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1058-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1058-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1058-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1059-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1059-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1059-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1060-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1061-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1061-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1062-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1062-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1063-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1063-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1064-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1065-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1066-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1067-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-37-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-39-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-40-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-42-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-45-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-47-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-48-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-51-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-52-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-53-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-54-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-58-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-59-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-60-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-62-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-64-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-65-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-66-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-67-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-70-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-71-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-72-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-73-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-74-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-77-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-80-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-81-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-84-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-86-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-87-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-89-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-90-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-91-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1009-aws", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1014-aws", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1016-aws", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1017-aws", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1019-aws", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1020-aws", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1025-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1027-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1009-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1011-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1015-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1017-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1018-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1020-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1021-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1022-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1024-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1025-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1028-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1029-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1032-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1034-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1035-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1037-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1038-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1039-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1041-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1043-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1045-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1047-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1048-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1049-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1051-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1054-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1055-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1056-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1057-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1058-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1059-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1060-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-26-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-28-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-29-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-31-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-33-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-37-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-39-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-40-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-42-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-45-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-47-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-48-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-51-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-52-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-53-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-54-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-58-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-59-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-60-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-62-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-64-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-65-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-66-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-67-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-70-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-71-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-72-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-73-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-74-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-77-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-80-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-81-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-84-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-86-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-88-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-89-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-90-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-91-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-1035-aws", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-1038-aws", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-1041-aws", - "cindex": 69 + "cindex": 73 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-1042-aws", - "cindex": 69 + "cindex": 73 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-23-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-25-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-28-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-29-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-33-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-34-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-36-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-38-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-40-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-41-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-43-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-44-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-45-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-48-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-49-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-50-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-53-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-55-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-59-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-63-generic", - "cindex": 69 + "cindex": 73 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1007-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1009-aws", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1009-gcp", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1012-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1013-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1014-aws", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1014-gcp", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1015-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1016-aws", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1017-aws", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1017-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1017-gcp", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1018-gcp", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1019-aws", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1019-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1020-aws", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1020-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1020-gcp", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1021-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1021-gcp", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1022-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1022-gcp", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1023-gcp", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1024-gcp", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1025-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1026-gcp", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1027-azure", - "cindex": 67 + "cindex": 71 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1028-gcp", - "cindex": 66 + "cindex": 70 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1009-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1009-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1010-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1011-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1011-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1012-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1015-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1015-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1016-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1017-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1018-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1018-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1019-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1019-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1020-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1020-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1021-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1021-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1022-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1022-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1022-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1023-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1024-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1024-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1025-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1025-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1025-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1026-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1028-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1028-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1029-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1029-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1031-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1032-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1032-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1033-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1033-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1034-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1034-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1034-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1035-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1035-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1035-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1036-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1036-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1036-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1037-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1037-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1037-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1038-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1038-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1039-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1039-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1039-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1040-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1040-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1041-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1041-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1041-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1041-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1042-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1042-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1043-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1043-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1043-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1043-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1044-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1044-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1044-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1045-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1046-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1046-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1046-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1047-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1047-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1048-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1048-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1049-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1049-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1049-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1049-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1051-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1051-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1051-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1051-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1052-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1052-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1053-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1053-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1054-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1054-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1055-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1055-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1055-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1055-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1056-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1056-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1056-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1056-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1057-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1057-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1057-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1058-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1058-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1058-gcp", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1059-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1059-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1059-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1060-aws", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1061-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1061-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1062-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1062-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1063-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1063-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1064-azure", - "cindex": 65 + "cindex": 69 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1065-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1066-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1067-gke", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-26-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-28-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-29-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-31-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-33-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-37-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-39-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-40-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-42-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-45-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-47-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-48-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-51-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-52-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-53-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-54-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-58-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-59-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-60-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-62-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-64-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-65-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-66-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-67-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-70-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-71-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-72-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-73-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-74-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-77-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-80-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-81-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-84-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-86-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-88-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-89-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-90-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-91-generic", - "cindex": 58 + "cindex": 67 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1032-gcp", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1033-azure", - "cindex": 46 + "cindex": 74 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1035-aws", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1035-gcp", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1036-azure", - "cindex": 46 + "cindex": 74 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1038-aws", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1038-gcp", - "cindex": 69 + "cindex": 73 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1039-azure", - "cindex": 70 + "cindex": 75 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1039-gcp", - "cindex": 69 + "cindex": 73 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1040-azure", - "cindex": 70 + "cindex": 75 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1041-aws", - "cindex": 69 + "cindex": 73 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1041-azure", - "cindex": 70 + "cindex": 75 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1042-aws", - "cindex": 69 + "cindex": 73 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1042-azure", - "cindex": 70 + "cindex": 75 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1043-azure", - "cindex": 70 + "cindex": 75 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-23-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-25-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-28-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-29-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-33-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-34-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-36-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-38-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-40-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-41-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-43-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-44-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-45-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-48-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-49-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-50-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-53-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-55-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-59-generic", - "cindex": 68 + "cindex": 72 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-63-generic", - "cindex": 69 + "cindex": 73 } ] } \ No newline at end of file diff --git a/pkg/security/probe/custom_events.go b/pkg/security/probe/custom_events.go index 92448d64699b5..d3258f45caeb9 100644 --- a/pkg/security/probe/custom_events.go +++ b/pkg/security/probe/custom_events.go @@ -11,101 +11,14 @@ package probe import ( - "encoding/json" "time" - "github.com/hashicorp/go-multierror" - "github.com/mailru/easyjson" - + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/probe/resolvers" - "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) -const ( - // LostEventsRuleID is the rule ID for the lost_events_* events - LostEventsRuleID = "lost_events" - // RulesetLoadedRuleID is the rule ID for the ruleset_loaded events - RulesetLoadedRuleID = "ruleset_loaded" - // NoisyProcessRuleID is the rule ID for the noisy_process events - NoisyProcessRuleID = "noisy_process" - // AbnormalPathRuleID is the rule ID for the abnormal_path events - AbnormalPathRuleID = "abnormal_path" - // SelfTestRuleID is the rule ID for the self_test events - SelfTestRuleID = "self_test" -) - -// AllCustomRuleIDs returns the list of custom rule IDs -func AllCustomRuleIDs() []string { - return []string{ - LostEventsRuleID, - RulesetLoadedRuleID, - NoisyProcessRuleID, - AbnormalPathRuleID, - SelfTestRuleID, - } -} - -func newCustomEvent(eventType model.EventType, marshaler easyjson.Marshaler) *CustomEvent { - return &CustomEvent{ - eventType: eventType, - marshaler: marshaler, - } -} - -// CustomEvent is used to send custom security events to Datadog -type CustomEvent struct { - eventType model.EventType - tags []string - marshaler easyjson.Marshaler -} - -// Clone returns a copy of the current CustomEvent -func (ce *CustomEvent) Clone() CustomEvent { - return CustomEvent{ - eventType: ce.eventType, - tags: ce.tags, - marshaler: ce.marshaler, - } -} - -// GetTags returns the tags of the custom event -func (ce *CustomEvent) GetTags() []string { - return append(ce.tags, "type:"+ce.GetType()) -} - -// GetType returns the type of the custom event as a string -func (ce *CustomEvent) GetType() string { - return ce.eventType.String() -} - -// GetEventType returns the event type -func (ce *CustomEvent) GetEventType() model.EventType { - return ce.eventType -} - -// MarshalJSON is the JSON marshaller function of the custom event -func (ce *CustomEvent) MarshalJSON() ([]byte, error) { - return easyjson.Marshal(ce.marshaler) -} - -// String returns the string representation of a custom event -func (ce *CustomEvent) String() string { - d, err := json.Marshal(ce) - if err != nil { - return err.Error() - } - return string(d) -} - -func newRule(ruleDef *rules.RuleDefinition) *rules.Rule { - return &rules.Rule{ - Rule: &eval.Rule{ID: ruleDef.ID}, - Definition: ruleDef, - } -} - // EventLostRead is the event used to report lost events detected from user space // easyjson:json type EventLostRead struct { @@ -115,14 +28,12 @@ type EventLostRead struct { } // NewEventLostReadEvent returns the rule and a populated custom event for a lost_events_read event -func NewEventLostReadEvent(mapName string, lost float64) (*rules.Rule, *CustomEvent) { - return newRule(&rules.RuleDefinition{ - ID: LostEventsRuleID, - }), newCustomEvent(model.CustomLostReadEventType, EventLostRead{ - Name: mapName, - Lost: lost, - Timestamp: time.Now(), - }) +func NewEventLostReadEvent(mapName string, lost float64) (*rules.Rule, *events.CustomEvent) { + return events.NewCustomRule(events.LostEventsRuleID), events.NewCustomEvent(model.CustomLostReadEventType, EventLostRead{ + Name: mapName, + Lost: lost, + Timestamp: time.Now(), + }) } // EventLostWrite is the event used to report lost events detected from kernel space @@ -134,106 +45,12 @@ type EventLostWrite struct { } // NewEventLostWriteEvent returns the rule and a populated custom event for a lost_events_write event -func NewEventLostWriteEvent(mapName string, perEventPerCPU map[string]uint64) (*rules.Rule, *CustomEvent) { - return newRule(&rules.RuleDefinition{ - ID: LostEventsRuleID, - }), newCustomEvent(model.CustomLostWriteEventType, EventLostWrite{ - Name: mapName, - Lost: perEventPerCPU, - Timestamp: time.Now(), - }) -} - -// RuleLoaded defines a loaded rule -// easyjson:json -type RuleState struct { - ID string `json:"id"` - Version string `json:"version,omitempty"` - Expression string `json:"expression"` - Status string `json:"status"` - Message string `json:"message,omitempty"` -} - -// PolicyState is used to report policy was loaded -// easyjson:json -type PolicyState struct { - Name string `json:"name"` - Version string `json:"version"` - Source string `json:"source"` - Rules []*RuleState `json:"rules"` -} - -// RulesetLoadedEvent is used to report that a new ruleset was loaded -// easyjson:json -type RulesetLoadedEvent struct { - Timestamp time.Time `json:"date"` - Policies []*PolicyState `json:"policies"` -} - -func PolicyStateFromRuleDefinition(def *rules.RuleDefinition) *PolicyState { - return &PolicyState{ - Name: def.Policy.Name, - Version: def.Policy.Version, - Source: def.Policy.Source, - } -} - -func RuleStateFromDefinition(def *rules.RuleDefinition, status string, message string) *RuleState { - return &RuleState{ - ID: def.ID, - Version: def.Version, - Expression: def.Expression, - Status: status, - Message: message, - } -} - -// NewRuleSetLoadedEvent returns the rule and a populated custom event for a new_rules_loaded event -func NewRuleSetLoadedEvent(rs *rules.RuleSet, err *multierror.Error) (*rules.Rule, *CustomEvent) { - mp := make(map[string]*PolicyState) - - var policyState *PolicyState - var exists bool - - for _, policy := range rs.GetPolicies() { - // rule successfully loaded - for _, ruleDef := range policy.Rules { - policyName := ruleDef.Policy.Name - - if policyState, exists = mp[policyName]; !exists { - policyState = PolicyStateFromRuleDefinition(ruleDef) - mp[policyName] = policyState - } - policyState.Rules = append(policyState.Rules, RuleStateFromDefinition(ruleDef, "loaded", "")) - } - } - - // rules ignored due to errors - if err != nil && err.Errors != nil { - for _, err := range err.Errors { - if rerr, ok := err.(*rules.ErrRuleLoad); ok { - policyName := rerr.Definition.Policy.Name - - if _, exists := mp[policyName]; !exists { - policyState = PolicyStateFromRuleDefinition(rerr.Definition) - mp[policyName] = policyState - } - policyState.Rules = append(policyState.Rules, RuleStateFromDefinition(rerr.Definition, string(rerr.Type()), rerr.Err.Error())) - } - } - } - - var policies []*PolicyState - for _, policy := range mp { - policies = append(policies, policy) - } - - return newRule(&rules.RuleDefinition{ - ID: RulesetLoadedRuleID, - }), newCustomEvent(model.CustomRulesetLoadedEventType, RulesetLoadedEvent{ - Timestamp: time.Now(), - Policies: policies, - }) +func NewEventLostWriteEvent(mapName string, perEventPerCPU map[string]uint64) (*rules.Rule, *events.CustomEvent) { + return events.NewCustomRule(events.LostEventsRuleID), events.NewCustomEvent(model.CustomLostWriteEventType, EventLostWrite{ + Name: mapName, + Lost: perEventPerCPU, + Timestamp: time.Now(), + }) } // NoisyProcessEvent is used to report that a noisy process was temporarily discarded @@ -255,19 +72,17 @@ func NewNoisyProcessEvent(count uint64, discardedUntil time.Time, pid uint32, comm string, - timestamp time.Time) (*rules.Rule, *CustomEvent) { + timestamp time.Time) (*rules.Rule, *events.CustomEvent) { - return newRule(&rules.RuleDefinition{ - ID: NoisyProcessRuleID, - }), newCustomEvent(model.CustomNoisyProcessEventType, NoisyProcessEvent{ - Timestamp: timestamp, - Count: count, - Threshold: threshold, - ControlPeriod: controlPeriod, - DiscardedUntil: discardedUntil, - Pid: pid, - Comm: comm, - }) + return events.NewCustomRule(events.NoisyProcessRuleID), events.NewCustomEvent(model.CustomNoisyProcessEventType, NoisyProcessEvent{ + Timestamp: timestamp, + Count: count, + Threshold: threshold, + ControlPeriod: controlPeriod, + DiscardedUntil: discardedUntil, + Pid: pid, + Comm: comm, + }) } func resolutionErrorToEventType(err error) model.EventType { @@ -288,31 +103,10 @@ type AbnormalPathEvent struct { } // NewAbnormalPathEvent returns the rule and a populated custom event for a abnormal_path event -func NewAbnormalPathEvent(event *Event, pathResolutionError error) (*rules.Rule, *CustomEvent) { - return newRule(&rules.RuleDefinition{ - ID: AbnormalPathRuleID, - }), newCustomEvent(resolutionErrorToEventType(event.GetPathResolutionError()), AbnormalPathEvent{ - Timestamp: event.ResolveEventTimestamp(), - Event: NewEventSerializer(event), - PathResolutionError: pathResolutionError.Error(), - }) -} - -// SelfTestEvent is used to report a self test result -// easyjson:json -type SelfTestEvent struct { - Timestamp time.Time `json:"date"` - Success []string `json:"succeeded_tests"` - Fails []string `json:"failed_tests"` -} - -// NewSelfTestEvent returns the rule and the result of the self test -func NewSelfTestEvent(success []string, fails []string) (*rules.Rule, *CustomEvent) { - return newRule(&rules.RuleDefinition{ - ID: SelfTestRuleID, - }), newCustomEvent(model.CustomSelfTestEventType, SelfTestEvent{ - Timestamp: time.Now(), - Success: success, - Fails: fails, - }) +func NewAbnormalPathEvent(event *model.Event, probe *Probe, pathResolutionError error) (*rules.Rule, *events.CustomEvent) { + return events.NewCustomRule(events.AbnormalPathRuleID), events.NewCustomEvent(resolutionErrorToEventType(event.PathResolutionError), AbnormalPathEvent{ + Timestamp: event.FieldHandlers.ResolveEventTimestamp(event), + Event: NewEventSerializer(event, probe), + PathResolutionError: pathResolutionError.Error(), + }) } diff --git a/pkg/security/probe/custom_events_easyjson.go b/pkg/security/probe/custom_events_easyjson.go index 9ced5a716153f..8f9de809272a0 100644 --- a/pkg/security/probe/custom_events_easyjson.go +++ b/pkg/security/probe/custom_events_easyjson.go @@ -21,441 +21,7 @@ var ( _ easyjson.Marshaler ) -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe(in *jlexer.Lexer, out *SelfTestEvent) { - isTopLevel := in.IsStart() - if in.IsNull() { - if isTopLevel { - in.Consumed() - } - in.Skip() - return - } - in.Delim('{') - for !in.IsDelim('}') { - key := in.UnsafeFieldName(false) - in.WantColon() - if in.IsNull() { - in.Skip() - in.WantComma() - continue - } - switch key { - case "date": - if data := in.Raw(); in.Ok() { - in.AddError((out.Timestamp).UnmarshalJSON(data)) - } - case "succeeded_tests": - if in.IsNull() { - in.Skip() - out.Success = nil - } else { - in.Delim('[') - if out.Success == nil { - if !in.IsDelim(']') { - out.Success = make([]string, 0, 4) - } else { - out.Success = []string{} - } - } else { - out.Success = (out.Success)[:0] - } - for !in.IsDelim(']') { - var v1 string - v1 = string(in.String()) - out.Success = append(out.Success, v1) - in.WantComma() - } - in.Delim(']') - } - case "failed_tests": - if in.IsNull() { - in.Skip() - out.Fails = nil - } else { - in.Delim('[') - if out.Fails == nil { - if !in.IsDelim(']') { - out.Fails = make([]string, 0, 4) - } else { - out.Fails = []string{} - } - } else { - out.Fails = (out.Fails)[:0] - } - for !in.IsDelim(']') { - var v2 string - v2 = string(in.String()) - out.Fails = append(out.Fails, v2) - in.WantComma() - } - in.Delim(']') - } - default: - in.SkipRecursive() - } - in.WantComma() - } - in.Delim('}') - if isTopLevel { - in.Consumed() - } -} -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe(out *jwriter.Writer, in SelfTestEvent) { - out.RawByte('{') - first := true - _ = first - { - const prefix string = ",\"date\":" - out.RawString(prefix[1:]) - out.Raw((in.Timestamp).MarshalJSON()) - } - { - const prefix string = ",\"succeeded_tests\":" - out.RawString(prefix) - if in.Success == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { - out.RawString("null") - } else { - out.RawByte('[') - for v3, v4 := range in.Success { - if v3 > 0 { - out.RawByte(',') - } - out.String(string(v4)) - } - out.RawByte(']') - } - } - { - const prefix string = ",\"failed_tests\":" - out.RawString(prefix) - if in.Fails == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { - out.RawString("null") - } else { - out.RawByte('[') - for v5, v6 := range in.Fails { - if v5 > 0 { - out.RawByte(',') - } - out.String(string(v6)) - } - out.RawByte(']') - } - } - out.RawByte('}') -} - -// MarshalEasyJSON supports easyjson.Marshaler interface -func (v SelfTestEvent) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe(w, v) -} - -// UnmarshalEasyJSON supports easyjson.Unmarshaler interface -func (v *SelfTestEvent) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe(l, v) -} -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe1(in *jlexer.Lexer, out *RulesetLoadedEvent) { - isTopLevel := in.IsStart() - if in.IsNull() { - if isTopLevel { - in.Consumed() - } - in.Skip() - return - } - in.Delim('{') - for !in.IsDelim('}') { - key := in.UnsafeFieldName(false) - in.WantColon() - if in.IsNull() { - in.Skip() - in.WantComma() - continue - } - switch key { - case "date": - if data := in.Raw(); in.Ok() { - in.AddError((out.Timestamp).UnmarshalJSON(data)) - } - case "policies": - if in.IsNull() { - in.Skip() - out.Policies = nil - } else { - in.Delim('[') - if out.Policies == nil { - if !in.IsDelim(']') { - out.Policies = make([]*PolicyState, 0, 8) - } else { - out.Policies = []*PolicyState{} - } - } else { - out.Policies = (out.Policies)[:0] - } - for !in.IsDelim(']') { - var v7 *PolicyState - if in.IsNull() { - in.Skip() - v7 = nil - } else { - if v7 == nil { - v7 = new(PolicyState) - } - (*v7).UnmarshalEasyJSON(in) - } - out.Policies = append(out.Policies, v7) - in.WantComma() - } - in.Delim(']') - } - default: - in.SkipRecursive() - } - in.WantComma() - } - in.Delim('}') - if isTopLevel { - in.Consumed() - } -} -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe1(out *jwriter.Writer, in RulesetLoadedEvent) { - out.RawByte('{') - first := true - _ = first - { - const prefix string = ",\"date\":" - out.RawString(prefix[1:]) - out.Raw((in.Timestamp).MarshalJSON()) - } - { - const prefix string = ",\"policies\":" - out.RawString(prefix) - if in.Policies == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { - out.RawString("null") - } else { - out.RawByte('[') - for v8, v9 := range in.Policies { - if v8 > 0 { - out.RawByte(',') - } - if v9 == nil { - out.RawString("null") - } else { - (*v9).MarshalEasyJSON(out) - } - } - out.RawByte(']') - } - } - out.RawByte('}') -} - -// MarshalEasyJSON supports easyjson.Marshaler interface -func (v RulesetLoadedEvent) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe1(w, v) -} - -// UnmarshalEasyJSON supports easyjson.Unmarshaler interface -func (v *RulesetLoadedEvent) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe1(l, v) -} -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe2(in *jlexer.Lexer, out *RuleState) { - isTopLevel := in.IsStart() - if in.IsNull() { - if isTopLevel { - in.Consumed() - } - in.Skip() - return - } - in.Delim('{') - for !in.IsDelim('}') { - key := in.UnsafeFieldName(false) - in.WantColon() - if in.IsNull() { - in.Skip() - in.WantComma() - continue - } - switch key { - case "id": - out.ID = string(in.String()) - case "version": - out.Version = string(in.String()) - case "expression": - out.Expression = string(in.String()) - case "status": - out.Status = string(in.String()) - case "message": - out.Message = string(in.String()) - default: - in.SkipRecursive() - } - in.WantComma() - } - in.Delim('}') - if isTopLevel { - in.Consumed() - } -} -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe2(out *jwriter.Writer, in RuleState) { - out.RawByte('{') - first := true - _ = first - { - const prefix string = ",\"id\":" - out.RawString(prefix[1:]) - out.String(string(in.ID)) - } - if in.Version != "" { - const prefix string = ",\"version\":" - out.RawString(prefix) - out.String(string(in.Version)) - } - { - const prefix string = ",\"expression\":" - out.RawString(prefix) - out.String(string(in.Expression)) - } - { - const prefix string = ",\"status\":" - out.RawString(prefix) - out.String(string(in.Status)) - } - if in.Message != "" { - const prefix string = ",\"message\":" - out.RawString(prefix) - out.String(string(in.Message)) - } - out.RawByte('}') -} - -// MarshalEasyJSON supports easyjson.Marshaler interface -func (v RuleState) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe2(w, v) -} - -// UnmarshalEasyJSON supports easyjson.Unmarshaler interface -func (v *RuleState) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe2(l, v) -} -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe3(in *jlexer.Lexer, out *PolicyState) { - isTopLevel := in.IsStart() - if in.IsNull() { - if isTopLevel { - in.Consumed() - } - in.Skip() - return - } - in.Delim('{') - for !in.IsDelim('}') { - key := in.UnsafeFieldName(false) - in.WantColon() - if in.IsNull() { - in.Skip() - in.WantComma() - continue - } - switch key { - case "name": - out.Name = string(in.String()) - case "version": - out.Version = string(in.String()) - case "source": - out.Source = string(in.String()) - case "rules": - if in.IsNull() { - in.Skip() - out.Rules = nil - } else { - in.Delim('[') - if out.Rules == nil { - if !in.IsDelim(']') { - out.Rules = make([]*RuleState, 0, 8) - } else { - out.Rules = []*RuleState{} - } - } else { - out.Rules = (out.Rules)[:0] - } - for !in.IsDelim(']') { - var v10 *RuleState - if in.IsNull() { - in.Skip() - v10 = nil - } else { - if v10 == nil { - v10 = new(RuleState) - } - (*v10).UnmarshalEasyJSON(in) - } - out.Rules = append(out.Rules, v10) - in.WantComma() - } - in.Delim(']') - } - default: - in.SkipRecursive() - } - in.WantComma() - } - in.Delim('}') - if isTopLevel { - in.Consumed() - } -} -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe3(out *jwriter.Writer, in PolicyState) { - out.RawByte('{') - first := true - _ = first - { - const prefix string = ",\"name\":" - out.RawString(prefix[1:]) - out.String(string(in.Name)) - } - { - const prefix string = ",\"version\":" - out.RawString(prefix) - out.String(string(in.Version)) - } - { - const prefix string = ",\"source\":" - out.RawString(prefix) - out.String(string(in.Source)) - } - { - const prefix string = ",\"rules\":" - out.RawString(prefix) - if in.Rules == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { - out.RawString("null") - } else { - out.RawByte('[') - for v11, v12 := range in.Rules { - if v11 > 0 { - out.RawByte(',') - } - if v12 == nil { - out.RawString("null") - } else { - (*v12).MarshalEasyJSON(out) - } - } - out.RawByte(']') - } - } - out.RawByte('}') -} - -// MarshalEasyJSON supports easyjson.Marshaler interface -func (v PolicyState) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe3(w, v) -} - -// UnmarshalEasyJSON supports easyjson.Unmarshaler interface -func (v *PolicyState) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe3(l, v) -} -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe4(in *jlexer.Lexer, out *NoisyProcessEvent) { +func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe(in *jlexer.Lexer, out *NoisyProcessEvent) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -502,7 +68,7 @@ func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe4(in *jle in.Consumed() } } -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe4(out *jwriter.Writer, in NoisyProcessEvent) { +func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe(out *jwriter.Writer, in NoisyProcessEvent) { out.RawByte('{') first := true _ = first @@ -546,14 +112,14 @@ func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe4(out *jw // MarshalEasyJSON supports easyjson.Marshaler interface func (v NoisyProcessEvent) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe4(w, v) + easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *NoisyProcessEvent) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe4(l, v) + easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe(l, v) } -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe5(in *jlexer.Lexer, out *EventLostWrite) { +func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe1(in *jlexer.Lexer, out *EventLostWrite) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -587,9 +153,9 @@ func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe5(in *jle for !in.IsDelim('}') { key := string(in.String()) in.WantColon() - var v13 uint64 - v13 = uint64(in.Uint64()) - (out.Lost)[key] = v13 + var v1 uint64 + v1 = uint64(in.Uint64()) + (out.Lost)[key] = v1 in.WantComma() } in.Delim('}') @@ -604,7 +170,7 @@ func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe5(in *jle in.Consumed() } } -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe5(out *jwriter.Writer, in EventLostWrite) { +func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe1(out *jwriter.Writer, in EventLostWrite) { out.RawByte('{') first := true _ = first @@ -625,16 +191,16 @@ func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe5(out *jw out.RawString(`null`) } else { out.RawByte('{') - v14First := true - for v14Name, v14Value := range in.Lost { - if v14First { - v14First = false + v2First := true + for v2Name, v2Value := range in.Lost { + if v2First { + v2First = false } else { out.RawByte(',') } - out.String(string(v14Name)) + out.String(string(v2Name)) out.RawByte(':') - out.Uint64(uint64(v14Value)) + out.Uint64(uint64(v2Value)) } out.RawByte('}') } @@ -644,14 +210,14 @@ func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe5(out *jw // MarshalEasyJSON supports easyjson.Marshaler interface func (v EventLostWrite) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe5(w, v) + easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe1(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *EventLostWrite) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe5(l, v) + easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe1(l, v) } -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe6(in *jlexer.Lexer, out *EventLostRead) { +func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe2(in *jlexer.Lexer, out *EventLostRead) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -688,7 +254,7 @@ func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe6(in *jle in.Consumed() } } -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe6(out *jwriter.Writer, in EventLostRead) { +func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe2(out *jwriter.Writer, in EventLostRead) { out.RawByte('{') first := true _ = first @@ -712,14 +278,14 @@ func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe6(out *jw // MarshalEasyJSON supports easyjson.Marshaler interface func (v EventLostRead) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe6(w, v) + easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe2(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *EventLostRead) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe6(l, v) + easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe2(l, v) } -func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe7(in *jlexer.Lexer, out *AbnormalPathEvent) { +func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe3(in *jlexer.Lexer, out *AbnormalPathEvent) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -764,7 +330,7 @@ func easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe7(in *jle in.Consumed() } } -func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe7(out *jwriter.Writer, in AbnormalPathEvent) { +func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe3(out *jwriter.Writer, in AbnormalPathEvent) { out.RawByte('{') first := true _ = first @@ -792,10 +358,10 @@ func easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe7(out *jw // MarshalEasyJSON supports easyjson.Marshaler interface func (v AbnormalPathEvent) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe7(w, v) + easyjsonF8f9ddd1EncodeGithubComDataDogDatadogAgentPkgSecurityProbe3(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *AbnormalPathEvent) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe7(l, v) + easyjsonF8f9ddd1DecodeGithubComDataDogDatadogAgentPkgSecurityProbe3(l, v) } diff --git a/pkg/security/probe/discarders.go b/pkg/security/probe/discarders.go index 88cb1bb4706d2..b06f60b8b2b6c 100644 --- a/pkg/security/probe/discarders.go +++ b/pkg/security/probe/discarders.go @@ -78,7 +78,7 @@ func (e ErrDiscarderNotSupported) Error() string { return fmt.Sprintf("discarder not supported for `%s`", e.Field) } -type onDiscarderHandler func(rs *rules.RuleSet, event *Event, probe *Probe, discarder Discarder) (bool, error) +type onDiscarderHandler func(rs *rules.RuleSet, event *model.Event, probe *Probe, discarder Discarder) (bool, error) var ( allDiscarderHandlers = make(map[eval.EventType][]onDiscarderHandler) @@ -88,6 +88,9 @@ var ( var ( dentryInvalidDiscarder = []interface{}{""} + eventZeroDiscarder = &model.Event{ + FieldHandlers: &model.DefaultFieldHandlers{}, + } ) // InvalidDiscarders exposes list of values that are not discarders @@ -181,7 +184,7 @@ type inodeDiscarders struct { erpc *erpc.ERPC dentryResolver *resolvers.DentryResolver rs *rules.RuleSet - discarderEvent *Event + discarderEvent *model.Event evalCtx *eval.Context // parentDiscarderFncs holds parent discarder functions per depth @@ -191,13 +194,14 @@ type inodeDiscarders struct { } func newInodeDiscarders(erpc *erpc.ERPC, dentryResolver *resolvers.DentryResolver) *inodeDiscarders { - event := NewEvent(nil, nil, nil) - ctx := eval.NewContext(event.GetPointer()) + event := *eventZeroDiscarder + + ctx := eval.NewContext(&event) id := &inodeDiscarders{ erpc: erpc, dentryResolver: dentryResolver, - discarderEvent: event, + discarderEvent: &event, evalCtx: ctx, } @@ -368,7 +372,7 @@ func (id *inodeDiscarders) getParentDiscarderFnc(rs *rules.RuleSet, eventType mo defer func() { if altered { - *id.discarderEvent = eventZero + *id.discarderEvent = *eventZeroDiscarder } }() @@ -466,10 +470,10 @@ func (id *inodeDiscarders) discardParentInode(req *erpc.ERPCRequest, rs *rules.R } // function used to retrieve discarder information, *.file.path, FileEvent, file deleted -type inodeEventGetter = func(event *Event) (eval.Field, *model.FileEvent, bool) +type inodeEventGetter = func(event *model.Event) (eval.Field, *model.FileEvent, bool) func filenameDiscarderWrapper(eventType model.EventType, getter inodeEventGetter) onDiscarderHandler { - return func(rs *rules.RuleSet, event *Event, probe *Probe, discarder Discarder) (bool, error) { + return func(rs *rules.RuleSet, event *model.Event, probe *Probe, discarder Discarder) (bool, error) { field, fileEvent, isDeleted := getter(event) if fileEvent.PathResolutionError != nil { @@ -493,14 +497,12 @@ func filenameDiscarderWrapper(eventType model.EventType, getter inodeEventGetter } isDiscarded, _, parentInode, err := probe.inodeDiscarders.discardParentInode(probe.erpcRequest, rs, eventType, field, filename, mountID, inode, pathID, event.TimestampRaw) - if !isDiscarded && !isDeleted { - if _, ok := err.(*resolvers.ErrInvalidKeyPath); !ok { - if !resolvers.IsFakeInode(inode) { - seclog.Tracef("Apply `%s.file.path` inode discarder for event `%s`, inode: %d(%s)", eventType, eventType, inode, filename) + if !isDiscarded && !isDeleted && err == nil { + if !resolvers.IsFakeInode(inode) { + seclog.Tracef("Apply `%s.file.path` inode discarder for event `%s`, inode: %d(%s)", eventType, eventType, inode, filename) - // not able to discard the parent then only discard the filename - _ = probe.inodeDiscarders.discardInode(probe.erpcRequest, eventType, mountID, inode, true) - } + // not able to discard the parent then only discard the filename + _ = probe.inodeDiscarders.discardInode(probe.erpcRequest, eventType, mountID, inode, true) } } else if !isDeleted { seclog.Tracef("Apply `%s.file.path` parent inode discarder for event `%s`, inode: %d(%s)", eventType, eventType, parentInode, filename) @@ -706,67 +708,67 @@ func init() { invalidDiscarders = createInvalidDiscardersCache() allDiscarderHandlers["open"] = append(allDiscarderHandlers["open"], filenameDiscarderWrapper(model.FileOpenEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "open.file.path", &event.Open.File, false })) SupportedDiscarders["open.file.path"] = true allDiscarderHandlers["mkdir"] = append(allDiscarderHandlers["mkdir"], filenameDiscarderWrapper(model.FileMkdirEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "mkdir.file.path", &event.Mkdir.File, false })) SupportedDiscarders["mkdir.file.path"] = true allDiscarderHandlers["unlink"] = append(allDiscarderHandlers["unlink"], filenameDiscarderWrapper(model.FileUnlinkEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "unlink.file.path", &event.Unlink.File, true })) SupportedDiscarders["unlink.file.path"] = true allDiscarderHandlers["rmdir"] = append(allDiscarderHandlers["rmdir"], filenameDiscarderWrapper(model.FileRmdirEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "rmdir.file.path", &event.Rmdir.File, false })) SupportedDiscarders["rmdir.file.path"] = true allDiscarderHandlers["chmod"] = append(allDiscarderHandlers["chmod"], filenameDiscarderWrapper(model.FileChmodEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "chmod.file.path", &event.Chmod.File, false })) SupportedDiscarders["chmod.file.path"] = true allDiscarderHandlers["chown"] = append(allDiscarderHandlers["chown"], filenameDiscarderWrapper(model.FileChownEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "chown.file.path", &event.Chown.File, false })) SupportedDiscarders["chown.file.path"] = true allDiscarderHandlers["utimes"] = append(allDiscarderHandlers["utimes"], filenameDiscarderWrapper(model.FileUtimesEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "utimes.file.path", &event.Utimes.File, false })) SupportedDiscarders["utimes.file.path"] = true allDiscarderHandlers["setxattr"] = append(allDiscarderHandlers["setxattr"], filenameDiscarderWrapper(model.FileSetXAttrEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "setxattr.file.path", &event.SetXAttr.File, false })) SupportedDiscarders["setxattr.file.path"] = true allDiscarderHandlers["removexattr"] = append(allDiscarderHandlers["removexattr"], filenameDiscarderWrapper(model.FileRemoveXAttrEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "removexattr.file.path", &event.RemoveXAttr.File, false })) SupportedDiscarders["removexattr.file.path"] = true allDiscarderHandlers["mmap"] = append(allDiscarderHandlers["mmap"], filenameDiscarderWrapper(model.MMapEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "mmap.file.path", &event.MMap.File, false })) SupportedDiscarders["mmap.file.path"] = true allDiscarderHandlers["splice"] = append(allDiscarderHandlers["splice"], filenameDiscarderWrapper(model.SpliceEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "splice.file.path", &event.Splice.File, false })) SupportedDiscarders["splice.file.path"] = true diff --git a/pkg/security/probe/discarders_test.go b/pkg/security/probe/discarders_test.go index d28f57f4f4607..99144ac9d2b3e 100644 --- a/pkg/security/probe/discarders_test.go +++ b/pkg/security/probe/discarders_test.go @@ -55,49 +55,49 @@ func TestIsParentDiscarder(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - rs := rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/log/*" && unlink.file.path != "/var/log/datadog/system-probe.log"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/log/datadog/system-probe.log", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/log/*" && unlink.file.path != "/var/log/datadog/system-probe.log"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/lib/datadog/system-probe.sock", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/var/log/datadog/system-probe.log"`, `unlink.file.name == "datadog"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/log/datadog/datadog-agent.log", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/log/*" && unlink.file.name =~ ".*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/lib/.runc/1234", 1); is { t.Error("shouldn't be able to find a parent discarder, due to partial evaluation: true && unlink.file.name =~ '.*'") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/etc/conf.d/httpd.conf" || unlink.file.name == "conf.d"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/nginx.conf", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/etc/conf.d/httpd.conf" || unlink.file.name == "sys.d"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/sys.d/nginx.conf", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.name == "conf.d"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/nginx.conf", 1); is { @@ -105,77 +105,77 @@ func TestIsParentDiscarder(t *testing.T) { } // field that doesn't exists shouldn't return any discarders - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `rename.file.path == "/etc/conf.d/abc"`) if is, _ := id.isParentPathDiscarder(rs, model.FileRenameEventType, "rename.file.path", "/etc/conf.d/nginx.conf", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `rename.file.path == "/etc/conf.d/abc"`) if is, _ := id.isParentPathDiscarder(rs, model.FileRenameEventType, "rename.file.path", "/etc/nginx/nginx.conf", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/etc/conf.d/*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/sys.d/nginx.conf", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/conf.*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/abc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/etc/conf.d/ab*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/abc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/conf.d/ab*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/abc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/conf.d"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/abc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/etc/*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/cron.d/log", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path == "/tmp/passwd"`, `open.file.path == "/tmp/secret"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/runc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/run/secrets/kubernetes.io/serviceaccount/*/token"`, `open.file.path == "/etc/secret"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/token", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "*/token"`, `open.file.path == "/etc/secret"`) is, err := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/token", 1) @@ -186,35 +186,35 @@ func TestIsParentDiscarder(t *testing.T) { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/tmp/dir/no-approver-*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/dir/a/test", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "*/conf.d/aaa"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/dir/bbb", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/etc/**"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/etc/conf.d/dir/aaa", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path == "/proc/${process.pid}/maps"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/proc/1/maps", 1); is { @@ -222,14 +222,14 @@ func TestIsParentDiscarder(t *testing.T) { } // test basename conflict, a basename based rule matches the parent discarder - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/var/log/datadog/**" && open.file.name == "token"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/test1/test2", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/var/log/datadog/**" && open.file.name == "test1"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/test1/test2", 1); is { @@ -252,105 +252,105 @@ func TestIsGrandParentDiscarder(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - rs := rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/var/lib/datadog/system-probe.cache"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); !is { t.Error("should be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/tmp/test"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/lib", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/var/run/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/pids/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/lib/datadog/system-probe.cache"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); !is { t.Error("should be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/run/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/pids/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/run/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/run/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/lib/datadog/system-probe.pid", 2); !is { t.Error("should be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/*/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/lib/datadog/system-probe.pid"`, `unlink.file.name =~ "run"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/*"`, `unlink.file.name =~ "run"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/tmp/dir/*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/dir/a/test", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.name == "dir"`) // + variants if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/tmp/dir/a/test", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/tmp/dir/a"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/tmp", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/tmp"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/tmp/dir/a", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/tmp"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/tmp", 2); is { @@ -386,18 +386,18 @@ func TestIsDiscarderOverride(t *testing.T) { var listener testEventListener - rs := rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) rs.AddListener(&listener) addRuleExpr(t, rs, `unlink.file.path == "/var/log/httpd" && process.file.path == "/bin/touch"`) - var event Event + event := rs.NewEvent().(*model.Event) event.Init() event.Type = uint32(model.FileUnlinkEventType) event.SetFieldValue("unlink.file.path", "/var/log/httpd") event.SetFieldValue("process.file.path", "/bin/touch") - rs.Evaluate(&event) + rs.Evaluate(event) if listener.fields["process.file.path"] > 0 { t.Error("shouldn't get a discarder") @@ -405,7 +405,7 @@ func TestIsDiscarderOverride(t *testing.T) { event.SetFieldValue("process.file.path", "/bin/cat") - rs.Evaluate(&event) + rs.Evaluate(event) if listener.fields["process.file.path"] == 0 { t.Error("should get a discarder") @@ -427,7 +427,7 @@ func BenchmarkParentDiscarder(b *testing.B) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - rs := rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(b, rs, `unlink.file.path =~ "/var/log/*" && unlink.file.path != "/var/log/datadog/system-probe.log"`) b.ResetTimer() diff --git a/pkg/security/probe/errors.go b/pkg/security/probe/errors.go new file mode 100644 index 0000000000000..d0e022473cc23 --- /dev/null +++ b/pkg/security/probe/errors.go @@ -0,0 +1,41 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package probe + +import "fmt" + +// ErrResolutionNotCritical defines a non critical error +type ErrPathResolutionNotCritical struct { + Err error +} + +// Error implements the error interface +func (e *ErrPathResolutionNotCritical) Error() string { + return fmt.Errorf("non critical path resolution error: %w", e.Err).Error() +} + +// Unwrap implements the error interface +func (e *ErrPathResolutionNotCritical) Unwrap() error { + return e.Err +} + +// ErrPathResolution defines a non critical error +type ErrPathResolution struct { + Err error +} + +// Error implements the error interface +func (e *ErrPathResolution) Error() string { + return fmt.Errorf("path resolution error: %w", e.Err).Error() +} + +// Unwrap implements the error interface +func (e *ErrPathResolution) Unwrap() error { + return e.Err +} diff --git a/pkg/security/probe/field_handlers.go b/pkg/security/probe/field_handlers.go new file mode 100644 index 0000000000000..a0087b656d88e --- /dev/null +++ b/pkg/security/probe/field_handlers.go @@ -0,0 +1,478 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package probe + +import ( + "path" + "sort" + "strings" + "syscall" + "time" + + "github.com/DataDog/datadog-agent/pkg/security/secl/model" +) + +type FieldHandlers struct { + probe *Probe + resolvers *Resolvers +} + +// ResolveFilePath resolves the inode to a full path +func (fh *FieldHandlers) ResolveFilePath(ev *model.Event, f *model.FileEvent) string { + if !f.IsPathnameStrResolved && len(f.PathnameStr) == 0 { + path, err := fh.resolvers.resolveFileFieldsPath(&f.FileFields, &ev.PIDContext, &ev.ContainerContext) + if err != nil { + ev.SetPathResolutionError(f, err) + } + f.SetPathnameStr(path) + } + + return f.PathnameStr +} + +// ResolveFileBasename resolves the inode to a full path +func (fh *FieldHandlers) ResolveFileBasename(ev *model.Event, f *model.FileEvent) string { + if !f.IsBasenameStrResolved && len(f.BasenameStr) == 0 { + if f.PathnameStr != "" { + f.SetBasenameStr(path.Base(f.PathnameStr)) + } else { + f.SetBasenameStr(fh.resolvers.resolveBasename(&f.FileFields)) + } + } + return f.BasenameStr +} + +// ResolveFileFilesystem resolves the filesystem a file resides in +func (fh *FieldHandlers) ResolveFileFilesystem(ev *model.Event, f *model.FileEvent) string { + if f.Filesystem == "" && !f.IsFileless() { + fs, err := fh.resolvers.MountResolver.ResolveFilesystem(f.FileFields.MountID, ev.PIDContext.Pid, ev.ContainerContext.ID) + if err != nil { + ev.SetPathResolutionError(f, err) + } + f.Filesystem = fs + } + return f.Filesystem +} + +// ResolveFileFieldsInUpperLayer resolves whether the file is in an upper layer +func (fh *FieldHandlers) ResolveFileFieldsInUpperLayer(ev *model.Event, f *model.FileFields) bool { + return f.GetInUpperLayer() +} + +// ResolveXAttrName returns the string representation of the extended attribute name +func (fh *FieldHandlers) ResolveXAttrName(ev *model.Event, e *model.SetXAttrEvent) string { + if len(e.Name) == 0 { + e.Name, _ = model.UnmarshalString(e.NameRaw[:], 200) + } + return e.Name +} + +// ResolveXAttrNamespace returns the string representation of the extended attribute namespace +func (fh *FieldHandlers) ResolveXAttrNamespace(ev *model.Event, e *model.SetXAttrEvent) string { + if len(e.Namespace) == 0 { + ns, _, found := strings.Cut(fh.ResolveXAttrName(ev, e), ".") + if found { + e.Namespace = ns + } + } + return e.Namespace +} + +// SetMountPoint set the mount point information +func (fh *FieldHandlers) SetMountPoint(ev *model.Event, e *model.Mount) error { + var err error + e.MountPointStr, err = fh.resolvers.DentryResolver.Resolve(e.ParentMountID, e.ParentInode, 0, true) + return err +} + +// ResolveMountPoint resolves the mountpoint to a full path +func (fh *FieldHandlers) ResolveMountPoint(ev *model.Event, e *model.Mount) (string, error) { + if len(e.MountPointStr) == 0 { + if err := fh.SetMountPoint(ev, e); err != nil { + return "", err + } + } + return e.MountPointStr, nil +} + +// SetMountRoot set the mount point information +func (fh *FieldHandlers) SetMountRoot(ev *model.Event, e *model.Mount) error { + var err error + e.RootStr, err = fh.resolvers.DentryResolver.Resolve(e.RootMountID, e.RootInode, 0, true) + return err +} + +// ResolveMountRoot resolves the mountpoint to a full path +func (fh *FieldHandlers) ResolveMountRoot(ev *model.Event, e *model.Mount) (string, error) { + if len(e.RootStr) == 0 { + if err := fh.SetMountRoot(ev, e); err != nil { + return "", err + } + } + return e.RootStr, nil +} + +func (fh *FieldHandlers) ResolveMountPointPath(ev *model.Event, e *model.MountEvent) string { + if len(e.MountPointPath) == 0 { + mountPointPath, err := fh.resolvers.MountResolver.ResolveMountPath(e.MountID, ev.PIDContext.Pid, ev.ContainerContext.ID) + if err != nil { + e.MountPointPathResolutionError = err + return "" + } + e.MountPointPath = mountPointPath + } + return e.MountPointPath +} + +func (fh *FieldHandlers) ResolveMountSourcePath(ev *model.Event, e *model.MountEvent) string { + if e.BindSrcMountID != 0 && len(e.MountSourcePath) == 0 { + bindSourceMountPath, err := fh.resolvers.MountResolver.ResolveMountPath(e.BindSrcMountID, ev.PIDContext.Pid, ev.ContainerContext.ID) + if err != nil { + e.MountSourcePathResolutionError = err + return "" + } + rootStr, err := fh.ResolveMountRoot(ev, &e.Mount) + if err != nil { + e.MountSourcePathResolutionError = err + return "" + } + e.MountSourcePath = path.Join(bindSourceMountPath, rootStr) + } + return e.MountSourcePath +} + +// ResolveContainerID resolves the container ID of the event +func (fh *FieldHandlers) ResolveContainerID(ev *model.Event, e *model.ContainerContext) string { + if len(e.ID) == 0 { + if entry, _ := fh.ResolveProcessCacheEntry(ev); entry != nil { + e.ID = entry.ContainerID + } + } + return e.ID +} + +// ResolveContainerTags resolves the container tags of the event +func (fh *FieldHandlers) ResolveContainerTags(ev *model.Event, e *model.ContainerContext) []string { + if len(e.Tags) == 0 && e.ID != "" { + e.Tags = fh.resolvers.TagsResolver.Resolve(e.ID) + } + return e.Tags +} + +// ResolveRights resolves the rights of a file +func (fh *FieldHandlers) ResolveRights(ev *model.Event, e *model.FileFields) int { + return int(e.Mode) & (syscall.S_ISUID | syscall.S_ISGID | syscall.S_ISVTX | syscall.S_IRWXU | syscall.S_IRWXG | syscall.S_IRWXO) +} + +// ResolveChownUID resolves the ResolveProcessCacheEntry id of a chown event to a username +func (fh *FieldHandlers) ResolveChownUID(ev *model.Event, e *model.ChownEvent) string { + if len(e.User) == 0 { + e.User, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) + } + return e.User +} + +// ResolveChownGID resolves the group id of a chown event to a group name +func (fh *FieldHandlers) ResolveChownGID(ev *model.Event, e *model.ChownEvent) string { + if len(e.Group) == 0 { + e.Group, _ = fh.resolvers.UserGroupResolver.ResolveGroup(int(e.GID)) + } + return e.Group +} + +// ResolveProcessCreatedAt resolves process creation time +func (fh *FieldHandlers) ResolveProcessCreatedAt(ev *model.Event, e *model.Process) int { + return int(e.ExecTime.UnixNano()) +} + +// ResolveProcessArgv0 resolves the first arg of the event +func (fh *FieldHandlers) ResolveProcessArgv0(ev *model.Event, process *model.Process) string { + arg0, _ := fh.resolvers.ProcessResolver.GetProcessArgv0(process) + return arg0 +} + +// ResolveProcessArgs resolves the args of the event +func (fh *FieldHandlers) ResolveProcessArgs(ev *model.Event, process *model.Process) string { + return strings.Join(fh.ResolveProcessArgv(ev, process), " ") +} + +// ResolveProcessArgv resolves the args of the event as an array +func (fh *FieldHandlers) ResolveProcessArgv(ev *model.Event, process *model.Process) []string { + argv, _ := fh.resolvers.ProcessResolver.GetProcessArgv(process) + return argv +} + +// ResolveProcessEnvp resolves the envp of the event as an array +func (fh *FieldHandlers) ResolveProcessEnvp(ev *model.Event, process *model.Process) []string { + envp, _ := fh.resolvers.ProcessResolver.GetProcessEnvp(process) + return envp +} + +// ResolveProcessArgsTruncated returns whether the args are truncated +func (fh *FieldHandlers) ResolveProcessArgsTruncated(ev *model.Event, process *model.Process) bool { + _, truncated := fh.resolvers.ProcessResolver.GetProcessArgv(process) + return truncated +} + +// ResolveProcessArgsFlags resolves the arguments flags of the event +func (fh *FieldHandlers) ResolveProcessArgsFlags(ev *model.Event, process *model.Process) (flags []string) { + for _, arg := range fh.ResolveProcessArgv(ev, process) { + if len(arg) > 1 && arg[0] == '-' { + isFlag := true + name := arg[1:] + if len(name) >= 1 && name[0] == '-' { + name = name[1:] + isFlag = false + } + + isOption := false + for _, r := range name { + isFlag = isFlag && model.IsAlphaNumeric(r) + isOption = isOption || r == '=' + } + + if len(name) > 0 { + if isFlag { + for _, r := range name { + flags = append(flags, string(r)) + } + } + if !isOption && len(name) > 1 { + flags = append(flags, name) + } + } + } + } + return +} + +// ResolveProcessArgsOptions resolves the arguments options of the event +func (fh *FieldHandlers) ResolveProcessArgsOptions(ev *model.Event, process *model.Process) (options []string) { + args := fh.ResolveProcessArgv(ev, process) + for i := 0; i < len(args); i++ { + arg := args[i] + if len(arg) > 1 && arg[0] == '-' { + name := arg[1:] + if len(name) >= 1 && name[0] == '-' { + name = name[1:] + } + if len(name) > 0 && model.IsAlphaNumeric(rune(name[0])) { + if index := strings.IndexRune(name, '='); index == -1 { + if i < len(args)-1 && (len(args[i+1]) == 0 || args[i+1][0] != '-') { + options = append(options, name+"="+args[i+1]) + i++ + } + } else { + options = append(options, name) + } + } + } + } + return +} + +// ResolveProcessEnvsTruncated returns whether the envs are truncated +func (fh *FieldHandlers) ResolveProcessEnvsTruncated(ev *model.Event, process *model.Process) bool { + _, truncated := fh.resolvers.ProcessResolver.GetProcessEnvs(process) + return truncated +} + +// ResolveProcessEnvs resolves the envs of the event +func (fh *FieldHandlers) ResolveProcessEnvs(ev *model.Event, process *model.Process) []string { + envs, _ := fh.resolvers.ProcessResolver.GetProcessEnvs(process) + return envs +} + +// ResolveSetuidUser resolves the user of the Setuid event +func (fh *FieldHandlers) ResolveSetuidUser(ev *model.Event, e *model.SetuidEvent) string { + if len(e.User) == 0 { + e.User, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) + } + return e.User +} + +// ResolveSetuidEUser resolves the effective user of the Setuid event +func (fh *FieldHandlers) ResolveSetuidEUser(ev *model.Event, e *model.SetuidEvent) string { + if len(e.EUser) == 0 { + e.EUser, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.EUID)) + } + return e.EUser +} + +// ResolveSetuidFSUser resolves the file-system user of the Setuid event +func (fh *FieldHandlers) ResolveSetuidFSUser(ev *model.Event, e *model.SetuidEvent) string { + if len(e.FSUser) == 0 { + e.FSUser, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.FSUID)) + } + return e.FSUser +} + +// ResolveSetgidGroup resolves the group of the Setgid event +func (fh *FieldHandlers) ResolveSetgidGroup(ev *model.Event, e *model.SetgidEvent) string { + if len(e.Group) == 0 { + e.Group, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.GID)) + } + return e.Group +} + +// ResolveSetgidEGroup resolves the effective group of the Setgid event +func (fh *FieldHandlers) ResolveSetgidEGroup(ev *model.Event, e *model.SetgidEvent) string { + if len(e.EGroup) == 0 { + e.EGroup, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.EGID)) + } + return e.EGroup +} + +// ResolveSetgidFSGroup resolves the file-system group of the Setgid event +func (fh *FieldHandlers) ResolveSetgidFSGroup(ev *model.Event, e *model.SetgidEvent) string { + if len(e.FSGroup) == 0 { + e.FSGroup, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.FSGID)) + } + return e.FSGroup +} + +// ResolveSELinuxBoolName resolves the boolean name of the SELinux event +func (fh *FieldHandlers) ResolveSELinuxBoolName(ev *model.Event, e *model.SELinuxEvent) string { + if e.EventKind != model.SELinuxBoolChangeEventKind { + return "" + } + + if len(e.BoolName) == 0 { + e.BoolName = fh.resolvers.resolveBasename(&e.File.FileFields) + } + return e.BoolName +} + +// ResolveProcessCacheEntry queries the ProcessResolver to retrieve the ProcessContext of the event +func (fh *FieldHandlers) ResolveProcessCacheEntry(ev *model.Event) (*model.ProcessCacheEntry, bool) { + if ev.PIDContext.IsKworker { + return ev.NewEmptyProcessCacheEntry(), false + } + + if ev.ProcessCacheEntry == nil { + ev.ProcessCacheEntry = fh.resolvers.ProcessResolver.Resolve(ev.PIDContext.Pid, ev.PIDContext.Tid) + } + + if ev.ProcessCacheEntry == nil { + // keep the original PIDContext + ev.ProcessCacheEntry = model.NewProcessCacheEntry(nil) + ev.ProcessCacheEntry.PIDContext = ev.PIDContext + + ev.ProcessCacheEntry.FileEvent.SetPathnameStr("") + ev.ProcessCacheEntry.FileEvent.SetBasenameStr("") + + // mark interpreter as resolved too + ev.ProcessCacheEntry.LinuxBinprm.FileEvent.SetPathnameStr("") + ev.ProcessCacheEntry.LinuxBinprm.FileEvent.SetBasenameStr("") + + return ev.ProcessCacheEntry, false + } + + return ev.ProcessCacheEntry, true +} + +// GetProcessServiceTag returns the service tag based on the process context +func (fh *FieldHandlers) GetProcessServiceTag(ev *model.Event) string { + entry, _ := fh.ResolveProcessCacheEntry(ev) + if entry == nil { + return "" + } + + var serviceValues []string + + // first search in the process context itself + if entry.EnvsEntry != nil { + if service := entry.EnvsEntry.Get(ServiceEnvVar); service != "" { + serviceValues = append(serviceValues, service) + } + } + + inContainer := entry.ContainerID != "" + + // while in container check for each ancestor + for ancestor := entry.Ancestor; ancestor != nil; ancestor = ancestor.Ancestor { + if inContainer && ancestor.ContainerID == "" { + break + } + + if ancestor.EnvsEntry != nil { + if service := ancestor.EnvsEntry.Get(ServiceEnvVar); service != "" { + serviceValues = append(serviceValues, service) + } + } + } + + return bestGuessServiceTag(serviceValues) +} + +// ResolveFileFieldsGroup resolves the group id of the file to a group name +func (fh *FieldHandlers) ResolveFileFieldsGroup(ev *model.Event, e *model.FileFields) string { + if len(e.Group) == 0 { + e.Group, _ = fh.resolvers.UserGroupResolver.ResolveGroup(int(e.GID)) + } + return e.Group +} + +func bestGuessServiceTag(serviceValues []string) string { + if len(serviceValues) == 0 { + return "" + } + + firstGuess := serviceValues[0] + + // first we sort base on len, biggest len first + sort.Slice(serviceValues, func(i, j int) bool { + return len(serviceValues[j]) < len(serviceValues[i]) // reverse + }) + + // we then compare [i] and [i + 1] to check if [i + 1] is a prefix of [i] + for i := 0; i < len(serviceValues)-1; i++ { + if !strings.HasPrefix(serviceValues[i], serviceValues[i+1]) { + // if it's not a prefix it means we have multiple disjoints services + // we then return the first guess, closest in the process tree + return firstGuess + } + } + + // we have a prefix chain, let's return the biggest one + return serviceValues[0] +} + +// ResolveNetworkDeviceIfName returns the network iterface name from the network context +func (fh *FieldHandlers) ResolveNetworkDeviceIfName(ev *model.Event, device *model.NetworkDeviceContext) string { + if len(device.IfName) == 0 && fh.resolvers.TCResolver != nil { + ifName, ok := fh.resolvers.TCResolver.ResolveNetworkDeviceIfName(device.IfIndex, device.NetNS) + if ok { + device.IfName = ifName + } + } + + return device.IfName +} + +// ResolveFileFieldsUser resolves the user id of the file to a username +func (fh *FieldHandlers) ResolveFileFieldsUser(ev *model.Event, e *model.FileFields) string { + if len(e.User) == 0 { + e.User, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) + } + return e.User +} + +// ResolveEventTimestamp resolves the monolitic kernel event timestamp to an absolute time +func (fh *FieldHandlers) ResolveEventTimestamp(ev *model.Event) time.Time { + if ev.Timestamp.IsZero() { + fh := ev.FieldHandlers.(*FieldHandlers) + + ev.Timestamp = fh.resolvers.TimeResolver.ResolveMonotonicTimestamp(ev.TimestampRaw) + if ev.Timestamp.IsZero() { + ev.Timestamp = time.Now() + } + } + return ev.Timestamp +} diff --git a/pkg/security/probe/fields_resolver.go b/pkg/security/probe/fields_resolver.go deleted file mode 100644 index c5237727eba61..0000000000000 --- a/pkg/security/probe/fields_resolver.go +++ /dev/null @@ -1,499 +0,0 @@ -//go:build linux -// +build linux - -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2022-present Datadog, Inc. -// Code generated - DO NOT EDIT. -package probe - -// ResolveFields resolves all the fields associate to the event type. Context fields are automatically resolved. -func (ev *Event) ResolveFields(forADs bool) { - // resolve context fields that are not related to any event type - _ = ev.ResolveContainerID(&ev.ContainerContext) - if !forADs { - _ = ev.ResolveContainerTags(&ev.ContainerContext) - } - _ = ev.ResolveNetworkDeviceIfName(&ev.NetworkContext.Device) - _ = ev.ResolveProcessArgs(&ev.ProcessContext.Process) - _ = ev.ResolveProcessArgsTruncated(&ev.ProcessContext.Process) - _ = ev.ResolveProcessArgv(&ev.ProcessContext.Process) - _ = ev.ResolveProcessArgv0(&ev.ProcessContext.Process) - _ = ev.ResolveProcessCreatedAt(&ev.ProcessContext.Process) - _ = ev.ResolveProcessEnvp(&ev.ProcessContext.Process) - _ = ev.ResolveProcessEnvs(&ev.ProcessContext.Process) - _ = ev.ResolveProcessEnvsTruncated(&ev.ProcessContext.Process) - _ = ev.ResolveFileFilesystem(&ev.ProcessContext.Process.FileEvent) - _ = ev.ResolveFileFieldsGroup(&ev.ProcessContext.Process.FileEvent.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.ProcessContext.Process.FileEvent.FileFields) - _ = ev.ResolveFileBasename(&ev.ProcessContext.Process.FileEvent) - _ = ev.ResolveFilePath(&ev.ProcessContext.Process.FileEvent) - _ = ev.ResolveFileFieldsUser(&ev.ProcessContext.Process.FileEvent.FileFields) - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.ProcessContext.Process.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.ProcessContext.Process.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.ProcessContext.Process.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessArgs(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessArgsTruncated(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessArgv(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessArgv0(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessCreatedAt(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessEnvp(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessEnvs(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessEnvsTruncated(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveFileFilesystem(&ev.ProcessContext.Parent.FileEvent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveFileFieldsGroup(&ev.ProcessContext.Parent.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.ProcessContext.Parent.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveFileBasename(&ev.ProcessContext.Parent.FileEvent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveFilePath(&ev.ProcessContext.Parent.FileEvent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveFileFieldsUser(&ev.ProcessContext.Parent.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - } - // resolve event specific fields - switch ev.GetEventType().String() { - case "bind": - case "bpf": - _ = ev.ResolveHelpers(&ev.BPF.Program) - case "capset": - case "chmod": - _ = ev.ResolveFileFieldsUser(&ev.Chmod.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Chmod.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Chmod.File.FileFields) - _ = ev.ResolveFilePath(&ev.Chmod.File) - _ = ev.ResolveFileBasename(&ev.Chmod.File) - _ = ev.ResolveFileFilesystem(&ev.Chmod.File) - case "chown": - _ = ev.ResolveFileFieldsUser(&ev.Chown.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Chown.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Chown.File.FileFields) - _ = ev.ResolveFilePath(&ev.Chown.File) - _ = ev.ResolveFileBasename(&ev.Chown.File) - _ = ev.ResolveFileFilesystem(&ev.Chown.File) - _ = ev.ResolveChownUID(&ev.Chown) - _ = ev.ResolveChownGID(&ev.Chown) - case "dns": - case "exec": - _ = ev.ResolveFileFieldsUser(&ev.Exec.Process.FileEvent.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Exec.Process.FileEvent.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Exec.Process.FileEvent.FileFields) - _ = ev.ResolveFilePath(&ev.Exec.Process.FileEvent) - _ = ev.ResolveFileBasename(&ev.Exec.Process.FileEvent) - _ = ev.ResolveFileFilesystem(&ev.Exec.Process.FileEvent) - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.Exec.Process.LinuxBinprm.FileEvent) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.Exec.Process.LinuxBinprm.FileEvent) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.Exec.Process.LinuxBinprm.FileEvent) - } - _ = ev.ResolveProcessCreatedAt(ev.Exec.Process) - _ = ev.ResolveProcessArgv0(ev.Exec.Process) - _ = ev.ResolveProcessArgs(ev.Exec.Process) - _ = ev.ResolveProcessArgv(ev.Exec.Process) - _ = ev.ResolveProcessArgsTruncated(ev.Exec.Process) - _ = ev.ResolveProcessEnvs(ev.Exec.Process) - _ = ev.ResolveProcessEnvp(ev.Exec.Process) - _ = ev.ResolveProcessEnvsTruncated(ev.Exec.Process) - case "exit": - _ = ev.ResolveFileFieldsUser(&ev.Exit.Process.FileEvent.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Exit.Process.FileEvent.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Exit.Process.FileEvent.FileFields) - _ = ev.ResolveFilePath(&ev.Exit.Process.FileEvent) - _ = ev.ResolveFileBasename(&ev.Exit.Process.FileEvent) - _ = ev.ResolveFileFilesystem(&ev.Exit.Process.FileEvent) - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.Exit.Process.LinuxBinprm.FileEvent) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.Exit.Process.LinuxBinprm.FileEvent) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.Exit.Process.LinuxBinprm.FileEvent) - } - _ = ev.ResolveProcessCreatedAt(ev.Exit.Process) - _ = ev.ResolveProcessArgv0(ev.Exit.Process) - _ = ev.ResolveProcessArgs(ev.Exit.Process) - _ = ev.ResolveProcessArgv(ev.Exit.Process) - _ = ev.ResolveProcessArgsTruncated(ev.Exit.Process) - _ = ev.ResolveProcessEnvs(ev.Exit.Process) - _ = ev.ResolveProcessEnvp(ev.Exit.Process) - _ = ev.ResolveProcessEnvsTruncated(ev.Exit.Process) - case "link": - _ = ev.ResolveFileFieldsUser(&ev.Link.Source.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Link.Source.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Link.Source.FileFields) - _ = ev.ResolveFilePath(&ev.Link.Source) - _ = ev.ResolveFileBasename(&ev.Link.Source) - _ = ev.ResolveFileFilesystem(&ev.Link.Source) - _ = ev.ResolveFileFieldsUser(&ev.Link.Target.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Link.Target.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Link.Target.FileFields) - _ = ev.ResolveFilePath(&ev.Link.Target) - _ = ev.ResolveFileBasename(&ev.Link.Target) - _ = ev.ResolveFileFilesystem(&ev.Link.Target) - case "load_module": - _ = ev.ResolveFileFieldsUser(&ev.LoadModule.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.LoadModule.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.LoadModule.File.FileFields) - _ = ev.ResolveFilePath(&ev.LoadModule.File) - _ = ev.ResolveFileBasename(&ev.LoadModule.File) - _ = ev.ResolveFileFilesystem(&ev.LoadModule.File) - case "mkdir": - _ = ev.ResolveFileFieldsUser(&ev.Mkdir.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Mkdir.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Mkdir.File.FileFields) - _ = ev.ResolveFilePath(&ev.Mkdir.File) - _ = ev.ResolveFileBasename(&ev.Mkdir.File) - _ = ev.ResolveFileFilesystem(&ev.Mkdir.File) - case "mmap": - _ = ev.ResolveFileFieldsUser(&ev.MMap.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.MMap.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.MMap.File.FileFields) - _ = ev.ResolveFilePath(&ev.MMap.File) - _ = ev.ResolveFileBasename(&ev.MMap.File) - _ = ev.ResolveFileFilesystem(&ev.MMap.File) - case "mprotect": - case "open": - _ = ev.ResolveFileFieldsUser(&ev.Open.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Open.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Open.File.FileFields) - _ = ev.ResolveFilePath(&ev.Open.File) - _ = ev.ResolveFileBasename(&ev.Open.File) - _ = ev.ResolveFileFilesystem(&ev.Open.File) - case "ptrace": - _ = ev.ResolveFileFieldsUser(&ev.PTrace.Tracee.Process.FileEvent.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.PTrace.Tracee.Process.FileEvent.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.PTrace.Tracee.Process.FileEvent.FileFields) - _ = ev.ResolveFilePath(&ev.PTrace.Tracee.Process.FileEvent) - _ = ev.ResolveFileBasename(&ev.PTrace.Tracee.Process.FileEvent) - _ = ev.ResolveFileFilesystem(&ev.PTrace.Tracee.Process.FileEvent) - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) - } - _ = ev.ResolveProcessCreatedAt(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessArgv0(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessArgs(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessArgv(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessArgsTruncated(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessEnvs(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessEnvp(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessEnvsTruncated(&ev.PTrace.Tracee.Process) - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveFileFieldsUser(&ev.PTrace.Tracee.Parent.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveFileFieldsGroup(&ev.PTrace.Tracee.Parent.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.PTrace.Tracee.Parent.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveFilePath(&ev.PTrace.Tracee.Parent.FileEvent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveFileBasename(&ev.PTrace.Tracee.Parent.FileEvent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveFileFilesystem(&ev.PTrace.Tracee.Parent.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessCreatedAt(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessArgv0(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessArgs(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessArgv(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessArgsTruncated(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessEnvs(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessEnvp(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessEnvsTruncated(ev.PTrace.Tracee.Parent) - } - case "removexattr": - _ = ev.ResolveFileFieldsUser(&ev.RemoveXAttr.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.RemoveXAttr.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.RemoveXAttr.File.FileFields) - _ = ev.ResolveFilePath(&ev.RemoveXAttr.File) - _ = ev.ResolveFileBasename(&ev.RemoveXAttr.File) - _ = ev.ResolveFileFilesystem(&ev.RemoveXAttr.File) - _ = ev.ResolveXAttrNamespace(&ev.RemoveXAttr) - _ = ev.ResolveXAttrName(&ev.RemoveXAttr) - case "rename": - _ = ev.ResolveFileFieldsUser(&ev.Rename.Old.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Rename.Old.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Rename.Old.FileFields) - _ = ev.ResolveFilePath(&ev.Rename.Old) - _ = ev.ResolveFileBasename(&ev.Rename.Old) - _ = ev.ResolveFileFilesystem(&ev.Rename.Old) - _ = ev.ResolveFileFieldsUser(&ev.Rename.New.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Rename.New.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Rename.New.FileFields) - _ = ev.ResolveFilePath(&ev.Rename.New) - _ = ev.ResolveFileBasename(&ev.Rename.New) - _ = ev.ResolveFileFilesystem(&ev.Rename.New) - case "rmdir": - _ = ev.ResolveFileFieldsUser(&ev.Rmdir.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Rmdir.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Rmdir.File.FileFields) - _ = ev.ResolveFilePath(&ev.Rmdir.File) - _ = ev.ResolveFileBasename(&ev.Rmdir.File) - _ = ev.ResolveFileFilesystem(&ev.Rmdir.File) - case "selinux": - _ = ev.ResolveSELinuxBoolName(&ev.SELinux) - case "setgid": - _ = ev.ResolveSetgidGroup(&ev.SetGID) - _ = ev.ResolveSetgidEGroup(&ev.SetGID) - _ = ev.ResolveSetgidFSGroup(&ev.SetGID) - case "setuid": - _ = ev.ResolveSetuidUser(&ev.SetUID) - _ = ev.ResolveSetuidEUser(&ev.SetUID) - _ = ev.ResolveSetuidFSUser(&ev.SetUID) - case "setxattr": - _ = ev.ResolveFileFieldsUser(&ev.SetXAttr.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.SetXAttr.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.SetXAttr.File.FileFields) - _ = ev.ResolveFilePath(&ev.SetXAttr.File) - _ = ev.ResolveFileBasename(&ev.SetXAttr.File) - _ = ev.ResolveFileFilesystem(&ev.SetXAttr.File) - _ = ev.ResolveXAttrNamespace(&ev.SetXAttr) - _ = ev.ResolveXAttrName(&ev.SetXAttr) - case "signal": - _ = ev.ResolveFileFieldsUser(&ev.Signal.Target.Process.FileEvent.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Signal.Target.Process.FileEvent.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Signal.Target.Process.FileEvent.FileFields) - _ = ev.ResolveFilePath(&ev.Signal.Target.Process.FileEvent) - _ = ev.ResolveFileBasename(&ev.Signal.Target.Process.FileEvent) - _ = ev.ResolveFileFilesystem(&ev.Signal.Target.Process.FileEvent) - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.Signal.Target.Process.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.Signal.Target.Process.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.Signal.Target.Process.LinuxBinprm.FileEvent) - } - _ = ev.ResolveProcessCreatedAt(&ev.Signal.Target.Process) - _ = ev.ResolveProcessArgv0(&ev.Signal.Target.Process) - _ = ev.ResolveProcessArgs(&ev.Signal.Target.Process) - _ = ev.ResolveProcessArgv(&ev.Signal.Target.Process) - _ = ev.ResolveProcessArgsTruncated(&ev.Signal.Target.Process) - _ = ev.ResolveProcessEnvs(&ev.Signal.Target.Process) - _ = ev.ResolveProcessEnvp(&ev.Signal.Target.Process) - _ = ev.ResolveProcessEnvsTruncated(&ev.Signal.Target.Process) - if ev.Signal.Target.HasParent() { - _ = ev.ResolveFileFieldsUser(&ev.Signal.Target.Parent.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveFileFieldsGroup(&ev.Signal.Target.Parent.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Signal.Target.Parent.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveFilePath(&ev.Signal.Target.Parent.FileEvent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveFileBasename(&ev.Signal.Target.Parent.FileEvent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveFileFilesystem(&ev.Signal.Target.Parent.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessCreatedAt(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessArgv0(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessArgs(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessArgv(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessArgsTruncated(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessEnvs(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessEnvp(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessEnvsTruncated(ev.Signal.Target.Parent) - } - case "splice": - _ = ev.ResolveFileFieldsUser(&ev.Splice.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Splice.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Splice.File.FileFields) - _ = ev.ResolveFilePath(&ev.Splice.File) - _ = ev.ResolveFileBasename(&ev.Splice.File) - _ = ev.ResolveFileFilesystem(&ev.Splice.File) - case "unlink": - _ = ev.ResolveFileFieldsUser(&ev.Unlink.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Unlink.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Unlink.File.FileFields) - _ = ev.ResolveFilePath(&ev.Unlink.File) - _ = ev.ResolveFileBasename(&ev.Unlink.File) - _ = ev.ResolveFileFilesystem(&ev.Unlink.File) - case "unload_module": - case "utimes": - _ = ev.ResolveFileFieldsUser(&ev.Utimes.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Utimes.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Utimes.File.FileFields) - _ = ev.ResolveFilePath(&ev.Utimes.File) - _ = ev.ResolveFileBasename(&ev.Utimes.File) - _ = ev.ResolveFileFilesystem(&ev.Utimes.File) - } -} diff --git a/pkg/security/probe/load_controller.go b/pkg/security/probe/load_controller.go index 231cc38a081a6..6b22e3dda35d3 100644 --- a/pkg/security/probe/load_controller.go +++ b/pkg/security/probe/load_controller.go @@ -84,7 +84,7 @@ func (lc *LoadController) SendStats() error { } // Count processes the provided events and ensures the load of the provided event type is within the configured limits -func (lc *LoadController) Count(event *Event) { +func (lc *LoadController) Count(event *model.Event) { switch event.GetEventType() { case model.ExecEventType, model.InvalidateDentryEventType, model.ForkEventType: case model.ExitEventType: @@ -95,7 +95,7 @@ func (lc *LoadController) Count(event *Event) { } // GenericCount increments the event counter of the provided event type and pid -func (lc *LoadController) GenericCount(event *Event) { +func (lc *LoadController) GenericCount(event *model.Event) { lc.Lock() defer lc.Unlock() diff --git a/pkg/security/probe/model.go b/pkg/security/probe/model.go index 2aaf08da8e91b..75be1798ca333 100644 --- a/pkg/security/probe/model.go +++ b/pkg/security/probe/model.go @@ -10,17 +10,9 @@ package probe import ( "fmt" - "path" - "sort" - "strings" - "syscall" - "time" - manager "github.com/DataDog/ebpf-manager" - "github.com/cilium/ebpf/perf" "github.com/mailru/easyjson/jwriter" - pconfig "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/security/probe/constantfetch" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" @@ -31,568 +23,47 @@ const ( ServiceEnvVar = "DD_SERVICE" ) -var eventZero Event +var eventZero model.Event -// Model describes the data model for the runtime security agent probe events -type Model struct { - model.Model - probe *Probe -} - -// ValidateField validates the value of a field -func (m *Model) ValidateField(field eval.Field, fieldValue eval.FieldValue) error { - if err := m.Model.ValidateField(field, fieldValue); err != nil { - return err - } - - switch field { - case "bpf.map.name": - if offset, found := m.probe.constantOffsets[constantfetch.OffsetNameBPFMapStructName]; !found || offset == constantfetch.ErrorSentinel { - return fmt.Errorf("%s is not available on this kernel version", field) - } - - case "bpf.prog.name": - if offset, found := m.probe.constantOffsets[constantfetch.OffsetNameBPFProgAuxStructName]; !found || offset == constantfetch.ErrorSentinel { - return fmt.Errorf("%s is not available on this kernel version", field) - } - } - - return nil -} - -// NewEvent returns a new Event -func (m *Model) NewEvent() eval.Event { - return &Event{} -} - -// NetDeviceKey is used to uniquely identify a network device -type NetDeviceKey struct { - IfIndex uint32 - NetNS uint32 - NetworkDirection manager.TrafficType -} - -// Event describes a probe event -type Event struct { - model.Event - - resolvers *Resolvers - pathResolutionError error - scrubber *pconfig.DataScrubber - probe *Probe -} - -// Retain the event -func (ev *Event) Retain() Event { - if ev.ProcessCacheEntry != nil { - ev.ProcessCacheEntry.Retain() - } - return *ev -} - -// Release the event -func (ev *Event) Release() { - if ev.ProcessCacheEntry != nil { - ev.ProcessCacheEntry.Release() - } -} - -// GetPathResolutionError returns the path resolution error as a string if there is one -func (ev *Event) GetPathResolutionError() error { - return ev.pathResolutionError -} - -// ResolveFilePath resolves the inode to a full path -func (ev *Event) ResolveFilePath(f *model.FileEvent) string { - if !f.IsPathnameStrResolved && len(f.PathnameStr) == 0 { - path, err := ev.resolvers.resolveFileFieldsPath(&f.FileFields, &ev.PIDContext) - if err != nil { - f.PathResolutionError = err - ev.SetPathResolutionError(err) - } - f.SetPathnameStr(path) - } - return f.PathnameStr -} - -// ResolveFileBasename resolves the inode to a full path -func (ev *Event) ResolveFileBasename(f *model.FileEvent) string { - if !f.IsBasenameStrResolved && len(f.BasenameStr) == 0 { - if f.PathnameStr != "" { - f.SetBasenameStr(path.Base(f.PathnameStr)) - } else { - f.SetBasenameStr(ev.resolvers.resolveBasename(&f.FileFields)) - } - } - return f.BasenameStr -} - -// ResolveFileFilesystem resolves the filesystem a file resides in -func (ev *Event) ResolveFileFilesystem(f *model.FileEvent) string { - if f.Filesystem == "" { - fs, err := ev.resolvers.MountResolver.GetFilesystem(f.FileFields.MountID, ev.PIDContext.Pid) - if err != nil { - ev.SetPathResolutionError(err) - } - f.Filesystem = fs - } - return f.Filesystem -} - -// ResolveFileFieldsInUpperLayer resolves whether the file is in an upper layer -func (ev *Event) ResolveFileFieldsInUpperLayer(f *model.FileFields) bool { - return f.GetInUpperLayer() -} - -// ResolveXAttrName returns the string representation of the extended attribute name -func (ev *Event) ResolveXAttrName(e *model.SetXAttrEvent) string { - if len(e.Name) == 0 { - e.Name, _ = model.UnmarshalString(e.NameRaw[:], 200) - } - return e.Name -} - -// ResolveHelpers returns the list of eBPF helpers used by the current program -func (ev *Event) ResolveHelpers(e *model.BPFProgram) []uint32 { - return e.Helpers -} - -// ResolveXAttrNamespace returns the string representation of the extended attribute namespace -func (ev *Event) ResolveXAttrNamespace(e *model.SetXAttrEvent) string { - if len(e.Namespace) == 0 { - ns, _, found := strings.Cut(ev.ResolveXAttrName(e), ".") - if found { - e.Namespace = ns - } - } - return e.Namespace -} - -// SetMountPoint set the mount point information -func (ev *Event) SetMountPoint(e *model.MountEvent) error { - var err error - e.MountPointStr, err = ev.resolvers.DentryResolver.Resolve(e.ParentMountID, e.ParentInode, 0, true) - return err -} - -// ResolveMountPoint resolves the mountpoint to a full path -func (ev *Event) ResolveMountPoint(e *model.MountEvent) (string, error) { - if len(e.MountPointStr) == 0 { - if err := ev.SetMountPoint(e); err != nil { - return "", err - } - } - return e.MountPointStr, nil -} - -// SetMountRoot set the mount point information -func (ev *Event) SetMountRoot(e *model.MountEvent) error { - var err error - e.RootStr, err = ev.resolvers.DentryResolver.Resolve(e.RootMountID, e.RootInode, 0, true) - return err -} - -// ResolveMountRoot resolves the mountpoint to a full path -func (ev *Event) ResolveMountRoot(e *model.MountEvent) (string, error) { - if len(e.RootStr) == 0 { - if err := ev.SetMountRoot(e); err != nil { - return "", err - } - } - return e.RootStr, nil -} - -// ResolveContainerID resolves the container ID of the event -func (ev *Event) ResolveContainerID(e *model.ContainerContext) string { - if len(e.ID) == 0 { - if entry := ev.ResolveProcessCacheEntry(); entry != nil { - e.ID = entry.ContainerID - } - } - return e.ID -} - -// ResolveContainerTags resolves the container tags of the event -func (ev *Event) ResolveContainerTags(e *model.ContainerContext) []string { - if len(e.Tags) == 0 && e.ID != "" { - e.Tags = ev.resolvers.TagsResolver.Resolve(e.ID) - } - return e.Tags -} - -// UnmarshalProcessCacheEntry unmarshal a Process -func (ev *Event) UnmarshalProcessCacheEntry(data []byte) (int, error) { - entry := ev.resolvers.ProcessResolver.NewProcessCacheEntry(ev.PIDContext) - ev.ProcessCacheEntry = entry - - n, err := entry.Process.UnmarshalBinary(data) - if err != nil { - return n, err - } - entry.Process.ContainerID = ev.ContainerContext.ID - - return n, nil -} - -// ResolveFileFieldsUser resolves the user id of the file to a username -func (ev *Event) ResolveFileFieldsUser(e *model.FileFields) string { - if len(e.User) == 0 { - e.User, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) - } - return e.User -} - -// ResolveFileFieldsGroup resolves the group id of the file to a group name -func (ev *Event) ResolveFileFieldsGroup(e *model.FileFields) string { - if len(e.Group) == 0 { - e.Group, _ = ev.resolvers.UserGroupResolver.ResolveGroup(int(e.GID)) - } - return e.Group -} - -// ResolveRights resolves the rights of a file -func (ev *Event) ResolveRights(e *model.FileFields) int { - return int(e.Mode) & (syscall.S_ISUID | syscall.S_ISGID | syscall.S_ISVTX | syscall.S_IRWXU | syscall.S_IRWXG | syscall.S_IRWXO) -} - -// ResolveChownUID resolves the user id of a chown event to a username -func (ev *Event) ResolveChownUID(e *model.ChownEvent) string { - if len(e.User) == 0 { - e.User, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) - } - return e.User -} - -// ResolveChownGID resolves the group id of a chown event to a group name -func (ev *Event) ResolveChownGID(e *model.ChownEvent) string { - if len(e.Group) == 0 { - e.Group, _ = ev.resolvers.UserGroupResolver.ResolveGroup(int(e.GID)) - } - return e.Group -} - -// ResolveProcessCreatedAt resolves process creation time -func (ev *Event) ResolveProcessCreatedAt(e *model.Process) uint64 { - return uint64(e.ExecTime.UnixNano()) -} - -// ResolveProcessArgv0 resolves the first arg of the event -func (ev *Event) ResolveProcessArgv0(process *model.Process) string { - arg0, _ := ev.resolvers.ProcessResolver.GetProcessArgv0(process) - return arg0 -} - -// ResolveProcessArgs resolves the args of the event -func (ev *Event) ResolveProcessArgs(process *model.Process) string { - return strings.Join(ev.ResolveProcessArgv(process), " ") -} - -// ResolveProcessArgv resolves the args of the event as an array -func (ev *Event) ResolveProcessArgv(process *model.Process) []string { - argv, _ := ev.resolvers.ProcessResolver.GetProcessArgv(process) - return argv -} - -// ResolveProcessEnvp resolves the envp of the event as an array -func (ev *Event) ResolveProcessEnvp(process *model.Process) []string { - envp, _ := ev.resolvers.ProcessResolver.GetProcessEnvp(process) - return envp -} - -// ResolveProcessArgsTruncated returns whether the args are truncated -func (ev *Event) ResolveProcessArgsTruncated(process *model.Process) bool { - _, truncated := ev.resolvers.ProcessResolver.GetProcessArgv(process) - return truncated -} - -// ResolveProcessArgsFlags resolves the arguments flags of the event -func (ev *Event) ResolveProcessArgsFlags(process *model.Process) (flags []string) { - for _, arg := range ev.ResolveProcessArgv(process) { - if len(arg) > 1 && arg[0] == '-' { - isFlag := true - name := arg[1:] - if len(name) >= 1 && name[0] == '-' { - name = name[1:] - isFlag = false - } - - isOption := false - for _, r := range name { - isFlag = isFlag && model.IsAlphaNumeric(r) - isOption = isOption || r == '=' - } - - if len(name) > 0 { - if isFlag { - for _, r := range name { - flags = append(flags, string(r)) - } - } - if !isOption && len(name) > 1 { - flags = append(flags, name) +// NewModel returns a new model with some extra field validation +func NewModel(probe *Probe) *model.Model { + return &model.Model{ + ExtraValidateFieldFnc: func(field eval.Field, fieldValue eval.FieldValue) error { + switch field { + case "bpf.map.name": + if offset, found := probe.constantOffsets[constantfetch.OffsetNameBPFMapStructName]; !found || offset == constantfetch.ErrorSentinel { + return fmt.Errorf("%s is not available on this kernel version", field) } - } - } - } - return -} -// ResolveProcessArgsOptions resolves the arguments options of the event -func (ev *Event) ResolveProcessArgsOptions(process *model.Process) (options []string) { - args := ev.ResolveProcessArgv(process) - for i := 0; i < len(args); i++ { - arg := args[i] - if len(arg) > 1 && arg[0] == '-' { - name := arg[1:] - if len(name) >= 1 && name[0] == '-' { - name = name[1:] - } - if len(name) > 0 && model.IsAlphaNumeric(rune(name[0])) { - if index := strings.IndexRune(name, '='); index == -1 { - if i < len(args)-1 && (len(args[i+1]) == 0 || args[i+1][0] != '-') { - options = append(options, name+"="+args[i+1]) - i++ - } - } else { - options = append(options, name) + case "bpf.prog.name": + if offset, found := probe.constantOffsets[constantfetch.OffsetNameBPFProgAuxStructName]; !found || offset == constantfetch.ErrorSentinel { + return fmt.Errorf("%s is not available on this kernel version", field) } } - } - } - return -} - -// ResolveProcessEnvsTruncated returns whether the envs are truncated -func (ev *Event) ResolveProcessEnvsTruncated(process *model.Process) bool { - _, truncated := ev.resolvers.ProcessResolver.GetProcessEnvs(process) - return truncated -} - -// ResolveProcessEnvs resolves the envs of the event -func (ev *Event) ResolveProcessEnvs(process *model.Process) []string { - envs, _ := ev.resolvers.ProcessResolver.GetProcessEnvs(process) - return envs -} - -// ResolveSetuidUser resolves the user of the Setuid event -func (ev *Event) ResolveSetuidUser(e *model.SetuidEvent) string { - if len(e.User) == 0 && ev != nil { - e.User, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) - } - return e.User -} -// ResolveSetuidEUser resolves the effective user of the Setuid event -func (ev *Event) ResolveSetuidEUser(e *model.SetuidEvent) string { - if len(e.EUser) == 0 && ev != nil { - e.EUser, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.EUID)) + return nil + }, } - return e.EUser } -// ResolveSetuidFSUser resolves the file-system user of the Setuid event -func (ev *Event) ResolveSetuidFSUser(e *model.SetuidEvent) string { - if len(e.FSUser) == 0 && ev != nil { - e.FSUser, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.FSUID)) - } - return e.FSUser -} - -// ResolveSetgidGroup resolves the group of the Setgid event -func (ev *Event) ResolveSetgidGroup(e *model.SetgidEvent) string { - if len(e.Group) == 0 && ev != nil { - e.Group, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.GID)) - } - return e.Group -} - -// ResolveSetgidEGroup resolves the effective group of the Setgid event -func (ev *Event) ResolveSetgidEGroup(e *model.SetgidEvent) string { - if len(e.EGroup) == 0 && ev != nil { - e.EGroup, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.EGID)) - } - return e.EGroup -} - -// ResolveSetgidFSGroup resolves the file-system group of the Setgid event -func (ev *Event) ResolveSetgidFSGroup(e *model.SetgidEvent) string { - if len(e.FSGroup) == 0 && ev != nil { - e.FSGroup, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.FSGID)) - } - return e.FSGroup -} - -// ResolveSELinuxBoolName resolves the boolean name of the SELinux event -func (ev *Event) ResolveSELinuxBoolName(e *model.SELinuxEvent) string { - if e.EventKind != model.SELinuxBoolChangeEventKind { - return "" - } - - if len(ev.SELinux.BoolName) == 0 { - ev.SELinux.BoolName = ev.resolvers.resolveBasename(&e.File.FileFields) - } - return ev.SELinux.BoolName -} - -func (ev *Event) String() string { - d, err := ev.MarshalJSON() - if err != nil { - return err.Error() +// NewEvent returns a new event +func NewEvent(fh *FieldHandlers, marshaler *EventMarshaler) *model.Event { + return &model.Event{ + FieldHandlers: fh, + JSONMarshaler: marshaler.MarshalJSONEvent, } - return string(d) } -// SetPathResolutionError sets the Event.pathResolutionError -func (ev *Event) SetPathResolutionError(err error) { - ev.pathResolutionError = err +type EventMarshaler struct { + probe *Probe } -// MarshalJSON returns the JSON encoding of the event -func (ev *Event) MarshalJSON() ([]byte, error) { - s := NewEventSerializer(ev) +// MarshalJSONEvent returns the JSON encoding of the event +func (em *EventMarshaler) MarshalJSONEvent(ev *model.Event) ([]byte, error) { + s := NewEventSerializer(ev, em.probe) w := &jwriter.Writer{ Flags: jwriter.NilSliceAsEmpty | jwriter.NilMapAsEmpty, } s.MarshalEasyJSON(w) return w.BuildBytes() } - -// ExtractEventInfo extracts cpu and timestamp from the raw data event -func ExtractEventInfo(record *perf.Record) (QuickInfo, error) { - if len(record.RawSample) < 16 { - return QuickInfo{}, model.ErrNotEnoughData - } - - return QuickInfo{ - cpu: model.ByteOrder.Uint64(record.RawSample[0:8]), - timestamp: model.ByteOrder.Uint64(record.RawSample[8:16]), - }, nil -} - -// ResolveEventTimestamp resolves the monolitic kernel event timestamp to an absolute time -func (ev *Event) ResolveEventTimestamp() time.Time { - if ev.Timestamp.IsZero() { - ev.Timestamp = ev.resolvers.TimeResolver.ResolveMonotonicTimestamp(ev.TimestampRaw) - if ev.Timestamp.IsZero() { - ev.Timestamp = time.Now() - } - } - return ev.Timestamp -} - -// ResolveProcessCacheEntry queries the ProcessResolver to retrieve the ProcessContext of the event -func (ev *Event) ResolveProcessCacheEntry() *model.ProcessCacheEntry { - if ev.ProcessCacheEntry == nil { - ev.ProcessCacheEntry = ev.resolvers.ProcessResolver.Resolve(ev.PIDContext.Pid, ev.PIDContext.Tid) - } - - if ev.ProcessCacheEntry == nil { - // keep the original PIDContext - ev.ProcessCacheEntry = model.NewProcessCacheEntry(nil) - ev.ProcessCacheEntry.PIDContext = ev.PIDContext - - ev.ProcessCacheEntry.FileEvent.SetPathnameStr("") - ev.ProcessCacheEntry.FileEvent.SetBasenameStr("") - - // mark interpreter as resolved too - ev.ProcessCacheEntry.LinuxBinprm.FileEvent.SetPathnameStr("") - ev.ProcessCacheEntry.LinuxBinprm.FileEvent.SetBasenameStr("") - } - - return ev.ProcessCacheEntry -} - -// GetProcessServiceTag returns the service tag based on the process context -func (ev *Event) GetProcessServiceTag() string { - entry := ev.ResolveProcessCacheEntry() - if entry == nil { - return "" - } - - var serviceValues []string - - // first search in the process context itself - if entry.EnvsEntry != nil { - if service := entry.EnvsEntry.Get(ServiceEnvVar); service != "" { - serviceValues = append(serviceValues, service) - } - } - - inContainer := entry.ContainerID != "" - - // while in container check for each ancestor - for ancestor := entry.Ancestor; ancestor != nil; ancestor = ancestor.Ancestor { - if inContainer && ancestor.ContainerID == "" { - break - } - - if ancestor.EnvsEntry != nil { - if service := ancestor.EnvsEntry.Get(ServiceEnvVar); service != "" { - serviceValues = append(serviceValues, service) - } - } - } - - return bestGuessServiceTag(serviceValues) -} - -func bestGuessServiceTag(serviceValues []string) string { - if len(serviceValues) == 0 { - return "" - } - - firstGuess := serviceValues[0] - - // first we sort base on len, biggest len first - sort.Slice(serviceValues, func(i, j int) bool { - return len(serviceValues[j]) < len(serviceValues[i]) // reverse - }) - - // we then compare [i] and [i + 1] to check if [i + 1] is a prefix of [i] - for i := 0; i < len(serviceValues)-1; i++ { - if !strings.HasPrefix(serviceValues[i], serviceValues[i+1]) { - // if it's not a prefix it means we have multiple disjoints services - // we then return the first guess, closest in the process tree - return firstGuess - } - } - - // we have a prefix chain, let's return the biggest one - return serviceValues[0] -} - -// ResolveNetworkDeviceIfName returns the network iterface name from the network context -func (ev *Event) ResolveNetworkDeviceIfName(device *model.NetworkDeviceContext) string { - if len(device.IfName) == 0 && ev.probe != nil { - key := NetDeviceKey{ - NetNS: device.NetNS, - IfIndex: device.IfIndex, - NetworkDirection: manager.Egress, - } - - ev.probe.tcProgramsLock.RLock() - defer ev.probe.tcProgramsLock.RUnlock() - - tcProbe, ok := ev.probe.tcPrograms[key] - if !ok { - key.NetworkDirection = manager.Ingress - tcProbe = ev.probe.tcPrograms[key] - } - - if tcProbe != nil { - device.IfName = tcProbe.IfName - } - } - - return device.IfName -} - -// NewEvent returns a new event -func NewEvent(resolvers *Resolvers, scrubber *pconfig.DataScrubber, probe *Probe) *Event { - return &Event{ - Event: model.Event{}, - resolvers: resolvers, - scrubber: scrubber, - probe: probe, - } -} diff --git a/pkg/security/probe/model_test.go b/pkg/security/probe/model_test.go index 69ad95e4f294e..e80ebf30e8658 100644 --- a/pkg/security/probe/model_test.go +++ b/pkg/security/probe/model_test.go @@ -15,7 +15,7 @@ import ( "sort" "testing" - pconfig "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" @@ -25,7 +25,7 @@ import ( ) func TestSetFieldValue(t *testing.T) { - event := &Event{} + event := &model.Event{} var readOnlyError *eval.ErrFieldReadOnly for _, field := range event.GetFields() { @@ -73,23 +73,23 @@ func TestProcessArgsFlags(t *testing.T) { "-9", "-", "--", }) - e := Event{ - Event: model.Event{ - Exec: model.ExecEvent{ - Process: &model.Process{ - ArgsEntry: &argsEntry, - }, + resolver, _ := NewProcessResolver(&manager.Manager{}, &config.Config{}, &statsd.NoOpClient{}, + &procutil.DataScrubber{}, nil, NewProcessResolverOpts(nil)) + + e := model.Event{ + Exec: model.ExecEvent{ + Process: &model.Process{ + ArgsEntry: &argsEntry, + }, + }, + FieldHandlers: &FieldHandlers{ + resolvers: &Resolvers{ + ProcessResolver: resolver, }, }, } - resolver, _ := NewProcessResolver(&manager.Manager{}, &config.Config{}, &statsd.NoOpClient{}, - &pconfig.DataScrubber{}, nil, NewProcessResolverOpts(nil)) - e.resolvers = &Resolvers{ - ProcessResolver: resolver, - } - - flags := e.ResolveProcessArgsFlags(e.Exec.Process) + flags := e.FieldHandlers.ResolveProcessArgsFlags(&e, e.Exec.Process) sort.Strings(flags) hasFlag := func(flags []string, flag string) bool { @@ -134,23 +134,23 @@ func TestProcessArgsOptions(t *testing.T) { "--", "---", "-9", }) - e := Event{ - Event: model.Event{ - Exec: model.ExecEvent{ - Process: &model.Process{ - ArgsEntry: &argsEntry, - }, + resolver, _ := NewProcessResolver(&manager.Manager{}, &config.Config{}, &statsd.NoOpClient{}, + &procutil.DataScrubber{}, nil, NewProcessResolverOpts(nil)) + + e := model.Event{ + Exec: model.ExecEvent{ + Process: &model.Process{ + ArgsEntry: &argsEntry, + }, + }, + FieldHandlers: &FieldHandlers{ + resolvers: &Resolvers{ + ProcessResolver: resolver, }, }, } - resolver, _ := NewProcessResolver(&manager.Manager{}, &config.Config{}, &statsd.NoOpClient{}, - &pconfig.DataScrubber{}, nil, NewProcessResolverOpts(nil)) - e.resolvers = &Resolvers{ - ProcessResolver: resolver, - } - - options := e.ResolveProcessArgsOptions(e.Exec.Process) + options := e.FieldHandlers.ResolveProcessArgsOptions(&e, e.Exec.Process) sort.Strings(options) hasOption := func(options []string, option string) bool { diff --git a/pkg/security/probe/namespace_resolver.go b/pkg/security/probe/namespace_resolver.go index 24029df116140..8fcdb46a3a430 100644 --- a/pkg/security/probe/namespace_resolver.go +++ b/pkg/security/probe/namespace_resolver.go @@ -165,7 +165,7 @@ func (nn *NetworkNamespace) dequeueNetworkDevices(probe *Probe) { defer handle.Close() for _, queuedDevice := range nn.networkDevicesQueue { - _ = probe.setupNewTCClassifierWithNetNSHandle(queuedDevice, handle) + _ = probe.resolvers.TCResolver.SetupNewTCClassifierWithNetNSHandle(queuedDevice, handle, probe.Manager) } nn.flushNetworkDevicesQueue() } @@ -214,7 +214,7 @@ func NewNamespaceResolver(probe *Probe) (*NamespaceResolver, error) { lru, err := simplelru.NewLRU(1024, func(key uint32, value *NetworkNamespace) { nr.flushNetworkNamespace(value) - nr.probe.flushNetworkNamespace(value) + nr.probe.resolvers.TCResolver.FlushNetworkNamespaceID(value.nsID, nr.probe.Manager) }) if err != nil { return nil, err @@ -326,7 +326,7 @@ func (nr *NamespaceResolver) snapshotNetworkDevices(netns *NetworkNamespace) int NetNS: netns.nsID, } - if err = nr.probe.setupNewTCClassifierWithNetNSHandle(device, handle); err == nil { + if err = nr.probe.resolvers.TCResolver.SetupNewTCClassifierWithNetNSHandle(device, handle, nr.probe.Manager); err == nil { // ignore interfaces that are lazily deleted if !nr.IsLazyDeletionInterface(device.Name) && attrs.HardwareAddr.String() != "" { attachedDeviceCountNoLazyDeletion++ @@ -406,7 +406,7 @@ func (nr *NamespaceResolver) flushNamespaces(ctx context.Context) { case <-ctx.Done(): return case <-ticker.C: - probesCount := nr.probe.flushInactiveProbes() + probesCount := nr.probe.resolvers.TCResolver.FlushInactiveProbes(nr.probe.Manager, nr.IsLazyDeletionInterface) // There is a possible race condition if we lose all network device creations but do notice the new network // namespace: we will create a handle that will never be flushed by `nr.probe.flushInactiveNamespaces()`. @@ -472,7 +472,7 @@ func (nr *NamespaceResolver) preventNetworkNamespaceDrift(probesCount map[uint32 deviceCountNoLoopbackNoDummy := nr.snapshotNetworkDevices(netns) if deviceCountNoLoopbackNoDummy == 0 { nr.flushNetworkNamespace(netns) - nr.probe.flushNetworkNamespace(netns) + nr.probe.resolvers.TCResolver.FlushNetworkNamespaceID(netns.nsID, nr.probe.Manager) netns.Unlock() continue } diff --git a/pkg/security/probe/perfmap.go b/pkg/security/probe/perfmap.go index 7b0165a3e34d1..25d45f12a8636 100644 --- a/pkg/security/probe/perfmap.go +++ b/pkg/security/probe/perfmap.go @@ -20,6 +20,7 @@ import ( "github.com/cilium/ebpf/perf" "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/seclog" ) @@ -85,6 +86,18 @@ func (m *OrderedPerfMap) Resume() error { return m.perfMap.Resume() } +// ExtractEventInfo extracts cpu and timestamp from the raw data event +func ExtractEventInfo(record *perf.Record) (QuickInfo, error) { + if len(record.RawSample) < 16 { + return QuickInfo{}, model.ErrNotEnoughData + } + + return QuickInfo{ + cpu: model.ByteOrder.Uint64(record.RawSample[0:8]), + timestamp: model.ByteOrder.Uint64(record.RawSample[8:16]), + }, nil +} + // NewOrderedPerfMap returned a new ordered perf map. func NewOrderedPerfMap(ctx context.Context, handler func(int, []byte), statsdClient statsd.ClientInterface) (*OrderedPerfMap, error) { recordPool := NewRecordPool() diff --git a/pkg/security/probe/probe.go b/pkg/security/probe/probe.go index cac412582073f..df72e8e78396c 100644 --- a/pkg/security/probe/probe.go +++ b/pkg/security/probe/probe.go @@ -23,21 +23,20 @@ import ( manager "github.com/DataDog/ebpf-manager" "github.com/hashicorp/go-multierror" "github.com/moby/sys/mountinfo" - "github.com/vishvananda/netlink" "golang.org/x/exp/slices" "golang.org/x/sys/unix" "golang.org/x/time/rate" "gopkg.in/yaml.v3" aconfig "github.com/DataDog/datadog-agent/pkg/config" - pconfig "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/security/api" "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf" kernel "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" "github.com/DataDog/datadog-agent/pkg/security/ebpf/probes" - "github.com/DataDog/datadog-agent/pkg/security/metrics" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/probe/constantfetch" "github.com/DataDog/datadog-agent/pkg/security/probe/erpc" "github.com/DataDog/datadog-agent/pkg/security/probe/managerhelper" @@ -57,8 +56,8 @@ type ActivityDumpHandler interface { // EventHandler represents an handler for the events sent by the probe type EventHandler interface { - HandleEvent(event *Event) - HandleCustomEvent(rule *rules.Rule, event *CustomEvent) + HandleEvent(event *model.Event) + HandleCustomEvent(rule *rules.Rule, event *events.CustomEvent) } // EventStream describes the interface implemented by reordered perf maps or ring buffers @@ -71,7 +70,7 @@ type EventStream interface { } // NotifyDiscarderPushedCallback describe the callback used to retrieve pushed discarders information -type NotifyDiscarderPushedCallback func(eventType string, event *Event, field string) +type NotifyDiscarderPushedCallback func(eventType string, event *model.Event, field string) // Probe represents the runtime security eBPF probe in charge of // setting up the required kProbes and decoding events sent from the kernel @@ -88,12 +87,16 @@ type Probe struct { cancelFnc context.CancelFunc wg sync.WaitGroup // Events section - handlers [model.MaxAllEventType][]EventHandler - monitor *Monitor - resolvers *Resolvers - event *Event + handlers [model.MaxAllEventType][]EventHandler + monitor *Monitor + resolvers *Resolvers + event *model.Event + fieldHandlers *FieldHandlers + eventMarshaler *EventMarshaler + scrubber *procutil.DataScrubber + + // Ring eventStream EventStream - scrubber *pconfig.DataScrubber // ActivityDumps section activityDumpHandler ActivityDumpHandler @@ -111,10 +114,6 @@ type Probe struct { constantOffsets map[string]uint64 runtimeCompiled bool - // network section - tcProgramsLock sync.RWMutex - tcPrograms map[NetDeviceKey]*manager.Probe - isRuntimeDiscarded bool } @@ -281,7 +280,6 @@ func (p *Probe) Init() error { return err } - p.resolvers.ProcessResolver.SetCgroupsMonitor(p.monitor.cgroupsMonitor) p.eventStream.SetMonitor(p.monitor.perfBufferMonitor) return nil @@ -317,7 +315,7 @@ func (p *Probe) AddEventHandler(eventType model.EventType, handler EventHandler) } // DispatchEvent sends an event to the probe event handler -func (p *Probe) DispatchEvent(event *Event) { +func (p *Probe) DispatchEvent(event *model.Event) { seclog.TraceTagf(event.GetEventType(), "Dispatching event %s", event) // send wildcard first @@ -342,7 +340,7 @@ func (p *Probe) DispatchActivityDump(dump *api.ActivityDumpStreamMessage) { } // DispatchCustomEvent sends a custom event to the probe event handler -func (p *Probe) DispatchCustomEvent(rule *rules.Rule, event *CustomEvent) { +func (p *Probe) DispatchCustomEvent(rule *rules.Rule, event *events.CustomEvent) { seclog.TraceTagf(event.GetEventType(), "Dispatching custom event %s", event) // send specific event @@ -359,18 +357,9 @@ func (p *Probe) DispatchCustomEvent(rule *rules.Rule, event *CustomEvent) { } } -func (p *Probe) sendTCProgramsStats() { - p.tcProgramsLock.RLock() - defer p.tcProgramsLock.RUnlock() - - if val := float64(len(p.tcPrograms)); val > 0 { - _ = p.StatsdClient.Gauge(metrics.MetricTCProgram, val, []string{}, 1.0) - } -} - // SendStats sends statistics about the probe to Datadog func (p *Probe) SendStats() error { - p.sendTCProgramsStats() + p.resolvers.TCResolver.SendTCProgramsStats(p.StatsdClient) return p.monitor.SendStats() } @@ -380,12 +369,14 @@ func (p *Probe) GetMonitor() *Monitor { return p.monitor } -func (p *Probe) zeroEvent() *Event { +func (p *Probe) zeroEvent() *model.Event { *p.event = eventZero + p.event.FieldHandlers = p.fieldHandlers + p.event.JSONMarshaler = p.eventMarshaler.MarshalJSONEvent return p.event } -func (p *Probe) unmarshalContexts(data []byte, event *Event) (int, error) { +func (p *Probe) unmarshalContexts(data []byte, event *model.Event) (int, error) { read, err := model.UnmarshalBinary(data, &event.PIDContext, &event.SpanContext, &event.ContainerContext) if err != nil { return 0, err @@ -405,6 +396,20 @@ func (p *Probe) invalidateDentry(mountID uint32, inode uint64) { p.resolvers.DentryResolver.DelCacheEntry(mountID, inode) } +// UnmarshalProcessCacheEntry unmarshal a Process +func (p *Probe) UnmarshalProcessCacheEntry(ev *model.Event, data []byte) (int, error) { + entry := p.resolvers.ProcessResolver.NewProcessCacheEntry(ev.PIDContext) + ev.ProcessCacheEntry = entry + + n, err := entry.Process.UnmarshalBinary(data) + if err != nil { + return n, err + } + entry.Process.ContainerID = ev.ContainerContext.ID + + return n, nil +} + func (p *Probe) handleEvent(CPU int, data []byte) { offset := 0 event := p.zeroEvent() @@ -468,6 +473,15 @@ func (p *Probe) handleEvent(CPU int, data []byte) { p.monitor.activityDumpManager.HandleCgroupTracingEvent(&event.CgroupTracing) return + case model.UnshareMountNsEventType: + if _, err = event.UnshareMountNS.UnmarshalBinary(data[offset:]); err != nil { + seclog.Errorf("failed to decode unshare mnt ns event: %s (offset %d, len %d)", err, offset, dataLen) + return + } + if err := p.handleNewMount(event, &event.UnshareMountNS.Mount); err != nil { + seclog.Debugf("failed to handle new mount from unshare mnt ns event: %s", err) + } + return } read, err = p.unmarshalContexts(data[offset:], event) @@ -494,35 +508,15 @@ func (p *Probe) handleEvent(CPU int, data []byte) { seclog.Errorf("failed to decode mount event: %s (offset %d, len %d)", err, offset, dataLen) return } - - // There could be entries of a previous mount_id in the cache for instance, - // runc does the following : it bind mounts itself (using /proc/exe/self), - // opens a file descriptor on the new file with O_CLOEXEC then umount the bind mount using - // MNT_DETACH. It then does an exec syscall, that will cause the fd to be closed. - // Our dentry resolution of the exec event causes the inode/mount_id to be put in cache, - // so we remove all dentry entries belonging to the mountID. - p.resolvers.DentryResolver.DelCacheEntries(event.Mount.MountID) - - // Resolve mount point - if err := event.SetMountPoint(&event.Mount); err != nil { - seclog.Debugf("failed to set mount point: %v", err) - return - } - // Resolve root - if err := event.SetMountRoot(&event.Mount); err != nil { - seclog.Debugf("failed to set mount root: %v", err) - return - } - - // Insert new mount point in cache - if err = p.resolvers.MountResolver.Insert(event.Mount); err != nil { - seclog.Errorf("failed to insert mount event: %v", err) + if err := p.handleNewMount(event, &event.Mount.Mount); err != nil { + seclog.Debugf("failed to handle new mount from mount event: %s\n", err) return } + // TODO: this should be moved in the resolver itself in order to handle the fallbacks if event.Mount.GetFSType() == "nsfs" { nsid := uint32(event.Mount.RootInode) - mountPath, _, err := p.resolvers.MountResolver.ResolveMountPaths(event.Mount.MountID, event.PIDContext.Pid) + mountPath, err := p.resolvers.MountResolver.ResolveMountPath(event.Mount.MountID, event.PIDContext.Pid, event.ContainerContext.ID) if err != nil { seclog.Debugf("failed to get mount path: %v", err) } else { @@ -530,6 +524,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { _, _ = p.resolvers.NamespaceResolver.SaveNetworkNamespaceHandle(nsid, mountNetNSPath) } } + case model.FileUmountEventType: if _, err = event.Umount.UnmarshalBinary(data[offset:]); err != nil { seclog.Errorf("failed to decode umount event: %s (offset %d, len %d)", err, offset, dataLen) @@ -537,7 +532,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { } // we can skip this error as this is for the umount only and there is no impact on the filepath resolution - mount, _ := p.resolvers.MountResolver.Get(event.Umount.MountID, event.PIDContext.Pid) + mount, _ := p.resolvers.MountResolver.ResolveMount(event.Umount.MountID, event.PIDContext.Pid, event.ContainerContext.ID) if mount != nil && mount.GetFSType() == "nsfs" { nsid := uint32(mount.RootInode) if namespace := p.resolvers.NamespaceResolver.ResolveNetworkNamespace(nsid); namespace != nil { @@ -622,7 +617,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { return } case model.ForkEventType: - if _, err = event.UnmarshalProcessCacheEntry(data[offset:]); err != nil { + if _, err = p.UnmarshalProcessCacheEntry(event, data[offset:]); err != nil { seclog.Errorf("failed to decode fork event: %s (offset %d, len %d)", err, offset, dataLen) return } @@ -637,13 +632,18 @@ func (p *Probe) handleEvent(CPU int, data []byte) { p.resolvers.ProcessResolver.AddForkEntry(event.ProcessCacheEntry) case model.ExecEventType: // unmarshal and fill event.processCacheEntry - if _, err = event.UnmarshalProcessCacheEntry(data[offset:]); err != nil { + if _, err = p.UnmarshalProcessCacheEntry(event, data[offset:]); err != nil { seclog.Errorf("failed to decode exec event: %s (offset %d, len %d)", err, offset, len(data)) return } - if err = p.resolvers.ProcessResolver.ResolveNewProcessCacheEntry(event.ProcessCacheEntry); err != nil { + if err = p.resolvers.ProcessResolver.ResolveNewProcessCacheEntry(event.ProcessCacheEntry, &event.ContainerContext); err != nil { seclog.Debugf("failed to resolve new process cache entry context: %s", err) + + var errResolution *ErrPathResolution + if errors.As(err, &errResolution) { + event.SetPathResolutionError(&event.ProcessCacheEntry.FileEvent, err) + } } p.resolvers.ProcessResolver.AddExecEntry(event.ProcessCacheEntry) @@ -655,11 +655,17 @@ func (p *Probe) handleEvent(CPU int, data []byte) { return } - event.ProcessCacheEntry = event.ResolveProcessCacheEntry() + var exists bool + event.ProcessCacheEntry, exists = p.fieldHandlers.ResolveProcessCacheEntry(event) + if !exists { + // no need to dispatch an exit event that don't have the corresponding cache entry + return + } + // Use the event timestamp as exit time // The local process cache hasn't been updated yet with the exit time when the exit event is first seen // The pid_cache kernel map has the exit_time but it's only accessed if there's a local miss - event.ProcessCacheEntry.Process.ExitTime = event.ResolveEventTimestamp() + event.ProcessCacheEntry.Process.ExitTime = p.fieldHandlers.ResolveEventTimestamp(event) event.Exit.Process = &event.ProcessCacheEntry.Process case model.SetuidEventType: if _, err = event.SetUID.UnmarshalBinary(data[offset:]); err != nil { @@ -695,7 +701,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { return } // resolve tracee process context - cacheEntry := event.resolvers.ProcessResolver.Resolve(event.PTrace.PID, event.PTrace.PID) + cacheEntry := p.resolvers.ProcessResolver.Resolve(event.PTrace.PID, event.PTrace.PID) if cacheEntry != nil { event.PTrace.Tracee = &cacheEntry.ProcessContext } @@ -736,7 +742,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { return } // resolve target process context - cacheEntry := event.resolvers.ProcessResolver.Resolve(event.Signal.PID, event.Signal.PID) + cacheEntry := p.resolvers.ProcessResolver.Resolve(event.Signal.PID, event.Signal.PID) if cacheEntry != nil { event.Signal.Target = &cacheEntry.ProcessContext } @@ -783,7 +789,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { } // resolve the process cache entry - event.ProcessCacheEntry = event.ResolveProcessCacheEntry() + event.ProcessCacheEntry, _ = p.fieldHandlers.ResolveProcessCacheEntry(event) // use ProcessCacheEntry process context as process context event.ProcessContext = &event.ProcessCacheEntry.ProcessContext @@ -793,7 +799,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { } if eventType == model.ExitEventType { - defer p.resolvers.ProcessResolver.DeleteEntry(event.ProcessCacheEntry.Pid, event.ResolveEventTimestamp()) + defer p.resolvers.ProcessResolver.DeleteEntry(event.ProcessCacheEntry.Pid, p.fieldHandlers.ResolveEventTimestamp(event)) } p.DispatchEvent(event) @@ -803,10 +809,10 @@ func (p *Probe) handleEvent(CPU int, data []byte) { } // OnRuleMatch is called when a rule matches just before sending -func (p *Probe) OnRuleMatch(rule *rules.Rule, event *Event) { +func (p *Probe) OnRuleMatch(rule *rules.Rule, ev *model.Event) { // ensure that all the fields are resolved before sending - event.ResolveContainerID(&event.ContainerContext) - event.ResolveContainerTags(&event.ContainerContext) + ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext) + ev.FieldHandlers.ResolveContainerTags(ev, &ev.ContainerContext) } // AddNewNotifyDiscarderPushedCallback add a callback to the list of func that have to be called when a discarder is pushed to kernel @@ -818,14 +824,14 @@ func (p *Probe) AddNewNotifyDiscarderPushedCallback(cb NotifyDiscarderPushedCall } // OnNewDiscarder is called when a new discarder is found -func (p *Probe) OnNewDiscarder(rs *rules.RuleSet, event *Event, field eval.Field, eventType eval.EventType) error { +func (p *Probe) OnNewDiscarder(rs *rules.RuleSet, ev *model.Event, field eval.Field, eventType eval.EventType) error { // discarders disabled if !p.Config.EnableDiscarders { return nil } if p.isRuntimeDiscarded { - fakeTime := time.Unix(0, int64(event.TimestampRaw)) + fakeTime := time.Unix(0, int64(ev.TimestampRaw)) if !p.discarderRateLimiter.AllowN(fakeTime, 1) { return nil } @@ -835,13 +841,13 @@ func (p *Probe) OnNewDiscarder(rs *rules.RuleSet, event *Event, field eval.Field if handlers, ok := allDiscarderHandlers[eventType]; ok { for _, handler := range handlers { - discarderPushed, _ := handler(rs, event, p, Discarder{Field: field}) + discarderPushed, _ := handler(rs, ev, p, Discarder{Field: field}) if discarderPushed { p.notifyDiscarderPushedCallbacksLock.Lock() defer p.notifyDiscarderPushedCallbacksLock.Unlock() for _, cb := range p.notifyDiscarderPushedCallbacks { - cb(eventType, event, field) + cb(eventType, ev, field) } } } @@ -904,28 +910,6 @@ func (p *Probe) SetApprovers(eventType eval.EventType, approvers rules.Approvers return nil } -func (p *Probe) selectTCProbes() manager.ProbesSelector { - p.tcProgramsLock.RLock() - defer p.tcProgramsLock.RUnlock() - - // Although unlikely, a race is still possible with the umount event of a network namespace: - // - a reload event is triggered - // - selectTCProbes is invoked and the list of currently running probes is generated - // - a container exits and the umount event of its network namespace is handled now (= its TC programs are stopped) - // - the manager executes UpdateActivatedProbes - // In this setup, if we didn't use the best effort selector, the manager would try to init & attach a program that - // was deleted when the container exited. - var activatedProbes manager.BestEffort - for _, tcProbe := range p.tcPrograms { - if tcProbe.IsRunning() { - activatedProbes.Selectors = append(activatedProbes.Selectors, &manager.ProbeSelector{ - ProbeIdentificationPair: tcProbe.ProbeIdentificationPair, - }) - } - } - return &activatedProbes -} - func (p *Probe) isNeededForActivityDump(eventType eval.EventType) bool { if p.Config.ActivityDumpEnabled { for _, e := range p.Config.ActivityDumpTracedEventTypes { @@ -963,7 +947,7 @@ func (p *Probe) SelectProbes(eventTypes []eval.EventType) error { } } - activatedProbes = append(activatedProbes, p.selectTCProbes()) + activatedProbes = append(activatedProbes, p.resolvers.TCResolver.SelectTCProbes()) // Add syscall monitor probes if p.Config.ActivityDumpEnabled { @@ -1026,31 +1010,40 @@ func (p *Probe) SelectProbes(eventTypes []eval.EventType) error { return p.Manager.UpdateActivatedProbes(activatedProbes) } -// DumpDiscarders removes all the discarders -func (p *Probe) DumpDiscarders() (string, error) { - seclog.Debugf("Dumping discarders") - +// GetDiscarders retrieve the discarders +func (p *Probe) GetDiscarders() (*DiscardersDump, error) { inodeMap, err := managerhelper.Map(p.Manager, "inode_discarders") if err != nil { - return "", err + return nil, err } pidMap, err := managerhelper.Map(p.Manager, "pid_discarders") if err != nil { - return "", err + return nil, err } statsFB, err := managerhelper.Map(p.Manager, "discarder_stats_fb") if err != nil { - return "", err + return nil, err } statsBB, err := managerhelper.Map(p.Manager, "discarder_stats_bb") if err != nil { - return "", err + return nil, err } dump, err := dumpDiscarders(p.resolvers.DentryResolver, pidMap, inodeMap, statsFB, statsBB) + if err != nil { + return nil, err + } + return &dump, nil +} + +// DumpDiscarders removes all the discarders +func (p *Probe) DumpDiscarders() (string, error) { + seclog.Debugf("Dumping discarders") + + dump, err := p.GetDiscarders() if err != nil { return "", err } @@ -1115,13 +1108,17 @@ func (p *Probe) GetDebugStats() map[string]interface{} { } // NewRuleSet returns a new rule set -func (p *Probe) NewRuleSet(opts *rules.Opts, evalOpts *eval.Opts, macroStore *eval.MacroStore) *rules.RuleSet { +func (p *Probe) NewRuleSet(opts *rules.Opts, evalOpts *eval.Opts) *rules.RuleSet { + opts.WithLogger(seclog.DefaultLogger) + eventCtor := func() eval.Event { - return NewEvent(p.resolvers, p.scrubber, p) + return &model.Event{ + FieldHandlers: p.fieldHandlers, + JSONMarshaler: p.eventMarshaler.MarshalJSONEvent, + } } - opts.WithLogger(seclog.DefaultLogger) - return rules.NewRuleSet(&Model{probe: p}, eventCtor, opts, evalOpts, macroStore) + return rules.NewRuleSet(NewModel(p), eventCtor, opts, evalOpts) } // QueuedNetworkDeviceError is used to indicate that the new network device was queued until its namespace handle is @@ -1148,60 +1145,7 @@ func (p *Probe) setupNewTCClassifier(device model.NetDevice) error { return QueuedNetworkDeviceError{msg: fmt.Sprintf("device %s is queued until %d is resolved", device.Name, device.NetNS)} } defer handle.Close() - return p.setupNewTCClassifierWithNetNSHandle(device, handle) -} - -// setupNewTCClassifierWithNetNSHandle creates and attaches TC probes on the provided device. WARNING: this function -// will not close the provided netns handle, so the caller of this function needs to take care of it. -func (p *Probe) setupNewTCClassifierWithNetNSHandle(device model.NetDevice, netnsHandle *os.File) error { - p.tcProgramsLock.Lock() - defer p.tcProgramsLock.Unlock() - - var combinedErr multierror.Error - for _, tcProbe := range probes.GetTCProbes() { - // make sure we're not overriding an existing network probe - deviceKey := NetDeviceKey{IfIndex: device.IfIndex, NetNS: device.NetNS, NetworkDirection: tcProbe.NetworkDirection} - _, ok := p.tcPrograms[deviceKey] - if ok { - continue - } - - newProbe := tcProbe.Copy() - newProbe.CopyProgram = true - newProbe.UID = probes.SecurityAgentUID + device.GetKey() - newProbe.IfIndex = int(device.IfIndex) - newProbe.IfIndexNetns = uint64(netnsHandle.Fd()) - newProbe.IfIndexNetnsID = device.NetNS - newProbe.KeepProgramSpec = false - newProbe.TCFilterPrio = p.Config.NetworkClassifierPriority - newProbe.TCFilterHandle = netlink.MakeHandle(0, p.Config.NetworkClassifierHandle) - - netnsEditor := []manager.ConstantEditor{ - { - Name: "netns", - Value: uint64(device.NetNS), - }, - } - - if err := p.Manager.CloneProgram(probes.SecurityAgentUID, newProbe, netnsEditor, nil); err != nil { - _ = multierror.Append(&combinedErr, fmt.Errorf("couldn't clone %s: %v", tcProbe.ProbeIdentificationPair, err)) - } else { - p.tcPrograms[deviceKey] = newProbe - } - } - return combinedErr.ErrorOrNil() -} - -// flushNetworkNamespace thread unsafe version of FlushNetworkNamespace -func (p *Probe) flushNetworkNamespace(namespace *NetworkNamespace) { - p.tcProgramsLock.Lock() - defer p.tcProgramsLock.Unlock() - for tcKey, tcProbe := range p.tcPrograms { - if tcKey.NetNS == namespace.nsID { - _ = p.Manager.DetachHook(tcProbe.ProbeIdentificationPair) - delete(p.tcPrograms, tcKey) - } - } + return p.resolvers.TCResolver.SetupNewTCClassifierWithNetNSHandle(device, handle, p.Manager) } // FlushNetworkNamespace removes all references and stops all TC programs in the provided network namespace. This method @@ -1210,37 +1154,36 @@ func (p *Probe) FlushNetworkNamespace(namespace *NetworkNamespace) { p.resolvers.NamespaceResolver.FlushNetworkNamespace(namespace) // cleanup internal structures - p.flushNetworkNamespace(namespace) + p.resolvers.TCResolver.FlushNetworkNamespaceID(namespace.nsID, p.Manager) } -// flushInactiveProbes detaches and deletes inactive probes. This function returns a map containing the count of interfaces -// per network namespace (ignoring the interfaces that are lazily deleted). -func (p *Probe) flushInactiveProbes() map[uint32]int { - p.tcProgramsLock.Lock() - defer p.tcProgramsLock.Unlock() - - probesCountNoLazyDeletion := make(map[uint32]int) +func (p *Probe) handleNewMount(ev *model.Event, m *model.Mount) error { + // There could be entries of a previous mount_id in the cache for instance, + // runc does the following : it bind mounts itself (using /proc/exe/self), + // opens a file descriptor on the new file with O_CLOEXEC then umount the bind mount using + // MNT_DETACH. It then does an exec syscall, that will cause the fd to be closed. + // Our dentry resolution of the exec event causes the inode/mount_id to be put in cache, + // so we remove all dentry entries belonging to the mountID. + p.resolvers.DentryResolver.DelCacheEntries(m.MountID) + + // Resolve mount point + if err := p.fieldHandlers.SetMountPoint(ev, m); err != nil { + seclog.Debugf("failed to set mount point: %v", err) + return err + } + // Resolve root + if err := p.fieldHandlers.SetMountRoot(ev, m); err != nil { + seclog.Debugf("failed to set mount root: %v", err) + return err + } - var linkName string - for tcKey, tcProbe := range p.tcPrograms { - if !tcProbe.IsTCFilterActive() { - _ = p.Manager.DetachHook(tcProbe.ProbeIdentificationPair) - delete(p.tcPrograms, tcKey) - } else { - link, err := tcProbe.ResolveLink() - if err == nil { - linkName = link.Attrs().Name - } else { - linkName = "" - } - // ignore interfaces that are lazily deleted - if link.Attrs().HardwareAddr.String() != "" && !p.resolvers.NamespaceResolver.IsLazyDeletionInterface(linkName) { - probesCountNoLazyDeletion[tcKey.NetNS]++ - } - } + // Insert new mount point in cache, passing it a copy of the mount that we got from the event + if err := p.resolvers.MountResolver.Insert(*m, ev.PIDContext.Pid, ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext)); err != nil { + seclog.Errorf("failed to insert mount event: %v", err) + return err } - return probesCountNoLazyDeletion + return nil } // NewProbe instantiates a new runtime security agent probe @@ -1260,10 +1203,10 @@ func NewProbe(config *config.Config, statsdClient statsd.ClientInterface) (*Prob cancelFnc: cancel, Erpc: nerpc, erpcRequest: &erpc.ERPCRequest{}, - tcPrograms: make(map[NetDeviceKey]*manager.Probe), StatsdClient: statsdClient, discarderRateLimiter: rate.NewLimiter(rate.Every(time.Second/5), 100), isRuntimeDiscarded: os.Getenv("RUNTIME_SECURITY_TESTSUITE") != "true", + event: &model.Event{}, } if err := p.detectKernelVersion(); err != nil { @@ -1428,7 +1371,7 @@ func NewProbe(config *config.Config, statsdClient statsd.ClientInterface) (*Prob p.managerOptions.ExcludedFunctions = append(p.managerOptions.ExcludedFunctions, probes.GetAllTCProgramFunctions()...) } - p.scrubber = pconfig.NewDefaultDataScrubber() + p.scrubber = procutil.NewDefaultDataScrubber() p.scrubber.AddCustomSensitiveWords(config.CustomSensitiveWords) resolvers, err := NewResolvers(config, p) @@ -1437,11 +1380,11 @@ func NewProbe(config *config.Config, statsdClient statsd.ClientInterface) (*Prob } p.resolvers = resolvers - p.event = NewEvent(p.resolvers, p.scrubber, p) + p.fieldHandlers = &FieldHandlers{probe: p, resolvers: resolvers} + p.eventMarshaler = &EventMarshaler{probe: p} - eventZero.resolvers = p.resolvers - eventZero.scrubber = p.scrubber - eventZero.probe = p + // be sure to zero the probe event before everything else + p.zeroEvent() if useRingBuffers { p.eventStream = NewRingBuffer(p.handleEvent) diff --git a/pkg/security/probe/probe_monitor.go b/pkg/security/probe/probe_monitor.go index d404e306b92ed..d7c5a59e5bece 100644 --- a/pkg/security/probe/probe_monitor.go +++ b/pkg/security/probe/probe_monitor.go @@ -15,12 +15,8 @@ import ( "sync" "time" - "github.com/hashicorp/go-multierror" - "github.com/DataDog/datadog-agent/pkg/security/api" - "github.com/DataDog/datadog-agent/pkg/security/metrics" - "github.com/DataDog/datadog-agent/pkg/security/secl/rules" - "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" ) // Monitor regroups all the work we want to do to monitor the probes we pushed in the kernel @@ -70,7 +66,7 @@ func NewMonitor(p *Probe) (*Monitor, error) { return nil, fmt.Errorf("couldn't create the discarder monitor: %w", err) } - m.cgroupsMonitor = NewCgroupsMonitor(p.StatsdClient) + m.cgroupsMonitor = NewCgroupsMonitor(p.StatsdClient, p.resolvers.CgroupsResolver) return m, nil } @@ -157,14 +153,17 @@ func (m *Monitor) SendStats() error { } // ProcessEvent processes an event through the various monitors and controllers of the probe -func (m *Monitor) ProcessEvent(event *Event) { +func (m *Monitor) ProcessEvent(event *model.Event) { m.loadController.Count(event) // Look for an unresolved path - if err := event.GetPathResolutionError(); err != nil { - m.probe.DispatchCustomEvent( - NewAbnormalPathEvent(event, err), - ) + if err := event.PathResolutionError; err != nil { + var notCritical *ErrPathResolutionNotCritical + if !errors.As(err, ¬Critical) { + m.probe.DispatchCustomEvent( + NewAbnormalPathEvent(event, m.probe, err), + ) + } } else { if m.activityDumpManager != nil { m.activityDumpManager.ProcessEvent(event) @@ -172,47 +171,6 @@ func (m *Monitor) ProcessEvent(event *Event) { } } -// RuleSetLoadedReport represents the rule and the custom event related to a RuleSetLoaded event, ready to be dispatched -type RuleSetLoadedReport struct { - Rule *rules.Rule - Event *CustomEvent -} - -// ReportRuleSetLoaded reports to Datadog that new ruleset was loaded -func (m *Monitor) ReportRuleSetLoaded(ruleSet *rules.RuleSet, err *multierror.Error) { - r, ev := NewRuleSetLoadedEvent(ruleSet, err) - report := RuleSetLoadedReport{Rule: r, Event: ev} - - if err := m.probe.StatsdClient.Count(metrics.MetricRuleSetLoaded, 1, []string{}, 1.0); err != nil { - log.Error(fmt.Errorf("failed to send ruleset_loaded metric: %w", err)) - } - - m.probe.DispatchCustomEvent(report.Rule, report.Event) -} - -// SelfTestReport represents the rule and the custom event related to a SelfTest event; ready to be dispatched -type SelfTestReport struct { - Rule *rules.Rule - Event *CustomEvent -} - -// ReportSelfTest reports to Datadog that a self test was performed -func (m *Monitor) ReportSelfTest(success []string, fails []string) { - // send metric with number of success and fails - tags := []string{ - fmt.Sprintf("success:%d", len(success)), - fmt.Sprintf("fails:%d", len(fails)), - } - if err := m.probe.StatsdClient.Count(metrics.MetricSelfTest, 1, tags, 1.0); err != nil { - log.Error(fmt.Errorf("failed to send self_test metric: %w", err)) - } - - // send the custom event with the list of succeed and failed self tests - r, ev := NewSelfTestEvent(success, fails) - report := SelfTestReport{Rule: r, Event: ev} - m.probe.DispatchCustomEvent(report.Rule, report.Event) -} - // ErrActivityDumpManagerDisabled is returned when the activity dump manager is disabled var ErrActivityDumpManagerDisabled = errors.New("ActivityDumpManager is disabled") diff --git a/pkg/security/probe/process_resolver.go b/pkg/security/probe/process_resolver.go index 8c655504811f6..cf3b125d425aa 100644 --- a/pkg/security/probe/process_resolver.go +++ b/pkg/security/probe/process_resolver.go @@ -29,7 +29,7 @@ import ( "github.com/hashicorp/golang-lru/v2/simplelru" "go.uber.org/atomic" - pconfig "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" "github.com/DataDog/datadog-agent/pkg/security/metrics" @@ -103,7 +103,7 @@ type ProcessResolver struct { manager *manager.Manager config *config.Config statsdClient statsd.ClientInterface - scrubber *pconfig.DataScrubber + scrubber *procutil.DataScrubber resolvers *Resolvers execFileCacheMap *lib.Map @@ -111,7 +111,6 @@ type ProcessResolver struct { pidCacheMap *lib.Map cacheSize *atomic.Int64 opts ProcessResolverOpts - cgroupsMonitor *CgroupsMonitor // stats hitsStats map[string]*atomic.Int64 @@ -414,7 +413,7 @@ func (p *ProcessResolver) enrichEventFromProc(entry *model.ProcessCacheEntry, pr entry.Process.ContainerID = string(containerID) // resolve container path with the MountResolver - entry.FileEvent.Filesystem, err = p.resolvers.MountResolver.GetFilesystem(entry.Process.FileEvent.MountID, entry.Process.Pid) + entry.FileEvent.Filesystem, err = p.resolvers.MountResolver.ResolveFilesystem(entry.Process.FileEvent.MountID, entry.Process.Pid, string(containerID)) if err != nil { return fmt.Errorf("snapshot failed for %d: couldn't get the filesystem: %w", proc.Pid, err) } @@ -544,7 +543,7 @@ func (p *ProcessResolver) insertEntry(entry, prev *model.ProcessCacheEntry) { } if entry.IsContainerInit() { - p.cgroupsMonitor.AddID(entry.ContainerID) + p.resolvers.CgroupsResolver.AddPID1(entry.ContainerID, entry.Pid) } p.addedEntries.Inc() @@ -588,7 +587,12 @@ func (p *ProcessResolver) deleteEntry(pid uint32, exitTime time.Time) { entry.Exit(exitTime) if entry.IsContainerInit() { - p.cgroupsMonitor.DelID(entry.ContainerID) + p.resolvers.CgroupsResolver.Release(entry.ContainerID) + } + + // Release also the parent if the entry is a fork child. The parent could have increased the ref counter too + if entry.IsThread && entry.Ancestor.IsContainerInit() { + p.resolvers.CgroupsResolver.Release(entry.Ancestor.ContainerID) } delete(p.entryCache, entry.Pid) @@ -638,28 +642,31 @@ func (p *ProcessResolver) resolve(pid, tid uint32) *model.ProcessCacheEntry { } // SetProcessPath resolves process file path -func (p *ProcessResolver) SetProcessPath(fileEvent *model.FileEvent, ctx *model.PIDContext) (string, error) { - - if fileEvent.Inode == 0 || fileEvent.MountID == 0 { +func (p *ProcessResolver) SetProcessPath(fileEvent *model.FileEvent, pidCtx *model.PIDContext, ctrCtx *model.ContainerContext) (string, error) { + onError := func(pathnameStr string, err error) (string, error) { fileEvent.SetPathnameStr("") fileEvent.SetBasenameStr("") p.pathErrStats.Inc() - return "", &resolvers.ErrInvalidKeyPath{Inode: fileEvent.Inode, MountID: fileEvent.MountID} - } - pathnameStr, err := p.resolvers.resolveFileFieldsPath(&fileEvent.FileFields, ctx) - if err != nil { - fileEvent.SetPathnameStr("") - fileEvent.SetBasenameStr("") + return pathnameStr, err + } - p.pathErrStats.Inc() + if fileEvent.Inode == 0 { + return onError("", &resolvers.ErrInvalidKeyPath{Inode: fileEvent.Inode, MountID: fileEvent.MountID}) + } - return "", &resolvers.ErrInvalidKeyPath{Inode: fileEvent.Inode, MountID: fileEvent.MountID} + pathnameStr, err := p.resolvers.resolveFileFieldsPath(&fileEvent.FileFields, pidCtx, ctrCtx) + if err != nil { + return onError(pathnameStr, err) } - fileEvent.SetPathnameStr(pathnameStr) - fileEvent.SetBasenameStr(path.Base(fileEvent.PathnameStr)) + if fileEvent.FileFields.IsFileless() { + fileEvent.SetPathnameStr("") + } else { + fileEvent.SetPathnameStr(pathnameStr) + } + fileEvent.SetBasenameStr(path.Base(pathnameStr)) return fileEvent.PathnameStr, nil } @@ -685,7 +692,7 @@ func (p *ProcessResolver) SetProcessSymlink(entry *model.ProcessCacheEntry) { // SetProcessFilesystem resolves process file system func (p *ProcessResolver) SetProcessFilesystem(entry *model.ProcessCacheEntry) (string, error) { if entry.FileEvent.MountID != 0 { - fs, err := p.resolvers.MountResolver.GetFilesystem(entry.FileEvent.MountID, entry.Pid) + fs, err := p.resolvers.MountResolver.ResolveFilesystem(entry.FileEvent.MountID, entry.Pid, entry.ContainerID) if err != nil { return "", err } @@ -722,14 +729,14 @@ func (p *ProcessResolver) resolveFromCache(pid, tid uint32) *model.ProcessCacheE } // ResolveNewProcessCacheEntry resolves the context fields of a new process cache entry parsed from kernel data -func (p *ProcessResolver) ResolveNewProcessCacheEntry(entry *model.ProcessCacheEntry) error { - if _, err := p.SetProcessPath(&entry.FileEvent, &entry.PIDContext); err != nil { - return fmt.Errorf("failed to resolve exec path: %w", err) +func (p *ProcessResolver) ResolveNewProcessCacheEntry(entry *model.ProcessCacheEntry, ctrCtx *model.ContainerContext) error { + if _, err := p.SetProcessPath(&entry.FileEvent, &entry.PIDContext, ctrCtx); err != nil { + return &ErrPathResolution{Err: fmt.Errorf("failed to resolve exec path: %w", err)} } if entry.HasInterpreter() { - if _, err := p.SetProcessPath(&entry.LinuxBinprm.FileEvent, &entry.PIDContext); err != nil { - return fmt.Errorf("failed to resolve interpreter path: %w", err) + if _, err := p.SetProcessPath(&entry.LinuxBinprm.FileEvent, &entry.PIDContext, ctrCtx); err != nil { + return &ErrPathResolution{Err: fmt.Errorf("failed to resolve interpreter path: %w", err)} } } else { // mark it as resolved to avoid abnormal path later in the call flow @@ -773,12 +780,11 @@ func (p *ProcessResolver) resolveFromKernelMaps(pid, tid uint32) *model.ProcessC entry := p.NewProcessCacheEntry(model.PIDContext{Pid: pid, Tid: tid}) - var cc model.ContainerContext - read, err := cc.UnmarshalBinary(procCache) + var ctrCtx model.ContainerContext + read, err := ctrCtx.UnmarshalBinary(procCache) if err != nil { return nil } - entry.ContainerID = cc.ID if _, err := entry.UnmarshalProcEntryBinary(procCache[read:]); err != nil { return nil @@ -789,7 +795,7 @@ func (p *ProcessResolver) resolveFromKernelMaps(pid, tid uint32) *model.ProcessC } // resolve paths and other context fields - if err = p.ResolveNewProcessCacheEntry(entry); err != nil { + if err = p.ResolveNewProcessCacheEntry(entry, &ctrCtx); err != nil { return nil } @@ -850,7 +856,7 @@ func (p *ProcessResolver) resolveFromProcfs(pid uint32, maxDepth int) *model.Pro entry, inserted := p.syncCache(proc, filledProc) if entry != nil { // consider kworker processes with 0 as ppid - entry.IsKworker = filledProc.Ppid == 0 + entry.IsKworker = filledProc.Ppid == 0 && filledProc.Pid != 1 } ppid = uint32(filledProc.Ppid) @@ -1006,7 +1012,7 @@ func (p *ProcessResolver) Get(pid uint32) *model.ProcessCacheEntry { } // UpdateUID updates the credentials of the provided pid -func (p *ProcessResolver) UpdateUID(pid uint32, e *Event) { +func (p *ProcessResolver) UpdateUID(pid uint32, e *model.Event) { if e.ProcessContext.Pid != e.ProcessContext.Tid { return } @@ -1016,16 +1022,16 @@ func (p *ProcessResolver) UpdateUID(pid uint32, e *Event) { entry := p.entryCache[pid] if entry != nil { entry.Credentials.UID = e.SetUID.UID - entry.Credentials.User = e.ResolveSetuidUser(&e.SetUID) + entry.Credentials.User = e.FieldHandlers.ResolveSetuidUser(e, &e.SetUID) entry.Credentials.EUID = e.SetUID.EUID - entry.Credentials.EUser = e.ResolveSetuidEUser(&e.SetUID) + entry.Credentials.EUser = e.FieldHandlers.ResolveSetuidEUser(e, &e.SetUID) entry.Credentials.FSUID = e.SetUID.FSUID - entry.Credentials.FSUser = e.ResolveSetuidFSUser(&e.SetUID) + entry.Credentials.FSUser = e.FieldHandlers.ResolveSetuidFSUser(e, &e.SetUID) } } // UpdateGID updates the credentials of the provided pid -func (p *ProcessResolver) UpdateGID(pid uint32, e *Event) { +func (p *ProcessResolver) UpdateGID(pid uint32, e *model.Event) { if e.ProcessContext.Pid != e.ProcessContext.Tid { return } @@ -1035,16 +1041,16 @@ func (p *ProcessResolver) UpdateGID(pid uint32, e *Event) { entry := p.entryCache[pid] if entry != nil { entry.Credentials.GID = e.SetGID.GID - entry.Credentials.Group = e.ResolveSetgidGroup(&e.SetGID) + entry.Credentials.Group = e.FieldHandlers.ResolveSetgidGroup(e, &e.SetGID) entry.Credentials.EGID = e.SetGID.EGID - entry.Credentials.EGroup = e.ResolveSetgidEGroup(&e.SetGID) + entry.Credentials.EGroup = e.FieldHandlers.ResolveSetgidEGroup(e, &e.SetGID) entry.Credentials.FSGID = e.SetGID.FSGID - entry.Credentials.FSGroup = e.ResolveSetgidFSGroup(&e.SetGID) + entry.Credentials.FSGroup = e.FieldHandlers.ResolveSetgidFSGroup(e, &e.SetGID) } } // UpdateCapset updates the credentials of the provided pid -func (p *ProcessResolver) UpdateCapset(pid uint32, e *Event) { +func (p *ProcessResolver) UpdateCapset(pid uint32, e *model.Event) { if e.ProcessContext.Pid != e.ProcessContext.Tid { return } @@ -1281,14 +1287,9 @@ func (p *ProcessResolver) NewProcessVariables(scoper func(ctx *eval.Context) uns return variables } -// SetCgroupsMonitor set the cgroup monitor -func (p *ProcessResolver) SetCgroupsMonitor(monitor *CgroupsMonitor) { - p.cgroupsMonitor = monitor -} - // NewProcessResolver returns a new process resolver func NewProcessResolver(manager *manager.Manager, config *config.Config, statsdClient statsd.ClientInterface, - scrubber *pconfig.DataScrubber, resolvers *Resolvers, opts ProcessResolverOpts) (*ProcessResolver, error) { + scrubber *procutil.DataScrubber, resolvers *Resolvers, opts ProcessResolverOpts) (*ProcessResolver, error) { argsEnvsCache, err := simplelru.NewLRU[uint32, *model.ArgsEnvsCacheEntry](maxParallelArgsEnvs, nil) if err != nil { return nil, err diff --git a/pkg/security/probe/resolvers.go b/pkg/security/probe/resolvers.go index a7da5f20fd596..bc313e5f0551e 100644 --- a/pkg/security/probe/resolvers.go +++ b/pkg/security/probe/resolvers.go @@ -10,6 +10,7 @@ package probe import ( "context" + "errors" "fmt" "os" "runtime" @@ -35,6 +36,8 @@ type Resolvers struct { DentryResolver *resolvers.DentryResolver ProcessResolver *ProcessResolver NamespaceResolver *NamespaceResolver + CgroupsResolver *resolvers.CgroupsResolver + TCResolver *resolvers.TCResolver } // NewResolvers creates a new instance of Resolvers @@ -54,16 +57,23 @@ func NewResolvers(config *config.Config, probe *Probe) (*Resolvers, error) { return nil, err } - mountResolver, err := resolvers.NewMountResolver(probe.StatsdClient) + namespaceResolver, err := NewNamespaceResolver(probe) if err != nil { return nil, err } - namespaceResolver, err := NewNamespaceResolver(probe) + cgroupsResolver, err := resolvers.NewCgroupsResolver() + if err != nil { + return nil, err + } + + mountResolver, err := resolvers.NewMountResolver(probe.StatsdClient, cgroupsResolver, resolvers.MountResolverOpts{UseProcFS: true}) if err != nil { return nil, err } + tcResolver := resolvers.NewTCResolver(config) + resolvers := &Resolvers{ probe: probe, MountResolver: mountResolver, @@ -73,6 +83,8 @@ func NewResolvers(config *config.Config, probe *Probe) (*Resolvers, error) { TagsResolver: resolvers.NewTagsResolver(config), DentryResolver: dentryResolver, NamespaceResolver: namespaceResolver, + CgroupsResolver: cgroupsResolver, + TCResolver: tcResolver, } processResolver, err := NewProcessResolver(probe.Manager, probe.Config, probe.StatsdClient, @@ -85,23 +97,37 @@ func NewResolvers(config *config.Config, probe *Probe) (*Resolvers, error) { return resolvers, nil } -// resolveBasename resolves the inode to a filename +// resolveBasename resolves an inode/mount ID pair to a file basename func (r *Resolvers) resolveBasename(e *model.FileFields) string { return r.DentryResolver.ResolveName(e.MountID, e.Inode, e.PathID) } -// resolveFileFieldsPath resolves the inode to a full path -func (r *Resolvers) resolveFileFieldsPath(e *model.FileFields, ctx *model.PIDContext) (string, error) { +// resolveFileFieldsPath resolves an inode/mount ID pair to a full path +func (r *Resolvers) resolveFileFieldsPath(e *model.FileFields, pidCtx *model.PIDContext, ctrCtx *model.ContainerContext) (string, error) { pathStr, err := r.DentryResolver.Resolve(e.MountID, e.Inode, e.PathID, !e.HasHardLinks()) if err != nil { return pathStr, err } - mountPath, rootPath, mountErr := r.MountResolver.ResolveMountPaths(e.MountID, ctx.Pid) - if mountErr != nil { - return pathStr, mountErr + if e.IsFileless() { + return pathStr, err + } + + mountPath, err := r.MountResolver.ResolveMountPath(e.MountID, pidCtx.Pid, ctrCtx.ID) + if err != nil { + if _, err := r.MountResolver.IsMountIDValid(e.MountID); errors.Is(err, resolvers.ErrMountKernelID) { + return pathStr, &ErrPathResolutionNotCritical{Err: fmt.Errorf("mount ID(%d) invalid: %w", e.MountID, err)} + } + return pathStr, err } + rootPath, err := r.MountResolver.ResolveMountRoot(e.MountID, pidCtx.Pid, ctrCtx.ID) + if err != nil { + if _, err := r.MountResolver.IsMountIDValid(e.MountID); errors.Is(err, resolvers.ErrMountKernelID) { + return pathStr, &ErrPathResolutionNotCritical{Err: fmt.Errorf("mount ID(%d) invalid: %w", e.MountID, err)} + } + return pathStr, err + } // This aims to handle bind mounts if strings.HasPrefix(pathStr, rootPath) && rootPath != "/" { pathStr = strings.Replace(pathStr, rootPath, "", 1) @@ -114,22 +140,6 @@ func (r *Resolvers) resolveFileFieldsPath(e *model.FileFields, ctx *model.PIDCon return pathStr, err } -// ResolveFileFieldsUser resolves the user id of the file to a username -func (r *Resolvers) ResolveFileFieldsUser(e *model.FileFields) string { - if len(e.User) == 0 { - e.User, _ = r.UserGroupResolver.ResolveUser(int(e.UID)) - } - return e.User -} - -// ResolveFileFieldsGroup resolves the group id of the file to a group name -func (r *Resolvers) ResolveFileFieldsGroup(e *model.FileFields) string { - if len(e.Group) == 0 { - e.Group, _ = r.UserGroupResolver.ResolveGroup(int(e.GID)) - } - return e.Group -} - // ResolveCredentialsUser resolves the user id of the process to a username func (r *Resolvers) ResolveCredentialsUser(e *model.Credentials) string { if len(e.User) == 0 { @@ -178,14 +188,6 @@ func (r *Resolvers) ResolveCredentialsFSGroup(e *model.Credentials) string { return e.FSGroup } -// ResolvePCEContainerTags resolves the container tags of a ProcessCacheEntry -func (r *Resolvers) ResolvePCEContainerTags(e *model.ProcessCacheEntry) []string { - if len(e.ContainerTags) == 0 && len(e.ContainerID) > 0 { - e.ContainerTags = r.TagsResolver.Resolve(e.ContainerID) - } - return e.ContainerTags -} - // Start the resolvers func (r *Resolvers) Start(ctx context.Context) error { if err := r.ProcessResolver.Start(ctx); err != nil { diff --git a/pkg/security/probe/resolvers/cgroups_resolver.go b/pkg/security/probe/resolvers/cgroups_resolver.go new file mode 100644 index 0000000000000..11d0c5890cba5 --- /dev/null +++ b/pkg/security/probe/resolvers/cgroups_resolver.go @@ -0,0 +1,102 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package resolvers + +import ( + "sync" + + "github.com/hashicorp/golang-lru/v2/simplelru" +) + +type pid1CacheEntry struct { + pid uint32 + refCount int +} + +// CgroupsResolver defines a cgroup monitor +type CgroupsResolver struct { + sync.RWMutex + pids *simplelru.LRU[string, *pid1CacheEntry] +} + +// AddPID1 associates a container id and a pid which is expected to be the pid 1 +func (cr *CgroupsResolver) AddPID1(id string, pid uint32) { + cr.Lock() + defer cr.Unlock() + + entry, exists := cr.pids.Get(id) + if !exists { + cr.pids.Add(id, &pid1CacheEntry{pid: pid, refCount: 1}) + } else { + if entry.pid > pid { + entry.pid = pid + } + entry.refCount++ + } +} + +// GetPID1 return the registered pid1 +func (cr *CgroupsResolver) GetPID1(id string) (uint32, bool) { + cr.RLock() + defer cr.RUnlock() + + entry, exists := cr.pids.Get(id) + if !exists { + return 0, false + } + + return entry.pid, true +} + +// DelByPID force removes the entry +func (cr *CgroupsResolver) DelByPID(pid uint32) { + cr.Lock() + defer cr.Unlock() + + for _, id := range cr.pids.Keys() { + entry, exists := cr.pids.Get(id) + if exists && entry.pid == pid { + cr.pids.Remove(id) + break + } + } +} + +// Release decrement usage +func (cr *CgroupsResolver) Release(id string) { + cr.Lock() + defer cr.Unlock() + + entry, exists := cr.pids.Get(id) + if exists { + entry.refCount-- + if entry.refCount <= 0 { + cr.pids.Remove(id) + } + } +} + +// Len return the number of entries +func (cr *CgroupsResolver) Len() int { + cr.RLock() + defer cr.RUnlock() + + return cr.pids.Len() +} + +// NewCgroupsResolver returns a new cgroups monitor +func NewCgroupsResolver() (*CgroupsResolver, error) { + pids, err := simplelru.NewLRU[string, *pid1CacheEntry](1024, nil) + if err != nil { + return nil, err + } + return &CgroupsResolver{ + pids: pids, + }, nil +} diff --git a/pkg/security/probe/resolvers/dentry_resolver.go b/pkg/security/probe/resolvers/dentry_resolver.go index 5e1897f75fe32..21a154c867c47 100644 --- a/pkg/security/probe/resolvers/dentry_resolver.go +++ b/pkg/security/probe/resolvers/dentry_resolver.go @@ -372,7 +372,7 @@ func (dr *DentryResolver) ResolveNameFromMap(mountID uint32, inode uint64, pathI return name, nil } -// GetName resolves a couple of mountID/inode to a path +// ResolveName resolves an inode/mount ID pair to a file basename func (dr *DentryResolver) ResolveName(mountID uint32, inode uint64, pathID uint32) string { name, err := dr.ResolveNameFromCache(mountID, inode) if err != nil && dr.config.ERPCDentryResolutionEnabled { @@ -543,6 +543,7 @@ func (dr *DentryResolver) ResolveFromMap(mountID uint32, inode uint64, pathID ui return filename, resolutionErr } +// preventSegmentMajorPageFault prepares the userspace memory area where the dentry resolver response is written. Used in kernel versions where BPF_F_MMAPABLE array maps are not yet available. func (dr *DentryResolver) preventSegmentMajorPageFault() { // if we don't access the segment, the eBPF program can't write to it ... (major page fault) dr.erpcSegment[0] = 0 @@ -629,7 +630,7 @@ func (dr *DentryResolver) ResolveFromERPC(mountID uint32, inode uint64, pathID u resolution: metrics.PathResolutionTag, } - // create eRPC request + // create eRPC request and send using the ioctl syscall challenge, err := dr.requestResolve(erpc.ResolvePathOp, mountID, inode, pathID) if err != nil { dr.missCounters[entry].Inc() @@ -833,6 +834,7 @@ func (dr *DentryResolver) Start(manager *manager.Manager) error { return err } + // Memory map a BPF_F_MMAPABLE array map that ebpf writes to so that userspace can read it if erpcBuffer.Flags()&unix.BPF_F_MMAPABLE != 0 { dr.erpcSegment, err = syscall.Mmap(erpcBuffer.FD(), 0, 8*4096, unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED) if err != nil { @@ -840,6 +842,8 @@ func (dr *DentryResolver) Start(manager *manager.Manager) error { } } + // BPF_F_MMAPABLE array maps were introduced in kernel version 5.5, so we need a fallback for older versions. + // Allocate memory area in userspace that ebpf programs will write to. Will receive warning because the kernel writing to userspace memory can cause instability. if dr.erpcSegment == nil { // We need at least 7 memory pages for the eRPC segment method to work. // For each segment of a path, we write 16 bytes to store (inode, mount_id, path_id), and then at least 2 bytes to diff --git a/pkg/security/probe/resolvers/mount_resolver.go b/pkg/security/probe/resolvers/mount_resolver.go index bed20940b5511..e8ed28f70d841 100644 --- a/pkg/security/probe/resolvers/mount_resolver.go +++ b/pkg/security/probe/resolvers/mount_resolver.go @@ -11,7 +11,7 @@ package resolvers import ( "context" "errors" - "os" + "path" "strconv" "strings" "sync" @@ -36,10 +36,15 @@ var ( ErrMountUndefined = errors.New("undefined mountID") // ErrMountLoop is returned when there is a resolution loop ErrMountLoop = errors.New("mount resolution loop") + // ErrMountPathEmpty is returned when the resolved mount path is empty + ErrMountPathEmpty = errors.New("mount resolution return empty path") + // ErrMountKernelID + ErrMountKernelID = errors.New("not a critical error") ) const ( - deleteDelayTime = 5 * time.Second + deleteDelayTime = 5 * time.Second + fallbackLimiterPeriod = 5 * time.Second ) func parseGroupID(mnt *mountinfo.Info) (uint32, error) { @@ -59,38 +64,46 @@ func parseGroupID(mnt *mountinfo.Info) (uint32, error) { return 0, nil } -// newMountEventFromMountInfo - Creates a new MountEvent from parsed MountInfo data -func newMountEventFromMountInfo(mnt *mountinfo.Info) (*model.MountEvent, error) { - groupID, err := parseGroupID(mnt) - if err != nil { - return nil, err - } +// newMountFromMountInfo - Creates a new Mount from parsed MountInfo data +func newMountFromMountInfo(mnt *mountinfo.Info) *model.Mount { + // groupID is not use for the path resolution, don't make it critical + groupID, _ := parseGroupID(mnt) - // create a MountEvent out of the parsed MountInfo - return &model.MountEvent{ - ParentMountID: uint32(mnt.Parent), - MountPointStr: mnt.Mountpoint, - RootStr: mnt.Root, + // create a Mount out of the parsed MountInfo + return &model.Mount{ MountID: uint32(mnt.ID), GroupID: groupID, Device: uint32(unix.Mkdev(uint32(mnt.Major), uint32(mnt.Minor))), + ParentMountID: uint32(mnt.Parent), FSType: mnt.FSType, - }, nil + MountPointStr: mnt.Mountpoint, + Path: mnt.Mountpoint, + RootStr: mnt.Root, + } } type deleteRequest struct { - mount *model.MountEvent + mount *model.Mount timeoutAt time.Time } +// MountResolverOpts defines mount resolver options +type MountResolverOpts struct { + UseProcFS bool +} + // MountResolver represents a cache for mountpoints and the corresponding file systems type MountResolver struct { + opts MountResolverOpts + cgroupsResolver *CgroupsResolver statsdClient statsd.ClientInterface lock sync.RWMutex - mounts map[uint32]*model.MountEvent - devices map[uint32]map[uint32]*model.MountEvent + mounts map[uint32]*model.Mount + devices map[uint32]map[uint32]*model.Mount deleteQueue []deleteRequest - parentPathCache *simplelru.LRU[uint32, string] + minMountID uint32 + redemption *simplelru.LRU[uint32, *model.Mount] + fallbackLimiter *simplelru.LRU[uint32, time.Time] // stats cacheHitsStats *atomic.Int64 @@ -99,65 +112,107 @@ type MountResolver struct { procMissStats *atomic.Int64 } +// IsMountIDValid returns whether the mountID is valid +func (mr *MountResolver) IsMountIDValid(mountID uint32) (bool, error) { + if mountID == 0 { + return false, ErrMountUndefined + } + + if mountID < mr.minMountID { + return false, ErrMountKernelID + } + + return true, nil +} + // SyncCache - Snapshots the current mount points of the system by reading through /proc/[pid]/mountinfo. func (mr *MountResolver) SyncCache(pid uint32) error { mr.lock.Lock() defer mr.lock.Unlock() - return mr.syncCache(pid) + if err := mr.syncCache(0, pid); err != nil { + return err + } + + // store the minimal mount ID found to use it a reference + if pid == 1 { + for mountID := range mr.mounts { + if mr.minMountID == 0 || mr.minMountID > mountID { + mr.minMountID = mountID + } + } + } + + return nil } -func (mr *MountResolver) syncCache(pid uint32) error { - mnts, err := kernel.ParseMountInfoFile(int32(pid)) - if err != nil { - pErr, ok := err.(*os.PathError) - if !ok { - return err +// syncCache update cache with the first working pid +func (mr *MountResolver) syncCache(mountID uint32, pids ...uint32) error { + var err error + var mnts []*mountinfo.Info + + now := time.Now() + if mountID != 0 { + if ts, ok := mr.fallbackLimiter.Get(mountID); ok { + if now.After(ts) { + mr.fallbackLimiter.Remove(mountID) + } else { + return ErrMountNotFound + } } - return pErr } - for _, mnt := range mnts { - if _, exists := mr.mounts[uint32(mnt.ID)]; exists { + for _, pid := range pids { + mnts, err = kernel.ParseMountInfoFile(int32(pid)) + if err != nil { + mr.cgroupsResolver.DelByPID(pid) continue } - e, err := newMountEventFromMountInfo(mnt) - if err != nil { - return err + for _, mnt := range mnts { + if _, exists := mr.mounts[uint32(mnt.ID)]; exists { + continue + } + + m := newMountFromMountInfo(mnt) + mr.insert(m) } - mr.insert(*e) + return nil } - return nil + if mountID != 0 { + // add to fallback limiter to avoid storm of file access + mr.fallbackLimiter.Add(mountID, now.Add(fallbackLimiterPeriod)) + } + + return err } -func (mr *MountResolver) deleteChildren(parent *model.MountEvent) { +func (mr *MountResolver) finalizeChildren(parent *model.Mount) { for _, mount := range mr.mounts { if mount.ParentMountID == parent.MountID { if _, exists := mr.mounts[mount.MountID]; exists { - mr.delete(mount) + mr.finalize(mount) } } } } -// deleteDevice deletes MountEvent sharing the same device id for overlay fs mount -func (mr *MountResolver) deleteDevice(mount *model.MountEvent) { +// finalizeDevice deletes Mount sharing the same device id for overlay fs mount +func (mr *MountResolver) finalizeDevice(mount *model.Mount) { if !mount.IsOverlayFS() { return } for _, deviceMount := range mr.devices[mount.Device] { if mount.Device == deviceMount.Device && mount.MountID != deviceMount.MountID { - mr.delete(deviceMount) + mr.finalize(deviceMount) } } } -func (mr *MountResolver) delete(mount *model.MountEvent) { - mr.clearCacheForMountID(mount.MountID) +func (mr *MountResolver) finalize(mount *model.Mount) { delete(mr.mounts, mount.MountID) mounts, exists := mr.devices[mount.Device] @@ -165,8 +220,14 @@ func (mr *MountResolver) delete(mount *model.MountEvent) { delete(mounts, mount.MountID) } - mr.deleteChildren(mount) - mr.deleteDevice(mount) + mr.finalizeChildren(mount) + mr.finalizeDevice(mount) +} + +func (mr *MountResolver) delete(mount *model.Mount) { + if m, exists := mr.mounts[mount.MountID]; exists { + mr.redemption.Add(mount.MountID, m) + } } // Delete a mount from the cache @@ -174,8 +235,6 @@ func (mr *MountResolver) Delete(mountID uint32) error { mr.lock.Lock() defer mr.lock.Unlock() - mr.clearCacheForMountID(mountID) - mount, exists := mr.mounts[mountID] if !exists { return ErrMountNotFound @@ -186,12 +245,12 @@ func (mr *MountResolver) Delete(mountID uint32) error { return nil } -// GetFilesystem returns the name of the filesystem -func (mr *MountResolver) GetFilesystem(mountID, pid uint32) (string, error) { +// ResolveFilesystem returns the name of the filesystem +func (mr *MountResolver) ResolveFilesystem(mountID, pid uint32, containerID string) (string, error) { mr.lock.Lock() defer mr.lock.Unlock() - mount, err := mr.resolveMount(mountID, pid) + mount, err := mr.resolveMount(mountID, pid, containerID) if err != nil { return "", err } @@ -199,59 +258,62 @@ func (mr *MountResolver) GetFilesystem(mountID, pid uint32) (string, error) { return mount.GetFSType(), nil } -// Get returns a mount event from the mount id -func (mr *MountResolver) Get(mountID, pid uint32) (*model.MountEvent, error) { - mr.lock.Lock() - defer mr.lock.Unlock() - - return mr.resolveMount(mountID, pid) -} - // Insert a new mount point in the cache -func (mr *MountResolver) Insert(e model.MountEvent) error { +func (mr *MountResolver) Insert(e model.Mount, pid uint32, containerID string) error { + if e.MountID == 0 { + return ErrMountUndefined + } + mr.lock.Lock() defer mr.lock.Unlock() - mr.insert(e) + mr.insert(&e) return nil } -func (mr *MountResolver) insert(e model.MountEvent) { +func (mr *MountResolver) insert(m *model.Mount) { // umount the previous one if exists - if prev, ok := mr.mounts[e.MountID]; ok { - mr.delete(prev) + if prev, ok := mr.mounts[m.MountID]; ok { + // if present in the redemption that the evict function that will remove the entry + if present := mr.redemption.Remove(prev.MountID); !present { + mr.finalize(prev) + } } - // Retrieve the parent paths and strip it from the event - p, ok := mr.mounts[e.ParentMountID] - if ok { - prefix, err := mr.getParentPath(p.MountID) - if err != nil { - // do not log error here. it will be report during the next path resolution - return - } - if len(prefix) > 0 && prefix != "/" { - e.MountPointStr = strings.TrimPrefix(e.MountPointStr, prefix) - } + // if we're inserting a mountpoint from a kernel event (!= procfs) that isn't the root fs + // then remove the leading slash from the mountpoint + if len(m.Path) == 0 && m.MountPointStr != "/" { + m.MountPointStr = strings.TrimPrefix(m.MountPointStr, "/") } - deviceMounts := mr.devices[e.Device] + deviceMounts := mr.devices[m.Device] if deviceMounts == nil { - deviceMounts = make(map[uint32]*model.MountEvent) - mr.devices[e.Device] = deviceMounts + deviceMounts = make(map[uint32]*model.Mount) + mr.devices[m.Device] = deviceMounts } - deviceMounts[e.MountID] = &e + deviceMounts[m.MountID] = m + mr.mounts[m.MountID] = m - mr.mounts[e.MountID] = &e + if mr.minMountID > m.MountID { + mr.minMountID = m.MountID + } } -func (mr *MountResolver) _getParentPath(mountID uint32, cache map[uint32]bool) (string, error) { +func (mr *MountResolver) _getMountPath(mountID uint32, cache map[uint32]bool) (string, error) { + if _, err := mr.IsMountIDValid(mountID); err != nil { + return "", err + } + mount, exists := mr.mounts[mountID] if !exists { return "", ErrMountNotFound } + if len(mount.Path) > 0 { + return mount.Path, nil + } + mountPointStr := mount.MountPointStr if mountPointStr == "/" { return mountPointStr, nil @@ -263,31 +325,27 @@ func (mr *MountResolver) _getParentPath(mountID uint32, cache map[uint32]bool) ( } cache[mountID] = true - if mount.ParentMountID != 0 { - p, err := mr._getParentPath(mount.ParentMountID, cache) - if err != nil { - return "", err - } + if mount.ParentMountID == 0 { + return "", ErrMountUndefined + } - if p != "/" && !strings.HasPrefix(mount.MountPointStr, p) { - mountPointStr = p + mount.MountPointStr - } + parentMountPath, err := mr._getMountPath(mount.ParentMountID, cache) + if err != nil { + return "", err } + mountPointStr = path.Join(parentMountPath, mountPointStr) + + if len(mountPointStr) == 0 { + return "", ErrMountPathEmpty + } + + mount.Path = mountPointStr return mountPointStr, nil } -func (mr *MountResolver) getParentPath(mountID uint32) (string, error) { - if entry, found := mr.parentPathCache.Get(mountID); found { - return entry, nil - } - - path, err := mr._getParentPath(mountID, map[uint32]bool{}) - if err != nil { - return "", err - } - mr.parentPathCache.Add(mountID, path) - return path, nil +func (mr *MountResolver) getMountPath(mountID uint32) (string, error) { + return mr._getMountPath(mountID, map[uint32]bool{}) } func (mr *MountResolver) dequeue(now time.Time) { @@ -307,9 +365,6 @@ func (mr *MountResolver) dequeue(now time.Time) { mr.delete(req.mount) } - // clear cache anyway - mr.clearCacheForMountID(req.mount.MountID) - i++ } @@ -322,10 +377,6 @@ func (mr *MountResolver) dequeue(now time.Time) { mr.lock.Unlock() } -func (mr *MountResolver) clearCacheForMountID(mountID uint32) { - mr.parentPathCache.Remove(mountID) -} - // Start starts the resolver func (mr *MountResolver) Start(ctx context.Context) { go func() { @@ -343,57 +394,113 @@ func (mr *MountResolver) Start(ctx context.Context) { }() } -func (mr *MountResolver) resolveMount(mountID, pid uint32) (*model.MountEvent, error) { - if mountID == 0 { - return nil, ErrMountUndefined +// ResolveMountPath returns the root of a mount identified by its mount ID. +func (mr *MountResolver) ResolveMountRoot(mountID, pid uint32, containerID string) (string, error) { + mr.lock.Lock() + defer mr.lock.Unlock() + + return mr.resolveMountRoot(mountID, pid, containerID) +} + +func (mr *MountResolver) resolveMountRoot(mountID, pid uint32, containerID string) (string, error) { + mount, err := mr.resolveMount(mountID, pid, containerID) + if err != nil { + return "", err } + return mount.RootStr, nil +} - mount, ok := mr.mounts[mountID] +// ResolveMountRoot returns the root of a mount identified by its mount ID. +func (mr *MountResolver) ResolveMountPath(mountID, pid uint32, containerID string) (string, error) { + mr.lock.Lock() + defer mr.lock.Unlock() - if !ok { - mr.cacheMissStats.Inc() - if pid != 0 { - if err := mr.syncCache(pid); err != nil { - return nil, err - } - mount = mr.mounts[mountID] - if mount != nil { - mr.procHitsStats.Inc() - } else { - mr.procMissStats.Inc() - } - } - } else { - // stats + return mr.resolveMountPath(mountID, pid, containerID) +} + +func (mr *MountResolver) resolveMountPath(mountID, pid uint32, containerID string) (string, error) { + if _, err := mr.IsMountIDValid(mountID); err != nil { + return "", err + } + + // force pid1 resolution here to keep the LRU doing his job and not evicting important entries + pid1, _ := mr.cgroupsResolver.GetPID1(containerID) + + path, err := mr.getMountPath(mountID) + if err == nil { mr.cacheHitsStats.Inc() + + // touch the redemption entry to maintain the entry + _, _ = mr.redemption.Get(mountID) + + return path, nil } + mr.cacheMissStats.Inc() - if mount == nil { - return nil, ErrMountNotFound + if !mr.opts.UseProcFS { + return "", ErrMountNotFound } - return mount, nil + if err := mr.syncCache(mountID, pid, pid1); err != nil { + mr.procMissStats.Inc() + return "", err + } + path, err = mr.getMountPath(mountID) + if err == nil { + mr.procHitsStats.Inc() + return path, nil + } + mr.procMissStats.Inc() + + return "", err } -// ResolveMountPaths returns the path of a mount identified by its mount ID. -// The first parameter is the mount point path, and the third parameter is the root path. -func (mr *MountResolver) ResolveMountPaths(mountID, pid uint32) (string, string, error) { +// ResolveMount returns the mount +func (mr *MountResolver) ResolveMount(mountID, pid uint32, containerID string) (*model.Mount, error) { mr.lock.Lock() defer mr.lock.Unlock() - mount, err := mr.resolveMount(mountID, pid) - if err != nil { - return "", "", ErrMountNotFound + return mr.resolveMount(mountID, pid, containerID) +} + +func (mr *MountResolver) resolveMount(mountID, pid uint32, containerID string) (*model.Mount, error) { + if _, err := mr.IsMountIDValid(mountID); err != nil { + return nil, err } - parentPath, err := mr.getParentPath(mountID) - if err != nil { - return "", "", err + // force pid1 resolution here to keep the LRU doing his job and not evicting important entries + pid1, _ := mr.cgroupsResolver.GetPID1(containerID) + + mount, exists := mr.mounts[mountID] + if exists { + mr.cacheHitsStats.Inc() + + // touch the redemption entry to maintain the entry + _, _ = mr.redemption.Get(mountID) + + return mount, nil + } + mr.cacheMissStats.Inc() + + if !mr.opts.UseProcFS { + return nil, ErrMountNotFound + } + + if err := mr.syncCache(mountID, pid, pid1); err != nil { + mr.procMissStats.Inc() + return nil, err + } + mount, exists = mr.mounts[mountID] + if exists { + mr.procMissStats.Inc() + return mount, nil } + mr.procMissStats.Inc() - return parentPath, mount.RootStr, nil + return nil, ErrMountNotFound } +// GetMountIDOffset returns the mount id offset func GetMountIDOffset(kernelVersion *skernel.Version) uint64 { offset := uint64(284) @@ -492,21 +599,33 @@ func (mr *MountResolver) SendStats() error { } // NewMountResolver instantiates a new mount resolver -func NewMountResolver(statsdClient statsd.ClientInterface) (*MountResolver, error) { - parentPathCache, err := simplelru.NewLRU[uint32, string](256, nil) - if err != nil { - return nil, err - } - - return &MountResolver{ +func NewMountResolver(statsdClient statsd.ClientInterface, cgroupsResolver *CgroupsResolver, opts MountResolverOpts) (*MountResolver, error) { + mr := &MountResolver{ + opts: opts, statsdClient: statsdClient, + cgroupsResolver: cgroupsResolver, lock: sync.RWMutex{}, - devices: make(map[uint32]map[uint32]*model.MountEvent), - mounts: make(map[uint32]*model.MountEvent), - parentPathCache: parentPathCache, + devices: make(map[uint32]map[uint32]*model.Mount), + mounts: make(map[uint32]*model.Mount), cacheHitsStats: atomic.NewInt64(0), procHitsStats: atomic.NewInt64(0), cacheMissStats: atomic.NewInt64(0), procMissStats: atomic.NewInt64(0), - }, nil + } + + redemption, err := simplelru.NewLRU(1024, func(mountID uint32, mount *model.Mount) { + mr.finalize(mount) + }) + if err != nil { + return nil, err + } + mr.redemption = redemption + + fallbackLimiter, err := simplelru.NewLRU[uint32, time.Time](64, nil) + if err != nil { + return nil, err + } + mr.fallbackLimiter = fallbackLimiter + + return mr, nil } diff --git a/pkg/security/probe/resolvers/mount_resolver_test.go b/pkg/security/probe/resolvers/mount_resolver_test.go index 888ac97911bf8..af0d20c81d2a3 100644 --- a/pkg/security/probe/resolvers/mount_resolver_test.go +++ b/pkg/security/probe/resolvers/mount_resolver_test.go @@ -11,9 +11,7 @@ package resolvers import ( "fmt" "testing" - "time" - "github.com/hashicorp/golang-lru/v2/simplelru" "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/security/secl/model" @@ -38,24 +36,88 @@ func TestMountResolver(t *testing.T) { name string args args }{ + + { + "insert_root", + args{ + []event{ + { + mount: &model.MountEvent{ + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 27, + GroupID: 0, + Device: 1, + ParentInode: 0, + RootMountID: 0, + RootInode: 0, + ParentMountID: 1, + FSType: "ext4", + MountPointStr: "/", + RootStr: "", + }, + }, + }, + }, + []testCase{ + { + 27, + "/", + nil, + }, + }, + }, + }, + { + "insert_root", + args{ + []event{ + { + mount: &model.MountEvent{ + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 27, + GroupID: 0, + Device: 1, + ParentInode: 0, + RootMountID: 0, + RootInode: 0, + ParentMountID: 1, + FSType: "ext4", + MountPointStr: "/", + RootStr: "", + }, + }, + }, + }, + []testCase{ + { + 27, + "/", + nil, + }, + }, + }, + }, { "insert_overlay", args{ []event{ { mount: &model.MountEvent{ - SyscallEvent: model.SyscallEvent{}, - MountID: 127, - GroupID: 71, - Device: 52, - ParentMountID: 0, - ParentInode: 0, - FSType: "overlay", - MountPointStr: "/var/lib/docker/overlay2/f44b5a1fe134f57a31da79fa2e76ea09f8659a34edfa0fa2c3b4f52adbd91963/merged", - RootMountID: 0, - RootInode: 0, - RootStr: "", - FSTypeRaw: [16]byte{}, + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 127, + GroupID: 71, + Device: 52, + ParentInode: 0, + RootMountID: 0, + RootInode: 0, + ParentMountID: 27, + FSType: "overlay", + MountPointStr: "/var/lib/docker/overlay2/f44b5a1fe134f57a31da79fa2e76ea09f8659a34edfa0fa2c3b4f52adbd91963/merged", + RootStr: "", + }, }, }, }, @@ -68,10 +130,10 @@ func TestMountResolver(t *testing.T) { { 0, "", - ErrMountNotFound, + ErrMountUndefined, }, { - 27, + 22, "", ErrMountNotFound, }, @@ -104,50 +166,53 @@ func TestMountResolver(t *testing.T) { []event{ { mount: &model.MountEvent{ - SyscallEvent: model.SyscallEvent{}, - MountID: 27, - GroupID: 0, - Device: 1, - ParentMountID: 1, - ParentInode: 0, - FSType: "ext4", - MountPointStr: "/", - RootMountID: 0, - RootInode: 0, - RootStr: "", - FSTypeRaw: [16]byte{}, + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 27, + GroupID: 0, + Device: 1, + ParentInode: 0, + RootMountID: 0, + RootInode: 0, + ParentMountID: 1, + FSType: "ext4", + MountPointStr: "/", + RootStr: "", + }, }, }, { mount: &model.MountEvent{ - SyscallEvent: model.SyscallEvent{}, - MountID: 22, - GroupID: 0, - Device: 21, - ParentMountID: 27, - ParentInode: 0, - FSType: "sysfs", - MountPointStr: "/sys", - RootMountID: 0, - RootInode: 0, - RootStr: "", - FSTypeRaw: [16]byte{}, + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 22, + GroupID: 0, + Device: 21, + ParentInode: 0, + RootMountID: 0, + RootInode: 0, + ParentMountID: 27, + FSType: "sysfs", + MountPointStr: "/sys", + RootStr: "", + }, }, }, { mount: &model.MountEvent{ - SyscallEvent: model.SyscallEvent{}, - MountID: 31, - GroupID: 0, - Device: 26, - ParentMountID: 22, - ParentInode: 0, - FSType: "tmpfs", - MountPointStr: "/sys/fs/cgroup", - RootMountID: 0, - RootInode: 0, - RootStr: "", - FSTypeRaw: [16]byte{}, + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 31, + GroupID: 0, + Device: 26, + ParentInode: 0, + RootMountID: 0, + RootInode: 0, + ParentMountID: 22, + FSType: "tmpfs", + MountPointStr: "/fs/cgroup", + RootStr: "", + }, }, }, }, @@ -206,73 +271,77 @@ func TestMountResolver(t *testing.T) { []event{ { mount: &model.MountEvent{ - SyscallEvent: model.SyscallEvent{}, - MountID: 27, - GroupID: 0, - Device: 1, - ParentMountID: 1, - ParentInode: 0, - FSType: "ext4", - MountPointStr: "/", - RootMountID: 0, - RootInode: 0, - RootStr: "", - FSTypeRaw: [16]byte{}, + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 27, + GroupID: 0, + Device: 1, + ParentInode: 0, + RootMountID: 0, + RootInode: 0, + ParentMountID: 1, + FSType: "ext4", + MountPointStr: "/", + RootStr: "", + }, }, }, { mount: &model.MountEvent{ - SyscallEvent: model.SyscallEvent{}, - MountID: 176, - GroupID: 71, - Device: 52, - ParentMountID: 27, - ParentInode: 0, - FSType: "overlay", - MountPointStr: "/var/lib/docker/overlay2/f44b5a1fe134f57a31da79fa2e76ea09f8659a34edfa0fa2c3b4f52adbd91963/merged", - RootMountID: 0, - RootInode: 0, - RootStr: "", - FSTypeRaw: [16]byte{}, + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 176, + GroupID: 71, + Device: 52, + ParentInode: 0, + RootMountID: 0, + RootInode: 0, + ParentMountID: 27, + FSType: "overlay", + MountPointStr: "/var/lib/docker/overlay2/f44b5a1fe134f57a31da79fa2e76ea09f8659a34edfa0fa2c3b4f52adbd91963/merged", + RootStr: "", + }, }, }, { mount: &model.MountEvent{ - SyscallEvent: model.SyscallEvent{}, - MountID: 638, - GroupID: 71, - Device: 52, - ParentMountID: 635, - ParentInode: 0, - FSType: "bind", - MountPointStr: "/", - RootMountID: 0, - RootInode: 0, - RootStr: "", - FSTypeRaw: [16]byte{}, + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 638, + GroupID: 71, + Device: 52, + ParentInode: 0, + RootMountID: 0, + RootInode: 0, + ParentMountID: 635, + FSType: "bind", + MountPointStr: "/", + RootStr: "", + }, }, }, { mount: &model.MountEvent{ - SyscallEvent: model.SyscallEvent{}, - MountID: 639, - GroupID: 0, - Device: 54, - ParentMountID: 638, - ParentInode: 0, - FSType: "proc", - MountPointStr: "proc", - RootMountID: 0, - RootInode: 0, - RootStr: "", - FSTypeRaw: [16]byte{}, + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 639, + GroupID: 0, + Device: 54, + ParentInode: 0, + RootMountID: 0, + RootInode: 0, + ParentMountID: 638, + FSType: "proc", + MountPointStr: "proc", + RootStr: "", + }, }, }, }, []testCase{ { 639, - "proc", + "/proc", nil, }, }, @@ -308,27 +377,86 @@ func TestMountResolver(t *testing.T) { }, }, }, + { + "identical_mountpoints", + args{ + []event{ + { + mount: &model.MountEvent{ + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 32, + ParentMountID: 638, + MountPointStr: "/", + }, + }, + }, + { + mount: &model.MountEvent{ + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 41, + ParentMountID: 32, + MountPointStr: "/tmp", + }, + }, + }, + { + mount: &model.MountEvent{ + SyscallEvent: model.SyscallEvent{}, + Mount: model.Mount{ + MountID: 42, + ParentMountID: 41, + MountPointStr: "/tmp", + }, + }, + }, + }, + []testCase{ + { + 32, + "/", + nil, + }, + { + 41, + "/tmp", + nil, + }, + { + 42, + "/tmp/tmp", + nil, + }, + }, + }, + }, } + // use pid 1 for the tests + var pid uint32 = 1 + + cr, _ := NewCgroupsResolver() + // Create mount resolver - mr, _ := NewMountResolver(nil) + mr, _ := NewMountResolver(nil, cr, MountResolverOpts{}) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { for _, evt := range tt.args.events { if evt.mount != nil { - mr.insert(*evt.mount) + mr.insert(&evt.mount.Mount) } if evt.umount != nil { - if err := mr.Delete(evt.umount.MountID); err != nil { + mount, err := mr.ResolveMount(evt.umount.MountID, pid, "") + if err != nil { t.Fatal(err) } + mr.finalize(mount) } } - mr.dequeue(time.Now().Add(1 * time.Minute)) - for _, testC := range tt.args.cases { - p, _, err := mr.ResolveMountPaths(testC.mountID, 0) + p, err := mr.ResolveMountPath(testC.mountID, pid, "") if err != nil { if testC.expectedError != nil { assert.Equal(t, testC.expectedError.Error(), err.Error()) @@ -344,90 +472,85 @@ func TestMountResolver(t *testing.T) { } func TestMountGetParentPath(t *testing.T) { - parentPathCache, err := simplelru.NewLRU[uint32, string](256, nil) - if err != nil { - t.Fatal(err) - } - mr := &MountResolver{ - mounts: map[uint32]*model.MountEvent{ + mounts: map[uint32]*model.Mount{ 1: { MountID: 1, - MountPointStr: "/a", + MountPointStr: "/", }, 2: { MountID: 2, ParentMountID: 1, - MountPointStr: "/b", + MountPointStr: "/a", }, 3: { MountID: 3, ParentMountID: 2, + MountPointStr: "/b", + }, + 4: { + MountID: 4, + ParentMountID: 3, MountPointStr: "/c", }, }, - parentPathCache: parentPathCache, } - parentPath, _ := mr.getParentPath(3) + parentPath, err := mr.getMountPath(4) + assert.NoError(t, err) assert.Equal(t, "/a/b/c", parentPath) } func TestMountLoop(t *testing.T) { - parentPathCache, err := simplelru.NewLRU[uint32, string](256, nil) - if err != nil { - t.Fatal(err) - } - mr := &MountResolver{ - mounts: map[uint32]*model.MountEvent{ + mounts: map[uint32]*model.Mount{ 1: { MountID: 1, - ParentMountID: 3, - MountPointStr: "/a", + MountPointStr: "/", }, 2: { MountID: 2, - ParentMountID: 1, - MountPointStr: "/b", + ParentMountID: 4, + MountPointStr: "/a", }, 3: { MountID: 3, ParentMountID: 2, + MountPointStr: "/b", + }, + 4: { + MountID: 4, + ParentMountID: 3, MountPointStr: "/c", }, }, - parentPathCache: parentPathCache, } - parentPath, err := mr.getParentPath(3) + parentPath, err := mr.getMountPath(3) assert.Equal(t, ErrMountLoop, err) assert.Equal(t, "", parentPath) } func BenchmarkGetParentPath(b *testing.B) { - parentPathCache, err := simplelru.NewLRU[uint32, string](256, nil) - if err != nil { - b.Fatal(err) + mr := &MountResolver{ + mounts: make(map[uint32]*model.Mount), } - mr := &MountResolver{ - mounts: make(map[uint32]*model.MountEvent), - parentPathCache: parentPathCache, + mr.mounts[1] = &model.Mount{ + MountID: 1, + MountPointStr: "/", } - var parentID uint32 - for i := uint32(0); i != 100; i++ { - mr.mounts[i+1] = &model.MountEvent{ + for i := uint32(1); i != 100; i++ { + mr.mounts[i+1] = &model.Mount{ MountID: i + 1, - ParentMountID: parentID, + ParentMountID: i, MountPointStr: fmt.Sprintf("/%d", i+1), } - parentID = i } b.ResetTimer() for i := 0; i < b.N; i++ { - _, _ = mr.getParentPath(0) + _, _ = mr.getMountPath(100) } } diff --git a/pkg/security/probe/resolvers/tc_resolver.go b/pkg/security/probe/resolvers/tc_resolver.go new file mode 100644 index 0000000000000..d4525c327a6ff --- /dev/null +++ b/pkg/security/probe/resolvers/tc_resolver.go @@ -0,0 +1,178 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package resolvers + +import ( + "fmt" + "os" + "sync" + + "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/security/ebpf/probes" + "github.com/DataDog/datadog-agent/pkg/security/metrics" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" + "github.com/DataDog/datadog-go/v5/statsd" + manager "github.com/DataDog/ebpf-manager" + "github.com/hashicorp/go-multierror" + "github.com/vishvananda/netlink" +) + +// NetDeviceKey is used to uniquely identify a network device +type NetDeviceKey struct { + IfIndex uint32 + NetNS uint32 + NetworkDirection manager.TrafficType +} + +type TCResolver struct { + sync.RWMutex + config *config.Config + programs map[NetDeviceKey]*manager.Probe +} + +func NewTCResolver(config *config.Config) *TCResolver { + return &TCResolver{ + config: config, + programs: make(map[NetDeviceKey]*manager.Probe), + } +} + +func (tcr *TCResolver) SendTCProgramsStats(statsdClient statsd.ClientInterface) { + tcr.RLock() + defer tcr.RUnlock() + + if val := float64(len(tcr.programs)); val > 0 { + _ = statsdClient.Gauge(metrics.MetricTCProgram, val, []string{}, 1.0) + } +} + +func (tcr *TCResolver) SelectTCProbes() manager.ProbesSelector { + tcr.RLock() + defer tcr.RUnlock() + + // Although unlikely, a race is still possible with the umount event of a network namespace: + // - a reload event is triggered + // - selectTCProbes is invoked and the list of currently running probes is generated + // - a container exits and the umount event of its network namespace is handled now (= its TC programs are stopped) + // - the manager executes UpdateActivatedProbes + // In this setup, if we didn't use the best effort selector, the manager would try to init & attach a program that + // was deleted when the container exited. + var activatedProbes manager.BestEffort + for _, tcProbe := range tcr.programs { + if tcProbe.IsRunning() { + activatedProbes.Selectors = append(activatedProbes.Selectors, &manager.ProbeSelector{ + ProbeIdentificationPair: tcProbe.ProbeIdentificationPair, + }) + } + } + return &activatedProbes +} + +// SetupNewTCClassifierWithNetNSHandle creates and attaches TC probes on the provided device. WARNING: this function +// will not close the provided netns handle, so the caller of this function needs to take care of it. +func (tcr *TCResolver) SetupNewTCClassifierWithNetNSHandle(device model.NetDevice, netnsHandle *os.File, m *manager.Manager) error { + tcr.Lock() + defer tcr.Unlock() + + var combinedErr multierror.Error + for _, tcProbe := range probes.GetTCProbes() { + // make sure we're not overriding an existing network probe + deviceKey := NetDeviceKey{IfIndex: device.IfIndex, NetNS: device.NetNS, NetworkDirection: tcProbe.NetworkDirection} + _, ok := tcr.programs[deviceKey] + if ok { + continue + } + + newProbe := tcProbe.Copy() + newProbe.CopyProgram = true + newProbe.UID = probes.SecurityAgentUID + device.GetKey() + newProbe.IfIndex = int(device.IfIndex) + newProbe.IfIndexNetns = uint64(netnsHandle.Fd()) + newProbe.IfIndexNetnsID = device.NetNS + newProbe.KeepProgramSpec = false + newProbe.TCFilterPrio = tcr.config.NetworkClassifierPriority + newProbe.TCFilterHandle = netlink.MakeHandle(0, tcr.config.NetworkClassifierHandle) + + netnsEditor := []manager.ConstantEditor{ + { + Name: "netns", + Value: uint64(device.NetNS), + }, + } + + if err := m.CloneProgram(probes.SecurityAgentUID, newProbe, netnsEditor, nil); err != nil { + _ = multierror.Append(&combinedErr, fmt.Errorf("couldn't clone %s: %v", tcProbe.ProbeIdentificationPair, err)) + } else { + tcr.programs[deviceKey] = newProbe + } + } + return combinedErr.ErrorOrNil() +} + +// flushNetworkNamespace thread unsafe version of FlushNetworkNamespace +func (tcr *TCResolver) FlushNetworkNamespaceID(namespaceID uint32, m *manager.Manager) { + tcr.Lock() + defer tcr.Unlock() + + for tcKey, tcProbe := range tcr.programs { + if tcKey.NetNS == namespaceID { + _ = m.DetachHook(tcProbe.ProbeIdentificationPair) + delete(tcr.programs, tcKey) + } + } +} + +// FlushInactiveProbes detaches and deletes inactive probes. This function returns a map containing the count of interfaces +// per network namespace (ignoring the interfaces that are lazily deleted). +func (tcr *TCResolver) FlushInactiveProbes(m *manager.Manager, isLazy func(string) bool) map[uint32]int { + tcr.Lock() + defer tcr.Unlock() + + probesCountNoLazyDeletion := make(map[uint32]int) + + var linkName string + for tcKey, tcProbe := range tcr.programs { + if !tcProbe.IsTCFilterActive() { + _ = m.DetachHook(tcProbe.ProbeIdentificationPair) + delete(tcr.programs, tcKey) + } else { + link, err := tcProbe.ResolveLink() + if err == nil { + linkName = link.Attrs().Name + } else { + linkName = "" + } + // ignore interfaces that are lazily deleted + if link.Attrs().HardwareAddr.String() != "" && !isLazy(linkName) { + probesCountNoLazyDeletion[tcKey.NetNS]++ + } + } + } + + return probesCountNoLazyDeletion +} + +func (tcr *TCResolver) ResolveNetworkDeviceIfName(ifIndex, netNS uint32) (string, bool) { + tcr.RLock() + defer tcr.RUnlock() + + for _, direction := range []manager.TrafficType{manager.Egress, manager.Ingress} { + key := NetDeviceKey{ + IfIndex: ifIndex, + NetNS: netNS, + NetworkDirection: direction, + } + + tcProbe, ok := tcr.programs[key] + if ok { + return tcProbe.IfName, true + } + } + return "", false +} diff --git a/pkg/security/probe/selftests/tester.go b/pkg/security/probe/selftests/tester.go index 0fde2fdbf2e97..61fd287a3ba51 100644 --- a/pkg/security/probe/selftests/tester.go +++ b/pkg/security/probe/selftests/tester.go @@ -20,6 +20,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/api" "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -191,14 +192,14 @@ type selfTestEvent struct { } // IsExpectedEvent sends an event to the tester -func (t *SelfTester) IsExpectedEvent(rule *rules.Rule, event eval.Event) bool { +func (t *SelfTester) IsExpectedEvent(rule *rules.Rule, event eval.Event, p *probe.Probe) bool { if t.waitingForEvent.Load() && rule.Definition.Policy.Source == policySource { - ev, ok := event.(*probe.Event) + ev, ok := event.(*model.Event) if !ok { return true } - s := probe.NewEventSerializer(ev) + s := probe.NewEventSerializer(ev, p) if s == nil || s.FileEventSerializer == nil { return true } diff --git a/pkg/security/probe/serializers.go b/pkg/security/probe/serializers.go index 252ea1e2a6cc5..d55b80ee14812 100644 --- a/pkg/security/probe/serializers.go +++ b/pkg/security/probe/serializers.go @@ -163,7 +163,7 @@ type ProcessSerializer struct { // Process ID Pid uint32 `json:"pid,omitempty"` // Parent Process ID - PPid uint32 `json:"ppid,omitempty"` + PPid *uint32 `json:"ppid,omitempty"` // Thread ID Tid uint32 `json:"tid,omitempty"` // User ID @@ -492,6 +492,23 @@ type ExitEventSerializer struct { Code uint32 `json:"code" jsonschema_description:"Exit code of the process or number of the signal that caused the process to terminate"` } +// MountEventSerializer serializes a mount event to JSON +// easyjson:json +type MountEventSerializer struct { + MountPoint *FileSerializer `json:"mountpoint,omitempty"` // Mount point file information + Root *FileSerializer `json:"source,omitempty"` // Root file information + MountID uint32 `json:"mount_id"` // Mount ID of the new mount + GroupID uint32 `json:"group_id"` // ID of the peer group + ParentMountID uint32 `json:"parent_mount_id"` // Mount ID of the parent mount + BindSrcMountID uint32 `json:"bind_src_mount_id"` // Mount ID of the source of a bind mount + Device uint32 `json:"device"` // Device associated with the file + FSType string `json:"fs_type,omitempty"` // Filesystem type + MountPointPath string `json:"mountpoint_path,omitempty"` // Mount point path + MountSourcePath string `json:"mountsource_path,omitempty"` // Mount source path + MountPointPathResolutionError string `json:"mountpoint_path_error,omitempty"` // Mount point path error + MountSourcePathResolutionError string `json:"mountsource_path_error,omitempty"` // Mount source path error +} + // EventSerializer serializes an event to JSON // easyjson:json type EventSerializer struct { @@ -509,6 +526,7 @@ type EventSerializer struct { *NetworkContextSerializer `json:"network,omitempty"` *BindEventSerializer `json:"bind,omitempty"` *ExitEventSerializer `json:"exit,omitempty"` + *MountEventSerializer `json:"mount,omitempty"` *UserContextSerializer `json:"usr,omitempty"` *ProcessContextSerializer `json:"process,omitempty"` *DDContextSerializer `json:"dd,omitempty"` @@ -516,7 +534,7 @@ type EventSerializer struct { Date utils.EasyjsonTime `json:"date,omitempty"` } -func getInUpperLayer(r *Resolvers, f *model.FileFields) *bool { +func getInUpperLayer(f *model.FileFields) *bool { lowerLayer := f.GetInLowerLayer() upperLayer := f.GetInUpperLayer() if !lowerLayer && !upperLayer { @@ -525,7 +543,7 @@ func getInUpperLayer(r *Resolvers, f *model.FileFields) *bool { return &upperLayer } -func newFileSerializer(fe *model.FileEvent, e *Event, forceInode ...uint64) *FileSerializer { +func newFileSerializer(fe *model.FileEvent, e *model.Event, forceInode ...uint64) *FileSerializer { inode := fe.Inode if len(forceInode) > 0 { inode = forceInode[0] @@ -533,20 +551,20 @@ func newFileSerializer(fe *model.FileEvent, e *Event, forceInode ...uint64) *Fil mode := uint32(fe.FileFields.Mode) return &FileSerializer{ - Path: e.ResolveFilePath(fe), + Path: e.FieldHandlers.ResolveFilePath(e, fe), PathResolutionError: fe.GetPathResolutionError(), - Name: e.ResolveFileBasename(fe), + Name: e.FieldHandlers.ResolveFileBasename(e, fe), Inode: getUint64Pointer(&inode), MountID: getUint32Pointer(&fe.MountID), - Filesystem: e.ResolveFileFilesystem(fe), + Filesystem: e.FieldHandlers.ResolveFileFilesystem(e, fe), Mode: getUint32Pointer(&mode), // only used by open events UID: int64(fe.UID), GID: int64(fe.GID), - User: e.ResolveFileFieldsUser(&fe.FileFields), - Group: e.ResolveFileFieldsGroup(&fe.FileFields), + User: e.FieldHandlers.ResolveFileFieldsUser(e, &fe.FileFields), + Group: e.FieldHandlers.ResolveFileFieldsGroup(e, &fe.FileFields), Mtime: getTimeIfNotZero(time.Unix(0, int64(fe.MTime))), Ctime: getTimeIfNotZero(time.Unix(0, int64(fe.CTime))), - InUpperLayer: getInUpperLayer(e.resolvers, &fe.FileFields), + InUpperLayer: getInUpperLayer(&fe.FileFields), } } @@ -591,54 +609,62 @@ func newCredentialsSerializer(ce *model.Credentials) *CredentialsSerializer { } } -func newProcessSerializer(ps *model.Process, e *Event) *ProcessSerializer { - argv, argvTruncated := e.resolvers.ProcessResolver.GetProcessScrubbedArgv(ps) - envs, EnvsTruncated := e.resolvers.ProcessResolver.GetProcessEnvs(ps) - argv0, _ := e.resolvers.ProcessResolver.GetProcessArgv0(ps) - - psSerializer := &ProcessSerializer{ - ForkTime: getTimeIfNotZero(ps.ForkTime), - ExecTime: getTimeIfNotZero(ps.ExecTime), - ExitTime: getTimeIfNotZero(ps.ExitTime), - - Pid: ps.Pid, - Tid: ps.Tid, - PPid: ps.PPid, - Comm: ps.Comm, - TTY: ps.TTYName, - Executable: newFileSerializer(&ps.FileEvent, e), - Argv0: argv0, - Args: argv, - ArgsTruncated: argvTruncated, - Envs: envs, - EnvsTruncated: EnvsTruncated, - IsThread: ps.IsThread, - IsKworker: ps.IsKworker, - } +func newProcessSerializer(ps *model.Process, e *model.Event, resolvers *Resolvers) *ProcessSerializer { + if ps.IsNotKworker() { + argv, argvTruncated := resolvers.ProcessResolver.GetProcessScrubbedArgv(ps) + envs, EnvsTruncated := resolvers.ProcessResolver.GetProcessEnvs(ps) + argv0, _ := resolvers.ProcessResolver.GetProcessArgv0(ps) + + psSerializer := &ProcessSerializer{ + ForkTime: getTimeIfNotZero(ps.ForkTime), + ExecTime: getTimeIfNotZero(ps.ExecTime), + ExitTime: getTimeIfNotZero(ps.ExitTime), + + Pid: ps.Pid, + Tid: ps.Tid, + PPid: getUint32Pointer(&ps.PPid), + Comm: ps.Comm, + TTY: ps.TTYName, + Executable: newFileSerializer(&ps.FileEvent, e), + Argv0: argv0, + Args: argv, + ArgsTruncated: argvTruncated, + Envs: envs, + EnvsTruncated: EnvsTruncated, + IsThread: ps.IsThread, + IsKworker: ps.IsKworker, + } - if ps.HasInterpreter() { - psSerializer.Interpreter = newFileSerializer(&ps.LinuxBinprm.FileEvent, e) - } + if ps.HasInterpreter() { + psSerializer.Interpreter = newFileSerializer(&ps.LinuxBinprm.FileEvent, e) + } - credsSerializer := newCredentialsSerializer(&ps.Credentials) - // Populate legacy user / group fields - psSerializer.UID = credsSerializer.UID - psSerializer.User = credsSerializer.User - psSerializer.GID = credsSerializer.GID - psSerializer.Group = credsSerializer.Group - psSerializer.Credentials = &ProcessCredentialsSerializer{ - CredentialsSerializer: credsSerializer, - } + credsSerializer := newCredentialsSerializer(&ps.Credentials) + // Populate legacy user / group fields + psSerializer.UID = credsSerializer.UID + psSerializer.User = credsSerializer.User + psSerializer.GID = credsSerializer.GID + psSerializer.Group = credsSerializer.Group + psSerializer.Credentials = &ProcessCredentialsSerializer{ + CredentialsSerializer: credsSerializer, + } - if len(ps.ContainerID) != 0 { - psSerializer.Container = &ContainerContextSerializer{ - ID: ps.ContainerID, + if len(ps.ContainerID) != 0 { + psSerializer.Container = &ContainerContextSerializer{ + ID: ps.ContainerID, + } + } + return psSerializer + } else { + return &ProcessSerializer{ + Pid: ps.Pid, + Tid: ps.Tid, + IsKworker: ps.IsKworker, } } - return psSerializer } -func newDDContextSerializer(e *Event) *DDContextSerializer { +func newDDContextSerializer(e *model.Event) *DDContextSerializer { s := &DDContextSerializer{ SpanID: e.SpanContext.SpanID, TraceID: e.SpanContext.TraceID, @@ -647,7 +673,7 @@ func newDDContextSerializer(e *Event) *DDContextSerializer { return s } - ctx := eval.NewContext(e.GetPointer()) + ctx := eval.NewContext(e) it := &model.ProcessAncestorsIterator{} ptr := it.Front(ctx) @@ -666,31 +692,25 @@ func newDDContextSerializer(e *Event) *DDContextSerializer { return s } -func newUserContextSerializer(e *Event) *UserContextSerializer { +func newUserContextSerializer(e *model.Event) *UserContextSerializer { return &UserContextSerializer{ User: e.ProcessContext.User, Group: e.ProcessContext.Group, } } -func newProcessContextSerializer(pc *model.ProcessContext, e *Event, r *Resolvers) *ProcessContextSerializer { - if pc == nil || pc.Pid == 0 { +func newProcessContextSerializer(pc *model.ProcessContext, e *model.Event, resolvers *Resolvers) *ProcessContextSerializer { + if pc == nil || pc.Pid == 0 || e == nil { return nil } var ps ProcessContextSerializer - if e == nil { - // custom events create an empty event - e = NewEvent(r, nil, nil) - e.ProcessContext = pc - } - ps = ProcessContextSerializer{ - ProcessSerializer: newProcessSerializer(&pc.Process, e), + ProcessSerializer: newProcessSerializer(&pc.Process, e, resolvers), } - ctx := eval.NewContext(e.GetPointer()) + ctx := eval.NewContext(e) it := &model.ProcessAncestorsIterator{} ptr := it.Front(ctx) @@ -703,7 +723,7 @@ func newProcessContextSerializer(pc *model.ProcessContext, e *Event, r *Resolver for ptr != nil { pce := (*model.ProcessCacheEntry)(ptr) - s := newProcessSerializer(&pce.Process, e) + s := newProcessSerializer(&pce.Process, e, resolvers) ps.Ancestors = append(ps.Ancestors, s) if first { @@ -725,12 +745,12 @@ func newProcessContextSerializer(pc *model.ProcessContext, e *Event, r *Resolver return &ps } -func newSELinuxSerializer(e *Event) *SELinuxEventSerializer { +func newSELinuxSerializer(e *model.Event) *SELinuxEventSerializer { switch e.SELinux.EventKind { case model.SELinuxBoolChangeEventKind: return &SELinuxEventSerializer{ BoolChange: &SELinuxBoolChangeSerializer{ - Name: e.ResolveSELinuxBoolName(&e.SELinux), + Name: e.FieldHandlers.ResolveSELinuxBoolName(e, &e.SELinux), State: e.SELinux.BoolChangeValue, }, } @@ -751,7 +771,7 @@ func newSELinuxSerializer(e *Event) *SELinuxEventSerializer { } } -func newBPFMapSerializer(e *Event) *BPFMapSerializer { +func newBPFMapSerializer(e *model.Event) *BPFMapSerializer { if e.BPF.Map.ID == 0 { return nil } @@ -761,7 +781,7 @@ func newBPFMapSerializer(e *Event) *BPFMapSerializer { } } -func newBPFProgramSerializer(e *Event) *BPFProgramSerializer { +func newBPFProgramSerializer(e *model.Event) *BPFProgramSerializer { if e.BPF.Program.ID == 0 { return nil } @@ -775,7 +795,7 @@ func newBPFProgramSerializer(e *Event) *BPFProgramSerializer { } } -func newBPFEventSerializer(e *Event) *BPFEventSerializer { +func newBPFEventSerializer(e *model.Event) *BPFEventSerializer { return &BPFEventSerializer{ Cmd: model.BPFCmd(e.BPF.Cmd).String(), Map: newBPFMapSerializer(e), @@ -783,7 +803,7 @@ func newBPFEventSerializer(e *Event) *BPFEventSerializer { } } -func newMMapEventSerializer(e *Event) *MMapEventSerializer { +func newMMapEventSerializer(e *model.Event) *MMapEventSerializer { return &MMapEventSerializer{ Address: fmt.Sprintf("0x%x", e.MMap.Addr), Offset: e.MMap.Offset, @@ -793,7 +813,7 @@ func newMMapEventSerializer(e *Event) *MMapEventSerializer { } } -func newMProtectEventSerializer(e *Event) *MProtectEventSerializer { +func newMProtectEventSerializer(e *model.Event) *MProtectEventSerializer { return &MProtectEventSerializer{ VMStart: fmt.Sprintf("0x%x", e.MProtect.VMStart), VMEnd: fmt.Sprintf("0x%x", e.MProtect.VMEnd), @@ -802,15 +822,15 @@ func newMProtectEventSerializer(e *Event) *MProtectEventSerializer { } } -func newPTraceEventSerializer(e *Event) *PTraceEventSerializer { +func newPTraceEventSerializer(e *model.Event, resolvers *Resolvers) *PTraceEventSerializer { return &PTraceEventSerializer{ Request: model.PTraceRequest(e.PTrace.Request).String(), Address: fmt.Sprintf("0x%x", e.PTrace.Address), - Tracee: newProcessContextSerializer(e.PTrace.Tracee, e, e.resolvers), + Tracee: newProcessContextSerializer(e.PTrace.Tracee, e, resolvers), } } -func newLoadModuleEventSerializer(e *Event) *ModuleEventSerializer { +func newLoadModuleEventSerializer(e *model.Event) *ModuleEventSerializer { loadedFromMemory := e.LoadModule.LoadedFromMemory return &ModuleEventSerializer{ Name: e.LoadModule.Name, @@ -818,22 +838,22 @@ func newLoadModuleEventSerializer(e *Event) *ModuleEventSerializer { } } -func newUnloadModuleEventSerializer(e *Event) *ModuleEventSerializer { +func newUnloadModuleEventSerializer(e *model.Event) *ModuleEventSerializer { return &ModuleEventSerializer{ Name: e.UnloadModule.Name, } } -func newSignalEventSerializer(e *Event) *SignalEventSerializer { +func newSignalEventSerializer(e *model.Event, resolvers *Resolvers) *SignalEventSerializer { ses := &SignalEventSerializer{ Type: model.Signal(e.Signal.Type).String(), PID: e.Signal.PID, - Target: newProcessContextSerializer(e.Signal.Target, e, e.resolvers), + Target: newProcessContextSerializer(e.Signal.Target, e, resolvers), } return ses } -func newSpliceEventSerializer(e *Event) *SpliceEventSerializer { +func newSpliceEventSerializer(e *model.Event) *SpliceEventSerializer { return &SpliceEventSerializer{ PipeEntryFlag: model.PipeBufFlag(e.Splice.PipeEntryFlag).String(), PipeExitFlag: model.PipeBufFlag(e.Splice.PipeExitFlag).String(), @@ -872,15 +892,15 @@ func newIPPortFamilySerializer(c *model.IPPortContext, family string) *IPPortFam } } -func newNetworkDeviceSerializer(e *Event) *NetworkDeviceSerializer { +func newNetworkDeviceSerializer(e *model.Event) *NetworkDeviceSerializer { return &NetworkDeviceSerializer{ NetNS: e.NetworkContext.Device.NetNS, IfIndex: e.NetworkContext.Device.IfIndex, - IfName: e.ResolveNetworkDeviceIfName(&e.NetworkContext.Device), + IfName: e.FieldHandlers.ResolveNetworkDeviceIfName(e, &e.NetworkContext.Device), } } -func newNetworkContextSerializer(e *Event) *NetworkContextSerializer { +func newNetworkContextSerializer(e *model.Event) *NetworkContextSerializer { return &NetworkContextSerializer{ Device: newNetworkDeviceSerializer(e), L3Protocol: model.L3Protocol(e.NetworkContext.L3Protocol).String(), @@ -891,7 +911,7 @@ func newNetworkContextSerializer(e *Event) *NetworkContextSerializer { } } -func newBindEventSerializer(e *Event) *BindEventSerializer { +func newBindEventSerializer(e *model.Event) *BindEventSerializer { bes := &BindEventSerializer{ Addr: newIPPortFamilySerializer(&e.Bind.Addr, model.AddressFamily(e.Bind.AddrFamily).String()), @@ -899,13 +919,59 @@ func newBindEventSerializer(e *Event) *BindEventSerializer { return bes } -func newExitEventSerializer(e *Event) *ExitEventSerializer { +func newExitEventSerializer(e *model.Event) *ExitEventSerializer { return &ExitEventSerializer{ Cause: model.ExitCause(e.Exit.Cause).String(), Code: e.Exit.Code, } } +func newMountEventSerializer(e *model.Event) *MountEventSerializer { + fh := e.FieldHandlers.(*FieldHandlers) + + src, srcErr := fh.ResolveMountRoot(e, &e.Mount.Mount) + dst, dstErr := fh.ResolveMountPoint(e, &e.Mount.Mount) + mountPointPath := fh.ResolveMountPointPath(e, &e.Mount) + mountSourcePath := fh.ResolveMountSourcePath(e, &e.Mount) + + mountSerializer := &MountEventSerializer{ + MountPoint: &FileSerializer{ + Path: dst, + MountID: &e.Mount.ParentMountID, + Inode: &e.Mount.ParentInode, + }, + Root: &FileSerializer{ + Path: src, + MountID: &e.Mount.RootMountID, + Inode: &e.Mount.RootInode, + }, + MountID: e.Mount.MountID, + GroupID: e.Mount.GroupID, + ParentMountID: e.Mount.ParentMountID, + BindSrcMountID: e.Mount.BindSrcMountID, + Device: e.Mount.Device, + FSType: e.Mount.GetFSType(), + MountPointPath: mountPointPath, + MountSourcePath: mountSourcePath, + } + + if srcErr != nil { + mountSerializer.Root.PathResolutionError = srcErr.Error() + } + if dstErr != nil { + mountSerializer.MountPoint.PathResolutionError = dstErr.Error() + } + // potential errors retrieved from ResolveMountPointPath and ResolveMountSourcePath + if e.Mount.MountPointPathResolutionError != nil { + mountSerializer.MountPointPathResolutionError = e.Mount.MountPointPathResolutionError.Error() + } + if e.Mount.MountSourcePathResolutionError != nil { + mountSerializer.MountSourcePathResolutionError = e.Mount.MountSourcePathResolutionError.Error() + } + + return mountSerializer +} + func serializeSyscallRetval(retval int64) string { switch { case retval < 0: @@ -919,9 +985,9 @@ func serializeSyscallRetval(retval int64) string { } // NewEventSerializer creates a new event serializer based on the event type -func NewEventSerializer(event *Event) *EventSerializer { +func NewEventSerializer(event *model.Event, probe *Probe) *EventSerializer { var pc model.ProcessContext - if entry := event.ResolveProcessCacheEntry(); entry != nil { + if entry, _ := event.FieldHandlers.ResolveProcessCacheEntry(event); entry != nil { pc = entry.ProcessContext } @@ -929,13 +995,13 @@ func NewEventSerializer(event *Event) *EventSerializer { EventContextSerializer: EventContextSerializer{ Name: model.EventType(event.Type).String(), }, - ProcessContextSerializer: newProcessContextSerializer(&pc, event, event.resolvers), + ProcessContextSerializer: newProcessContextSerializer(&pc, event, probe.resolvers), DDContextSerializer: newDDContextSerializer(event), UserContextSerializer: newUserContextSerializer(event), - Date: utils.NewEasyjsonTime(event.ResolveEventTimestamp()), + Date: utils.NewEasyjsonTime(event.FieldHandlers.ResolveEventTimestamp(event)), } - if id := event.ResolveContainerID(&event.ContainerContext); id != "" { + if id := event.FieldHandlers.ResolveContainerID(event, &event.ContainerContext); id != "" { s.ContainerContextSerializer = &ContainerContextSerializer{ ID: id, } @@ -1023,8 +1089,8 @@ func NewEventSerializer(event *Event) *EventSerializer { s.FileEventSerializer = &FileEventSerializer{ FileSerializer: *newFileSerializer(&event.RemoveXAttr.File, event), Destination: &FileSerializer{ - XAttrName: event.ResolveXAttrName(&event.RemoveXAttr), - XAttrNamespace: event.ResolveXAttrNamespace(&event.RemoveXAttr), + XAttrName: event.FieldHandlers.ResolveXAttrName(event, &event.RemoveXAttr), + XAttrNamespace: event.FieldHandlers.ResolveXAttrNamespace(event, &event.RemoveXAttr), }, } s.EventContextSerializer.Outcome = serializeSyscallRetval(event.RemoveXAttr.Retval) @@ -1032,8 +1098,8 @@ func NewEventSerializer(event *Event) *EventSerializer { s.FileEventSerializer = &FileEventSerializer{ FileSerializer: *newFileSerializer(&event.SetXAttr.File, event), Destination: &FileSerializer{ - XAttrName: event.ResolveXAttrName(&event.SetXAttr), - XAttrNamespace: event.ResolveXAttrNamespace(&event.SetXAttr), + XAttrName: event.FieldHandlers.ResolveXAttrName(event, &event.SetXAttr), + XAttrNamespace: event.FieldHandlers.ResolveXAttrNamespace(event, &event.SetXAttr), }, } s.EventContextSerializer.Outcome = serializeSyscallRetval(event.SetXAttr.Retval) @@ -1047,31 +1113,7 @@ func NewEventSerializer(event *Event) *EventSerializer { } s.EventContextSerializer.Outcome = serializeSyscallRetval(event.Utimes.Retval) case model.FileMountEventType: - src, srcErr := event.ResolveMountRoot(&event.Mount) - dst, dstErr := event.ResolveMountPoint(&event.Mount) - - s.FileEventSerializer = &FileEventSerializer{ - FileSerializer: FileSerializer{ - Path: src, - MountID: &event.Mount.RootMountID, - Inode: &event.Mount.RootInode, - }, - Destination: &FileSerializer{ - Path: dst, - MountID: &event.Mount.ParentMountID, - Inode: &event.Mount.ParentInode, - }, - NewMountID: event.Mount.MountID, - GroupID: event.Mount.GroupID, - Device: event.Mount.Device, - FSType: event.Mount.GetFSType(), - } - if srcErr != nil { - s.FileEventSerializer.FileSerializer.PathResolutionError = srcErr.Error() - } - if dstErr != nil { - s.FileEventSerializer.Destination.PathResolutionError = dstErr.Error() - } + s.MountEventSerializer = newMountEventSerializer(event) s.EventContextSerializer.Outcome = serializeSyscallRetval(event.Mount.Retval) case model.FileUmountEventType: s.FileEventSerializer = &FileEventSerializer{ @@ -1081,21 +1123,21 @@ func NewEventSerializer(event *Event) *EventSerializer { case model.SetuidEventType: s.ProcessContextSerializer.Credentials.Destination = &SetuidSerializer{ UID: int(event.SetUID.UID), - User: event.ResolveSetuidUser(&event.SetUID), + User: event.FieldHandlers.ResolveSetuidUser(event, &event.SetUID), EUID: int(event.SetUID.EUID), - EUser: event.ResolveSetuidEUser(&event.SetUID), + EUser: event.FieldHandlers.ResolveSetuidEUser(event, &event.SetUID), FSUID: int(event.SetUID.FSUID), - FSUser: event.ResolveSetuidFSUser(&event.SetUID), + FSUser: event.FieldHandlers.ResolveSetuidFSUser(event, &event.SetUID), } s.EventContextSerializer.Outcome = serializeSyscallRetval(0) case model.SetgidEventType: s.ProcessContextSerializer.Credentials.Destination = &SetgidSerializer{ GID: int(event.SetGID.GID), - Group: event.ResolveSetgidGroup(&event.SetGID), + Group: event.FieldHandlers.ResolveSetgidGroup(event, &event.SetGID), EGID: int(event.SetGID.EGID), - EGroup: event.ResolveSetgidEGroup(&event.SetGID), + EGroup: event.FieldHandlers.ResolveSetgidEGroup(event, &event.SetGID), FSGID: int(event.SetGID.FSGID), - FSGroup: event.ResolveSetgidFSGroup(&event.SetGID), + FSGroup: event.FieldHandlers.ResolveSetgidFSGroup(event, &event.SetGID), } s.EventContextSerializer.Outcome = serializeSyscallRetval(0) case model.CapsetEventType: @@ -1139,7 +1181,7 @@ func NewEventSerializer(event *Event) *EventSerializer { s.MProtectEventSerializer = newMProtectEventSerializer(event) case model.PTraceEventType: s.EventContextSerializer.Outcome = serializeSyscallRetval(event.PTrace.Retval) - s.PTraceEventSerializer = newPTraceEventSerializer(event) + s.PTraceEventSerializer = newPTraceEventSerializer(event, probe.resolvers) case model.LoadModuleEventType: s.EventContextSerializer.Outcome = serializeSyscallRetval(event.LoadModule.Retval) if !event.LoadModule.LoadedFromMemory { @@ -1153,7 +1195,7 @@ func NewEventSerializer(event *Event) *EventSerializer { s.ModuleEventSerializer = newUnloadModuleEventSerializer(event) case model.SignalEventType: s.EventContextSerializer.Outcome = serializeSyscallRetval(event.Signal.Retval) - s.SignalEventSerializer = newSignalEventSerializer(event) + s.SignalEventSerializer = newSignalEventSerializer(event, probe.resolvers) case model.SpliceEventType: s.EventContextSerializer.Outcome = serializeSyscallRetval(event.Splice.Retval) s.SpliceEventSerializer = newSpliceEventSerializer(event) diff --git a/pkg/security/probe/serializers_easyjson.go b/pkg/security/probe/serializers_easyjson.go index 67e2450742464..313cc09935abd 100644 --- a/pkg/security/probe/serializers_easyjson.go +++ b/pkg/security/probe/serializers_easyjson.go @@ -687,7 +687,15 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe9(in *jle case "pid": out.Pid = uint32(in.Uint32()) case "ppid": - out.PPid = uint32(in.Uint32()) + if in.IsNull() { + in.Skip() + out.PPid = nil + } else { + if out.PPid == nil { + out.PPid = new(uint32) + } + *out.PPid = uint32(in.Uint32()) + } case "tid": out.Tid = uint32(in.Uint32()) case "uid": @@ -856,7 +864,7 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe9(out *jw out.RawString(prefix[1:]) out.Uint32(uint32(in.Pid)) } - if in.PPid != 0 { + if in.PPid != nil { const prefix string = ",\"ppid\":" if first { first = false @@ -864,7 +872,7 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe9(out *jw } else { out.RawString(prefix) } - out.Uint32(uint32(in.PPid)) + out.Uint32(uint32(*in.PPid)) } if in.Tid != 0 { const prefix string = ",\"tid\":" @@ -1313,7 +1321,15 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe11(in *jl case "pid": out.Pid = uint32(in.Uint32()) case "ppid": - out.PPid = uint32(in.Uint32()) + if in.IsNull() { + in.Skip() + out.PPid = nil + } else { + if out.PPid == nil { + out.PPid = new(uint32) + } + *out.PPid = uint32(in.Uint32()) + } case "tid": out.Tid = uint32(in.Uint32()) case "uid": @@ -1515,7 +1531,7 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe11(out *j } out.Uint32(uint32(in.Pid)) } - if in.PPid != 0 { + if in.PPid != nil { const prefix string = ",\"ppid\":" if first { first = false @@ -1523,7 +1539,7 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe11(out *j } else { out.RawString(prefix) } - out.Uint32(uint32(in.PPid)) + out.Uint32(uint32(*in.PPid)) } if in.Tid != 0 { const prefix string = ",\"tid\":" @@ -1940,7 +1956,163 @@ func (v NetworkContextSerializer) MarshalEasyJSON(w *jwriter.Writer) { func (v *NetworkContextSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe14(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe15(in *jlexer.Lexer, out *ModuleEventSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe15(in *jlexer.Lexer, out *MountEventSerializer) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "mountpoint": + if in.IsNull() { + in.Skip() + out.MountPoint = nil + } else { + if out.MountPoint == nil { + out.MountPoint = new(FileSerializer) + } + (*out.MountPoint).UnmarshalEasyJSON(in) + } + case "source": + if in.IsNull() { + in.Skip() + out.Root = nil + } else { + if out.Root == nil { + out.Root = new(FileSerializer) + } + (*out.Root).UnmarshalEasyJSON(in) + } + case "mount_id": + out.MountID = uint32(in.Uint32()) + case "group_id": + out.GroupID = uint32(in.Uint32()) + case "parent_mount_id": + out.ParentMountID = uint32(in.Uint32()) + case "bind_src_mount_id": + out.BindSrcMountID = uint32(in.Uint32()) + case "device": + out.Device = uint32(in.Uint32()) + case "fs_type": + out.FSType = string(in.String()) + case "mountpoint_path": + out.MountPointPath = string(in.String()) + case "mountsource_path": + out.MountSourcePath = string(in.String()) + case "mountpoint_path_error": + out.MountPointPathResolutionError = string(in.String()) + case "mountsource_path_error": + out.MountSourcePathResolutionError = string(in.String()) + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe15(out *jwriter.Writer, in MountEventSerializer) { + out.RawByte('{') + first := true + _ = first + if in.MountPoint != nil { + const prefix string = ",\"mountpoint\":" + first = false + out.RawString(prefix[1:]) + (*in.MountPoint).MarshalEasyJSON(out) + } + if in.Root != nil { + const prefix string = ",\"source\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + (*in.Root).MarshalEasyJSON(out) + } + { + const prefix string = ",\"mount_id\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Uint32(uint32(in.MountID)) + } + { + const prefix string = ",\"group_id\":" + out.RawString(prefix) + out.Uint32(uint32(in.GroupID)) + } + { + const prefix string = ",\"parent_mount_id\":" + out.RawString(prefix) + out.Uint32(uint32(in.ParentMountID)) + } + { + const prefix string = ",\"bind_src_mount_id\":" + out.RawString(prefix) + out.Uint32(uint32(in.BindSrcMountID)) + } + { + const prefix string = ",\"device\":" + out.RawString(prefix) + out.Uint32(uint32(in.Device)) + } + if in.FSType != "" { + const prefix string = ",\"fs_type\":" + out.RawString(prefix) + out.String(string(in.FSType)) + } + if in.MountPointPath != "" { + const prefix string = ",\"mountpoint_path\":" + out.RawString(prefix) + out.String(string(in.MountPointPath)) + } + if in.MountSourcePath != "" { + const prefix string = ",\"mountsource_path\":" + out.RawString(prefix) + out.String(string(in.MountSourcePath)) + } + if in.MountPointPathResolutionError != "" { + const prefix string = ",\"mountpoint_path_error\":" + out.RawString(prefix) + out.String(string(in.MountPointPathResolutionError)) + } + if in.MountSourcePathResolutionError != "" { + const prefix string = ",\"mountsource_path_error\":" + out.RawString(prefix) + out.String(string(in.MountSourcePathResolutionError)) + } + out.RawByte('}') +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v MountEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe15(w, v) +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *MountEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe15(l, v) +} +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe16(in *jlexer.Lexer, out *ModuleEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1981,7 +2153,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe15(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe15(out *jwriter.Writer, in ModuleEventSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe16(out *jwriter.Writer, in ModuleEventSerializer) { out.RawByte('{') first := true _ = first @@ -2000,14 +2172,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe15(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v ModuleEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe15(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe16(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *ModuleEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe15(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe16(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe16(in *jlexer.Lexer, out *MProtectEventSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe17(in *jlexer.Lexer, out *MProtectEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -2044,7 +2216,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe16(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe16(out *jwriter.Writer, in MProtectEventSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe17(out *jwriter.Writer, in MProtectEventSerializer) { out.RawByte('{') first := true _ = first @@ -2073,14 +2245,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe16(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v MProtectEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe16(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe17(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *MProtectEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe16(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe17(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe17(in *jlexer.Lexer, out *MMapEventSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe18(in *jlexer.Lexer, out *MMapEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -2119,7 +2291,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe17(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe17(out *jwriter.Writer, in MMapEventSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe18(out *jwriter.Writer, in MMapEventSerializer) { out.RawByte('{') first := true _ = first @@ -2153,14 +2325,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe17(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v MMapEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe17(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe18(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *MMapEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe17(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe18(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe18(in *jlexer.Lexer, out *IPPortSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe19(in *jlexer.Lexer, out *IPPortSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -2193,7 +2365,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe18(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe18(out *jwriter.Writer, in IPPortSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe19(out *jwriter.Writer, in IPPortSerializer) { out.RawByte('{') first := true _ = first @@ -2212,14 +2384,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe18(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v IPPortSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe18(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe19(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *IPPortSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe18(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe19(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe19(in *jlexer.Lexer, out *IPPortFamilySerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe20(in *jlexer.Lexer, out *IPPortFamilySerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -2254,7 +2426,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe19(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe19(out *jwriter.Writer, in IPPortFamilySerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe20(out *jwriter.Writer, in IPPortFamilySerializer) { out.RawByte('{') first := true _ = first @@ -2278,14 +2450,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe19(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v IPPortFamilySerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe19(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe20(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *IPPortFamilySerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe19(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe20(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe20(in *jlexer.Lexer, out *FileSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe21(in *jlexer.Lexer, out *FileSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -2433,7 +2605,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe20(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe20(out *jwriter.Writer, in FileSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe21(out *jwriter.Writer, in FileSerializer) { out.RawByte('{') first := true _ = first @@ -2582,14 +2754,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe20(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v FileSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe20(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe21(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *FileSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe20(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe21(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe21(in *jlexer.Lexer, out *FileEventSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe22(in *jlexer.Lexer, out *FileEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -2755,7 +2927,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe21(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe21(out *jwriter.Writer, in FileEventSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe22(out *jwriter.Writer, in FileEventSerializer) { out.RawByte('{') first := true _ = first @@ -2954,14 +3126,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe21(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v FileEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe21(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe22(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *FileEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe21(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe22(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe22(in *jlexer.Lexer, out *ExitEventSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe23(in *jlexer.Lexer, out *ExitEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -2994,7 +3166,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe22(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe22(out *jwriter.Writer, in ExitEventSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe23(out *jwriter.Writer, in ExitEventSerializer) { out.RawByte('{') first := true _ = first @@ -3013,14 +3185,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe22(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v ExitEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe22(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe23(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *ExitEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe22(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe23(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe23(in *jlexer.Lexer, out *EventSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe24(in *jlexer.Lexer, out *EventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -3042,6 +3214,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe23(in *jl out.NetworkContextSerializer = new(NetworkContextSerializer) out.BindEventSerializer = new(BindEventSerializer) out.ExitEventSerializer = new(ExitEventSerializer) + out.MountEventSerializer = new(MountEventSerializer) out.UserContextSerializer = new(UserContextSerializer) out.ProcessContextSerializer = new(ProcessContextSerializer) out.DDContextSerializer = new(DDContextSerializer) @@ -3188,6 +3361,16 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe23(in *jl } (*out.ExitEventSerializer).UnmarshalEasyJSON(in) } + case "mount": + if in.IsNull() { + in.Skip() + out.MountEventSerializer = nil + } else { + if out.MountEventSerializer == nil { + out.MountEventSerializer = new(MountEventSerializer) + } + (*out.MountEventSerializer).UnmarshalEasyJSON(in) + } case "usr": if in.IsNull() { in.Skip() @@ -3242,7 +3425,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe23(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe23(out *jwriter.Writer, in EventSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe24(out *jwriter.Writer, in EventSerializer) { out.RawByte('{') first := true _ = first @@ -3382,6 +3565,16 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe23(out *j } (*in.ExitEventSerializer).MarshalEasyJSON(out) } + if in.MountEventSerializer != nil { + const prefix string = ",\"mount\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + (*in.MountEventSerializer).MarshalEasyJSON(out) + } if in.UserContextSerializer != nil { const prefix string = ",\"usr\":" if first { @@ -3437,14 +3630,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe23(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v EventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe23(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe24(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *EventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe23(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe24(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe24(in *jlexer.Lexer, out *EventContextSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe25(in *jlexer.Lexer, out *EventContextSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -3481,7 +3674,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe24(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe24(out *jwriter.Writer, in EventContextSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe25(out *jwriter.Writer, in EventContextSerializer) { out.RawByte('{') first := true _ = first @@ -3526,14 +3719,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe24(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v EventContextSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe24(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe25(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *EventContextSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe24(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe25(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe25(in *jlexer.Lexer, out *DNSQuestionSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe26(in *jlexer.Lexer, out *DNSQuestionSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -3572,7 +3765,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe25(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe25(out *jwriter.Writer, in DNSQuestionSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe26(out *jwriter.Writer, in DNSQuestionSerializer) { out.RawByte('{') first := true _ = first @@ -3606,14 +3799,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe25(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v DNSQuestionSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe25(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe26(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *DNSQuestionSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe25(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe26(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe26(in *jlexer.Lexer, out *DNSEventSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe27(in *jlexer.Lexer, out *DNSEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -3654,7 +3847,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe26(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe26(out *jwriter.Writer, in DNSEventSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe27(out *jwriter.Writer, in DNSEventSerializer) { out.RawByte('{') first := true _ = first @@ -3673,14 +3866,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe26(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v DNSEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe26(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe27(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *DNSEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe26(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe27(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe27(in *jlexer.Lexer, out *DDContextSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe28(in *jlexer.Lexer, out *DDContextSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -3713,7 +3906,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe27(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe27(out *jwriter.Writer, in DDContextSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe28(out *jwriter.Writer, in DDContextSerializer) { out.RawByte('{') first := true _ = first @@ -3738,14 +3931,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe27(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v DDContextSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe27(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe28(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *DDContextSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe27(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe28(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe28(in *jlexer.Lexer, out *CredentialsSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe29(in *jlexer.Lexer, out *CredentialsSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -3844,7 +4037,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe28(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe28(out *jwriter.Writer, in CredentialsSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe29(out *jwriter.Writer, in CredentialsSerializer) { out.RawByte('{') first := true _ = first @@ -3945,14 +4138,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe28(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v CredentialsSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe28(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe29(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *CredentialsSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe28(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe29(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe29(in *jlexer.Lexer, out *ContainerContextSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe30(in *jlexer.Lexer, out *ContainerContextSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -3983,7 +4176,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe29(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe29(out *jwriter.Writer, in ContainerContextSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe30(out *jwriter.Writer, in ContainerContextSerializer) { out.RawByte('{') first := true _ = first @@ -3998,14 +4191,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe29(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v ContainerContextSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe29(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe30(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *ContainerContextSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe29(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe30(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe30(in *jlexer.Lexer, out *CapsetSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe31(in *jlexer.Lexer, out *CapsetSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -4080,7 +4273,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe30(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe30(out *jwriter.Writer, in CapsetSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe31(out *jwriter.Writer, in CapsetSerializer) { out.RawByte('{') first := true _ = first @@ -4121,14 +4314,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe30(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v CapsetSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe30(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe31(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *CapsetSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe30(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe31(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe31(in *jlexer.Lexer, out *BindEventSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe32(in *jlexer.Lexer, out *BindEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -4167,7 +4360,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe31(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe31(out *jwriter.Writer, in BindEventSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe32(out *jwriter.Writer, in BindEventSerializer) { out.RawByte('{') first := true _ = first @@ -4185,14 +4378,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe31(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v BindEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe31(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe32(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *BindEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe31(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe32(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe32(in *jlexer.Lexer, out *BPFProgramSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe33(in *jlexer.Lexer, out *BPFProgramSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -4252,7 +4445,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe32(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe32(out *jwriter.Writer, in BPFProgramSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe33(out *jwriter.Writer, in BPFProgramSerializer) { out.RawByte('{') first := true _ = first @@ -4316,14 +4509,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe32(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v BPFProgramSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe32(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe33(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *BPFProgramSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe32(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe33(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe33(in *jlexer.Lexer, out *BPFMapSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe34(in *jlexer.Lexer, out *BPFMapSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -4356,7 +4549,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe33(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe33(out *jwriter.Writer, in BPFMapSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe34(out *jwriter.Writer, in BPFMapSerializer) { out.RawByte('{') first := true _ = first @@ -4381,14 +4574,14 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe33(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v BPFMapSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe33(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe34(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *BPFMapSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe33(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe34(l, v) } -func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe34(in *jlexer.Lexer, out *BPFEventSerializer) { +func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe35(in *jlexer.Lexer, out *BPFEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -4439,7 +4632,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe34(in *jl in.Consumed() } } -func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe34(out *jwriter.Writer, in BPFEventSerializer) { +func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe35(out *jwriter.Writer, in BPFEventSerializer) { out.RawByte('{') first := true _ = first @@ -4463,10 +4656,10 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe34(out *j // MarshalEasyJSON supports easyjson.Marshaler interface func (v BPFEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe34(w, v) + easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe35(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *BPFEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe34(l, v) + easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe35(l, v) } diff --git a/pkg/security/probe/variables.go b/pkg/security/probe/variables.go index ec49b633fc416..f8b6cfaad2a23 100644 --- a/pkg/security/probe/variables.go +++ b/pkg/security/probe/variables.go @@ -10,13 +10,14 @@ package probe import ( "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" ) var ( // SECLVariables set of variables SECLVariables = map[string]eval.VariableValue{ "process.pid": eval.NewIntVariable(func(ctx *eval.Context) int { - pc := (*Event)(ctx.Object).ProcessContext + pc := ctx.Event.(*model.Event).ProcessContext if pc == nil { return 0 } diff --git a/pkg/security/rconfig/rconfig.go b/pkg/security/rconfig/rconfig.go index 35f6b903b6626..fc25847075cfd 100644 --- a/pkg/security/rconfig/rconfig.go +++ b/pkg/security/rconfig/rconfig.go @@ -16,6 +16,7 @@ import ( "github.com/Masterminds/semver/v3" "github.com/hashicorp/go-multierror" + "github.com/skydive-project/go-debouncer" "github.com/DataDog/datadog-agent/pkg/config/remote" "github.com/DataDog/datadog-agent/pkg/config/remote/data" @@ -24,7 +25,10 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -const securityAgentRCPollInterval = time.Second * 1 +const ( + securityAgentRCPollInterval = time.Second * 1 + debounceDelay = 5 * time.Second +) // RCPolicyProvider defines a remote config policy provider type RCPolicyProvider struct { @@ -32,40 +36,58 @@ type RCPolicyProvider struct { client *remote.Client onNewPoliciesReadyCb func() - lastConfigs map[string]state.ConfigCWSDD + lastDefaults map[string]state.ConfigCWSDD + lastCustoms map[string]state.ConfigCWSCustom + debouncer *debouncer.Debouncer } var _ rules.PolicyProvider = (*RCPolicyProvider)(nil) // NewRCPolicyProvider returns a new Remote Config based policy provider func NewRCPolicyProvider(name string, agentVersion *semver.Version) (*RCPolicyProvider, error) { - c, err := remote.NewClient(name, agentVersion.String(), []data.Product{data.ProductCWSDD}, securityAgentRCPollInterval) + c, err := remote.NewGRPCClient(name, agentVersion.String(), []data.Product{data.ProductCWSDD, data.ProductCWSCustom}, securityAgentRCPollInterval) if err != nil { return nil, err } - return &RCPolicyProvider{ + r := &RCPolicyProvider{ client: c, - }, nil + } + r.debouncer = debouncer.New(debounceDelay, r.onNewPoliciesReady) + + return r, nil } // Start starts the Remote Config policy provider and subscribes to updates func (r *RCPolicyProvider) Start() { log.Info("remote-config policies provider started") - r.client.RegisterCWSDDUpdate(r.rcConfigUpdateCallback) + r.debouncer.Start() + + r.client.RegisterCWSDDUpdate(r.rcDefaultsUpdateCallback) + r.client.RegisterCWSCustomUpdate(r.rcCustomsUpdateCallback) r.client.Start() } -func (r *RCPolicyProvider) rcConfigUpdateCallback(configs map[string]state.ConfigCWSDD) { +func (r *RCPolicyProvider) rcDefaultsUpdateCallback(configs map[string]state.ConfigCWSDD) { + r.Lock() + r.lastDefaults = configs + r.Unlock() + + log.Info("new policies from remote-config policy provider") + + r.debouncer.Call() +} + +func (r *RCPolicyProvider) rcCustomsUpdateCallback(configs map[string]state.ConfigCWSCustom) { r.Lock() - r.lastConfigs = configs + r.lastCustoms = configs r.Unlock() log.Info("new policies from remote-config policy provider") - r.onNewPoliciesReadyCb() + r.debouncer.Call() } func normalize(policy *rules.Policy) { @@ -84,10 +106,10 @@ func (r *RCPolicyProvider) LoadPolicies(macroFilters []rules.MacroFilter, ruleFi r.RLock() defer r.RUnlock() - for _, c := range r.lastConfigs { - reader := bytes.NewReader(c.Config) + load := func(id string, cfg []byte) { + reader := bytes.NewReader(cfg) - policy, err := rules.LoadPolicy(c.Metadata.ID, "remote-config", reader, macroFilters, ruleFilters) + policy, err := rules.LoadPolicy(id, "remote-config", reader, macroFilters, ruleFilters) if err != nil { errs = multierror.Append(errs, err) } @@ -95,6 +117,13 @@ func (r *RCPolicyProvider) LoadPolicies(macroFilters []rules.MacroFilter, ruleFi policies = append(policies, policy) } + for _, c := range r.lastDefaults { + load(c.Metadata.ID, c.Config) + } + for _, c := range r.lastCustoms { + load(c.Metadata.ID, c.Config) + } + return policies, errs } @@ -103,8 +132,18 @@ func (r *RCPolicyProvider) SetOnNewPoliciesReadyCb(cb func()) { r.onNewPoliciesReadyCb = cb } +func (r *RCPolicyProvider) onNewPoliciesReady() { + r.RLock() + defer r.RUnlock() + + if r.onNewPoliciesReadyCb != nil { + r.onNewPoliciesReadyCb() + } +} + // Close stops the client func (r *RCPolicyProvider) Close() error { + r.debouncer.Stop() r.client.Close() return nil } diff --git a/pkg/security/secl/compiler/eval/context.go b/pkg/security/secl/compiler/eval/context.go index a6b8259e61b00..55a9821c19771 100644 --- a/pkg/security/secl/compiler/eval/context.go +++ b/pkg/security/secl/compiler/eval/context.go @@ -13,7 +13,7 @@ import ( // Context describes the context used during a rule evaluation type Context struct { - Object unsafe.Pointer + Event Event Registers Registers @@ -31,14 +31,14 @@ func (c *Context) Now() time.Time { return c.now } -// SetObject set the given object to the context -func (c *Context) SetObject(obj unsafe.Pointer) { - c.Object = obj +// SetEvent set the given event to the context +func (c *Context) SetEvent(evt Event) { + c.Event = evt } // Reset the context func (c *Context) Reset() { - c.Object = nil + c.Event = nil c.Registers = nil c.now = time.Time{} @@ -49,10 +49,10 @@ func (c *Context) Reset() { } // NewContext return a new Context -func NewContext(obj unsafe.Pointer) *Context { +func NewContext(evt Event) *Context { return &Context{ - Object: obj, - Cache: make(map[string]unsafe.Pointer), + Event: evt, + Cache: make(map[string]unsafe.Pointer), } } @@ -61,10 +61,10 @@ type ContextPool struct { pool sync.Pool } -// Get returns a context with the given object -func (c *ContextPool) Get(obj unsafe.Pointer) *Context { +// Get returns a context with the given event +func (c *ContextPool) Get(evt Event) *Context { ctx := c.pool.Get().(*Context) - ctx.SetObject(obj) + ctx.SetEvent(evt) return ctx } diff --git a/pkg/security/secl/compiler/eval/eval.go b/pkg/security/secl/compiler/eval/eval.go index 799c7d4fd9ca9..5470cd2886d06 100644 --- a/pkg/security/secl/compiler/eval/eval.go +++ b/pkg/security/secl/compiler/eval/eval.go @@ -64,14 +64,8 @@ type ident struct { Ident *string } -// ReplacementContext represents the group of Options and Macro Store used during SECL evaluation -type ReplacementContext struct { - *Opts - *MacroStore -} - -func identToEvaluator(obj *ident, state *State) (interface{}, lexer.Position, error) { - if accessor, ok := state.replCtx.Opts.Constants[*obj.Ident]; ok { +func identToEvaluator(obj *ident, opts *Opts, state *State) (interface{}, lexer.Position, error) { + if accessor, ok := opts.Constants[*obj.Ident]; ok { return accessor, obj.Pos, nil } @@ -87,11 +81,11 @@ func identToEvaluator(obj *ident, state *State) (interface{}, lexer.Position, er } // transform extracted field to support legacy SECL fields - if state.replCtx.Opts.LegacyFields != nil { - if newField, ok := state.replCtx.Opts.LegacyFields[field]; ok { + if opts.LegacyFields != nil { + if newField, ok := opts.LegacyFields[field]; ok { field = newField } - if newField, ok := state.replCtx.Opts.LegacyFields[field]; ok { + if newField, ok := opts.LegacyFields[field]; ok { itField = newField } } @@ -158,7 +152,7 @@ func identToEvaluator(obj *ident, state *State) (interface{}, lexer.Position, er return accessor, obj.Pos, nil } -func arrayToEvaluator(array *ast.Array, state *State) (interface{}, lexer.Position, error) { +func arrayToEvaluator(array *ast.Array, opts *Opts, state *State) (interface{}, lexer.Position, error) { if len(array.Numbers) != 0 { var evaluator IntArrayEvaluator evaluator.AppendValues(array.Numbers...) @@ -175,13 +169,13 @@ func arrayToEvaluator(array *ast.Array, state *State) (interface{}, lexer.Positi } // could be an iterator - return identToEvaluator(&ident{Pos: array.Pos, Ident: array.Ident}, state) + return identToEvaluator(&ident{Pos: array.Pos, Ident: array.Ident}, opts, state) } else if array.Variable != nil { varName, ok := isVariableName(*array.Variable) if !ok { return nil, array.Pos, NewError(array.Pos, "invalid variable name '%s'", *array.Variable) } - return evaluatorFromVariable(varName, array.Pos, state.replCtx) + return evaluatorFromVariable(varName, array.Pos, opts) } else if array.CIDR != nil { var values CIDRValues if err := values.AppendCIDR(*array.CIDR); err != nil { @@ -224,26 +218,25 @@ func isVariableName(str string) (string, bool) { return "", false } -func evaluatorFromVariable(varname string, pos lexer.Position, replCtx ReplacementContext) (interface{}, lexer.Position, error) { - value, exists := replCtx.Opts.Variables[varname] - if !exists { +func evaluatorFromVariable(varname string, pos lexer.Position, opts *Opts) (interface{}, lexer.Position, error) { + variable := opts.VariableStore.Get(varname) + if variable == nil { return nil, pos, NewError(pos, "variable '%s' doesn't exist", varname) } - return value.GetEvaluator(), pos, nil + return variable.GetEvaluator(), pos, nil } -func stringEvaluatorFromVariable(str string, pos lexer.Position, replCtx ReplacementContext) (interface{}, lexer.Position, error) { +func stringEvaluatorFromVariable(str string, pos lexer.Position, opts *Opts) (interface{}, lexer.Position, error) { var evaluators []*StringEvaluator doLoc := func(sub string) error { if varname, ok := isVariableName(sub); ok { - value, exists := replCtx.Opts.Variables[varname] - if !exists { - return NewError(pos, "variable '%s' doesn't exist", varname) + evaluator, pos, err := evaluatorFromVariable(varname, pos, opts) + if err != nil { + return err } - evaluator := value.GetEvaluator() switch evaluator := evaluator.(type) { case *StringArrayEvaluator: evaluators = append(evaluators, &StringEvaluator{ @@ -386,7 +379,7 @@ func StringArrayMatchesWrapper(a *StringArrayEvaluator, b *StringValuesEvaluator return evaluator, nil } -func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position, error) { +func nodeToEvaluator(obj interface{}, opts *Opts, state *State) (interface{}, lexer.Position, error) { var err error var boolEvaluator *BoolEvaluator var pos lexer.Position @@ -394,9 +387,9 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position switch obj := obj.(type) { case *ast.BooleanExpression: - return nodeToEvaluator(obj.Expression, state) + return nodeToEvaluator(obj.Expression, opts, state) case *ast.Expression: - cmp, pos, err = nodeToEvaluator(obj.Comparison, state) + cmp, pos, err = nodeToEvaluator(obj.Comparison, opts, state) if err != nil { return nil, pos, err } @@ -407,7 +400,7 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position return nil, obj.Pos, NewTypeError(obj.Pos, reflect.Bool) } - next, pos, err = nodeToEvaluator(obj.Next, state) + next, pos, err = nodeToEvaluator(obj.Next, opts, state) if err != nil { return nil, pos, err } @@ -435,7 +428,7 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position } return cmp, obj.Pos, nil case *ast.BitOperation: - unary, pos, err = nodeToEvaluator(obj.Unary, state) + unary, pos, err = nodeToEvaluator(obj.Unary, opts, state) if err != nil { return nil, pos, err } @@ -446,7 +439,7 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position return nil, obj.Pos, NewTypeError(obj.Pos, reflect.Int) } - next, pos, err = nodeToEvaluator(obj.Next, state) + next, pos, err = nodeToEvaluator(obj.Next, opts, state) if err != nil { return nil, pos, err } @@ -481,13 +474,13 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position return unary, obj.Pos, nil case *ast.Comparison: - unary, pos, err = nodeToEvaluator(obj.BitOperation, state) + unary, pos, err = nodeToEvaluator(obj.BitOperation, opts, state) if err != nil { return nil, pos, err } if obj.ArrayComparison != nil { - next, pos, err = nodeToEvaluator(obj.ArrayComparison, state) + next, pos, err = nodeToEvaluator(obj.ArrayComparison, opts, state) if err != nil { return nil, pos, err } @@ -710,7 +703,7 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position return nil, pos, NewTypeError(pos, reflect.Array) } } else if obj.ScalarComparison != nil { - next, pos, err = nodeToEvaluator(obj.ScalarComparison, state) + next, pos, err = nodeToEvaluator(obj.ScalarComparison, opts, state) if err != nil { return nil, pos, err } @@ -1052,14 +1045,14 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position } case *ast.ArrayComparison: - return nodeToEvaluator(obj.Array, state) + return nodeToEvaluator(obj.Array, opts, state) case *ast.ScalarComparison: - return nodeToEvaluator(obj.Next, state) + return nodeToEvaluator(obj.Next, opts, state) case *ast.Unary: if obj.Op != nil { - unary, pos, err = nodeToEvaluator(obj.Unary, state) + unary, pos, err = nodeToEvaluator(obj.Unary, opts, state) if err != nil { return nil, pos, err } @@ -1090,11 +1083,11 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position return nil, pos, NewOpUnknownError(obj.Pos, *obj.Op) } - return nodeToEvaluator(obj.Primary, state) + return nodeToEvaluator(obj.Primary, opts, state) case *ast.Primary: switch { case obj.Ident != nil: - return identToEvaluator(&ident{Pos: obj.Pos, Ident: obj.Ident}, state) + return identToEvaluator(&ident{Pos: obj.Pos, Ident: obj.Ident}, opts, state) case obj.Number != nil: return &IntEvaluator{ Value: *obj.Number, @@ -1105,7 +1098,7 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position return nil, obj.Pos, NewError(obj.Pos, "internal variable error '%s'", varname) } - return evaluatorFromVariable(varname, obj.Pos, state.replCtx) + return evaluatorFromVariable(varname, obj.Pos, opts) case obj.Duration != nil: return &IntEvaluator{ Value: *obj.Duration, @@ -1116,7 +1109,7 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position // contains variables if len(variableRegex.FindAllIndex([]byte(str), -1)) > 0 { - return stringEvaluatorFromVariable(str, obj.Pos, state.replCtx) + return stringEvaluatorFromVariable(str, obj.Pos, opts) } return &StringEvaluator{ @@ -1158,12 +1151,12 @@ func nodeToEvaluator(obj interface{}, state *State) (interface{}, lexer.Position } return evaluator, obj.Pos, nil case obj.SubExpression != nil: - return nodeToEvaluator(obj.SubExpression, state) + return nodeToEvaluator(obj.SubExpression, opts, state) default: return nil, obj.Pos, NewError(obj.Pos, "unknown primary '%s'", reflect.TypeOf(obj)) } case *ast.Array: - return arrayToEvaluator(obj, state) + return arrayToEvaluator(obj, opts, state) } return nil, lexer.Position{}, NewError(lexer.Position{}, "unknown entity '%s'", reflect.TypeOf(obj)) diff --git a/pkg/security/secl/compiler/eval/eval_test.go b/pkg/security/secl/compiler/eval/eval_test.go index bb4a3e666301e..511fc418c07bf 100644 --- a/pkg/security/secl/compiler/eval/eval_test.go +++ b/pkg/security/secl/compiler/eval/eval_test.go @@ -15,43 +15,38 @@ import ( "syscall" "testing" "time" - "unsafe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/ast" ) -func newReplCtxWithParams(constants map[string]interface{}, legacyFields map[Field]Field) ReplacementContext { +func newOptsWithParams(constants map[string]interface{}, legacyFields map[Field]Field) *Opts { opts := &Opts{ Constants: constants, LegacyFields: legacyFields, - Variables: map[string]VariableValue{ - "pid": NewIntVariable(func(ctx *Context) int { - return os.Getpid() - }, nil), - "str": NewStringVariable(func(ctx *Context) string { - return "aaa" - }, nil), - }, } - return ReplacementContext{ - Opts: opts, - MacroStore: &MacroStore{}, + + variables := map[string]VariableValue{ + "pid": NewIntVariable(func(ctx *Context) int { + return os.Getpid() + }, nil), + "str": NewStringVariable(func(ctx *Context) string { + return "aaa" + }, nil), } + + return opts.WithVariables(variables).WithMacroStore(&MacroStore{}) } -func parseRule(expr string, model Model, replCtx ReplacementContext) (*Rule, error) { - pc := ast.NewParsingContext() +func parseRule(expr string, model Model, opts *Opts) (*Rule, error) { + rule := NewRule("id1", expr, opts) - rule := &Rule{ - ID: "id1", - Expression: expr, - } + pc := ast.NewParsingContext() if err := rule.Parse(pc); err != nil { return nil, fmt.Errorf("parsing error: %v", err) } - if err := rule.GenEvaluator(model, pc, replCtx); err != nil { + if err := rule.GenEvaluator(model, pc); err != nil { return rule, fmt.Errorf("compilation error: %v", err) } @@ -61,10 +56,11 @@ func parseRule(expr string, model Model, replCtx ReplacementContext) (*Rule, err func eval(t *testing.T, event *testEvent, expr string) (bool, *ast.Rule, error) { model := &testModel{} - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) - replCtx := newReplCtxWithParams(testConstants, nil) - rule, err := parseRule(expr, model, replCtx) + opts := newOptsWithParams(testConstants, nil) + + rule, err := parseRule(expr, model, opts) if err != nil { return false, nil, err } @@ -73,23 +69,16 @@ func eval(t *testing.T, event *testEvent, expr string) (bool, *ast.Rule, error) return r1, rule.GetAst(), nil } -func emptyReplCtx() ReplacementContext { - return ReplacementContext{ - Opts: &Opts{}, - MacroStore: &MacroStore{}, - } -} - func TestStringError(t *testing.T) { model := &testModel{} - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(`process.name != "/usr/bin/vipw" && process.uid != 0 && open.filename == 3`, model, replCtx) + opts := newOptsWithParams(nil, nil) + rule, err := parseRule(`process.name != "/usr/bin/vipw" && process.uid != 0 && open.filename == 3`, model, opts) if rule == nil { t.Fatal(err) } - _, err = NewRuleEvaluator(rule.GetAst(), model, emptyReplCtx()) + _, err = NewRuleEvaluator(rule.GetAst(), model, opts) if err == nil || err.(*ErrAstToEval).Pos.Column != 73 { t.Fatal("should report a string type error") } @@ -98,13 +87,13 @@ func TestStringError(t *testing.T) { func TestIntError(t *testing.T) { model := &testModel{} - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(`process.name != "/usr/bin/vipw" && process.uid != "test" && Open.Filename == "/etc/shadow"`, model, replCtx) + opts := newOptsWithParams(nil, nil) + rule, err := parseRule(`process.name != "/usr/bin/vipw" && process.uid != "test" && Open.Filename == "/etc/shadow"`, model, opts) if rule == nil { t.Fatal(err) } - _, err = NewRuleEvaluator(rule.GetAst(), model, emptyReplCtx()) + _, err = NewRuleEvaluator(rule.GetAst(), model, opts) if err == nil || err.(*ErrAstToEval).Pos.Column != 51 { t.Fatal("should report a string type error") } @@ -113,13 +102,13 @@ func TestIntError(t *testing.T) { func TestBoolError(t *testing.T) { model := &testModel{} - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(`(process.name != "/usr/bin/vipw") == "test"`, model, replCtx) + opts := newOptsWithParams(nil, nil) + rule, err := parseRule(`(process.name != "/usr/bin/vipw") == "test"`, model, opts) if rule == nil { t.Fatal(err) } - _, err = NewRuleEvaluator(rule.GetAst(), model, emptyReplCtx()) + _, err = NewRuleEvaluator(rule.GetAst(), model, opts) if err == nil || err.(*ErrAstToEval).Pos.Column != 38 { t.Fatal("should report a bool type error") } @@ -477,7 +466,7 @@ func TestComplex(t *testing.T) { } func TestPartial(t *testing.T) { - event := testEvent{ + event := &testEvent{ process: testProcess{ name: "abc", uid: 123, @@ -554,16 +543,15 @@ func TestPartial(t *testing.T) { {Expr: `process.name =~ "/usr/sbin/*" && process.uid == 0 && process.is_root`, Field: "process.uid", IsDiscarder: true}, } - ctx := NewContext(event.GetPointer()) + ctx := NewContext(event) for _, test := range tests { model := &testModel{} - replCtx := ReplacementContext{ - Opts: &Opts{Constants: testConstants, Variables: variables}, - MacroStore: &MacroStore{}, - } - rule, err := parseRule(test.Expr, model, replCtx) + opts := newOptsWithParams(testConstants, nil) + opts.WithVariables(variables) + + rule, err := parseRule(test.Expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", test.Expr, err) } @@ -585,27 +573,27 @@ func TestPartial(t *testing.T) { func TestMacroList(t *testing.T) { model := &testModel{} pc := ast.NewParsingContext() - replCtx := newReplCtxWithParams(make(map[string]interface{}), nil) + opts := newOptsWithParams(make(map[string]interface{}), nil) macro, err := NewMacro( "list", `[ "/etc/shadow", "/etc/password" ]`, model, pc, - replCtx, + opts, ) if err != nil { t.Fatal(err) } - replCtx.AddMacro(macro) + opts.MacroStore.Add(macro) expr := `"/etc/shadow" in list` - rule, err := parseRule(expr, model, replCtx) + rule, err := parseRule(expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", expr, err) } - ctx := NewContext(unsafe.Pointer(&testEvent{})) + ctx := NewContext(&testEvent{}) if !rule.Eval(ctx) { t.Fatalf("should return true") @@ -615,19 +603,19 @@ func TestMacroList(t *testing.T) { func TestMacroExpression(t *testing.T) { model := &testModel{} pc := ast.NewParsingContext() - replCtx := newReplCtxWithParams(make(map[string]interface{}), nil) + opts := newOptsWithParams(make(map[string]interface{}), nil) macro, err := NewMacro( "is_passwd", `open.filename in [ "/etc/shadow", "/etc/passwd" ]`, model, pc, - replCtx, + opts, ) if err != nil { t.Fatal(err) } - replCtx.AddMacro(macro) + opts.MacroStore.Add(macro) event := &testEvent{ process: testProcess{ @@ -640,12 +628,12 @@ func TestMacroExpression(t *testing.T) { expr := `process.name == "httpd" && is_passwd` - rule, err := parseRule(expr, model, replCtx) + rule, err := parseRule(expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", expr, err) } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) if !rule.Eval(ctx) { t.Fatalf("should return true") } @@ -654,19 +642,19 @@ func TestMacroExpression(t *testing.T) { func TestMacroPartial(t *testing.T) { model := &testModel{} pc := ast.NewParsingContext() - replCtx := newReplCtxWithParams(make(map[string]interface{}), nil) + opts := newOptsWithParams(make(map[string]interface{}), nil) macro, err := NewMacro( "is_passwd", `open.filename in [ "/etc/shadow", "/etc/passwd" ]`, model, pc, - replCtx, + opts, ) if err != nil { t.Fatal(err) } - replCtx.AddMacro(macro) + opts.MacroStore.Add(macro) event := &testEvent{ process: testProcess{ @@ -679,7 +667,7 @@ func TestMacroPartial(t *testing.T) { expr := `process.name == "httpd" && is_passwd` - rule, err := parseRule(expr, model, replCtx) + rule, err := parseRule(expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", expr, err) } @@ -688,7 +676,7 @@ func TestMacroPartial(t *testing.T) { t.Fatalf("error while generating partials `%s`: %s", expr, err) } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) result, err := rule.PartialEval(ctx, "open.filename") if err != nil { @@ -719,38 +707,38 @@ func TestNestedMacros(t *testing.T) { model := &testModel{} pc := ast.NewParsingContext() - replCtx := newReplCtxWithParams(make(map[string]interface{}), nil) + opts := newOptsWithParams(make(map[string]interface{}), nil) macro1, err := NewMacro( "sensitive_files", `[ "/etc/shadow", "/etc/passwd" ]`, model, pc, - replCtx, + opts, ) if err != nil { t.Fatal(err) } - replCtx.AddMacro(macro1) + opts.MacroStore.Add(macro1) macro2, err := NewMacro( "is_sensitive_opened", `open.filename in sensitive_files`, model, pc, - replCtx, + opts, ) if err != nil { t.Fatal(err) } - replCtx.AddMacro(macro2) + opts.MacroStore.Add(macro2) - rule, err := parseRule(macro2.ID, model, replCtx) + rule, err := parseRule(macro2.ID, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", macro2.ID, err) } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) if !rule.Eval(ctx) { t.Fatalf("should return true") } @@ -758,15 +746,18 @@ func TestNestedMacros(t *testing.T) { func TestFieldValidator(t *testing.T) { expr := `process.uid == -100 && open.filename == "/etc/passwd"` - replCtx := newReplCtxWithParams(nil, nil) - if _, err := parseRule(expr, &testModel{}, replCtx); err == nil { + + opts := newOptsWithParams(nil, nil) + + if _, err := parseRule(expr, &testModel{}, opts); err == nil { t.Error("expected an error on process.uid being negative") } } func TestLegacyField(t *testing.T) { model := &testModel{} - replCtx := newReplCtxWithParams(testConstants, legacyFields) + + opts := newOptsWithParams(nil, legacyFields) tests := []struct { Expr string @@ -778,7 +769,7 @@ func TestLegacyField(t *testing.T) { } for _, test := range tests { - _, err := parseRule(test.Expr, model, replCtx) + _, err := parseRule(test.Expr, model, opts) if err == nil != test.Expected { t.Errorf("expected result `%t` not found, got `%t`\n%s", test.Expected, err == nil, test.Expr) } @@ -787,7 +778,8 @@ func TestLegacyField(t *testing.T) { func TestRegisterSyntaxError(t *testing.T) { model := &testModel{} - replCtx := newReplCtxWithParams(testConstants, nil) + + opts := newOptsWithParams(nil, nil) tests := []struct { Expr string @@ -803,7 +795,7 @@ func TestRegisterSyntaxError(t *testing.T) { } for _, test := range tests { - _, err := parseRule(test.Expr, model, replCtx) + _, err := parseRule(test.Expr, model, opts) if err == nil != test.Expected { t.Errorf("expected result `%t` not found, got `%t`\n%s", test.Expected, err == nil, test.Expr) } @@ -950,13 +942,14 @@ func TestRegisterPartial(t *testing.T) { //{Expr: `process.list[A].key == 55 && process.list[B].value == "AA"`, Field: "process.list.key", IsDiscarder: true}, } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) for _, test := range tests { model := &testModel{} - replCtx := newReplCtxWithParams(testConstants, nil) - rule, err := parseRule(test.Expr, model, replCtx) + opts := newOptsWithParams(testConstants, nil) + + rule, err := parseRule(test.Expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", test.Expr, err) } @@ -1329,13 +1322,14 @@ func TestOpOverridePartials(t *testing.T) { {Expr: `process.or_array.value not in ["not"] || true`, Field: "process.or_array.value", IsDiscarder: false}, } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) for _, test := range tests { model := &testModel{} - replCtx := newReplCtxWithParams(testConstants, nil) - rule, err := parseRule(test.Expr, model, replCtx) + opts := newOptsWithParams(testConstants, nil) + + rule, err := parseRule(test.Expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", test.Expr, err) } @@ -1370,8 +1364,9 @@ func TestFieldValues(t *testing.T) { for _, test := range tests { model := &testModel{} - replCtx := newReplCtxWithParams(testConstants, nil) - rule, err := parseRule(test.Expr, model, replCtx) + opts := newOptsWithParams(testConstants, nil) + + rule, err := parseRule(test.Expr, model, opts) if err != nil { t.Fatalf("error while evaluating `%s`: %s", test.Expr, err) } @@ -1410,9 +1405,9 @@ func BenchmarkArray(b *testing.B) { } expr := strings.Join(exprs, " && ") + opts := newOptsWithParams(nil, nil) - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(expr, &testModel{}, replCtx) + rule, err := parseRule(expr, &testModel{}, opts) if err != nil { b.Fatalf("%s\n%s", err, expr) } @@ -1421,7 +1416,7 @@ func BenchmarkArray(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) if evaluator.Eval(ctx) != true { b.Fatal("unexpected result") } @@ -1444,9 +1439,9 @@ func BenchmarkComplex(b *testing.B) { } expr := strings.Join(exprs, " && ") + opts := newOptsWithParams(nil, nil) - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(expr, &testModel{}, replCtx) + rule, err := parseRule(expr, &testModel{}, opts) if err != nil { b.Fatalf("%s\n%s", err, expr) } @@ -1455,7 +1450,7 @@ func BenchmarkComplex(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) if evaluator.Eval(ctx) != true { b.Fatal("unexpected result") } @@ -1470,7 +1465,7 @@ func BenchmarkPartial(b *testing.B) { }, } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) base := `(process.name == "/usr/bin/ls" && process.uid != 0)` var exprs []string @@ -1480,17 +1475,16 @@ func BenchmarkPartial(b *testing.B) { } expr := strings.Join(exprs, " && ") - model := &testModel{} + opts := newOptsWithParams(nil, nil) - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(expr, model, replCtx) + rule, err := parseRule(expr, model, opts) if err != nil { b.Fatal(err) } pc := ast.NewParsingContext() - if err := rule.GenEvaluator(model, pc, emptyReplCtx()); err != nil { + if err := rule.GenEvaluator(model, pc); err != nil { b.Fatal(err) } @@ -1526,9 +1520,9 @@ func BenchmarkPool(b *testing.B) { } expr := strings.Join(exprs, " && ") + opts := newOptsWithParams(nil, nil) - replCtx := newReplCtxWithParams(nil, nil) - rule, err := parseRule(expr, &testModel{}, replCtx) + rule, err := parseRule(expr, &testModel{}, opts) if err != nil { b.Fatalf("%s\n%s", err, expr) } @@ -1537,7 +1531,7 @@ func BenchmarkPool(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - ctx := pool.Get(unsafe.Pointer(event)) + ctx := pool.Get(event) if evaluator.Eval(ctx) != true { b.Fatal("unexpected result") } diff --git a/pkg/security/secl/compiler/eval/event.go b/pkg/security/secl/compiler/eval/event.go index 8dadb20497ddb..13b35a6b90c82 100644 --- a/pkg/security/secl/compiler/eval/event.go +++ b/pkg/security/secl/compiler/eval/event.go @@ -7,7 +7,6 @@ package eval import ( "reflect" - "unsafe" ) // EventType is the type of an event @@ -27,8 +26,6 @@ type Event interface { GetFieldValue(field Field) (interface{}, error) // GetFieldType returns the Type of the Field GetFieldType(field Field) (reflect.Kind, error) - // GetPointer returns an unsafe.Pointer of this object - GetPointer() unsafe.Pointer // GetTags returns a list of tags GetTags() []string } diff --git a/pkg/security/secl/compiler/eval/macro.go b/pkg/security/secl/compiler/eval/macro.go index 3afda7850fa67..10865439a3c6f 100644 --- a/pkg/security/secl/compiler/eval/macro.go +++ b/pkg/security/secl/compiler/eval/macro.go @@ -16,8 +16,8 @@ type MacroID = string // Macro - Macro object identified by an `ID` containing a SECL `Expression` type Macro struct { - ID MacroID - Store *MacroStore + ID MacroID + Opts *Opts evaluator *MacroEvaluator ast *ast.Macro @@ -31,17 +31,17 @@ type MacroEvaluator struct { } // NewMacro parses an expression and returns a new macro -func NewMacro(id, expression string, model Model, parsingContext *ast.ParsingContext, replCtx ReplacementContext) (*Macro, error) { +func NewMacro(id, expression string, model Model, parsingContext *ast.ParsingContext, opts *Opts) (*Macro, error) { macro := &Macro{ - ID: id, - Store: replCtx.MacroStore, + ID: id, + Opts: opts, } if err := macro.Parse(parsingContext, expression); err != nil { return nil, fmt.Errorf("syntax error: %w", err) } - if err := macro.GenEvaluator(expression, model, replCtx); err != nil { + if err := macro.GenEvaluator(expression, model); err != nil { return nil, fmt.Errorf("compilation error: %w", err) } @@ -49,7 +49,7 @@ func NewMacro(id, expression string, model Model, parsingContext *ast.ParsingCon } // NewStringValuesMacro returns a new macro from an array of strings -func NewStringValuesMacro(id string, values []string, macroStore *MacroStore) (*Macro, error) { +func NewStringValuesMacro(id string, values []string, opts *Opts) (*Macro, error) { var evaluator StringValuesEvaluator for _, value := range values { fieldValue := FieldValue{ @@ -66,7 +66,7 @@ func NewStringValuesMacro(id string, values []string, macroStore *MacroStore) (* return &Macro{ ID: id, - Store: macroStore, + Opts: opts, evaluator: &MacroEvaluator{Value: &evaluator}, }, nil } @@ -91,23 +91,23 @@ func (m *Macro) Parse(parsingContext *ast.ParsingContext, expression string) err return nil } -func macroToEvaluator(macro *ast.Macro, model Model, replCtx ReplacementContext, field Field) (*MacroEvaluator, error) { +func macroToEvaluator(macro *ast.Macro, model Model, opts *Opts, field Field) (*MacroEvaluator, error) { macros := make(map[MacroID]*MacroEvaluator) - for id, macro := range replCtx.Macros { - macros[id] = macro.evaluator + for _, macro := range opts.MacroStore.List() { + macros[macro.ID] = macro.evaluator } - state := NewState(model, field, macros, replCtx) + state := NewState(model, field, macros) var eval interface{} var err error switch { case macro.Expression != nil: - eval, _, err = nodeToEvaluator(macro.Expression, state) + eval, _, err = nodeToEvaluator(macro.Expression, opts, state) case macro.Array != nil: - eval, _, err = nodeToEvaluator(macro.Array, state) + eval, _, err = nodeToEvaluator(macro.Array, opts, state) case macro.Primary != nil: - eval, _, err = nodeToEvaluator(macro.Primary, state) + eval, _, err = nodeToEvaluator(macro.Primary, opts, state) } if err != nil { @@ -127,10 +127,8 @@ func macroToEvaluator(macro *ast.Macro, model Model, replCtx ReplacementContext, } // GenEvaluator - Compiles and generates the evalutor -func (m *Macro) GenEvaluator(expression string, model Model, replCtx ReplacementContext) error { - m.Store = replCtx.MacroStore - - evaluator, err := macroToEvaluator(m.ast, model, replCtx, "") +func (m *Macro) GenEvaluator(expression string, model Model) error { + evaluator, err := macroToEvaluator(m.ast, model, m.Opts, "") if err != nil { if err, ok := err.(*ErrAstToEval); ok { return fmt.Errorf("macro syntax error: %w", &ErrRuleParse{pos: err.Pos, expr: expression}) @@ -146,7 +144,7 @@ func (m *Macro) GenEvaluator(expression string, model Model, replCtx Replacement func (m *Macro) GetEventTypes() []EventType { eventTypes := m.evaluator.EventTypes - for _, macro := range m.Store.Macros { + for _, macro := range m.Opts.MacroStore.List() { eventTypes = append(eventTypes, macro.evaluator.EventTypes...) } @@ -157,7 +155,7 @@ func (m *Macro) GetEventTypes() []EventType { func (m *Macro) GetFields() []Field { fields := m.evaluator.GetFields() - for _, macro := range m.Store.Macros { + for _, macro := range m.Opts.MacroStore.List() { fields = append(fields, macro.evaluator.GetFields()...) } diff --git a/pkg/security/secl/compiler/eval/model_test.go b/pkg/security/secl/compiler/eval/model_test.go index cd16fb809640a..e18e66b52c7b1 100644 --- a/pkg/security/secl/compiler/eval/model_test.go +++ b/pkg/security/secl/compiler/eval/model_test.go @@ -47,7 +47,7 @@ type testItemListIterator struct { } func (t *testItemListIterator) Front(ctx *Context) unsafe.Pointer { - if front := (*testEvent)(ctx.Object).process.list.Front(); front != nil { + if front := ctx.Event.(*testEvent).process.list.Front(); front != nil { t.prev = front return unsafe.Pointer(front) } @@ -63,14 +63,14 @@ func (t *testItemListIterator) Next() unsafe.Pointer { } type testItemArrayIterator struct { - ctx *Context + event *testEvent index int } func (t *testItemArrayIterator) Front(ctx *Context) unsafe.Pointer { - t.ctx = ctx + t.event = ctx.Event.(*testEvent) - array := (*testEvent)(ctx.Object).process.array + array := ctx.Event.(*testEvent).process.array if t.index < len(array) { t.index++ return unsafe.Pointer(array[0]) @@ -79,7 +79,7 @@ func (t *testItemArrayIterator) Front(ctx *Context) unsafe.Pointer { } func (t *testItemArrayIterator) Next() unsafe.Pointer { - array := (*testEvent)(t.ctx.Object).process.array + array := t.event.process.array if t.index < len(array) { value := array[t.index] t.index++ @@ -133,10 +133,6 @@ func (e *testEvent) GetTags() []string { return []string{} } -func (e *testEvent) GetPointer() unsafe.Pointer { - return unsafe.Pointer(e) -} - func (m *testModel) NewEvent() Event { return &testEvent{} } @@ -175,7 +171,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &CIDREvaluator{ EvalFnc: func(ctx *Context) net.IPNet { - return (*testEvent)(ctx.Object).network.ip + return ctx.Event.(*testEvent).network.ip }, Field: field, }, nil @@ -184,7 +180,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &CIDREvaluator{ EvalFnc: func(ctx *Context) net.IPNet { - return (*testEvent)(ctx.Object).network.cidr + return ctx.Event.(*testEvent).network.cidr }, Field: field, }, nil @@ -194,7 +190,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &CIDRArrayEvaluator{ EvalFnc: func(ctx *Context) []net.IPNet { var ipnets []net.IPNet - for _, ip := range (*testEvent)(ctx.Object).network.ips { + for _, ip := range ctx.Event.(*testEvent).network.ips { ipnets = append(ipnets, ip) } return ipnets @@ -205,7 +201,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &CIDRArrayEvaluator{ EvalFnc: func(ctx *Context) []net.IPNet { - return (*testEvent)(ctx.Object).network.cidrs + return ctx.Event.(*testEvent).network.cidrs }, Field: field, }, nil @@ -213,7 +209,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro case "process.name": return &StringEvaluator{ - EvalFnc: func(ctx *Context) string { return (*testEvent)(ctx.Object).process.name }, + EvalFnc: func(ctx *Context) string { return ctx.Event.(*testEvent).process.name }, Field: field, OpOverrides: GlobCmp, }, nil @@ -221,7 +217,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro case "process.argv0": return &StringEvaluator{ - EvalFnc: func(ctx *Context) string { return (*testEvent)(ctx.Object).process.argv0 }, + EvalFnc: func(ctx *Context) string { return ctx.Event.(*testEvent).process.argv0 }, Field: field, }, nil @@ -230,9 +226,9 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntEvaluator{ EvalFnc: func(ctx *Context) int { // to test optimisation - (*testEvent)(ctx.Object).uidEvaluated = true + ctx.Event.(*testEvent).uidEvaluated = true - return (*testEvent)(ctx.Object).process.uid + return ctx.Event.(*testEvent).process.uid }, Field: field, }, nil @@ -242,9 +238,9 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntEvaluator{ EvalFnc: func(ctx *Context) int { // to test optimisation - (*testEvent)(ctx.Object).gidEvaluated = true + ctx.Event.(*testEvent).gidEvaluated = true - return (*testEvent)(ctx.Object).process.gid + return ctx.Event.(*testEvent).process.gid }, Field: field, }, nil @@ -254,9 +250,9 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntEvaluator{ EvalFnc: func(ctx *Context) int { // to test optimisation - (*testEvent)(ctx.Object).uidEvaluated = true + ctx.Event.(*testEvent).uidEvaluated = true - return (*testEvent)(ctx.Object).process.pid + return ctx.Event.(*testEvent).process.pid }, Field: field, }, nil @@ -264,7 +260,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro case "process.is_root": return &BoolEvaluator{ - EvalFnc: func(ctx *Context) bool { return (*testEvent)(ctx.Object).process.isRoot }, + EvalFnc: func(ctx *Context) bool { return ctx.Event.(*testEvent).process.isRoot }, Field: field, }, nil @@ -273,11 +269,11 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntArrayEvaluator{ EvalFnc: func(ctx *Context) []int { // to test optimisation - (*testEvent)(ctx.Object).listEvaluated = true + ctx.Event.(*testEvent).listEvaluated = true var result []int - el := (*testEvent)(ctx.Object).process.list.Front() + el := ctx.Event.(*testEvent).process.list.Front() for el != nil { result = append(result, el.Value.(*testItem).key) el = el.Next() @@ -294,11 +290,11 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &StringArrayEvaluator{ EvalFnc: func(ctx *Context) []string { // to test optimisation - (*testEvent)(ctx.Object).listEvaluated = true + ctx.Event.(*testEvent).listEvaluated = true var values []string - el := (*testEvent)(ctx.Object).process.list.Front() + el := ctx.Event.(*testEvent).process.list.Front() for el != nil { values = append(values, el.Value.(*testItem).value) el = el.Next() @@ -315,11 +311,11 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &BoolArrayEvaluator{ EvalFnc: func(ctx *Context) []bool { // to test optimisation - (*testEvent)(ctx.Object).listEvaluated = true + ctx.Event.(*testEvent).listEvaluated = true var result []bool - el := (*testEvent)(ctx.Object).process.list.Front() + el := ctx.Event.(*testEvent).process.list.Front() for el != nil { result = append(result, el.Value.(*testItem).flag) el = el.Next() @@ -337,7 +333,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro EvalFnc: func(ctx *Context) []int { var result []int - for _, el := range (*testEvent)(ctx.Object).process.array { + for _, el := range ctx.Event.(*testEvent).process.array { result = append(result, el.key) } @@ -353,7 +349,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro EvalFnc: func(ctx *Context) []string { var values []string - for _, el := range (*testEvent)(ctx.Object).process.array { + for _, el := range ctx.Event.(*testEvent).process.array { values = append(values, el.value) } @@ -369,7 +365,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro EvalFnc: func(ctx *Context) []bool { var result []bool - for _, el := range (*testEvent)(ctx.Object).process.array { + for _, el := range ctx.Event.(*testEvent).process.array { result = append(result, el.flag) } @@ -383,7 +379,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntEvaluator{ EvalFnc: func(ctx *Context) int { - return int((*testEvent)(ctx.Object).process.createdAt) + return int(ctx.Event.(*testEvent).process.createdAt) }, Field: field, }, nil @@ -392,14 +388,14 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &StringEvaluator{ EvalFnc: func(ctx *Context) string { - return (*testEvent)(ctx.Object).process.orName + return ctx.Event.(*testEvent).process.orName }, Field: field, OpOverrides: &OpOverrides{ StringValuesContains: func(a *StringEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error) { evaluator := StringValuesEvaluator{ EvalFnc: func(ctx *Context) *StringValues { - return (*testEvent)(ctx.Object).process.orNameValues() + return ctx.Event.(*testEvent).process.orNameValues() }, } @@ -408,7 +404,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro StringEquals: func(a *StringEvaluator, b *StringEvaluator, state *State) (*BoolEvaluator, error) { evaluator := StringValuesEvaluator{ EvalFnc: func(ctx *Context) *StringValues { - return (*testEvent)(ctx.Object).process.orNameValues() + return ctx.Event.(*testEvent).process.orNameValues() }, } @@ -423,7 +419,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro EvalFnc: func(ctx *Context) []string { var values []string - for _, el := range (*testEvent)(ctx.Object).process.orArray { + for _, el := range ctx.Event.(*testEvent).process.orArray { values = append(values, el.value) } @@ -434,7 +430,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro StringArrayContains: func(a *StringEvaluator, b *StringArrayEvaluator, state *State) (*BoolEvaluator, error) { evaluator := StringValuesEvaluator{ EvalFnc: func(ctx *Context) *StringValues { - return (*testEvent)(ctx.Object).process.orArrayValues() + return ctx.Event.(*testEvent).process.orArrayValues() }, } @@ -443,7 +439,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro StringArrayMatches: func(a *StringArrayEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error) { evaluator := StringValuesEvaluator{ EvalFnc: func(ctx *Context) *StringValues { - return (*testEvent)(ctx.Object).process.orArrayValues() + return ctx.Event.(*testEvent).process.orArrayValues() }, } @@ -455,35 +451,35 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro case "open.filename": return &StringEvaluator{ - EvalFnc: func(ctx *Context) string { return (*testEvent)(ctx.Object).open.filename }, + EvalFnc: func(ctx *Context) string { return ctx.Event.(*testEvent).open.filename }, Field: field, }, nil case "open.flags": return &IntEvaluator{ - EvalFnc: func(ctx *Context) int { return (*testEvent)(ctx.Object).open.flags }, + EvalFnc: func(ctx *Context) int { return ctx.Event.(*testEvent).open.flags }, Field: field, }, nil case "open.mode": return &IntEvaluator{ - EvalFnc: func(ctx *Context) int { return (*testEvent)(ctx.Object).open.mode }, + EvalFnc: func(ctx *Context) int { return ctx.Event.(*testEvent).open.mode }, Field: field, }, nil case "mkdir.filename": return &StringEvaluator{ - EvalFnc: func(ctx *Context) string { return (*testEvent)(ctx.Object).mkdir.filename }, + EvalFnc: func(ctx *Context) string { return ctx.Event.(*testEvent).mkdir.filename }, Field: field, }, nil case "mkdir.mode": return &IntEvaluator{ - EvalFnc: func(ctx *Context) int { return (*testEvent)(ctx.Object).mkdir.mode }, + EvalFnc: func(ctx *Context) int { return ctx.Event.(*testEvent).mkdir.mode }, Field: field, }, nil } diff --git a/pkg/security/secl/compiler/eval/oo_dns_name_test.go b/pkg/security/secl/compiler/eval/oo_dns_name_test.go index ae771c2e88585..60b0b92759b7e 100644 --- a/pkg/security/secl/compiler/eval/oo_dns_name_test.go +++ b/pkg/security/secl/compiler/eval/oo_dns_name_test.go @@ -26,7 +26,7 @@ func TestLowerCaseEquals(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringEquals(a, b, state) assert.Empty(t, err) @@ -51,7 +51,7 @@ func TestLowerCaseEquals(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringEquals(a, b, state) assert.Empty(t, err) @@ -76,7 +76,7 @@ func TestLowerCaseEquals(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringEquals(a, b, state) assert.Empty(t, err) @@ -101,7 +101,7 @@ func TestLowerCaseEquals(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringEquals(a, b, state) assert.Empty(t, err) @@ -131,7 +131,7 @@ func TestLowerCaseContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -155,7 +155,7 @@ func TestLowerCaseContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -179,7 +179,7 @@ func TestLowerCaseContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -203,7 +203,7 @@ func TestLowerCaseContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -248,7 +248,7 @@ func TestLowerCaseContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -270,7 +270,7 @@ func TestLowerCaseArrayContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringArrayContains(a, b, state) assert.Empty(t, err) @@ -290,7 +290,7 @@ func TestLowerCaseArrayContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringArrayContains(a, b, state) assert.Empty(t, err) @@ -312,17 +312,10 @@ func TestLowerCaseArrayContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := DNSNameCmp.StringArrayContains(a, b, state) assert.Empty(t, err) assert.True(t, e.Eval(&ctx).(bool)) }) } - -func nilReplCtx() ReplacementContext { - return ReplacementContext{ - Opts: nil, - MacroStore: nil, - } -} diff --git a/pkg/security/secl/compiler/eval/oo_glob_cmp_test.go b/pkg/security/secl/compiler/eval/oo_glob_cmp_test.go index 0176d5607db29..c2c83f4bac5e7 100644 --- a/pkg/security/secl/compiler/eval/oo_glob_cmp_test.go +++ b/pkg/security/secl/compiler/eval/oo_glob_cmp_test.go @@ -26,7 +26,7 @@ func TestOPOverrideGlobEquals(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringEquals(a, b, state) assert.Empty(t, err) @@ -51,7 +51,7 @@ func TestOPOverrideGlobEquals(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringEquals(a, b, state) assert.Empty(t, err) @@ -82,7 +82,7 @@ func TestOPOverrideGlobContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -106,7 +106,7 @@ func TestOPOverrideGlobContains(t *testing.T) { } var ctx Context - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringValuesContains(a, b, state) assert.Empty(t, err) @@ -128,7 +128,7 @@ func TestOPOverrideGlobArrayMatches(t *testing.T) { b := &StringValuesEvaluator{ Values: values, } - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringArrayMatches(a, b, state) assert.Empty(t, err) @@ -147,7 +147,7 @@ func TestOPOverrideGlobArrayMatches(t *testing.T) { b := &StringValuesEvaluator{ Values: values, } - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringArrayMatches(a, b, state) assert.Empty(t, err) @@ -165,7 +165,7 @@ func TestOPOverrideGlobArrayContains(t *testing.T) { b := &StringArrayEvaluator{ Values: []string{"/2/abc/3"}, } - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringArrayContains(a, b, state) assert.Empty(t, err) @@ -182,7 +182,7 @@ func TestOPOverrideGlobArrayContains(t *testing.T) { Field: "dont_forget_me_or_it_wont_compile_a", Values: []string{"/2/abc/3"}, } - state := NewState(&testModel{}, "", nil, nilReplCtx()) + state := NewState(&testModel{}, "", nil) e, err := GlobCmp.StringArrayContains(a, b, state) assert.Empty(t, err) diff --git a/pkg/security/secl/compiler/eval/opts.go b/pkg/security/secl/compiler/eval/opts.go index 1556b148e8dc5..9d26fba2494e9 100644 --- a/pkg/security/secl/compiler/eval/opts.go +++ b/pkg/security/secl/compiler/eval/opts.go @@ -10,14 +10,8 @@ type MacroStore struct { Macros map[MacroID]*Macro } -// WithMacros set macros fields -func (s *MacroStore) WithMacros(macros map[MacroID]*Macro) *MacroStore { - s.Macros = macros - return s -} - // AddMacro add a macro -func (s *MacroStore) AddMacro(macro *Macro) *MacroStore { +func (s *MacroStore) Add(macro *Macro) *MacroStore { if s.Macros == nil { s.Macros = make(map[string]*Macro) } @@ -25,11 +19,55 @@ func (s *MacroStore) AddMacro(macro *Macro) *MacroStore { return s } +func (s *MacroStore) List() []*Macro { + var macros []*Macro + + if s == nil || s.Macros == nil { + return macros + } + + for _, macro := range s.Macros { + macros = append(macros, macro) + } + return macros +} + +// Get returns the marcro +func (s *MacroStore) Get(id string) *Macro { + if s == nil || s.Macros == nil { + return nil + } + return s.Macros[id] +} + +// VariableStore represents a store of SECL variables +type VariableStore struct { + Variables map[string]VariableValue +} + +// AddVariable add a variable +func (s *VariableStore) Add(name string, variable VariableValue) *VariableStore { + if s.Variables == nil { + s.Variables = make(map[string]VariableValue) + } + s.Variables[name] = variable + return s +} + +// Get returns the variable +func (s *VariableStore) Get(name string) VariableValue { + if s == nil || s.Variables == nil { + return nil + } + return s.Variables[name] +} + // Opts are the options to be passed to the evaluator type Opts struct { - LegacyFields map[Field]Field - Constants map[string]interface{} - Variables map[string]VariableValue + LegacyFields map[Field]Field + Constants map[string]interface{} + VariableStore *VariableStore + MacroStore *MacroStore } // WithConstants set constants @@ -40,12 +78,19 @@ func (o *Opts) WithConstants(constants map[string]interface{}) *Opts { // WithVariables set variables func (o *Opts) WithVariables(variables map[string]VariableValue) *Opts { - optsVariables := make(map[string]VariableValue, len(variables)) - for name, value := range variables { - optsVariables[name] = value + if o.VariableStore == nil { + o.VariableStore = &VariableStore{} } - o.Variables = optsVariables + for n, v := range variables { + o.VariableStore.Add(n, v) + } + return o +} + +// WithVariableStore set the variable store +func (o *Opts) WithVariableStore(store *VariableStore) *Opts { + o.VariableStore = store return o } @@ -54,3 +99,27 @@ func (o *Opts) WithLegacyFields(fields map[Field]Field) *Opts { o.LegacyFields = fields return o } + +// WithMacroStore set the macro store +func (o *Opts) WithMacroStore(store *MacroStore) *Opts { + o.MacroStore = store + return o +} + +// AddMacro add a macro +func (o *Opts) AddMacro(macro *Macro) *Opts { + if o.MacroStore == nil { + o.MacroStore = &MacroStore{} + } + o.MacroStore.Add(macro) + return o +} + +// AddVariable add a variable +func (o *Opts) AddVariable(name string, variable VariableValue) *Opts { + if o.VariableStore == nil { + o.VariableStore = &VariableStore{} + } + o.VariableStore.Add(name, variable) + return o +} diff --git a/pkg/security/secl/compiler/eval/rule.go b/pkg/security/secl/compiler/eval/rule.go index c82ec7f7c799a..e08d0c5a4ed53 100644 --- a/pkg/security/secl/compiler/eval/rule.go +++ b/pkg/security/secl/compiler/eval/rule.go @@ -17,11 +17,11 @@ type RuleID = string // Rule - Rule object identified by an `ID` containing a SECL `Expression` type Rule struct { - ID RuleID - Expression string - Tags []string - ReplacementCtx ReplacementContext - Model Model + ID RuleID + Expression string + Tags []string + Model Model + Opts *Opts evaluator *RuleEvaluator ast *ast.Rule @@ -36,6 +36,23 @@ type RuleEvaluator struct { partialEvals map[Field]BoolEvalFnc } +// Rule returns a new rule +func NewRule(id string, expression string, opts *Opts, tags ...string) *Rule { + if opts.MacroStore == nil { + opts.WithMacroStore(&MacroStore{}) + } + if opts.VariableStore == nil { + opts.WithVariableStore(&VariableStore{}) + } + + return &Rule{ + ID: id, + Expression: expression, + Opts: opts, + Tags: tags, + } +} + // PartialEval partially evaluation of the Rule with the given Field. func (r *RuleEvaluator) PartialEval(ctx *Context, field Field) (bool, error) { eval, ok := r.partialEvals[field] @@ -88,7 +105,7 @@ func (r *Rule) GetPartialEval(field Field) BoolEvalFnc { func (r *Rule) GetFields() []Field { fields := r.evaluator.GetFields() - for _, macro := range r.ReplacementCtx.Macros { + for _, macro := range r.Opts.MacroStore.List() { fields = append(fields, macro.GetFields()...) } @@ -108,7 +125,7 @@ func (r *Rule) GetEventTypes() ([]EventType, error) { eventTypes := r.evaluator.EventTypes - for _, macro := range r.ReplacementCtx.Macros { + for _, macro := range r.Opts.MacroStore.List() { eventTypes = append(eventTypes, macro.GetEventTypes()...) } @@ -131,14 +148,14 @@ func (r *Rule) Parse(parsingContext *ast.ParsingContext) error { } // NewRuleEvaluator returns a new evaluator for a rule -func NewRuleEvaluator(rule *ast.Rule, model Model, replCtx ReplacementContext) (*RuleEvaluator, error) { +func NewRuleEvaluator(rule *ast.Rule, model Model, opts *Opts) (*RuleEvaluator, error) { macros := make(map[MacroID]*MacroEvaluator) - for id, macro := range replCtx.Macros { - macros[id] = macro.evaluator + for _, macro := range opts.MacroStore.List() { + macros[macro.ID] = macro.evaluator } - state := NewState(model, "", macros, replCtx) + state := NewState(model, "", macros) - eval, _, err := nodeToEvaluator(rule.BooleanExpression, state) + eval, _, err := nodeToEvaluator(rule.BooleanExpression, opts, state) if err != nil { return nil, err } @@ -168,9 +185,8 @@ func NewRuleEvaluator(rule *ast.Rule, model Model, replCtx ReplacementContext) ( } // GenEvaluator - Compile and generates the RuleEvaluator -func (r *Rule) GenEvaluator(model Model, parsingCtx *ast.ParsingContext, replCtx ReplacementContext) error { +func (r *Rule) GenEvaluator(model Model, parsingCtx *ast.ParsingContext) error { r.Model = model - r.ReplacementCtx = replCtx if r.ast == nil { if err := r.Parse(parsingCtx); err != nil { @@ -178,7 +194,7 @@ func (r *Rule) GenEvaluator(model Model, parsingCtx *ast.ParsingContext, replCtx } } - evaluator, err := NewRuleEvaluator(r.ast, model, replCtx) + evaluator, err := NewRuleEvaluator(r.ast, model, r.Opts) if err != nil { if err, ok := err.(*ErrAstToEval); ok { return fmt.Errorf("rule syntax error: %s: %w", err, &ErrRuleParse{pos: err.Pos, expr: r.Expression}) @@ -193,13 +209,13 @@ func (r *Rule) GenEvaluator(model Model, parsingCtx *ast.ParsingContext, replCtx func (r *Rule) genMacroPartials() (map[Field]map[MacroID]*MacroEvaluator, error) { partials := make(map[Field]map[MacroID]*MacroEvaluator) for _, field := range r.GetFields() { - for id, macro := range r.ReplacementCtx.Macros { + for _, macro := range r.Opts.MacroStore.List() { var err error var evaluator *MacroEvaluator if macro.ast != nil { // NOTE(safchain) this is not working with nested macro. It will be removed once partial // will be generated another way - evaluator, err = macroToEvaluator(macro.ast, r.Model, r.ReplacementCtx, field) + evaluator, err = macroToEvaluator(macro.ast, r.Model, r.Opts, field) if err != nil { if err, ok := err.(*ErrAstToEval); ok { return nil, fmt.Errorf("macro syntax error: %w", &ErrRuleParse{pos: err.Pos}) @@ -215,7 +231,7 @@ func (r *Rule) genMacroPartials() (map[Field]map[MacroID]*MacroEvaluator, error) macroEvaluators = make(map[MacroID]*MacroEvaluator) partials[field] = macroEvaluators } - macroEvaluators[id] = evaluator + macroEvaluators[macro.ID] = evaluator } } @@ -230,8 +246,8 @@ func (r *Rule) GenPartials() error { } for _, field := range r.GetFields() { - state := NewState(r.Model, field, macroPartials[field], r.ReplacementCtx) - pEval, _, err := nodeToEvaluator(r.ast.BooleanExpression, state) + state := NewState(r.Model, field, macroPartials[field]) + pEval, _, err := nodeToEvaluator(r.ast.BooleanExpression, r.Opts, state) if err != nil { return fmt.Errorf("couldn't generate partial for field %s and rule %s: %w", field, r.ID, err) } diff --git a/pkg/security/secl/compiler/eval/state.go b/pkg/security/secl/compiler/eval/state.go index 40359e59af219..50afe9b430f96 100644 --- a/pkg/security/secl/compiler/eval/state.go +++ b/pkg/security/secl/compiler/eval/state.go @@ -28,7 +28,6 @@ type State struct { macros map[MacroID]*MacroEvaluator registersInfo map[RegisterID]*registerInfo regexpCache StateRegexpCache - replCtx ReplacementContext } // UpdateFields updates the fields used in the rule @@ -60,7 +59,7 @@ func (s *State) UpdateFieldValues(field Field, value FieldValue) error { } // NewState returns a new State -func NewState(model Model, field Field, macros map[MacroID]*MacroEvaluator, replCtx ReplacementContext) *State { +func NewState(model Model, field Field, macros map[MacroID]*MacroEvaluator) *State { if macros == nil { macros = make(map[MacroID]*MacroEvaluator) } @@ -71,6 +70,5 @@ func NewState(model Model, field Field, macros map[MacroID]*MacroEvaluator, repl events: make(map[EventType]bool), fieldValues: make(map[Field][]FieldValue), registersInfo: make(map[RegisterID]*registerInfo), - replCtx: replCtx, } } diff --git a/pkg/security/secl/compiler/generators/accessors/accessors.go b/pkg/security/secl/compiler/generators/accessors/accessors.go index 9304f5cc6967a..af24901651a6e 100644 --- a/pkg/security/secl/compiler/generators/accessors/accessors.go +++ b/pkg/security/secl/compiler/generators/accessors/accessors.go @@ -38,14 +38,13 @@ const ( ) var ( - filename string - pkgname string - output string - verbose bool - mock bool - docOutput string - fieldsResolverOutput string - buildTags string + filename string + pkgname string + output string + verbose bool + docOutput string + fieldHandlersOutput string + buildTags string ) var ( @@ -80,7 +79,7 @@ func qualifiedType(module *common.Module, kind string) string { // handleBasic adds fields of "basic" type to list of exposed SECL fields of the module func handleBasic(module *common.Module, name, alias, kind, event string, iterator *common.StructField, isArray bool, opOverrides string, constants string, commentText string) *common.StructField { if verbose { - fmt.Printf("handleBasic name: %s, kind: %s, alias: %s\n", name, kind, alias) + fmt.Printf("handleBasic name: %s, kind: %s, alias: %s, isArray: %v\n", name, kind, alias, isArray) } basicType := origTypeToBasicType(kind) @@ -398,7 +397,7 @@ func handleSpec(module *common.Module, astFile *ast.File, spec interface{}, pref dejavu[fieldBasename] = true if len(fieldType) != 0 { - if err := handleField(module, astFile, fieldBasename, fieldBasenameSECLNormalized, prefix, aliasPrefix, pkgname, fieldType, event, fieldIterator, dejavu, false, opOverrides, constants, fieldCommentText, seclField); err != nil { + if err := handleField(module, astFile, fieldBasename, fieldBasenameSECLNormalized, prefix, aliasPrefix, pkgname, fieldType, event, fieldIterator, dejavu, isArray, opOverrides, constants, fieldCommentText, seclField); err != nil { log.Print(err) } @@ -507,7 +506,6 @@ func parseFile(filename string, pkgName string) (*common.Module, error) { AllFields: make(map[string]*common.StructField), Iterators: make(map[string]*common.StructField), EventTypes: make(map[string]*common.EventTypeMetadata), - Mock: mock, } // If the target package is different from the model package @@ -554,7 +552,7 @@ func newField(allFields map[string]*common.StructField, field *common.StructFiel if field, ok := allFields[path]; ok { if field.IsOrigTypePtr { - result += fmt.Sprintf("if e.%s == nil { e.%s = &%s{} }\n", field.Name, field.Name, field.OrigType) + result += fmt.Sprintf("if ev.%s == nil { ev.%s = &%s{} }\n", field.Name, field.Name, field.OrigType) } } } @@ -562,13 +560,13 @@ func newField(allFields map[string]*common.StructField, field *common.StructFiel return result } -func getFieldResolver(allFields map[string]*common.StructField, field *common.StructField) string { +func getFieldHandler(allFields map[string]*common.StructField, field *common.StructField) string { if field.Handler == "" || field.Iterator != nil || field.CachelessResolution { return "" } if field.Prefix == "" { - return fmt.Sprintf("ev.%s(ev)", field.Handler) + return fmt.Sprintf("ev.FieldHandlers.%s(ev)", field.Handler) } ptr := "&" @@ -576,21 +574,14 @@ func getFieldResolver(allFields map[string]*common.StructField, field *common.St ptr = "" } - return fmt.Sprintf("ev.%s(%sev.%s)", field.Handler, ptr, field.Prefix) + return fmt.Sprintf("ev.FieldHandlers.%s(ev, %sev.%s)", field.Handler, ptr, field.Prefix) } -func fieldADPrint(field *common.StructField, resolver string) string { +func fieldADPrint(field *common.StructField, handler string) string { if field.SkipADResolution { - return fmt.Sprintf("if !forADs { _ = %s }", resolver) + return fmt.Sprintf("if !forADs { _ = %s }", handler) } - return fmt.Sprintf("_ = %s", resolver) -} - -func override(str string, mock bool) string { - if !strings.Contains(str, ".") && !mock { - return "model." + str - } - return str + return fmt.Sprintf("_ = %s", handler) } func getHolder(allFields map[string]*common.StructField, field *common.StructField) *common.StructField { @@ -629,21 +620,55 @@ func getChecks(allFields map[string]*common.StructField, field *common.StructFie return checks } +func getHandlers(allFields map[string]*common.StructField) map[string]string { + handlers := make(map[string]string) + + for _, field := range allFields { + if field.Handler != "" && !field.IsLength { + returnType := field.ReturnType + if field.IsArray { + returnType = "[]" + returnType + } + + handler := fmt.Sprintf("%s(ev *Event, e *%s) %s", field.Handler, field.Struct, returnType) + + if _, exists := handlers[handler]; exists { + continue + } + + name := "e" + strings.TrimPrefix(field.Name, field.Prefix) + + if field.ReturnType == "int" { + if field.IsArray { + handlers[handler] = fmt.Sprintf("{ var result []int; for _, value := range %s { result = append(result, int(value)) }; return result }", name) + } else { + handlers[handler] = fmt.Sprintf("{ return int(%s) }", name) + } + } else { + handlers[handler] = fmt.Sprintf("{ return %s }", name) + } + } + } + + return handlers +} + var funcMap = map[string]interface{}{ - "TrimPrefix": strings.TrimPrefix, - "TrimSuffix": strings.TrimSuffix, - "NewField": newField, - "Override": override, - "GetFieldResolver": getFieldResolver, - "FieldADPrint": fieldADPrint, - "GetChecks": getChecks, + "TrimPrefix": strings.TrimPrefix, + "TrimSuffix": strings.TrimSuffix, + "HasPrefix": strings.HasPrefix, + "NewField": newField, + "GetFieldHandler": getFieldHandler, + "FieldADPrint": fieldADPrint, + "GetChecks": getChecks, + "GetHandlers": getHandlers, } //go:embed accessors.tmpl var accessorsTemplateCode string -//go:embed fields_resolver.tmpl -var fieldsResolverTemplate string +//go:embed field_handlers.tmpl +var fieldHandlersTemplate string func main() { module, err := parseFile(filename, pkgname) @@ -651,8 +676,8 @@ func main() { panic(err) } - if len(fieldsResolverOutput) > 0 { - if err = GenerateContent(fieldsResolverOutput, module, fieldsResolverTemplate); err != nil { + if len(fieldHandlersOutput) > 0 { + if err = GenerateContent(fieldHandlersOutput, module, fieldHandlersTemplate); err != nil { panic(err) } } @@ -718,9 +743,8 @@ func removeEmptyLines(input *bytes.Buffer) string { func init() { flag.BoolVar(&verbose, "verbose", false, "Be verbose") - flag.BoolVar(&mock, "mock", false, "Mock accessors") flag.StringVar(&docOutput, "doc", "", "Generate documentation JSON") - flag.StringVar(&fieldsResolverOutput, "fields-resolver", "", "Fields resolver output file") + flag.StringVar(&fieldHandlersOutput, "field-handlers", "", "Field handlers output file") flag.StringVar(&filename, "input", os.Getenv("GOFILE"), "Go file to generate decoders from") flag.StringVar(&pkgname, "package", pkgPrefix+"/"+os.Getenv("GOPACKAGE"), "Go package name") flag.StringVar(&buildTags, "tags", "", "build tags used for parsing") diff --git a/pkg/security/secl/compiler/generators/accessors/accessors.tmpl b/pkg/security/secl/compiler/generators/accessors/accessors.tmpl index fff3092df516a..80db63d3d257e 100644 --- a/pkg/security/secl/compiler/generators/accessors/accessors.tmpl +++ b/pkg/security/secl/compiler/generators/accessors/accessors.tmpl @@ -4,8 +4,6 @@ package {{.Name}} -{{$Mock := .Mock}} - import ( "net" "reflect" @@ -13,10 +11,6 @@ import ( {{if ne $.SourcePkg $.TargetPkg}}"{{.SourcePkg}}"{{end}} "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" - - {{if not $Mock}} - _ "github.com/DataDog/datadog-agent/pkg/security/secl/model" - {{end}} ) // suppress unused package warning @@ -51,26 +45,21 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "{{$Name}}": return &{{$Field.GetEvaluatorType}}{ {{- if $Field.OpOverrides}} - OpOverrides: {{$Mock | Override $Field.OpOverrides}}, + OpOverrides: {{$Field.OpOverrides}}, {{- end}} {{- if $Field.Iterator}} - EvalFnc: func(ctx *eval.Context) []{{$Field.ReturnType}} { + EvalFnc: func(ctx *eval.Context) []{{$Field.ReturnType}} { + {{if $Field.Handler}} + ev := ctx.Event.(*Event) + {{end}} {{$Checks := $Field | GetChecks $.AllFields}} - {{range $Check := $Checks}} - {{$Check = $Check | printf "(*Event)(ctx.Object).%s"}} - if !{{$Check}}() { - return {{$Field.GetDefaultReturnValue}} - } - {{end}} - {{- if not $Mock }} if ptr := ctx.Cache[field]; ptr != nil { if result := (*[]{{$Field.ReturnType}})(ptr); result != nil { return *result } } - {{end -}} var results []{{$Field.ReturnType}} @@ -85,13 +74,25 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval element := *elementPtr {{end}} + {{range $Check := $Checks}} + {{if $Field.Iterator.Name | HasPrefix $Check}} + {{$SubName := $Field.Iterator.Name | TrimPrefix $Check}} + {{$Check = $SubName | printf "element%s"}} + if !{{$Check}}() { + results = append(results, {{$Field.GetDefaultScalarReturnValue}}) + value = iterator.Next() + continue + } + {{end}} + {{end}} + {{$SubName := $Field.Iterator.Name | TrimPrefix $Field.Name}} {{$Return := $SubName | printf "element%s"}} - {{if and (ne $Field.Handler "") (not $Mock) }} + {{if $Field.Handler }} {{$SubName = $Field.Iterator.Name | TrimPrefix $Field.Prefix}} {{$Handler := $Field.Iterator.Name | TrimPrefix $Field.Handler}} - {{$Return = print "(*Event)(ctx.Object)." $Handler "(&element" $SubName ")"}} + {{$Return = print "ev.FieldHandlers." $Handler "(ev, &element" $SubName ")"}} {{end}} {{if eq $Field.ReturnType "int"}} @@ -104,7 +105,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval result := {{$Return}} {{end}} - {{if eq $Field.GetArrayPrefix ""}} + {{if not $Field.GetArrayPrefix}} results = append(results, result) {{else}} results = append(results, result...) @@ -113,32 +114,32 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() } - {{- if not $Mock }} ctx.Cache[field] = unsafe.Pointer(&results) - {{end}} return results }, {{- else}} {{- $ReturnType := $Field.ReturnType}} EvalFnc: func(ctx *eval.Context) {{$Field.GetArrayPrefix}}{{$ReturnType}} { - {{$Return := $Field.Name | printf "(*Event)(ctx.Object).%s"}} + ev := ctx.Event.(*Event) + + {{$Return := $Field.Name | printf "ev.%s"}} {{$Checks := $Field | GetChecks $.AllFields}} {{range $Check := $Checks}} - {{$Check = $Check | printf "(*Event)(ctx.Object).%s"}} + {{$Check = $Check | printf "ev.%s"}} if !{{$Check}}() { return {{$Field.GetDefaultReturnValue}} } {{end}} - {{- if and (ne $Field.Handler "") (not $Mock)}} + {{- if $Field.Handler}} {{$Ptr := "&"}} {{$Parent := index $.AllFields $Field.Prefix}} {{- if $Parent.IsOrigTypePtr}} {{$Ptr = ""}} {{end}} - {{$Return = print "(*Event)(ctx.Object)." $Field.Handler "(" $Ptr "(*Event)(ctx.Object)." $Field.Prefix ")"}} + {{$Return = print "ev.FieldHandlers." $Field.Handler "(ev, " $Ptr "ev." $Field.Prefix ")"}} {{end}} {{- if eq $ReturnType "int"}} @@ -186,7 +187,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return nil, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFields() []eval.Field { +func (ev *Event) GetFields() []eval.Field { return []eval.Field{ {{range $Name, $Field := .Fields}} "{{$Name}}", @@ -194,14 +195,14 @@ func (e *Event) GetFields() []eval.Field { } } -func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { +func (ev *Event) GetFieldValue(field eval.Field) (interface{}, error) { switch field { {{range $Name, $Field := .Fields}} case "{{$Name}}": {{if $Field.Iterator}} var values []{{$Field.ReturnType}} - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &{{$Field.Iterator.ReturnType}}{} ptr := iterator.Front(ctx) @@ -217,15 +218,16 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { {{$SubName := $Field.Iterator.Name | TrimPrefix $Field.Name}} {{$Return := $SubName | printf "element%s"}} - {{if and (ne $Field.Handler "") (not $Mock) }} + {{if $Field.Handler}} {{$SubName = $Field.Iterator.Name | TrimPrefix $Field.Prefix}} {{$Handler := $Field.Iterator.Name | TrimPrefix $Field.Handler}} - {{$Return = print "(*Event)(ctx.Object)." $Handler "(&element" $SubName ")"}} + {{$Return = print "ev.FieldHandlers." $Handler "(ev, &element" $SubName ")"}} {{end}} {{if $Field.IsLength}} {{$Return = ".length" | TrimSuffix $Return}} {{end}} + {{if and (eq $Field.ReturnType "int") (ne $Field.OrigType "int")}} result := int({{$Return}}) {{else}} @@ -236,7 +238,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { {{end}} {{end}} - {{if eq $Field.GetArrayPrefix ""}} + {{if not $Field.GetArrayPrefix}} values = append(values, result) {{else}} values = append(values, result...) @@ -247,18 +249,18 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil {{else}} - {{$Return := $Field.Name | printf "e.%s"}} + {{$Return := $Field.Name | printf "ev.%s"}} {{if $Field.IsLength}} - {{$Return = ".length" | TrimSuffix $Field.Name | printf "len(e.%s)"}} + {{$Return = ".length" | TrimSuffix $Field.Name | printf "len(ev.%s)"}} {{end}} - {{if and (ne $Field.Handler "") (not $Mock)}} + {{if $Field.Handler}} {{$Ptr := "&"}} {{$Parent := index $.AllFields $Field.Prefix}} {{- if $Parent.IsOrigTypePtr}} {{$Ptr = ""}} {{end}} - {{$Return = print "e." $Field.Handler "(" $Ptr "e." $Field.Prefix ")"}} + {{$Return = print "ev.FieldHandlers." $Field.Handler "(ev, " $Ptr "ev." $Field.Prefix ")"}} {{end}} {{if eq $Field.ReturnType "string"}} @@ -289,7 +291,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return nil, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { +func (ev *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { switch field { {{range $Name, $Field := .Fields}} case "{{$Name}}": @@ -300,7 +302,7 @@ func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { return "", &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { +func (ev *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { switch field { {{range $Name, $Field := .Fields}} @@ -320,10 +322,10 @@ func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { return reflect.Invalid, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { +func (ev *Event) SetFieldValue(field eval.Field, value interface{}) error { switch field { {{range $Name, $Field := .Fields}} - {{$FieldName := $Field.Name | printf "e.%s"}} + {{$FieldName := $Field.Name | printf "ev.%s"}} case "{{$Name}}": {{- $Field | NewField $.AllFields}} {{- if eq $Field.OrigType "string"}} @@ -378,4 +380,4 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { } return &eval.ErrFieldNotFound{Field: field} -} +} \ No newline at end of file diff --git a/pkg/security/secl/compiler/generators/accessors/common/types.go b/pkg/security/secl/compiler/generators/accessors/common/types.go index 5180857d9f124..50af7eda4360b 100644 --- a/pkg/security/secl/compiler/generators/accessors/common/types.go +++ b/pkg/security/secl/compiler/generators/accessors/common/types.go @@ -107,6 +107,19 @@ func (sf *StructField) GetDefaultReturnValue() string { } } +// GetDefaultScalarReturnValue returns default scalar value for the given return type +func (sf *StructField) GetDefaultScalarReturnValue() string { + if sf.ReturnType == "int" { + return "0" + } else if sf.ReturnType == "bool" { + return "false" + } else if sf.ReturnType == "net.IPNet" { + return "net.IPNet{}" + } else { + return `""` + } +} + // GetArrayPrefix returns the array prefix of this field func (sf *StructField) GetArrayPrefix() string { if sf.IsArray { diff --git a/pkg/security/secl/compiler/generators/accessors/fields_resolver.tmpl b/pkg/security/secl/compiler/generators/accessors/field_handlers.tmpl similarity index 83% rename from pkg/security/secl/compiler/generators/accessors/fields_resolver.tmpl rename to pkg/security/secl/compiler/generators/accessors/field_handlers.tmpl index 8c1fe630e0d3d..07d3f393ce7f2 100644 --- a/pkg/security/secl/compiler/generators/accessors/fields_resolver.tmpl +++ b/pkg/security/secl/compiler/generators/accessors/field_handlers.tmpl @@ -9,17 +9,13 @@ package {{.Name}} -import ( - -) - // ResolveFields resolves all the fields associate to the event type. Context fields are automatically resolved. func (ev *Event) ResolveFields(forADs bool) { {{ $uniqueResolvers := dict }} // resolve context fields that are not related to any event type {{- range $Key, $Field := .Fields}} {{- if and (eq $Field.Event "*") }} - {{ $resolver := $Field | GetFieldResolver $.AllFields }} + {{ $resolver := $Field | GetFieldHandler $.AllFields }} {{ if and (ne $resolver "") (not (hasKey $uniqueResolvers $resolver)) }} {{$Checks := $Field | GetChecks $.AllFields}} {{if $Checks}} @@ -38,7 +34,7 @@ func (ev *Event) ResolveFields(forADs bool) { {{ $_ := set $uniqueResolvers $resolver "" }} } {{else}} - {{ $resolver := $Field | GetFieldResolver $.AllFields }} + {{ $resolver := $Field | GetFieldHandler $.AllFields }} {{ if and (ne $resolver "") (not (hasKey $uniqueResolvers $resolver)) }} {{ $resolver | FieldADPrint $Field }} {{ $_ := set $uniqueResolvers $resolver "" }} @@ -55,7 +51,7 @@ func (ev *Event) ResolveFields(forADs bool) { case "{{$Name}}": {{- range $Key, $FieldName := $EventType.Fields }} {{- $Field := index $.Fields $FieldName }} - {{ $resolver := $Field | GetFieldResolver $.AllFields }} + {{ $resolver := $Field | GetFieldHandler $.AllFields }} {{ if ne $resolver "" }} {{$Checks := $Field | GetChecks $.AllFields}} {{if $Checks}} @@ -81,3 +77,20 @@ func (ev *Event) ResolveFields(forADs bool) { {{end}} } } + +type FieldHandlers interface { + {{$Handlers := .Fields | GetHandlers}} + {{range $Proto, $Impl := $Handlers}} + {{$Proto}} + {{end}} + + // custom handlers not tied to any fields + ExtraFieldHandlers +} + +type DefaultFieldHandlers struct {} + +{{$Handlers := .Fields | GetHandlers}} +{{range $Proto, $Impl := $Handlers}} + func (dfh *DefaultFieldHandlers) {{$Proto}} {{$Impl}} +{{end}} \ No newline at end of file diff --git a/pkg/security/secl/go.mod b/pkg/security/secl/go.mod index 54b9a8393b476..071316ae49c71 100644 --- a/pkg/security/secl/go.mod +++ b/pkg/security/secl/go.mod @@ -16,7 +16,7 @@ require ( github.com/stretchr/testify v1.8.1 golang.org/x/exp v0.0.0-20221114191408-850992195362 golang.org/x/sys v0.3.0 - golang.org/x/tools v0.3.0 + golang.org/x/tools v0.4.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/pkg/security/secl/go.sum b/pkg/security/secl/go.sum index 374e3054dd974..adcbc71a3a344 100644 --- a/pkg/security/secl/go.sum +++ b/pkg/security/secl/go.sum @@ -97,8 +97,8 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/pkg/security/secl/model/accessors.go b/pkg/security/secl/model/accessors.go index 45acc1945621b..2a7735774e02c 100644 --- a/pkg/security/secl/model/accessors.go +++ b/pkg/security/secl/model/accessors.go @@ -38,6 +38,7 @@ func (m *Model) GetEventTypes() []eval.EventType { eval.EventType("load_module"), eval.EventType("mkdir"), eval.EventType("mmap"), + eval.EventType("mount"), eval.EventType("mprotect"), eval.EventType("open"), eval.EventType("ptrace"), @@ -60,7 +61,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "async": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Async + ev := ctx.Event.(*Event) + return ev.Async }, Field: field, Weight: eval.FunctionWeight, @@ -68,7 +70,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bind.addr.family": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.AddrFamily) + ev := ctx.Event.(*Event) + return int(ev.Bind.AddrFamily) }, Field: field, Weight: eval.FunctionWeight, @@ -76,7 +79,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bind.addr.ip": return &eval.CIDREvaluator{ EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).Bind.Addr.IPNet + ev := ctx.Event.(*Event) + return ev.Bind.Addr.IPNet }, Field: field, Weight: eval.FunctionWeight, @@ -84,7 +88,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bind.addr.port": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.Addr.Port) + ev := ctx.Event.(*Event) + return int(ev.Bind.Addr.Port) }, Field: field, Weight: eval.FunctionWeight, @@ -92,7 +97,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bind.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Bind.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -100,7 +106,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.cmd": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Cmd) + ev := ctx.Event.(*Event) + return int(ev.BPF.Cmd) }, Field: field, Weight: eval.FunctionWeight, @@ -108,7 +115,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.map.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Map.Name + ev := ctx.Event.(*Event) + return ev.BPF.Map.Name }, Field: field, Weight: eval.FunctionWeight, @@ -116,7 +124,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.map.type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Map.Type) + ev := ctx.Event.(*Event) + return int(ev.BPF.Map.Type) }, Field: field, Weight: eval.FunctionWeight, @@ -124,7 +133,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.prog.attach_type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Program.AttachType) + ev := ctx.Event.(*Event) + return int(ev.BPF.Program.AttachType) }, Field: field, Weight: eval.FunctionWeight, @@ -132,19 +142,21 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.prog.helpers": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - result := make([]int, len((*Event)(ctx.Object).BPF.Program.Helpers)) - for i, v := range (*Event)(ctx.Object).BPF.Program.Helpers { + ev := ctx.Event.(*Event) + result := make([]int, len(ev.BPF.Program.Helpers)) + for i, v := range ev.BPF.Program.Helpers { result[i] = int(v) } return result }, Field: field, - Weight: eval.HandlerWeight, + Weight: eval.FunctionWeight, }, nil case "bpf.prog.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Program.Name + ev := ctx.Event.(*Event) + return ev.BPF.Program.Name }, Field: field, Weight: eval.FunctionWeight, @@ -152,7 +164,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.prog.tag": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Program.Tag + ev := ctx.Event.(*Event) + return ev.BPF.Program.Tag }, Field: field, Weight: eval.FunctionWeight, @@ -160,7 +173,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.prog.type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Program.Type) + ev := ctx.Event.(*Event) + return int(ev.BPF.Program.Type) }, Field: field, Weight: eval.FunctionWeight, @@ -168,7 +182,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.BPF.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -176,7 +191,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "capset.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Capset.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.Capset.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -184,7 +200,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "capset.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Capset.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.Capset.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -192,7 +209,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -200,7 +218,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.Mode) + ev := ctx.Event.(*Event) + return int(ev.Chmod.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -208,7 +227,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.destination.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.Mode) + ev := ctx.Event.(*Event) + return int(ev.Chmod.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -216,7 +236,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chmod.File) }, Field: field, Weight: eval.HandlerWeight, @@ -224,7 +245,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -232,7 +254,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chmod.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -240,7 +263,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Chmod.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chmod.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -248,7 +272,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -256,7 +281,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -264,7 +290,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -272,7 +299,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -281,7 +309,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File) }, Field: field, Weight: eval.HandlerWeight, @@ -290,7 +319,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Chmod.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -299,7 +329,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File) }, Field: field, Weight: eval.HandlerWeight, @@ -308,7 +339,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Chmod.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -316,7 +348,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Chmod.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -324,7 +357,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -332,7 +366,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chmod.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -340,7 +375,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Chmod.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -348,7 +384,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -356,7 +393,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.destination.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.GID) + ev := ctx.Event.(*Event) + return int(ev.Chown.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -364,7 +402,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.destination.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveChownGID(ev, &ev.Chown) }, Field: field, Weight: eval.HandlerWeight, @@ -372,7 +411,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.destination.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.UID) + ev := ctx.Event.(*Event) + return int(ev.Chown.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -380,7 +420,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.destination.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveChownUID(ev, &ev.Chown) }, Field: field, Weight: eval.HandlerWeight, @@ -388,7 +429,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chown.File) }, Field: field, Weight: eval.HandlerWeight, @@ -396,7 +438,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -404,7 +447,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chown.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -412,7 +456,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Chown.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chown.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -420,7 +465,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -428,7 +474,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -436,7 +483,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -444,7 +492,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -453,7 +502,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File) }, Field: field, Weight: eval.HandlerWeight, @@ -462,7 +512,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Chown.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -471,7 +522,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File) }, Field: field, Weight: eval.HandlerWeight, @@ -480,7 +532,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Chown.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -488,7 +541,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Chown.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -496,7 +550,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -504,7 +559,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chown.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -512,7 +568,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Chown.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -520,7 +577,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ContainerContext.ID + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext) }, Field: field, Weight: eval.HandlerWeight, @@ -528,7 +586,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "container.tags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ContainerContext.Tags + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveContainerTags(ev, &ev.ContainerContext) }, Field: field, Weight: 9999 * eval.HandlerWeight, @@ -536,7 +595,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.ID) + ev := ctx.Event.(*Event) + return int(ev.DNS.ID) }, Field: field, Weight: eval.FunctionWeight, @@ -544,7 +604,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.question.class": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Class) + ev := ctx.Event.(*Event) + return int(ev.DNS.Class) }, Field: field, Weight: eval.FunctionWeight, @@ -552,7 +613,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.question.count": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Count) + ev := ctx.Event.(*Event) + return int(ev.DNS.Count) }, Field: field, Weight: eval.FunctionWeight, @@ -560,7 +622,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.question.length": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Size) + ev := ctx.Event.(*Event) + return int(ev.DNS.Size) }, Field: field, Weight: eval.FunctionWeight, @@ -569,7 +632,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: eval.DNSNameCmp, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).DNS.Name + ev := ctx.Event.(*Event) + return ev.DNS.Name }, Field: field, Weight: eval.FunctionWeight, @@ -578,7 +642,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: eval.DNSNameCmp, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).DNS.Name) + ev := ctx.Event.(*Event) + return len(ev.DNS.Name) }, Field: field, Weight: eval.FunctionWeight, @@ -586,7 +651,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.question.type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Type) + ev := ctx.Event.(*Event) + return int(ev.DNS.Type) }, Field: field, Weight: eval.FunctionWeight, @@ -594,7 +660,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exec.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -602,7 +669,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -610,7 +678,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -618,7 +687,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -626,7 +696,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exec.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -634,7 +705,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exec.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -642,7 +714,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -650,7 +723,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -658,7 +732,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Comm + ev := ctx.Event.(*Event) + return ev.Exec.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -666,7 +741,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.Exec.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -674,7 +750,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -682,7 +759,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exec.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -690,7 +768,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -698,7 +777,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -706,7 +786,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -714,7 +795,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -722,7 +804,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -730,7 +813,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -738,7 +822,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -746,7 +831,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.CTime) + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return 0 + } + return int(ev.Exec.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -754,7 +843,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.FileEvent.Filesystem + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -762,7 +855,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.GID) + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return 0 + } + return int(ev.Exec.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -770,7 +867,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Group + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -778,7 +879,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return false + } + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -786,7 +891,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Inode) + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return 0 + } + return int(ev.Exec.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -794,7 +903,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Mode) + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return 0 + } + return int(ev.Exec.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -802,7 +915,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.MTime) + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return 0 + } + return int(ev.Exec.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -810,7 +927,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.MountID) + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return 0 + } + return int(ev.Exec.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -819,7 +940,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.FileEvent.BasenameStr + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -828,7 +953,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exec.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -837,7 +963,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.FileEvent.PathnameStr + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -846,7 +976,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exec.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -854,7 +985,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Mode) + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return 0 + } + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exec.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -862,7 +997,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.UID) + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return 0 + } + return int(ev.Exec.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -870,7 +1009,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.User + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -878,7 +1021,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -886,7 +1030,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -894,7 +1039,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -902,7 +1048,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -910,7 +1057,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -918,7 +1066,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -926,10 +1075,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -937,10 +1087,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -948,10 +1099,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -959,10 +1111,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -970,10 +1123,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -981,10 +1135,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -992,10 +1147,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1003,10 +1159,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1014,10 +1171,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1026,10 +1184,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1038,7 +1197,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1047,10 +1207,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1059,7 +1220,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1067,10 +1229,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1078,10 +1241,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1089,10 +1253,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1100,7 +1265,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.Exec.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -1108,7 +1274,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.IsThread + ev := ctx.Event.(*Event) + return ev.Exec.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -1116,7 +1283,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -1124,7 +1292,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -1132,7 +1301,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -1140,7 +1310,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.TTYName + ev := ctx.Event.(*Event) + return ev.Exec.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -1148,7 +1319,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1156,7 +1328,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -1164,7 +1337,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exit.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -1172,7 +1346,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1180,7 +1355,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1188,7 +1364,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1196,7 +1373,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exit.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -1204,7 +1382,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exit.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -1212,7 +1391,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -1220,7 +1400,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -1228,7 +1409,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.cause": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Cause) + ev := ctx.Event.(*Event) + return int(ev.Exit.Cause) }, Field: field, Weight: eval.FunctionWeight, @@ -1236,7 +1418,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.code": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Code) + ev := ctx.Event.(*Event) + return int(ev.Exit.Code) }, Field: field, Weight: eval.FunctionWeight, @@ -1244,7 +1427,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Comm + ev := ctx.Event.(*Event) + return ev.Exit.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -1252,7 +1436,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.Exit.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -1260,7 +1445,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -1268,7 +1454,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exit.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -1276,7 +1463,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -1284,7 +1472,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -1292,7 +1481,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1300,7 +1490,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1308,7 +1499,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1316,7 +1508,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -1324,7 +1517,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -1332,7 +1526,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.CTime) + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return 0 + } + return int(ev.Exit.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1340,7 +1538,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.FileEvent.Filesystem + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1348,7 +1550,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.GID) + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return 0 + } + return int(ev.Exit.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1356,7 +1562,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Group + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1364,7 +1574,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return false + } + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1372,7 +1586,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Inode) + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return 0 + } + return int(ev.Exit.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -1380,7 +1598,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Mode) + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return 0 + } + return int(ev.Exit.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1388,7 +1610,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.MTime) + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return 0 + } + return int(ev.Exit.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1396,7 +1622,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.MountID) + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return 0 + } + return int(ev.Exit.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1405,7 +1635,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.FileEvent.BasenameStr + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1414,7 +1648,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exit.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1423,7 +1658,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.FileEvent.PathnameStr + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1432,7 +1671,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exit.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1440,7 +1680,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Mode) + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return 0 + } + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exit.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1448,7 +1692,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.UID) + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return 0 + } + return int(ev.Exit.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1456,7 +1704,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.User + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1464,7 +1716,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -1472,7 +1725,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -1480,7 +1734,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -1488,7 +1743,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -1496,7 +1752,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1504,7 +1761,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -1512,10 +1770,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1523,10 +1782,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1534,10 +1794,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1545,10 +1806,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1556,10 +1818,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1567,10 +1830,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -1578,10 +1842,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1589,10 +1854,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1600,10 +1866,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1612,10 +1879,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1624,7 +1892,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1633,10 +1902,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1645,7 +1915,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1653,10 +1924,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1664,10 +1936,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1675,10 +1948,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1686,7 +1960,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.Exit.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -1694,7 +1969,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.IsThread + ev := ctx.Event.(*Event) + return ev.Exit.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -1702,7 +1978,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -1710,7 +1987,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -1718,7 +1996,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -1726,7 +2005,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.TTYName + ev := ctx.Event.(*Event) + return ev.Exit.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -1734,7 +2014,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1742,7 +2023,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -1750,7 +2032,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1758,7 +2041,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1766,7 +2050,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Target) }, Field: field, Weight: eval.HandlerWeight, @@ -1774,7 +2059,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1782,7 +2068,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Target.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1790,7 +2077,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Link.Target.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Target.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1798,7 +2086,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -1806,7 +2095,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1814,7 +2104,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1822,7 +2113,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1831,7 +2123,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target) }, Field: field, Weight: eval.HandlerWeight, @@ -1840,7 +2133,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Link.Target.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target)) }, Field: field, Weight: eval.HandlerWeight, @@ -1849,7 +2143,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target) }, Field: field, Weight: eval.HandlerWeight, @@ -1858,7 +2153,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Link.Target.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target)) }, Field: field, Weight: eval.HandlerWeight, @@ -1866,7 +2162,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Link.Target.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1874,7 +2171,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1882,7 +2180,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Target.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1890,7 +2189,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Source) }, Field: field, Weight: eval.HandlerWeight, @@ -1898,7 +2198,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1906,7 +2207,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Source.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1914,7 +2216,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Link.Source.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Source.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1922,7 +2225,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -1930,7 +2234,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1938,7 +2243,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1946,7 +2252,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1955,7 +2262,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source) }, Field: field, Weight: eval.HandlerWeight, @@ -1964,7 +2272,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Link.Source.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source)) }, Field: field, Weight: eval.HandlerWeight, @@ -1973,7 +2282,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source) }, Field: field, Weight: eval.HandlerWeight, @@ -1982,7 +2292,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Link.Source.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source)) }, Field: field, Weight: eval.HandlerWeight, @@ -1990,7 +2301,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Link.Source.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1998,7 +2310,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2006,7 +2319,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Source.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2014,7 +2328,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Link.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2022,7 +2337,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2030,7 +2346,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.LoadModule.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2038,7 +2355,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -2046,7 +2364,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.LoadModule.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2054,7 +2373,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).LoadModule.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.LoadModule.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2062,7 +2382,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2070,7 +2391,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2078,7 +2400,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2086,7 +2409,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2095,7 +2419,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2104,7 +2429,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).LoadModule.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2113,7 +2439,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2122,7 +2449,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).LoadModule.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2130,7 +2458,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.LoadModule.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2138,7 +2467,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2146,7 +2476,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.LoadModule.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2154,7 +2485,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.loaded_from_memory": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).LoadModule.LoadedFromMemory + ev := ctx.Event.(*Event) + return ev.LoadModule.LoadedFromMemory }, Field: field, Weight: eval.FunctionWeight, @@ -2162,7 +2494,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.Name + ev := ctx.Event.(*Event) + return ev.LoadModule.Name }, Field: field, Weight: eval.FunctionWeight, @@ -2170,7 +2503,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2178,7 +2512,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2186,7 +2521,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.Mode) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2194,7 +2530,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.destination.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.Mode) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2202,7 +2539,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Mkdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2210,7 +2548,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -2218,7 +2557,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Mkdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2226,7 +2566,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Mkdir.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Mkdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2234,7 +2575,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2242,7 +2584,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2250,7 +2593,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2258,7 +2602,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2267,7 +2612,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2276,7 +2622,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Mkdir.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2285,7 +2632,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2294,7 +2642,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Mkdir.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2302,7 +2651,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Mkdir.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2310,7 +2660,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2318,7 +2669,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Mkdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2326,7 +2678,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2334,7 +2687,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2342,7 +2696,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.MMap.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2350,7 +2705,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -2358,7 +2714,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.MMap.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2366,7 +2723,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).MMap.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.MMap.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2374,7 +2732,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2382,7 +2741,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2390,7 +2750,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2398,7 +2759,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2407,7 +2769,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2416,7 +2779,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).MMap.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2425,7 +2789,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2434,7 +2799,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).MMap.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2442,7 +2808,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.MMap.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2450,7 +2817,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2458,7 +2826,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.MMap.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2466,7 +2835,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.flags": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MMap.Flags + ev := ctx.Event.(*Event) + return ev.MMap.Flags }, Field: field, Weight: eval.FunctionWeight, @@ -2474,7 +2844,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.protection": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MMap.Protection + ev := ctx.Event.(*Event) + return ev.MMap.Protection }, Field: field, Weight: eval.FunctionWeight, @@ -2482,15 +2853,53 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.MMap.SyscallEvent.Retval) + }, + Field: field, + Weight: eval.FunctionWeight, + }, nil + case "mount.fs_type": + return &eval.StringEvaluator{ + EvalFnc: func(ctx *eval.Context) string { + ev := ctx.Event.(*Event) + return ev.Mount.Mount.FSType + }, + Field: field, + Weight: eval.FunctionWeight, + }, nil + case "mount.mountpoint.path": + return &eval.StringEvaluator{ + EvalFnc: func(ctx *eval.Context) string { + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveMountPointPath(ev, &ev.Mount) + }, + Field: field, + Weight: eval.HandlerWeight, + }, nil + case "mount.retval": + return &eval.IntEvaluator{ + EvalFnc: func(ctx *eval.Context) int { + ev := ctx.Event.(*Event) + return int(ev.Mount.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, }, nil + case "mount.source.path": + return &eval.StringEvaluator{ + EvalFnc: func(ctx *eval.Context) string { + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveMountSourcePath(ev, &ev.Mount) + }, + Field: field, + Weight: eval.HandlerWeight, + }, nil case "mprotect.req_protection": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MProtect.ReqProtection + ev := ctx.Event.(*Event) + return ev.MProtect.ReqProtection }, Field: field, Weight: eval.FunctionWeight, @@ -2498,7 +2907,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mprotect.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MProtect.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.MProtect.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2506,7 +2916,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mprotect.vm_protection": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MProtect.VMProtection + ev := ctx.Event.(*Event) + return ev.MProtect.VMProtection }, Field: field, Weight: eval.FunctionWeight, @@ -2514,7 +2925,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.destination.ip": return &eval.CIDREvaluator{ EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).NetworkContext.Destination.IPNet + ev := ctx.Event.(*Event) + return ev.NetworkContext.Destination.IPNet }, Field: field, Weight: eval.FunctionWeight, @@ -2522,7 +2934,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.destination.port": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Destination.Port) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.Destination.Port) }, Field: field, Weight: eval.FunctionWeight, @@ -2530,7 +2943,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.device.ifindex": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Device.IfIndex) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.Device.IfIndex) }, Field: field, Weight: eval.FunctionWeight, @@ -2538,7 +2952,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.device.ifname": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).NetworkContext.Device.IfName + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveNetworkDeviceIfName(ev, &ev.NetworkContext.Device) }, Field: field, Weight: eval.HandlerWeight, @@ -2546,7 +2961,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.l3_protocol": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.L3Protocol) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.L3Protocol) }, Field: field, Weight: eval.FunctionWeight, @@ -2554,7 +2970,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.l4_protocol": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.L4Protocol) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.L4Protocol) }, Field: field, Weight: eval.FunctionWeight, @@ -2562,7 +2979,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.size": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Size) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.Size) }, Field: field, Weight: eval.FunctionWeight, @@ -2570,7 +2988,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.source.ip": return &eval.CIDREvaluator{ EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).NetworkContext.Source.IPNet + ev := ctx.Event.(*Event) + return ev.NetworkContext.Source.IPNet }, Field: field, Weight: eval.FunctionWeight, @@ -2578,7 +2997,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.source.port": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Source.Port) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.Source.Port) }, Field: field, Weight: eval.FunctionWeight, @@ -2586,7 +3006,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2594,7 +3015,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.Mode) + ev := ctx.Event.(*Event) + return int(ev.Open.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2602,7 +3024,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Open.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2610,7 +3033,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -2618,7 +3042,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Open.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2626,7 +3051,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Open.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Open.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2634,7 +3060,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2642,7 +3069,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2650,7 +3078,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2658,7 +3087,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2667,7 +3097,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2676,7 +3107,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Open.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2685,7 +3117,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2694,7 +3127,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Open.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2702,7 +3136,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Open.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2710,7 +3145,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2718,7 +3154,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Open.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2726,7 +3163,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.flags": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.Flags) + ev := ctx.Event.(*Event) + return int(ev.Open.Flags) }, Field: field, Weight: eval.FunctionWeight, @@ -2734,7 +3172,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Open.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2742,15 +3181,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.args": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -2758,15 +3204,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2774,15 +3227,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2790,15 +3250,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.args_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2806,15 +3273,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -2822,15 +3296,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.argv0": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -2838,6 +3319,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.cap_effective": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2847,6 +3333,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2854,6 +3341,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.cap_permitted": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2863,6 +3355,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2870,6 +3363,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.comm": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2879,6 +3377,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2886,6 +3385,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.container.id": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2895,6 +3399,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2902,6 +3407,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.cookie": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2911,6 +3421,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2918,15 +3429,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.created_at": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2934,6 +3452,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.egid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2943,6 +3466,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2950,6 +3474,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.egroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2959,6 +3488,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2966,15 +3496,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2982,15 +3519,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -2998,15 +3542,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.envs_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3014,6 +3565,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.euid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3023,6 +3579,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3030,6 +3587,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.euser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3039,6 +3601,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3046,15 +3609,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3062,15 +3636,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.Filesystem + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3078,15 +3664,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3094,15 +3691,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.FileFields.Group + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3110,15 +3719,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, false) + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3126,15 +3747,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3142,15 +3774,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3158,15 +3801,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3174,15 +3828,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3191,15 +3856,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.BasenameStr + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3208,15 +3885,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3225,15 +3909,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.PathnameStr + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3242,15 +3938,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3258,15 +3961,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3274,15 +3989,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3290,15 +4016,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.FileFields.User + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3306,6 +4044,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.fsgid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3315,6 +4058,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3322,6 +4066,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.fsgroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3331,6 +4080,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3338,6 +4088,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.fsuid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3347,6 +4102,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3354,6 +4110,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.fsuser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3363,6 +4124,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3370,6 +4132,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3379,6 +4146,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3386,6 +4154,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3395,6 +4168,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3402,18 +4176,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3421,18 +4203,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3440,18 +4231,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3459,18 +4258,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3478,18 +4286,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []bool{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, false) + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3497,18 +4314,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3516,18 +4341,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3535,18 +4368,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3554,18 +4395,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3574,18 +4423,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3594,15 +4452,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3611,18 +4476,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3631,15 +4505,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3647,18 +4528,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3666,18 +4556,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3685,18 +4583,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3704,6 +4611,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.is_kworker": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3713,6 +4625,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3720,6 +4633,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.is_thread": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3729,6 +4647,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3736,6 +4655,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.pid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3745,6 +4669,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3752,6 +4677,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.ppid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3761,6 +4691,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3768,6 +4699,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.tid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3777,6 +4713,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3784,6 +4721,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.tty_name": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3793,6 +4735,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3800,6 +4743,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3809,6 +4757,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3816,6 +4765,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3825,6 +4779,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -3832,7 +4787,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.ProcessContext.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -3840,7 +4796,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -3848,7 +4805,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -3856,7 +4814,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -3864,7 +4823,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.ProcessContext.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -3872,7 +4832,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.ProcessContext.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -3880,7 +4841,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -3888,7 +4850,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -3896,7 +4859,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Comm + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -3904,7 +4868,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -3912,7 +4877,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -3920,7 +4886,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.ProcessContext.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -3928,7 +4895,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -3936,7 +4904,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -3944,7 +4913,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -3952,7 +4922,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -3960,7 +4931,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -3968,7 +4940,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -3976,7 +4949,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -3984,7 +4958,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.CTime) + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return 0 + } + return int(ev.ProcessContext.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -3992,7 +4970,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.Filesystem + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4000,7 +4982,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.GID) + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return 0 + } + return int(ev.ProcessContext.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4008,7 +4994,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Group + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4016,7 +5006,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return false + } + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4024,7 +5018,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Inode) + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return 0 + } + return int(ev.ProcessContext.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -4032,7 +5030,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Mode) + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return 0 + } + return int(ev.ProcessContext.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -4040,7 +5042,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.MTime) + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return 0 + } + return int(ev.ProcessContext.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4048,7 +5054,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.MountID) + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return 0 + } + return int(ev.ProcessContext.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -4057,7 +5067,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.BasenameStr + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4066,7 +5080,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4075,7 +5090,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.PathnameStr + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4084,7 +5103,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4092,7 +5112,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Mode) + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return 0 + } + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -4100,7 +5124,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.UID) + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return 0 + } + return int(ev.ProcessContext.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -4108,7 +5136,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.User + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4116,7 +5148,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -4124,7 +5157,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -4132,7 +5166,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -4140,7 +5175,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -4148,7 +5184,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4156,7 +5193,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -4164,10 +5202,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4175,10 +5214,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4186,10 +5226,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4197,10 +5238,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4208,10 +5250,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4219,10 +5262,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -4230,10 +5274,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -4241,10 +5286,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4252,10 +5298,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -4264,10 +5311,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4276,7 +5324,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4285,10 +5334,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4297,7 +5347,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4305,10 +5356,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -4316,10 +5368,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -4327,10 +5380,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4338,7 +5392,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -4346,7 +5401,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.IsThread + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -4354,10 +5410,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Args + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.ProcessContext.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4365,10 +5422,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4376,10 +5434,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4387,10 +5446,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.ArgsTruncated + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4398,10 +5458,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.ProcessContext.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4409,10 +5470,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Argv0 + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.ProcessContext.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4420,10 +5482,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.CapEffective) + return int(ev.ProcessContext.Parent.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -4431,10 +5494,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.CapPermitted) + return int(ev.ProcessContext.Parent.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -4442,10 +5506,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Comm + return ev.ProcessContext.Parent.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -4453,10 +5518,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.ContainerID + return ev.ProcessContext.Parent.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -4464,10 +5530,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Cookie) + return int(ev.ProcessContext.Parent.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -4475,10 +5542,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.CreatedAt) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.ProcessContext.Parent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4486,10 +5554,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.EGID) + return int(ev.ProcessContext.Parent.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -4497,10 +5566,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.EGroup + return ev.ProcessContext.Parent.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -4508,10 +5578,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Envp + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4519,10 +5590,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Envs + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4530,10 +5602,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.EnvsTruncated + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4541,10 +5614,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.EUID) + return int(ev.ProcessContext.Parent.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -4552,10 +5626,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.EUser + return ev.ProcessContext.Parent.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -4563,10 +5638,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { + return 0 + } + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.CTime) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4574,10 +5653,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { + return "" + } + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4585,10 +5668,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.GID) + if !ev.ProcessContext.Parent.IsNotKworker() { + return 0 + } + return int(ev.ProcessContext.Parent.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4596,10 +5683,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { + return "" + } + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4607,10 +5698,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.InUpperLayer + if !ev.ProcessContext.Parent.IsNotKworker() { + return false + } + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4618,10 +5713,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { + return 0 + } + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Inode) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -4629,10 +5728,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Mode) + if !ev.ProcessContext.Parent.IsNotKworker() { + return 0 + } + return int(ev.ProcessContext.Parent.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -4640,10 +5743,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { + return 0 + } + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.MTime) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4651,10 +5758,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { + return 0 + } + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.MountID) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -4663,10 +5774,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.BasenameStr + if !ev.ProcessContext.Parent.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4675,7 +5790,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4684,10 +5800,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { + return "" + } + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4696,7 +5816,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4704,10 +5825,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Mode) + if !ev.ProcessContext.Parent.IsNotKworker() { + return 0 + } + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Parent.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -4715,10 +5840,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { + return 0 + } + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.UID) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -4726,10 +5855,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.User + if !ev.ProcessContext.Parent.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4737,10 +5870,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSGID) + return int(ev.ProcessContext.Parent.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -4748,10 +5882,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSGroup + return ev.ProcessContext.Parent.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -4759,10 +5894,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSUID) + return int(ev.ProcessContext.Parent.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -4770,10 +5906,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSUser + return ev.ProcessContext.Parent.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -4781,10 +5918,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.GID) + return int(ev.ProcessContext.Parent.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4792,10 +5930,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.Group + return ev.ProcessContext.Parent.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -4803,13 +5942,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4817,13 +5957,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4831,13 +5972,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4845,13 +5987,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4859,13 +6002,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4873,13 +6017,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -4887,13 +6032,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -4901,13 +6047,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4915,13 +6062,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -4930,13 +6078,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4945,7 +6094,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4954,13 +6104,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4969,7 +6120,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4977,13 +6129,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -4991,13 +6144,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -5005,13 +6159,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -5019,10 +6174,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.PIDContext.IsKworker + return ev.ProcessContext.Parent.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -5030,10 +6186,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.IsThread + return ev.ProcessContext.Parent.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -5041,10 +6198,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.PIDContext.Pid) + return int(ev.ProcessContext.Parent.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -5052,10 +6210,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.PPid) + return int(ev.ProcessContext.Parent.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -5063,10 +6222,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.PIDContext.Tid) + return int(ev.ProcessContext.Parent.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -5074,10 +6234,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.TTYName + return ev.ProcessContext.Parent.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -5085,10 +6246,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.UID) + return int(ev.ProcessContext.Parent.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -5096,10 +6258,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.User + return ev.ProcessContext.Parent.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -5107,7 +6270,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -5115,7 +6279,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -5123,7 +6288,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -5131,7 +6297,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.TTYName + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -5139,7 +6306,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -5147,7 +6315,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -5155,7 +6324,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.request": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Request) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Request) }, Field: field, Weight: eval.FunctionWeight, @@ -5163,7 +6333,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.PTrace.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -5171,15 +6342,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.args": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -5187,15 +6365,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5203,15 +6388,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5219,15 +6411,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.args_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5235,15 +6434,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -5251,15 +6457,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.argv0": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -5267,6 +6480,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.cap_effective": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5276,6 +6494,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5283,6 +6502,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.cap_permitted": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5292,6 +6516,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5299,6 +6524,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.comm": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5308,6 +6538,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5315,6 +6546,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.container.id": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5324,6 +6560,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5331,6 +6568,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.cookie": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5340,6 +6582,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5347,15 +6590,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.created_at": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5363,6 +6613,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.egid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5372,6 +6627,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5379,6 +6635,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.egroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5388,6 +6649,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5395,15 +6657,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5411,15 +6680,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5427,15 +6703,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.envs_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5443,6 +6726,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.euid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5452,6 +6740,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5459,6 +6748,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.euser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5468,6 +6762,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5475,15 +6770,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5491,15 +6797,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.Filesystem + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5507,15 +6825,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5523,15 +6852,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.FileFields.Group + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5539,15 +6880,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, false) + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5555,15 +6908,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5571,15 +6935,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5587,15 +6962,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5603,15 +6989,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5620,15 +7017,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.BasenameStr + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5637,15 +7046,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5654,15 +7070,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.PathnameStr + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5671,15 +7099,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5687,15 +7122,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5703,15 +7150,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5719,15 +7177,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.FileFields.User + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5735,6 +7205,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.fsgid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5744,6 +7219,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5751,6 +7227,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.fsgroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5760,6 +7241,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5767,6 +7249,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.fsuid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5776,6 +7263,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5783,6 +7271,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.fsuser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5792,6 +7285,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5799,6 +7293,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5808,6 +7307,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5815,6 +7315,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5824,6 +7329,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5831,18 +7337,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5850,18 +7364,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5869,18 +7392,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5888,18 +7419,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5907,18 +7447,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []bool{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, false) + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5926,18 +7475,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5945,18 +7502,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5964,18 +7529,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -5983,18 +7556,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6003,18 +7584,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6023,15 +7613,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6040,18 +7637,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6060,15 +7666,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6076,18 +7689,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6095,18 +7717,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6114,18 +7744,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6133,6 +7772,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.is_kworker": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6142,6 +7786,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6149,6 +7794,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.is_thread": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6158,6 +7808,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6165,6 +7816,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.pid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6174,6 +7830,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6181,6 +7838,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.ppid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6190,6 +7852,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6197,6 +7860,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.tid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6206,6 +7874,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6213,6 +7882,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.tty_name": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6222,6 +7896,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6229,6 +7904,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6238,6 +7918,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6245,6 +7926,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6254,6 +7940,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -6261,7 +7948,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -6269,7 +7957,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6277,7 +7966,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6285,7 +7975,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6293,7 +7984,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -6301,7 +7993,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -6309,7 +8002,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -6317,7 +8011,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -6325,7 +8020,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Comm + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -6333,7 +8029,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -6341,7 +8038,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -6349,7 +8047,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.PTrace.Tracee.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -6357,7 +8056,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -6365,7 +8065,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -6373,7 +8074,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6381,7 +8083,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6389,7 +8092,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6397,7 +8101,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -6405,7 +8110,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -6413,7 +8119,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.CTime) + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return 0 + } + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -6421,7 +8131,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.Filesystem + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -6429,7 +8143,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.GID) + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return 0 + } + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -6437,7 +8155,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Group + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -6445,7 +8167,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return false + } + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -6453,7 +8179,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Inode) + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return 0 + } + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -6461,7 +8191,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Mode) + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return 0 + } + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -6469,7 +8203,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.MTime) + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return 0 + } + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -6477,7 +8215,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.MountID) + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return 0 + } + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -6486,7 +8228,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.BasenameStr + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -6495,7 +8241,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -6504,7 +8251,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.PathnameStr + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -6513,7 +8264,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -6521,7 +8273,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Mode) + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return 0 + } + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -6529,7 +8285,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.UID) + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return 0 + } + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -6537,7 +8297,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.User + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -6545,7 +8309,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -6553,7 +8318,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -6561,7 +8327,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -6569,7 +8336,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -6577,7 +8345,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -6585,7 +8354,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -6593,10 +8363,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -6604,10 +8375,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -6615,10 +8387,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -6626,10 +8399,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -6637,10 +8411,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -6648,10 +8423,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -6659,10 +8435,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -6670,10 +8447,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -6681,10 +8459,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -6693,10 +8472,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -6705,7 +8485,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -6714,10 +8495,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -6726,7 +8508,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -6734,10 +8517,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -6745,10 +8529,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -6756,10 +8541,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -6767,7 +8553,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -6775,7 +8562,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.IsThread + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -6783,10 +8571,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Args + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -6794,10 +8583,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -6805,10 +8595,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -6816,10 +8607,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.ArgsTruncated + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -6827,10 +8619,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -6838,10 +8631,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Argv0 + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -6849,10 +8643,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.CapEffective) + return int(ev.PTrace.Tracee.Parent.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -6860,10 +8655,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.CapPermitted) + return int(ev.PTrace.Tracee.Parent.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -6871,10 +8667,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Comm + return ev.PTrace.Tracee.Parent.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -6882,10 +8679,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.ContainerID + return ev.PTrace.Tracee.Parent.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -6893,10 +8691,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Cookie) + return int(ev.PTrace.Tracee.Parent.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -6904,10 +8703,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.CreatedAt) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.PTrace.Tracee.Parent)) }, Field: field, Weight: eval.HandlerWeight, @@ -6915,10 +8715,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EGID) + return int(ev.PTrace.Tracee.Parent.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -6926,10 +8727,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EGroup + return ev.PTrace.Tracee.Parent.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -6937,10 +8739,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Envp + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -6948,10 +8751,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Envs + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -6959,10 +8763,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.EnvsTruncated + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -6970,10 +8775,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EUID) + return int(ev.PTrace.Tracee.Parent.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -6981,10 +8787,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EUser + return ev.PTrace.Tracee.Parent.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -6992,10 +8799,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.CTime) + if !ev.PTrace.Tracee.Parent.IsNotKworker() { + return 0 + } + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7003,10 +8814,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { + return "" + } + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7014,10 +8829,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.GID) + if !ev.PTrace.Tracee.Parent.IsNotKworker() { + return 0 + } + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7025,10 +8844,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { + return "" + } + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7036,10 +8859,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { + return false + } + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7047,10 +8874,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Inode) + if !ev.PTrace.Tracee.Parent.IsNotKworker() { + return 0 + } + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -7058,10 +8889,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { + return 0 + } + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Mode) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -7069,10 +8904,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.MTime) + if !ev.PTrace.Tracee.Parent.IsNotKworker() { + return 0 + } + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7080,10 +8919,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { + return 0 + } + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.MountID) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -7092,10 +8935,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.BasenameStr + if !ev.PTrace.Tracee.Parent.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7104,7 +8951,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7113,10 +8961,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { + return "" + } + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7125,7 +8977,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7133,10 +8986,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { + return 0 + } + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -7144,10 +9001,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.UID) + if !ev.PTrace.Tracee.Parent.IsNotKworker() { + return 0 + } + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7155,10 +9016,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { + return "" + } + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7166,10 +9031,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSGID) + return int(ev.PTrace.Tracee.Parent.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -7177,10 +9043,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSGroup + return ev.PTrace.Tracee.Parent.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -7188,10 +9055,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSUID) + return int(ev.PTrace.Tracee.Parent.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -7199,10 +9067,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSUser + return ev.PTrace.Tracee.Parent.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -7210,10 +9079,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.GID) + return int(ev.PTrace.Tracee.Parent.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7221,10 +9091,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.Group + return ev.PTrace.Tracee.Parent.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -7232,13 +9103,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7246,13 +9118,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7260,13 +9133,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7274,13 +9148,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7288,13 +9163,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7302,13 +9178,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -7316,13 +9193,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -7330,13 +9208,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7344,13 +9223,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -7359,13 +9239,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7374,7 +9255,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7383,13 +9265,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7398,7 +9281,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7406,13 +9290,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -7420,13 +9305,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7434,13 +9320,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7448,10 +9335,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.IsKworker + return ev.PTrace.Tracee.Parent.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -7459,10 +9347,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.IsThread + return ev.PTrace.Tracee.Parent.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -7470,10 +9359,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.Pid) + return int(ev.PTrace.Tracee.Parent.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -7481,10 +9371,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PPid) + return int(ev.PTrace.Tracee.Parent.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -7492,10 +9383,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.Tid) + return int(ev.PTrace.Tracee.Parent.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -7503,10 +9395,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.TTYName + return ev.PTrace.Tracee.Parent.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -7514,10 +9407,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.UID) + return int(ev.PTrace.Tracee.Parent.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7525,10 +9419,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.User + return ev.PTrace.Tracee.Parent.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -7536,7 +9431,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -7544,7 +9440,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -7552,7 +9449,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -7560,7 +9458,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.TTYName + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -7568,7 +9467,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7576,7 +9476,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -7584,7 +9485,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7592,7 +9494,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.destination.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.Name + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveXAttrName(ev, &ev.RemoveXAttr) }, Field: field, Weight: eval.HandlerWeight, @@ -7600,7 +9503,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.destination.namespace": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.Namespace + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.RemoveXAttr) }, Field: field, Weight: eval.HandlerWeight, @@ -7608,7 +9512,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.RemoveXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -7616,7 +9521,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7624,7 +9530,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.RemoveXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7632,7 +9539,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).RemoveXAttr.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.RemoveXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7640,7 +9548,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -7648,7 +9557,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -7656,7 +9566,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7664,7 +9575,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -7673,7 +9585,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -7682,7 +9595,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).RemoveXAttr.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -7691,7 +9605,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -7700,7 +9615,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).RemoveXAttr.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -7708,7 +9624,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.RemoveXAttr.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -7716,7 +9633,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7724,7 +9642,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.RemoveXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7732,7 +9651,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -7740,7 +9660,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7748,7 +9669,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7756,7 +9678,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.New) }, Field: field, Weight: eval.HandlerWeight, @@ -7764,7 +9687,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7772,7 +9696,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.New.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7780,7 +9705,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Rename.New.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.New.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7788,7 +9714,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -7796,7 +9723,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -7804,7 +9732,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7812,7 +9741,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -7821,7 +9751,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New) }, Field: field, Weight: eval.HandlerWeight, @@ -7830,7 +9761,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rename.New.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New)) }, Field: field, Weight: eval.HandlerWeight, @@ -7839,7 +9771,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New) }, Field: field, Weight: eval.HandlerWeight, @@ -7848,7 +9781,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rename.New.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New)) }, Field: field, Weight: eval.HandlerWeight, @@ -7856,7 +9790,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rename.New.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -7864,7 +9799,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7872,7 +9808,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.New.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7880,7 +9817,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.Old) }, Field: field, Weight: eval.HandlerWeight, @@ -7888,7 +9826,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7896,7 +9835,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.Old.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7904,7 +9844,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Rename.Old.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.Old.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7912,7 +9853,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -7920,7 +9862,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -7928,7 +9871,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7936,7 +9880,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -7945,7 +9890,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old) }, Field: field, Weight: eval.HandlerWeight, @@ -7954,7 +9900,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rename.Old.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old)) }, Field: field, Weight: eval.HandlerWeight, @@ -7963,7 +9910,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old) }, Field: field, Weight: eval.HandlerWeight, @@ -7972,7 +9920,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rename.Old.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old)) }, Field: field, Weight: eval.HandlerWeight, @@ -7980,7 +9929,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rename.Old.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -7988,7 +9938,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7996,7 +9947,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.Old.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8004,7 +9956,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Rename.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8012,7 +9965,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8020,7 +9974,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rmdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8028,7 +9983,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8036,7 +9992,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rmdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8044,7 +10001,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Rmdir.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rmdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8052,7 +10010,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -8060,7 +10019,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -8068,7 +10028,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8076,7 +10037,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -8085,7 +10047,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8094,7 +10057,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rmdir.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8103,7 +10067,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8112,7 +10077,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rmdir.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8120,7 +10086,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rmdir.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -8128,7 +10095,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8136,7 +10104,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rmdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8144,7 +10113,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8152,7 +10122,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "selinux.bool.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.BoolName + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSELinuxBoolName(ev, &ev.SELinux) }, Field: field, Weight: eval.HandlerWeight, @@ -8160,7 +10131,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "selinux.bool.state": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.BoolChangeValue + ev := ctx.Event.(*Event) + return ev.SELinux.BoolChangeValue }, Field: field, Weight: eval.FunctionWeight, @@ -8168,7 +10140,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "selinux.bool_commit.state": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).SELinux.BoolCommitValue + ev := ctx.Event.(*Event) + return ev.SELinux.BoolCommitValue }, Field: field, Weight: eval.FunctionWeight, @@ -8176,7 +10149,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "selinux.enforce.status": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.EnforceStatus + ev := ctx.Event.(*Event) + return ev.SELinux.EnforceStatus }, Field: field, Weight: eval.FunctionWeight, @@ -8184,7 +10158,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.EGID) + ev := ctx.Event.(*Event) + return int(ev.SetGID.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -8192,7 +10167,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetGID.EGroup + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetgidEGroup(ev, &ev.SetGID) }, Field: field, Weight: eval.HandlerWeight, @@ -8200,7 +10176,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.FSGID) + ev := ctx.Event.(*Event) + return int(ev.SetGID.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -8208,7 +10185,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetGID.FSGroup + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetgidFSGroup(ev, &ev.SetGID) }, Field: field, Weight: eval.HandlerWeight, @@ -8216,7 +10194,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.GID) + ev := ctx.Event.(*Event) + return int(ev.SetGID.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8224,7 +10203,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetGID.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetgidGroup(ev, &ev.SetGID) }, Field: field, Weight: eval.HandlerWeight, @@ -8232,7 +10212,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.EUID) + ev := ctx.Event.(*Event) + return int(ev.SetUID.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -8240,7 +10221,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetUID.EUser + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetuidEUser(ev, &ev.SetUID) }, Field: field, Weight: eval.HandlerWeight, @@ -8248,7 +10230,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.FSUID) + ev := ctx.Event.(*Event) + return int(ev.SetUID.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -8256,7 +10239,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetUID.FSUser + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetuidFSUser(ev, &ev.SetUID) }, Field: field, Weight: eval.HandlerWeight, @@ -8264,7 +10248,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.UID) + ev := ctx.Event.(*Event) + return int(ev.SetUID.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8272,7 +10257,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetUID.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetuidUser(ev, &ev.SetUID) }, Field: field, Weight: eval.HandlerWeight, @@ -8280,7 +10266,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8288,7 +10275,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.destination.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.Name + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveXAttrName(ev, &ev.SetXAttr) }, Field: field, Weight: eval.HandlerWeight, @@ -8296,7 +10284,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.destination.namespace": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.Namespace + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.SetXAttr) }, Field: field, Weight: eval.HandlerWeight, @@ -8304,7 +10293,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.SetXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8312,7 +10302,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8320,7 +10311,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.SetXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8328,7 +10320,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).SetXAttr.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.SetXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8336,7 +10329,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -8344,7 +10338,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -8352,7 +10347,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8360,7 +10356,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -8369,7 +10366,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8378,7 +10376,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).SetXAttr.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8387,7 +10386,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8396,7 +10396,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).SetXAttr.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8404,7 +10405,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.SetXAttr.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -8412,7 +10414,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8420,7 +10423,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.SetXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8428,7 +10432,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8436,7 +10441,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.PID) + ev := ctx.Event.(*Event) + return int(ev.Signal.PID) }, Field: field, Weight: eval.FunctionWeight, @@ -8444,7 +10450,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Signal.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8452,15 +10459,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.args": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -8468,15 +10482,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8484,15 +10505,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8500,15 +10528,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.args_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8516,15 +10551,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -8532,15 +10574,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.argv0": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -8548,6 +10597,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.cap_effective": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -8557,6 +10611,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8564,6 +10619,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.cap_permitted": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -8573,6 +10633,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8580,6 +10641,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.comm": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -8589,6 +10655,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8596,6 +10663,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.container.id": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -8605,6 +10677,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8612,6 +10685,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.cookie": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -8621,6 +10699,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8628,15 +10707,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.created_at": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8644,6 +10730,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.egid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -8653,6 +10744,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8660,6 +10752,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.egroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -8669,6 +10766,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8676,15 +10774,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8692,15 +10797,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8708,15 +10820,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.envs_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8724,6 +10843,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.euid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -8733,6 +10857,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8740,6 +10865,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.euser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -8749,6 +10879,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8756,15 +10887,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8772,15 +10914,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.Filesystem + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8788,15 +10942,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8804,15 +10969,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.FileFields.Group + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8820,15 +10997,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, false) + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8836,15 +11025,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8852,15 +11052,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8868,15 +11079,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8884,15 +11106,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8901,15 +11134,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.BasenameStr + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8918,15 +11163,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8935,15 +11187,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.PathnameStr + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8952,15 +11216,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8968,15 +11239,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -8984,15 +11267,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9000,15 +11294,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.FileEvent.FileFields.User + if !element.ProcessContext.Process.IsNotKworker() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9016,6 +11322,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.fsgid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9025,6 +11336,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9032,6 +11344,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.fsgroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9041,6 +11358,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9048,6 +11366,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.fsuid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9057,6 +11380,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9064,6 +11388,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.fsuser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9073,6 +11402,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9080,6 +11410,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9089,6 +11424,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9096,6 +11432,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9105,6 +11446,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9112,18 +11454,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9131,18 +11481,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9150,18 +11509,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9169,18 +11536,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9188,18 +11564,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []bool{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, false) + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9207,18 +11592,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9226,18 +11619,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9245,18 +11646,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9264,18 +11673,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9284,18 +11701,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9304,15 +11730,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9321,18 +11754,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9341,15 +11783,22 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9357,18 +11806,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9376,18 +11834,26 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []int{} + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, 0) + value = iterator.Next() + continue + } result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9395,18 +11861,27 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.Ancestor.ProcessContext.Process.HasInterpreter() { - return []string{} + ev := ctx.Event.(*Event) + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + if !element.ProcessContext.Process.HasInterpreter() { + results = append(results, "") + value = iterator.Next() + continue + } + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9414,6 +11889,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.is_kworker": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9423,6 +11903,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9430,6 +11911,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.is_thread": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]bool)(ptr); result != nil { + return *result + } + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9439,6 +11925,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9446,6 +11933,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.pid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9455,6 +11947,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9462,6 +11955,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.ppid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9471,6 +11969,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9478,6 +11977,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.tid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9487,6 +11991,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9494,6 +11999,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.tty_name": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9503,6 +12013,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9510,6 +12021,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]int)(ptr); result != nil { + return *result + } + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9519,6 +12035,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9526,6 +12043,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if ptr := ctx.Cache[field]; ptr != nil { + if result := (*[]string)(ptr); result != nil { + return *result + } + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9535,6 +12057,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.Cache[field] = unsafe.Pointer(&results) return results }, Field: field, Weight: eval.IteratorWeight, @@ -9542,7 +12065,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.Signal.Target.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -9550,7 +12074,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -9558,7 +12083,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -9566,7 +12092,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -9574,7 +12101,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.Signal.Target.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -9582,7 +12110,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.Signal.Target.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -9590,7 +12119,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -9598,7 +12128,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -9606,7 +12137,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Comm + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -9614,7 +12146,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -9622,7 +12155,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -9630,7 +12164,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.Signal.Target.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -9638,7 +12173,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -9646,7 +12182,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -9654,7 +12191,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -9662,7 +12200,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -9670,7 +12209,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -9678,7 +12218,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -9686,7 +12227,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -9694,7 +12236,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.CTime) + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return 0 + } + return int(ev.Signal.Target.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -9702,7 +12248,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.Filesystem + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -9710,7 +12260,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.GID) + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return 0 + } + return int(ev.Signal.Target.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -9718,7 +12272,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Group + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -9726,7 +12284,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return false + } + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -9734,7 +12296,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Inode) + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return 0 + } + return int(ev.Signal.Target.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -9742,7 +12308,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Mode) + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return 0 + } + return int(ev.Signal.Target.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -9750,7 +12320,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.MTime) + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return 0 + } + return int(ev.Signal.Target.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -9758,7 +12332,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.MountID) + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return 0 + } + return int(ev.Signal.Target.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -9767,7 +12345,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.BasenameStr + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -9776,7 +12358,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -9785,7 +12368,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.PathnameStr + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -9794,7 +12381,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -9802,7 +12390,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Mode) + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return 0 + } + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -9810,7 +12402,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.UID) + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return 0 + } + return int(ev.Signal.Target.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -9818,7 +12414,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.User + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -9826,7 +12426,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -9834,7 +12435,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -9842,7 +12444,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -9850,7 +12453,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -9858,7 +12462,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -9866,7 +12471,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -9874,10 +12480,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -9885,10 +12492,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -9896,10 +12504,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -9907,10 +12516,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -9918,10 +12528,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -9929,10 +12540,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -9940,10 +12552,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -9951,10 +12564,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -9962,10 +12576,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -9974,10 +12589,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -9986,7 +12602,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -9995,10 +12612,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10007,7 +12625,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10015,10 +12634,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -10026,10 +12646,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -10037,10 +12658,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10048,7 +12670,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -10056,7 +12679,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.IsThread + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -10064,10 +12688,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Args + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Signal.Target.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10075,10 +12700,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10086,10 +12712,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10097,10 +12724,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.ArgsTruncated + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10108,10 +12736,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Signal.Target.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10119,10 +12748,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Argv0 + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Signal.Target.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10130,10 +12760,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.CapEffective) + return int(ev.Signal.Target.Parent.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -10141,10 +12772,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.CapPermitted) + return int(ev.Signal.Target.Parent.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -10152,10 +12784,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Comm + return ev.Signal.Target.Parent.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -10163,10 +12796,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.ContainerID + return ev.Signal.Target.Parent.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -10174,10 +12808,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Cookie) + return int(ev.Signal.Target.Parent.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -10185,10 +12820,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.CreatedAt) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Signal.Target.Parent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10196,10 +12832,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.EGID) + return int(ev.Signal.Target.Parent.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -10207,10 +12844,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.EGroup + return ev.Signal.Target.Parent.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -10218,10 +12856,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Envp + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10229,10 +12868,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Envs + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10240,10 +12880,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.EnvsTruncated + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10251,10 +12892,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.EUID) + return int(ev.Signal.Target.Parent.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -10262,10 +12904,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.EUser + return ev.Signal.Target.Parent.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -10273,10 +12916,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { + return 0 + } + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.CTime) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10284,10 +12931,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.Filesystem + if !ev.Signal.Target.Parent.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10295,10 +12946,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { + return 0 + } + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.GID) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -10306,10 +12961,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { + return "" + } + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10317,10 +12976,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.InUpperLayer + if !ev.Signal.Target.Parent.IsNotKworker() { + return false + } + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10328,10 +12991,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { + return 0 + } + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Inode) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -10339,10 +13006,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Mode) + if !ev.Signal.Target.Parent.IsNotKworker() { + return 0 + } + return int(ev.Signal.Target.Parent.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -10350,10 +13021,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { + return 0 + } + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.MTime) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10361,10 +13036,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.MountID) + if !ev.Signal.Target.Parent.IsNotKworker() { + return 0 + } + return int(ev.Signal.Target.Parent.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -10373,10 +13052,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { + return "" + } + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10385,7 +13068,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10394,10 +13078,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { + return "" + } + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10406,7 +13094,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10414,10 +13103,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Mode) + if !ev.Signal.Target.Parent.IsNotKworker() { + return 0 + } + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Parent.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -10425,10 +13118,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { + return 0 + } + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.UID) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -10436,10 +13133,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.User + if !ev.Signal.Target.Parent.IsNotKworker() { + return "" + } + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10447,10 +13148,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSGID) + return int(ev.Signal.Target.Parent.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -10458,10 +13160,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSGroup + return ev.Signal.Target.Parent.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -10469,10 +13172,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSUID) + return int(ev.Signal.Target.Parent.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -10480,10 +13184,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSUser + return ev.Signal.Target.Parent.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -10491,10 +13196,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.GID) + return int(ev.Signal.Target.Parent.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -10502,10 +13208,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.Group + return ev.Signal.Target.Parent.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -10513,13 +13220,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10527,13 +13235,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10541,13 +13250,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -10555,13 +13265,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10569,13 +13280,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10583,13 +13295,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -10597,13 +13310,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -10611,13 +13325,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10625,13 +13340,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -10640,13 +13356,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10655,7 +13372,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10664,13 +13382,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10679,7 +13398,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10687,13 +13407,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -10701,13 +13422,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -10715,13 +13437,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10729,10 +13452,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.PIDContext.IsKworker + return ev.Signal.Target.Parent.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -10740,10 +13464,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.IsThread + return ev.Signal.Target.Parent.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -10751,10 +13476,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.PIDContext.Pid) + return int(ev.Signal.Target.Parent.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -10762,10 +13488,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.PPid) + return int(ev.Signal.Target.Parent.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -10773,10 +13500,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.PIDContext.Tid) + return int(ev.Signal.Target.Parent.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -10784,10 +13512,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.TTYName + return ev.Signal.Target.Parent.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -10795,10 +13524,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.UID) + return int(ev.Signal.Target.Parent.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -10806,10 +13536,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.User + return ev.Signal.Target.Parent.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -10817,7 +13548,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -10825,7 +13557,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -10833,7 +13566,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -10841,7 +13575,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.TTYName + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -10849,7 +13584,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -10857,7 +13593,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -10865,7 +13602,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Type) + ev := ctx.Event.(*Event) + return int(ev.Signal.Type) }, Field: field, Weight: eval.FunctionWeight, @@ -10873,7 +13611,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10881,7 +13620,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Splice.File) }, Field: field, Weight: eval.HandlerWeight, @@ -10889,7 +13629,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -10897,7 +13638,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Splice.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10905,7 +13647,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Splice.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Splice.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10913,7 +13656,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -10921,7 +13665,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -10929,7 +13674,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10937,7 +13683,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -10946,7 +13693,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File) }, Field: field, Weight: eval.HandlerWeight, @@ -10955,7 +13703,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Splice.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -10964,7 +13713,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File) }, Field: field, Weight: eval.HandlerWeight, @@ -10973,7 +13723,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Splice.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -10981,7 +13732,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Splice.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -10989,7 +13741,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -10997,7 +13750,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Splice.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11005,7 +13759,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.pipe_entry_flag": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.PipeEntryFlag) + ev := ctx.Event.(*Event) + return int(ev.Splice.PipeEntryFlag) }, Field: field, Weight: eval.FunctionWeight, @@ -11013,7 +13768,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.pipe_exit_flag": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.PipeExitFlag) + ev := ctx.Event.(*Event) + return int(ev.Splice.PipeExitFlag) }, Field: field, Weight: eval.FunctionWeight, @@ -11021,7 +13777,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Splice.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -11029,7 +13786,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11037,7 +13795,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Unlink.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11045,7 +13804,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -11053,7 +13813,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Unlink.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11061,7 +13822,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Unlink.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Unlink.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11069,7 +13831,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -11077,7 +13840,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -11085,7 +13849,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11093,7 +13858,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -11102,7 +13868,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11111,7 +13878,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Unlink.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11120,7 +13888,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11129,7 +13898,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Unlink.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11137,7 +13907,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Unlink.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -11145,7 +13916,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11153,7 +13925,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Unlink.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11161,7 +13934,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.flags": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.Flags) + ev := ctx.Event.(*Event) + return int(ev.Unlink.Flags) }, Field: field, Weight: eval.FunctionWeight, @@ -11169,7 +13943,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Unlink.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -11177,7 +13952,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unload_module.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).UnloadModule.Name + ev := ctx.Event.(*Event) + return ev.UnloadModule.Name }, Field: field, Weight: eval.FunctionWeight, @@ -11185,7 +13961,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unload_module.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).UnloadModule.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.UnloadModule.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -11193,7 +13970,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11201,7 +13979,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Utimes.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11209,7 +13988,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -11217,7 +13997,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Utimes.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11225,7 +14006,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Utimes.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Utimes.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11233,7 +14015,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -11241,7 +14024,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -11249,7 +14033,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11257,7 +14042,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -11266,7 +14052,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11275,7 +14062,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Utimes.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11284,7 +14072,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11293,7 +14082,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Utimes.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11301,7 +14091,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Utimes.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -11309,7 +14100,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11317,7 +14109,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Utimes.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11325,7 +14118,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Utimes.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -11333,7 +14127,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval } return nil, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFields() []eval.Field { +func (ev *Event) GetFields() []eval.Field { return []eval.Field{ "async", "bind.addr.family", @@ -11622,6 +14416,10 @@ func (e *Event) GetFields() []eval.Field { "mmap.flags", "mmap.protection", "mmap.retval", + "mount.fs_type", + "mount.mountpoint.path", + "mount.retval", + "mount.source.path", "mprotect.req_protection", "mprotect.retval", "mprotect.vm_protection", @@ -12405,723 +15203,731 @@ func (e *Event) GetFields() []eval.Field { "utimes.retval", } } -func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { +func (ev *Event) GetFieldValue(field eval.Field) (interface{}, error) { switch field { case "async": - return e.Async, nil + return ev.Async, nil case "bind.addr.family": - return int(e.Bind.AddrFamily), nil + return int(ev.Bind.AddrFamily), nil case "bind.addr.ip": - return e.Bind.Addr.IPNet, nil + return ev.Bind.Addr.IPNet, nil case "bind.addr.port": - return int(e.Bind.Addr.Port), nil + return int(ev.Bind.Addr.Port), nil case "bind.retval": - return int(e.Bind.SyscallEvent.Retval), nil + return int(ev.Bind.SyscallEvent.Retval), nil case "bpf.cmd": - return int(e.BPF.Cmd), nil + return int(ev.BPF.Cmd), nil case "bpf.map.name": - return e.BPF.Map.Name, nil + return ev.BPF.Map.Name, nil case "bpf.map.type": - return int(e.BPF.Map.Type), nil + return int(ev.BPF.Map.Type), nil case "bpf.prog.attach_type": - return int(e.BPF.Program.AttachType), nil + return int(ev.BPF.Program.AttachType), nil case "bpf.prog.helpers": - result := make([]int, len(e.BPF.Program.Helpers)) - for i, v := range e.BPF.Program.Helpers { + result := make([]int, len(ev.BPF.Program.Helpers)) + for i, v := range ev.BPF.Program.Helpers { result[i] = int(v) } return result, nil case "bpf.prog.name": - return e.BPF.Program.Name, nil + return ev.BPF.Program.Name, nil case "bpf.prog.tag": - return e.BPF.Program.Tag, nil + return ev.BPF.Program.Tag, nil case "bpf.prog.type": - return int(e.BPF.Program.Type), nil + return int(ev.BPF.Program.Type), nil case "bpf.retval": - return int(e.BPF.SyscallEvent.Retval), nil + return int(ev.BPF.SyscallEvent.Retval), nil case "capset.cap_effective": - return int(e.Capset.CapEffective), nil + return int(ev.Capset.CapEffective), nil case "capset.cap_permitted": - return int(e.Capset.CapPermitted), nil + return int(ev.Capset.CapPermitted), nil case "chmod.file.change_time": - return int(e.Chmod.File.FileFields.CTime), nil + return int(ev.Chmod.File.FileFields.CTime), nil case "chmod.file.destination.mode": - return int(e.Chmod.Mode), nil + return int(ev.Chmod.Mode), nil case "chmod.file.destination.rights": - return int(e.Chmod.Mode), nil + return int(ev.Chmod.Mode), nil case "chmod.file.filesystem": - return e.Chmod.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chmod.File), nil case "chmod.file.gid": - return int(e.Chmod.File.FileFields.GID), nil + return int(ev.Chmod.File.FileFields.GID), nil case "chmod.file.group": - return e.Chmod.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chmod.File.FileFields), nil case "chmod.file.in_upper_layer": - return e.Chmod.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chmod.File.FileFields), nil case "chmod.file.inode": - return int(e.Chmod.File.FileFields.Inode), nil + return int(ev.Chmod.File.FileFields.Inode), nil case "chmod.file.mode": - return int(e.Chmod.File.FileFields.Mode), nil + return int(ev.Chmod.File.FileFields.Mode), nil case "chmod.file.modification_time": - return int(e.Chmod.File.FileFields.MTime), nil + return int(ev.Chmod.File.FileFields.MTime), nil case "chmod.file.mount_id": - return int(e.Chmod.File.FileFields.MountID), nil + return int(ev.Chmod.File.FileFields.MountID), nil case "chmod.file.name": - return e.Chmod.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File), nil case "chmod.file.name.length": - return len(e.Chmod.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File), nil case "chmod.file.path": - return e.Chmod.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File), nil case "chmod.file.path.length": - return len(e.Chmod.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File), nil case "chmod.file.rights": - return int(e.Chmod.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Chmod.File.FileFields)), nil case "chmod.file.uid": - return int(e.Chmod.File.FileFields.UID), nil + return int(ev.Chmod.File.FileFields.UID), nil case "chmod.file.user": - return e.Chmod.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chmod.File.FileFields), nil case "chmod.retval": - return int(e.Chmod.SyscallEvent.Retval), nil + return int(ev.Chmod.SyscallEvent.Retval), nil case "chown.file.change_time": - return int(e.Chown.File.FileFields.CTime), nil + return int(ev.Chown.File.FileFields.CTime), nil case "chown.file.destination.gid": - return int(e.Chown.GID), nil + return int(ev.Chown.GID), nil case "chown.file.destination.group": - return e.Chown.Group, nil + return ev.FieldHandlers.ResolveChownGID(ev, &ev.Chown), nil case "chown.file.destination.uid": - return int(e.Chown.UID), nil + return int(ev.Chown.UID), nil case "chown.file.destination.user": - return e.Chown.User, nil + return ev.FieldHandlers.ResolveChownUID(ev, &ev.Chown), nil case "chown.file.filesystem": - return e.Chown.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chown.File), nil case "chown.file.gid": - return int(e.Chown.File.FileFields.GID), nil + return int(ev.Chown.File.FileFields.GID), nil case "chown.file.group": - return e.Chown.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chown.File.FileFields), nil case "chown.file.in_upper_layer": - return e.Chown.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chown.File.FileFields), nil case "chown.file.inode": - return int(e.Chown.File.FileFields.Inode), nil + return int(ev.Chown.File.FileFields.Inode), nil case "chown.file.mode": - return int(e.Chown.File.FileFields.Mode), nil + return int(ev.Chown.File.FileFields.Mode), nil case "chown.file.modification_time": - return int(e.Chown.File.FileFields.MTime), nil + return int(ev.Chown.File.FileFields.MTime), nil case "chown.file.mount_id": - return int(e.Chown.File.FileFields.MountID), nil + return int(ev.Chown.File.FileFields.MountID), nil case "chown.file.name": - return e.Chown.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File), nil case "chown.file.name.length": - return len(e.Chown.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File), nil case "chown.file.path": - return e.Chown.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File), nil case "chown.file.path.length": - return len(e.Chown.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File), nil case "chown.file.rights": - return int(e.Chown.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Chown.File.FileFields)), nil case "chown.file.uid": - return int(e.Chown.File.FileFields.UID), nil + return int(ev.Chown.File.FileFields.UID), nil case "chown.file.user": - return e.Chown.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chown.File.FileFields), nil case "chown.retval": - return int(e.Chown.SyscallEvent.Retval), nil + return int(ev.Chown.SyscallEvent.Retval), nil case "container.id": - return e.ContainerContext.ID, nil + return ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext), nil case "container.tags": - return e.ContainerContext.Tags, nil + return ev.FieldHandlers.ResolveContainerTags(ev, &ev.ContainerContext), nil case "dns.id": - return int(e.DNS.ID), nil + return int(ev.DNS.ID), nil case "dns.question.class": - return int(e.DNS.Class), nil + return int(ev.DNS.Class), nil case "dns.question.count": - return int(e.DNS.Count), nil + return int(ev.DNS.Count), nil case "dns.question.length": - return int(e.DNS.Size), nil + return int(ev.DNS.Size), nil case "dns.question.name": - return e.DNS.Name, nil + return ev.DNS.Name, nil case "dns.question.name.length": - return len(e.DNS.Name), nil + return len(ev.DNS.Name), nil case "dns.question.type": - return int(e.DNS.Type), nil + return int(ev.DNS.Type), nil case "exec.args": - return e.Exec.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exec.Process), nil case "exec.args_flags": - return e.Exec.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Exec.Process), nil case "exec.args_options": - return e.Exec.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Exec.Process), nil case "exec.args_truncated": - return e.Exec.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exec.Process), nil case "exec.argv": - return e.Exec.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exec.Process), nil case "exec.argv0": - return e.Exec.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exec.Process), nil case "exec.cap_effective": - return int(e.Exec.Process.Credentials.CapEffective), nil + return int(ev.Exec.Process.Credentials.CapEffective), nil case "exec.cap_permitted": - return int(e.Exec.Process.Credentials.CapPermitted), nil + return int(ev.Exec.Process.Credentials.CapPermitted), nil case "exec.comm": - return e.Exec.Process.Comm, nil + return ev.Exec.Process.Comm, nil case "exec.container.id": - return e.Exec.Process.ContainerID, nil + return ev.Exec.Process.ContainerID, nil case "exec.cookie": - return int(e.Exec.Process.Cookie), nil + return int(ev.Exec.Process.Cookie), nil case "exec.created_at": - return int(e.Exec.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exec.Process)), nil case "exec.egid": - return int(e.Exec.Process.Credentials.EGID), nil + return int(ev.Exec.Process.Credentials.EGID), nil case "exec.egroup": - return e.Exec.Process.Credentials.EGroup, nil + return ev.Exec.Process.Credentials.EGroup, nil case "exec.envp": - return e.Exec.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exec.Process), nil case "exec.envs": - return e.Exec.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exec.Process), nil case "exec.envs_truncated": - return e.Exec.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exec.Process), nil case "exec.euid": - return int(e.Exec.Process.Credentials.EUID), nil + return int(ev.Exec.Process.Credentials.EUID), nil case "exec.euser": - return e.Exec.Process.Credentials.EUser, nil + return ev.Exec.Process.Credentials.EUser, nil case "exec.file.change_time": - return int(e.Exec.Process.FileEvent.FileFields.CTime), nil + return int(ev.Exec.Process.FileEvent.FileFields.CTime), nil case "exec.file.filesystem": - return e.Exec.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.gid": - return int(e.Exec.Process.FileEvent.FileFields.GID), nil + return int(ev.Exec.Process.FileEvent.FileFields.GID), nil case "exec.file.group": - return e.Exec.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.FileEvent.FileFields), nil case "exec.file.in_upper_layer": - return e.Exec.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.FileEvent.FileFields), nil case "exec.file.inode": - return int(e.Exec.Process.FileEvent.FileFields.Inode), nil + return int(ev.Exec.Process.FileEvent.FileFields.Inode), nil case "exec.file.mode": - return int(e.Exec.Process.FileEvent.FileFields.Mode), nil + return int(ev.Exec.Process.FileEvent.FileFields.Mode), nil case "exec.file.modification_time": - return int(e.Exec.Process.FileEvent.FileFields.MTime), nil + return int(ev.Exec.Process.FileEvent.FileFields.MTime), nil case "exec.file.mount_id": - return int(e.Exec.Process.FileEvent.FileFields.MountID), nil + return int(ev.Exec.Process.FileEvent.FileFields.MountID), nil case "exec.file.name": - return e.Exec.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.name.length": - return len(e.Exec.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.path": - return e.Exec.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.path.length": - return len(e.Exec.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.rights": - return int(e.Exec.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exec.Process.FileEvent.FileFields)), nil case "exec.file.uid": - return int(e.Exec.Process.FileEvent.FileFields.UID), nil + return int(ev.Exec.Process.FileEvent.FileFields.UID), nil case "exec.file.user": - return e.Exec.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.FileEvent.FileFields), nil case "exec.fsgid": - return int(e.Exec.Process.Credentials.FSGID), nil + return int(ev.Exec.Process.Credentials.FSGID), nil case "exec.fsgroup": - return e.Exec.Process.Credentials.FSGroup, nil + return ev.Exec.Process.Credentials.FSGroup, nil case "exec.fsuid": - return int(e.Exec.Process.Credentials.FSUID), nil + return int(ev.Exec.Process.Credentials.FSUID), nil case "exec.fsuser": - return e.Exec.Process.Credentials.FSUser, nil + return ev.Exec.Process.Credentials.FSUser, nil case "exec.gid": - return int(e.Exec.Process.Credentials.GID), nil + return int(ev.Exec.Process.Credentials.GID), nil case "exec.group": - return e.Exec.Process.Credentials.Group, nil + return ev.Exec.Process.Credentials.Group, nil case "exec.interpreter.file.change_time": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "exec.interpreter.file.filesystem": - return e.Exec.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.gid": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "exec.interpreter.file.group": - return e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil case "exec.interpreter.file.in_upper_layer": - return e.Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil case "exec.interpreter.file.inode": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "exec.interpreter.file.mode": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "exec.interpreter.file.modification_time": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "exec.interpreter.file.mount_id": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "exec.interpreter.file.name": - return e.Exec.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.name.length": - return len(e.Exec.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.path": - return e.Exec.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.path.length": - return len(e.Exec.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.rights": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields)), nil case "exec.interpreter.file.uid": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "exec.interpreter.file.user": - return e.Exec.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil case "exec.is_kworker": - return e.Exec.Process.PIDContext.IsKworker, nil + return ev.Exec.Process.PIDContext.IsKworker, nil case "exec.is_thread": - return e.Exec.Process.IsThread, nil + return ev.Exec.Process.IsThread, nil case "exec.pid": - return int(e.Exec.Process.PIDContext.Pid), nil + return int(ev.Exec.Process.PIDContext.Pid), nil case "exec.ppid": - return int(e.Exec.Process.PPid), nil + return int(ev.Exec.Process.PPid), nil case "exec.tid": - return int(e.Exec.Process.PIDContext.Tid), nil + return int(ev.Exec.Process.PIDContext.Tid), nil case "exec.tty_name": - return e.Exec.Process.TTYName, nil + return ev.Exec.Process.TTYName, nil case "exec.uid": - return int(e.Exec.Process.Credentials.UID), nil + return int(ev.Exec.Process.Credentials.UID), nil case "exec.user": - return e.Exec.Process.Credentials.User, nil + return ev.Exec.Process.Credentials.User, nil case "exit.args": - return e.Exit.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exit.Process), nil case "exit.args_flags": - return e.Exit.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Exit.Process), nil case "exit.args_options": - return e.Exit.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Exit.Process), nil case "exit.args_truncated": - return e.Exit.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exit.Process), nil case "exit.argv": - return e.Exit.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exit.Process), nil case "exit.argv0": - return e.Exit.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exit.Process), nil case "exit.cap_effective": - return int(e.Exit.Process.Credentials.CapEffective), nil + return int(ev.Exit.Process.Credentials.CapEffective), nil case "exit.cap_permitted": - return int(e.Exit.Process.Credentials.CapPermitted), nil + return int(ev.Exit.Process.Credentials.CapPermitted), nil case "exit.cause": - return int(e.Exit.Cause), nil + return int(ev.Exit.Cause), nil case "exit.code": - return int(e.Exit.Code), nil + return int(ev.Exit.Code), nil case "exit.comm": - return e.Exit.Process.Comm, nil + return ev.Exit.Process.Comm, nil case "exit.container.id": - return e.Exit.Process.ContainerID, nil + return ev.Exit.Process.ContainerID, nil case "exit.cookie": - return int(e.Exit.Process.Cookie), nil + return int(ev.Exit.Process.Cookie), nil case "exit.created_at": - return int(e.Exit.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exit.Process)), nil case "exit.egid": - return int(e.Exit.Process.Credentials.EGID), nil + return int(ev.Exit.Process.Credentials.EGID), nil case "exit.egroup": - return e.Exit.Process.Credentials.EGroup, nil + return ev.Exit.Process.Credentials.EGroup, nil case "exit.envp": - return e.Exit.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exit.Process), nil case "exit.envs": - return e.Exit.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exit.Process), nil case "exit.envs_truncated": - return e.Exit.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exit.Process), nil case "exit.euid": - return int(e.Exit.Process.Credentials.EUID), nil + return int(ev.Exit.Process.Credentials.EUID), nil case "exit.euser": - return e.Exit.Process.Credentials.EUser, nil + return ev.Exit.Process.Credentials.EUser, nil case "exit.file.change_time": - return int(e.Exit.Process.FileEvent.FileFields.CTime), nil + return int(ev.Exit.Process.FileEvent.FileFields.CTime), nil case "exit.file.filesystem": - return e.Exit.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.gid": - return int(e.Exit.Process.FileEvent.FileFields.GID), nil + return int(ev.Exit.Process.FileEvent.FileFields.GID), nil case "exit.file.group": - return e.Exit.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.FileEvent.FileFields), nil case "exit.file.in_upper_layer": - return e.Exit.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.FileEvent.FileFields), nil case "exit.file.inode": - return int(e.Exit.Process.FileEvent.FileFields.Inode), nil + return int(ev.Exit.Process.FileEvent.FileFields.Inode), nil case "exit.file.mode": - return int(e.Exit.Process.FileEvent.FileFields.Mode), nil + return int(ev.Exit.Process.FileEvent.FileFields.Mode), nil case "exit.file.modification_time": - return int(e.Exit.Process.FileEvent.FileFields.MTime), nil + return int(ev.Exit.Process.FileEvent.FileFields.MTime), nil case "exit.file.mount_id": - return int(e.Exit.Process.FileEvent.FileFields.MountID), nil + return int(ev.Exit.Process.FileEvent.FileFields.MountID), nil case "exit.file.name": - return e.Exit.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.name.length": - return len(e.Exit.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.path": - return e.Exit.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.path.length": - return len(e.Exit.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.rights": - return int(e.Exit.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exit.Process.FileEvent.FileFields)), nil case "exit.file.uid": - return int(e.Exit.Process.FileEvent.FileFields.UID), nil + return int(ev.Exit.Process.FileEvent.FileFields.UID), nil case "exit.file.user": - return e.Exit.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.FileEvent.FileFields), nil case "exit.fsgid": - return int(e.Exit.Process.Credentials.FSGID), nil + return int(ev.Exit.Process.Credentials.FSGID), nil case "exit.fsgroup": - return e.Exit.Process.Credentials.FSGroup, nil + return ev.Exit.Process.Credentials.FSGroup, nil case "exit.fsuid": - return int(e.Exit.Process.Credentials.FSUID), nil + return int(ev.Exit.Process.Credentials.FSUID), nil case "exit.fsuser": - return e.Exit.Process.Credentials.FSUser, nil + return ev.Exit.Process.Credentials.FSUser, nil case "exit.gid": - return int(e.Exit.Process.Credentials.GID), nil + return int(ev.Exit.Process.Credentials.GID), nil case "exit.group": - return e.Exit.Process.Credentials.Group, nil + return ev.Exit.Process.Credentials.Group, nil case "exit.interpreter.file.change_time": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "exit.interpreter.file.filesystem": - return e.Exit.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.gid": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "exit.interpreter.file.group": - return e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil case "exit.interpreter.file.in_upper_layer": - return e.Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil case "exit.interpreter.file.inode": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "exit.interpreter.file.mode": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "exit.interpreter.file.modification_time": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "exit.interpreter.file.mount_id": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "exit.interpreter.file.name": - return e.Exit.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.name.length": - return len(e.Exit.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.path": - return e.Exit.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.path.length": - return len(e.Exit.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.rights": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields)), nil case "exit.interpreter.file.uid": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "exit.interpreter.file.user": - return e.Exit.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil case "exit.is_kworker": - return e.Exit.Process.PIDContext.IsKworker, nil + return ev.Exit.Process.PIDContext.IsKworker, nil case "exit.is_thread": - return e.Exit.Process.IsThread, nil + return ev.Exit.Process.IsThread, nil case "exit.pid": - return int(e.Exit.Process.PIDContext.Pid), nil + return int(ev.Exit.Process.PIDContext.Pid), nil case "exit.ppid": - return int(e.Exit.Process.PPid), nil + return int(ev.Exit.Process.PPid), nil case "exit.tid": - return int(e.Exit.Process.PIDContext.Tid), nil + return int(ev.Exit.Process.PIDContext.Tid), nil case "exit.tty_name": - return e.Exit.Process.TTYName, nil + return ev.Exit.Process.TTYName, nil case "exit.uid": - return int(e.Exit.Process.Credentials.UID), nil + return int(ev.Exit.Process.Credentials.UID), nil case "exit.user": - return e.Exit.Process.Credentials.User, nil + return ev.Exit.Process.Credentials.User, nil case "link.file.change_time": - return int(e.Link.Source.FileFields.CTime), nil + return int(ev.Link.Source.FileFields.CTime), nil case "link.file.destination.change_time": - return int(e.Link.Target.FileFields.CTime), nil + return int(ev.Link.Target.FileFields.CTime), nil case "link.file.destination.filesystem": - return e.Link.Target.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Target), nil case "link.file.destination.gid": - return int(e.Link.Target.FileFields.GID), nil + return int(ev.Link.Target.FileFields.GID), nil case "link.file.destination.group": - return e.Link.Target.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Target.FileFields), nil case "link.file.destination.in_upper_layer": - return e.Link.Target.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Target.FileFields), nil case "link.file.destination.inode": - return int(e.Link.Target.FileFields.Inode), nil + return int(ev.Link.Target.FileFields.Inode), nil case "link.file.destination.mode": - return int(e.Link.Target.FileFields.Mode), nil + return int(ev.Link.Target.FileFields.Mode), nil case "link.file.destination.modification_time": - return int(e.Link.Target.FileFields.MTime), nil + return int(ev.Link.Target.FileFields.MTime), nil case "link.file.destination.mount_id": - return int(e.Link.Target.FileFields.MountID), nil + return int(ev.Link.Target.FileFields.MountID), nil case "link.file.destination.name": - return e.Link.Target.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target), nil case "link.file.destination.name.length": - return len(e.Link.Target.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target), nil case "link.file.destination.path": - return e.Link.Target.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target), nil case "link.file.destination.path.length": - return len(e.Link.Target.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target), nil case "link.file.destination.rights": - return int(e.Link.Target.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Link.Target.FileFields)), nil case "link.file.destination.uid": - return int(e.Link.Target.FileFields.UID), nil + return int(ev.Link.Target.FileFields.UID), nil case "link.file.destination.user": - return e.Link.Target.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Target.FileFields), nil case "link.file.filesystem": - return e.Link.Source.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Source), nil case "link.file.gid": - return int(e.Link.Source.FileFields.GID), nil + return int(ev.Link.Source.FileFields.GID), nil case "link.file.group": - return e.Link.Source.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Source.FileFields), nil case "link.file.in_upper_layer": - return e.Link.Source.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Source.FileFields), nil case "link.file.inode": - return int(e.Link.Source.FileFields.Inode), nil + return int(ev.Link.Source.FileFields.Inode), nil case "link.file.mode": - return int(e.Link.Source.FileFields.Mode), nil + return int(ev.Link.Source.FileFields.Mode), nil case "link.file.modification_time": - return int(e.Link.Source.FileFields.MTime), nil + return int(ev.Link.Source.FileFields.MTime), nil case "link.file.mount_id": - return int(e.Link.Source.FileFields.MountID), nil + return int(ev.Link.Source.FileFields.MountID), nil case "link.file.name": - return e.Link.Source.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source), nil case "link.file.name.length": - return len(e.Link.Source.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source), nil case "link.file.path": - return e.Link.Source.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source), nil case "link.file.path.length": - return len(e.Link.Source.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source), nil case "link.file.rights": - return int(e.Link.Source.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Link.Source.FileFields)), nil case "link.file.uid": - return int(e.Link.Source.FileFields.UID), nil + return int(ev.Link.Source.FileFields.UID), nil case "link.file.user": - return e.Link.Source.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Source.FileFields), nil case "link.retval": - return int(e.Link.SyscallEvent.Retval), nil + return int(ev.Link.SyscallEvent.Retval), nil case "load_module.file.change_time": - return int(e.LoadModule.File.FileFields.CTime), nil + return int(ev.LoadModule.File.FileFields.CTime), nil case "load_module.file.filesystem": - return e.LoadModule.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.LoadModule.File), nil case "load_module.file.gid": - return int(e.LoadModule.File.FileFields.GID), nil + return int(ev.LoadModule.File.FileFields.GID), nil case "load_module.file.group": - return e.LoadModule.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.LoadModule.File.FileFields), nil case "load_module.file.in_upper_layer": - return e.LoadModule.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.LoadModule.File.FileFields), nil case "load_module.file.inode": - return int(e.LoadModule.File.FileFields.Inode), nil + return int(ev.LoadModule.File.FileFields.Inode), nil case "load_module.file.mode": - return int(e.LoadModule.File.FileFields.Mode), nil + return int(ev.LoadModule.File.FileFields.Mode), nil case "load_module.file.modification_time": - return int(e.LoadModule.File.FileFields.MTime), nil + return int(ev.LoadModule.File.FileFields.MTime), nil case "load_module.file.mount_id": - return int(e.LoadModule.File.FileFields.MountID), nil + return int(ev.LoadModule.File.FileFields.MountID), nil case "load_module.file.name": - return e.LoadModule.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File), nil case "load_module.file.name.length": - return len(e.LoadModule.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File), nil case "load_module.file.path": - return e.LoadModule.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File), nil case "load_module.file.path.length": - return len(e.LoadModule.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File), nil case "load_module.file.rights": - return int(e.LoadModule.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.LoadModule.File.FileFields)), nil case "load_module.file.uid": - return int(e.LoadModule.File.FileFields.UID), nil + return int(ev.LoadModule.File.FileFields.UID), nil case "load_module.file.user": - return e.LoadModule.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.LoadModule.File.FileFields), nil case "load_module.loaded_from_memory": - return e.LoadModule.LoadedFromMemory, nil + return ev.LoadModule.LoadedFromMemory, nil case "load_module.name": - return e.LoadModule.Name, nil + return ev.LoadModule.Name, nil case "load_module.retval": - return int(e.LoadModule.SyscallEvent.Retval), nil + return int(ev.LoadModule.SyscallEvent.Retval), nil case "mkdir.file.change_time": - return int(e.Mkdir.File.FileFields.CTime), nil + return int(ev.Mkdir.File.FileFields.CTime), nil case "mkdir.file.destination.mode": - return int(e.Mkdir.Mode), nil + return int(ev.Mkdir.Mode), nil case "mkdir.file.destination.rights": - return int(e.Mkdir.Mode), nil + return int(ev.Mkdir.Mode), nil case "mkdir.file.filesystem": - return e.Mkdir.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Mkdir.File), nil case "mkdir.file.gid": - return int(e.Mkdir.File.FileFields.GID), nil + return int(ev.Mkdir.File.FileFields.GID), nil case "mkdir.file.group": - return e.Mkdir.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Mkdir.File.FileFields), nil case "mkdir.file.in_upper_layer": - return e.Mkdir.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Mkdir.File.FileFields), nil case "mkdir.file.inode": - return int(e.Mkdir.File.FileFields.Inode), nil + return int(ev.Mkdir.File.FileFields.Inode), nil case "mkdir.file.mode": - return int(e.Mkdir.File.FileFields.Mode), nil + return int(ev.Mkdir.File.FileFields.Mode), nil case "mkdir.file.modification_time": - return int(e.Mkdir.File.FileFields.MTime), nil + return int(ev.Mkdir.File.FileFields.MTime), nil case "mkdir.file.mount_id": - return int(e.Mkdir.File.FileFields.MountID), nil + return int(ev.Mkdir.File.FileFields.MountID), nil case "mkdir.file.name": - return e.Mkdir.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File), nil case "mkdir.file.name.length": - return len(e.Mkdir.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File), nil case "mkdir.file.path": - return e.Mkdir.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File), nil case "mkdir.file.path.length": - return len(e.Mkdir.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File), nil case "mkdir.file.rights": - return int(e.Mkdir.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Mkdir.File.FileFields)), nil case "mkdir.file.uid": - return int(e.Mkdir.File.FileFields.UID), nil + return int(ev.Mkdir.File.FileFields.UID), nil case "mkdir.file.user": - return e.Mkdir.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Mkdir.File.FileFields), nil case "mkdir.retval": - return int(e.Mkdir.SyscallEvent.Retval), nil + return int(ev.Mkdir.SyscallEvent.Retval), nil case "mmap.file.change_time": - return int(e.MMap.File.FileFields.CTime), nil + return int(ev.MMap.File.FileFields.CTime), nil case "mmap.file.filesystem": - return e.MMap.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.MMap.File), nil case "mmap.file.gid": - return int(e.MMap.File.FileFields.GID), nil + return int(ev.MMap.File.FileFields.GID), nil case "mmap.file.group": - return e.MMap.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.MMap.File.FileFields), nil case "mmap.file.in_upper_layer": - return e.MMap.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.MMap.File.FileFields), nil case "mmap.file.inode": - return int(e.MMap.File.FileFields.Inode), nil + return int(ev.MMap.File.FileFields.Inode), nil case "mmap.file.mode": - return int(e.MMap.File.FileFields.Mode), nil + return int(ev.MMap.File.FileFields.Mode), nil case "mmap.file.modification_time": - return int(e.MMap.File.FileFields.MTime), nil + return int(ev.MMap.File.FileFields.MTime), nil case "mmap.file.mount_id": - return int(e.MMap.File.FileFields.MountID), nil + return int(ev.MMap.File.FileFields.MountID), nil case "mmap.file.name": - return e.MMap.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File), nil case "mmap.file.name.length": - return len(e.MMap.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File), nil case "mmap.file.path": - return e.MMap.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File), nil case "mmap.file.path.length": - return len(e.MMap.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File), nil case "mmap.file.rights": - return int(e.MMap.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.MMap.File.FileFields)), nil case "mmap.file.uid": - return int(e.MMap.File.FileFields.UID), nil + return int(ev.MMap.File.FileFields.UID), nil case "mmap.file.user": - return e.MMap.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.MMap.File.FileFields), nil case "mmap.flags": - return e.MMap.Flags, nil + return ev.MMap.Flags, nil case "mmap.protection": - return e.MMap.Protection, nil + return ev.MMap.Protection, nil case "mmap.retval": - return int(e.MMap.SyscallEvent.Retval), nil + return int(ev.MMap.SyscallEvent.Retval), nil + case "mount.fs_type": + return ev.Mount.Mount.FSType, nil + case "mount.mountpoint.path": + return ev.FieldHandlers.ResolveMountPointPath(ev, &ev.Mount), nil + case "mount.retval": + return int(ev.Mount.SyscallEvent.Retval), nil + case "mount.source.path": + return ev.FieldHandlers.ResolveMountSourcePath(ev, &ev.Mount), nil case "mprotect.req_protection": - return e.MProtect.ReqProtection, nil + return ev.MProtect.ReqProtection, nil case "mprotect.retval": - return int(e.MProtect.SyscallEvent.Retval), nil + return int(ev.MProtect.SyscallEvent.Retval), nil case "mprotect.vm_protection": - return e.MProtect.VMProtection, nil + return ev.MProtect.VMProtection, nil case "network.destination.ip": - return e.NetworkContext.Destination.IPNet, nil + return ev.NetworkContext.Destination.IPNet, nil case "network.destination.port": - return int(e.NetworkContext.Destination.Port), nil + return int(ev.NetworkContext.Destination.Port), nil case "network.device.ifindex": - return int(e.NetworkContext.Device.IfIndex), nil + return int(ev.NetworkContext.Device.IfIndex), nil case "network.device.ifname": - return e.NetworkContext.Device.IfName, nil + return ev.FieldHandlers.ResolveNetworkDeviceIfName(ev, &ev.NetworkContext.Device), nil case "network.l3_protocol": - return int(e.NetworkContext.L3Protocol), nil + return int(ev.NetworkContext.L3Protocol), nil case "network.l4_protocol": - return int(e.NetworkContext.L4Protocol), nil + return int(ev.NetworkContext.L4Protocol), nil case "network.size": - return int(e.NetworkContext.Size), nil + return int(ev.NetworkContext.Size), nil case "network.source.ip": - return e.NetworkContext.Source.IPNet, nil + return ev.NetworkContext.Source.IPNet, nil case "network.source.port": - return int(e.NetworkContext.Source.Port), nil + return int(ev.NetworkContext.Source.Port), nil case "open.file.change_time": - return int(e.Open.File.FileFields.CTime), nil + return int(ev.Open.File.FileFields.CTime), nil case "open.file.destination.mode": - return int(e.Open.Mode), nil + return int(ev.Open.Mode), nil case "open.file.filesystem": - return e.Open.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Open.File), nil case "open.file.gid": - return int(e.Open.File.FileFields.GID), nil + return int(ev.Open.File.FileFields.GID), nil case "open.file.group": - return e.Open.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Open.File.FileFields), nil case "open.file.in_upper_layer": - return e.Open.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Open.File.FileFields), nil case "open.file.inode": - return int(e.Open.File.FileFields.Inode), nil + return int(ev.Open.File.FileFields.Inode), nil case "open.file.mode": - return int(e.Open.File.FileFields.Mode), nil + return int(ev.Open.File.FileFields.Mode), nil case "open.file.modification_time": - return int(e.Open.File.FileFields.MTime), nil + return int(ev.Open.File.FileFields.MTime), nil case "open.file.mount_id": - return int(e.Open.File.FileFields.MountID), nil + return int(ev.Open.File.FileFields.MountID), nil case "open.file.name": - return e.Open.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File), nil case "open.file.name.length": - return len(e.Open.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File), nil case "open.file.path": - return e.Open.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File), nil case "open.file.path.length": - return len(e.Open.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File), nil case "open.file.rights": - return int(e.Open.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Open.File.FileFields)), nil case "open.file.uid": - return int(e.Open.File.FileFields.UID), nil + return int(ev.Open.File.FileFields.UID), nil case "open.file.user": - return e.Open.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Open.File.FileFields), nil case "open.flags": - return int(e.Open.Flags), nil + return int(ev.Open.Flags), nil case "open.retval": - return int(e.Open.SyscallEvent.Retval), nil + return int(ev.Open.SyscallEvent.Retval), nil case "process.ancestors.args": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.args_flags": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.args_options": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.args_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.argv": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.argv0": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.cap_effective": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13133,7 +15939,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.cap_permitted": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13145,7 +15951,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.comm": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13157,7 +15963,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.container.id": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13169,7 +15975,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.cookie": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13181,19 +15987,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.created_at": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.egid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13205,7 +16011,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.egroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13217,43 +16023,43 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.envp": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.envs": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.envs_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.euid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13265,7 +16071,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.euser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13277,7 +16083,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13289,19 +16095,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13313,31 +16119,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13349,7 +16155,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13361,7 +16167,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13373,7 +16179,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13385,67 +16191,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13457,19 +16263,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.fsgid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13481,7 +16287,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.fsgroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13493,7 +16299,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.fsuid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13505,7 +16311,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.fsuser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13517,7 +16323,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13529,7 +16335,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13541,7 +16347,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13553,19 +16359,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13577,31 +16383,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13613,7 +16419,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13625,7 +16431,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13637,7 +16443,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13649,67 +16455,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13721,19 +16527,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.is_kworker": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13745,7 +16551,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.is_thread": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13757,7 +16563,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.pid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13769,7 +16575,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.ppid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13781,7 +16587,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.tid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13793,7 +16599,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.tty_name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13805,7 +16611,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13817,7 +16623,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13828,344 +16634,344 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { } return values, nil case "process.args": - return e.ProcessContext.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.ProcessContext.Process), nil case "process.args_flags": - return e.ProcessContext.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.ProcessContext.Process), nil case "process.args_options": - return e.ProcessContext.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.ProcessContext.Process), nil case "process.args_truncated": - return e.ProcessContext.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.ProcessContext.Process), nil case "process.argv": - return e.ProcessContext.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.ProcessContext.Process), nil case "process.argv0": - return e.ProcessContext.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.ProcessContext.Process), nil case "process.cap_effective": - return int(e.ProcessContext.Process.Credentials.CapEffective), nil + return int(ev.ProcessContext.Process.Credentials.CapEffective), nil case "process.cap_permitted": - return int(e.ProcessContext.Process.Credentials.CapPermitted), nil + return int(ev.ProcessContext.Process.Credentials.CapPermitted), nil case "process.comm": - return e.ProcessContext.Process.Comm, nil + return ev.ProcessContext.Process.Comm, nil case "process.container.id": - return e.ProcessContext.Process.ContainerID, nil + return ev.ProcessContext.Process.ContainerID, nil case "process.cookie": - return int(e.ProcessContext.Process.Cookie), nil + return int(ev.ProcessContext.Process.Cookie), nil case "process.created_at": - return int(e.ProcessContext.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.ProcessContext.Process)), nil case "process.egid": - return int(e.ProcessContext.Process.Credentials.EGID), nil + return int(ev.ProcessContext.Process.Credentials.EGID), nil case "process.egroup": - return e.ProcessContext.Process.Credentials.EGroup, nil + return ev.ProcessContext.Process.Credentials.EGroup, nil case "process.envp": - return e.ProcessContext.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.ProcessContext.Process), nil case "process.envs": - return e.ProcessContext.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.ProcessContext.Process), nil case "process.envs_truncated": - return e.ProcessContext.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.ProcessContext.Process), nil case "process.euid": - return int(e.ProcessContext.Process.Credentials.EUID), nil + return int(ev.ProcessContext.Process.Credentials.EUID), nil case "process.euser": - return e.ProcessContext.Process.Credentials.EUser, nil + return ev.ProcessContext.Process.Credentials.EUser, nil case "process.file.change_time": - return int(e.ProcessContext.Process.FileEvent.FileFields.CTime), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.CTime), nil case "process.file.filesystem": - return e.ProcessContext.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.gid": - return int(e.ProcessContext.Process.FileEvent.FileFields.GID), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.GID), nil case "process.file.group": - return e.ProcessContext.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.FileEvent.FileFields), nil case "process.file.in_upper_layer": - return e.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.FileEvent.FileFields), nil case "process.file.inode": - return int(e.ProcessContext.Process.FileEvent.FileFields.Inode), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.Inode), nil case "process.file.mode": - return int(e.ProcessContext.Process.FileEvent.FileFields.Mode), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.Mode), nil case "process.file.modification_time": - return int(e.ProcessContext.Process.FileEvent.FileFields.MTime), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.MTime), nil case "process.file.mount_id": - return int(e.ProcessContext.Process.FileEvent.FileFields.MountID), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.MountID), nil case "process.file.name": - return e.ProcessContext.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.name.length": - return len(e.ProcessContext.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.path": - return e.ProcessContext.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.path.length": - return len(e.ProcessContext.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.rights": - return int(e.ProcessContext.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Process.FileEvent.FileFields)), nil case "process.file.uid": - return int(e.ProcessContext.Process.FileEvent.FileFields.UID), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.UID), nil case "process.file.user": - return e.ProcessContext.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.FileEvent.FileFields), nil case "process.fsgid": - return int(e.ProcessContext.Process.Credentials.FSGID), nil + return int(ev.ProcessContext.Process.Credentials.FSGID), nil case "process.fsgroup": - return e.ProcessContext.Process.Credentials.FSGroup, nil + return ev.ProcessContext.Process.Credentials.FSGroup, nil case "process.fsuid": - return int(e.ProcessContext.Process.Credentials.FSUID), nil + return int(ev.ProcessContext.Process.Credentials.FSUID), nil case "process.fsuser": - return e.ProcessContext.Process.Credentials.FSUser, nil + return ev.ProcessContext.Process.Credentials.FSUser, nil case "process.gid": - return int(e.ProcessContext.Process.Credentials.GID), nil + return int(ev.ProcessContext.Process.Credentials.GID), nil case "process.group": - return e.ProcessContext.Process.Credentials.Group, nil + return ev.ProcessContext.Process.Credentials.Group, nil case "process.interpreter.file.change_time": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "process.interpreter.file.filesystem": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.gid": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "process.interpreter.file.group": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil case "process.interpreter.file.in_upper_layer": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil case "process.interpreter.file.inode": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "process.interpreter.file.mode": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "process.interpreter.file.modification_time": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "process.interpreter.file.mount_id": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "process.interpreter.file.name": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.name.length": - return len(e.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.path": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.path.length": - return len(e.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.rights": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)), nil case "process.interpreter.file.uid": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "process.interpreter.file.user": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil case "process.is_kworker": - return e.ProcessContext.Process.PIDContext.IsKworker, nil + return ev.ProcessContext.Process.PIDContext.IsKworker, nil case "process.is_thread": - return e.ProcessContext.Process.IsThread, nil + return ev.ProcessContext.Process.IsThread, nil case "process.parent.args": - return e.ProcessContext.Parent.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.ProcessContext.Parent), nil case "process.parent.args_flags": - return e.ProcessContext.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.ProcessContext.Parent), nil case "process.parent.args_options": - return e.ProcessContext.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.ProcessContext.Parent), nil case "process.parent.args_truncated": - return e.ProcessContext.Parent.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.ProcessContext.Parent), nil case "process.parent.argv": - return e.ProcessContext.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.ProcessContext.Parent), nil case "process.parent.argv0": - return e.ProcessContext.Parent.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.ProcessContext.Parent), nil case "process.parent.cap_effective": - return int(e.ProcessContext.Parent.Credentials.CapEffective), nil + return int(ev.ProcessContext.Parent.Credentials.CapEffective), nil case "process.parent.cap_permitted": - return int(e.ProcessContext.Parent.Credentials.CapPermitted), nil + return int(ev.ProcessContext.Parent.Credentials.CapPermitted), nil case "process.parent.comm": - return e.ProcessContext.Parent.Comm, nil + return ev.ProcessContext.Parent.Comm, nil case "process.parent.container.id": - return e.ProcessContext.Parent.ContainerID, nil + return ev.ProcessContext.Parent.ContainerID, nil case "process.parent.cookie": - return int(e.ProcessContext.Parent.Cookie), nil + return int(ev.ProcessContext.Parent.Cookie), nil case "process.parent.created_at": - return int(e.ProcessContext.Parent.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.ProcessContext.Parent)), nil case "process.parent.egid": - return int(e.ProcessContext.Parent.Credentials.EGID), nil + return int(ev.ProcessContext.Parent.Credentials.EGID), nil case "process.parent.egroup": - return e.ProcessContext.Parent.Credentials.EGroup, nil + return ev.ProcessContext.Parent.Credentials.EGroup, nil case "process.parent.envp": - return e.ProcessContext.Parent.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.ProcessContext.Parent), nil case "process.parent.envs": - return e.ProcessContext.Parent.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.ProcessContext.Parent), nil case "process.parent.envs_truncated": - return e.ProcessContext.Parent.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.ProcessContext.Parent), nil case "process.parent.euid": - return int(e.ProcessContext.Parent.Credentials.EUID), nil + return int(ev.ProcessContext.Parent.Credentials.EUID), nil case "process.parent.euser": - return e.ProcessContext.Parent.Credentials.EUser, nil + return ev.ProcessContext.Parent.Credentials.EUser, nil case "process.parent.file.change_time": - return int(e.ProcessContext.Parent.FileEvent.FileFields.CTime), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.CTime), nil case "process.parent.file.filesystem": - return e.ProcessContext.Parent.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.gid": - return int(e.ProcessContext.Parent.FileEvent.FileFields.GID), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.GID), nil case "process.parent.file.group": - return e.ProcessContext.Parent.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.FileEvent.FileFields), nil case "process.parent.file.in_upper_layer": - return e.ProcessContext.Parent.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.FileEvent.FileFields), nil case "process.parent.file.inode": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Inode), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.Inode), nil case "process.parent.file.mode": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Mode), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.Mode), nil case "process.parent.file.modification_time": - return int(e.ProcessContext.Parent.FileEvent.FileFields.MTime), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.MTime), nil case "process.parent.file.mount_id": - return int(e.ProcessContext.Parent.FileEvent.FileFields.MountID), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.MountID), nil case "process.parent.file.name": - return e.ProcessContext.Parent.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.name.length": - return len(e.ProcessContext.Parent.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.path": - return e.ProcessContext.Parent.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.path.length": - return len(e.ProcessContext.Parent.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.rights": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Parent.FileEvent.FileFields)), nil case "process.parent.file.uid": - return int(e.ProcessContext.Parent.FileEvent.FileFields.UID), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.UID), nil case "process.parent.file.user": - return e.ProcessContext.Parent.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.FileEvent.FileFields), nil case "process.parent.fsgid": - return int(e.ProcessContext.Parent.Credentials.FSGID), nil + return int(ev.ProcessContext.Parent.Credentials.FSGID), nil case "process.parent.fsgroup": - return e.ProcessContext.Parent.Credentials.FSGroup, nil + return ev.ProcessContext.Parent.Credentials.FSGroup, nil case "process.parent.fsuid": - return int(e.ProcessContext.Parent.Credentials.FSUID), nil + return int(ev.ProcessContext.Parent.Credentials.FSUID), nil case "process.parent.fsuser": - return e.ProcessContext.Parent.Credentials.FSUser, nil + return ev.ProcessContext.Parent.Credentials.FSUser, nil case "process.parent.gid": - return int(e.ProcessContext.Parent.Credentials.GID), nil + return int(ev.ProcessContext.Parent.Credentials.GID), nil case "process.parent.group": - return e.ProcessContext.Parent.Credentials.Group, nil + return ev.ProcessContext.Parent.Credentials.Group, nil case "process.parent.interpreter.file.change_time": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil case "process.parent.interpreter.file.filesystem": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.gid": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil case "process.parent.interpreter.file.group": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil case "process.parent.interpreter.file.in_upper_layer": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil case "process.parent.interpreter.file.inode": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil case "process.parent.interpreter.file.mode": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil case "process.parent.interpreter.file.modification_time": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil case "process.parent.interpreter.file.mount_id": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil case "process.parent.interpreter.file.name": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.name.length": - return len(e.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.path": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.path.length": - return len(e.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.rights": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields)), nil case "process.parent.interpreter.file.uid": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil case "process.parent.interpreter.file.user": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil case "process.parent.is_kworker": - return e.ProcessContext.Parent.PIDContext.IsKworker, nil + return ev.ProcessContext.Parent.PIDContext.IsKworker, nil case "process.parent.is_thread": - return e.ProcessContext.Parent.IsThread, nil + return ev.ProcessContext.Parent.IsThread, nil case "process.parent.pid": - return int(e.ProcessContext.Parent.PIDContext.Pid), nil + return int(ev.ProcessContext.Parent.PIDContext.Pid), nil case "process.parent.ppid": - return int(e.ProcessContext.Parent.PPid), nil + return int(ev.ProcessContext.Parent.PPid), nil case "process.parent.tid": - return int(e.ProcessContext.Parent.PIDContext.Tid), nil + return int(ev.ProcessContext.Parent.PIDContext.Tid), nil case "process.parent.tty_name": - return e.ProcessContext.Parent.TTYName, nil + return ev.ProcessContext.Parent.TTYName, nil case "process.parent.uid": - return int(e.ProcessContext.Parent.Credentials.UID), nil + return int(ev.ProcessContext.Parent.Credentials.UID), nil case "process.parent.user": - return e.ProcessContext.Parent.Credentials.User, nil + return ev.ProcessContext.Parent.Credentials.User, nil case "process.pid": - return int(e.ProcessContext.Process.PIDContext.Pid), nil + return int(ev.ProcessContext.Process.PIDContext.Pid), nil case "process.ppid": - return int(e.ProcessContext.Process.PPid), nil + return int(ev.ProcessContext.Process.PPid), nil case "process.tid": - return int(e.ProcessContext.Process.PIDContext.Tid), nil + return int(ev.ProcessContext.Process.PIDContext.Tid), nil case "process.tty_name": - return e.ProcessContext.Process.TTYName, nil + return ev.ProcessContext.Process.TTYName, nil case "process.uid": - return int(e.ProcessContext.Process.Credentials.UID), nil + return int(ev.ProcessContext.Process.Credentials.UID), nil case "process.user": - return e.ProcessContext.Process.Credentials.User, nil + return ev.ProcessContext.Process.Credentials.User, nil case "ptrace.request": - return int(e.PTrace.Request), nil + return int(ev.PTrace.Request), nil case "ptrace.retval": - return int(e.PTrace.SyscallEvent.Retval), nil + return int(ev.PTrace.SyscallEvent.Retval), nil case "ptrace.tracee.ancestors.args": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.args_flags": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.args_options": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.args_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.argv": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.argv0": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.cap_effective": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14177,7 +16983,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.cap_permitted": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14189,7 +16995,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.comm": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14201,7 +17007,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.container.id": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14213,7 +17019,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.cookie": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14225,19 +17031,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.created_at": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.egid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14249,7 +17055,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.egroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14261,43 +17067,43 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.envp": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.envs": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.envs_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.euid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14309,7 +17115,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.euser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14321,7 +17127,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14333,19 +17139,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14357,31 +17163,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14393,7 +17199,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14405,7 +17211,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14417,7 +17223,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14429,67 +17235,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14501,19 +17307,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.fsgid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14525,7 +17331,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.fsgroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14537,7 +17343,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.fsuid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14549,7 +17355,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.fsuser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14561,7 +17367,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14573,7 +17379,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14585,7 +17391,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14597,19 +17403,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14621,31 +17427,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14657,7 +17463,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14669,7 +17475,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14681,7 +17487,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14693,67 +17499,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14765,19 +17571,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.is_kworker": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14789,7 +17595,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.is_thread": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14801,7 +17607,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.pid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14813,7 +17619,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.ppid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14825,7 +17631,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.tid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14837,7 +17643,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.tty_name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14849,7 +17655,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14861,7 +17667,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14872,552 +17678,552 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { } return values, nil case "ptrace.tracee.args": - return e.PTrace.Tracee.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.args_flags": - return e.PTrace.Tracee.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.args_options": - return e.PTrace.Tracee.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.args_truncated": - return e.PTrace.Tracee.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.argv": - return e.PTrace.Tracee.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.argv0": - return e.PTrace.Tracee.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.cap_effective": - return int(e.PTrace.Tracee.Process.Credentials.CapEffective), nil + return int(ev.PTrace.Tracee.Process.Credentials.CapEffective), nil case "ptrace.tracee.cap_permitted": - return int(e.PTrace.Tracee.Process.Credentials.CapPermitted), nil + return int(ev.PTrace.Tracee.Process.Credentials.CapPermitted), nil case "ptrace.tracee.comm": - return e.PTrace.Tracee.Process.Comm, nil + return ev.PTrace.Tracee.Process.Comm, nil case "ptrace.tracee.container.id": - return e.PTrace.Tracee.Process.ContainerID, nil + return ev.PTrace.Tracee.Process.ContainerID, nil case "ptrace.tracee.cookie": - return int(e.PTrace.Tracee.Process.Cookie), nil + return int(ev.PTrace.Tracee.Process.Cookie), nil case "ptrace.tracee.created_at": - return int(e.PTrace.Tracee.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.PTrace.Tracee.Process)), nil case "ptrace.tracee.egid": - return int(e.PTrace.Tracee.Process.Credentials.EGID), nil + return int(ev.PTrace.Tracee.Process.Credentials.EGID), nil case "ptrace.tracee.egroup": - return e.PTrace.Tracee.Process.Credentials.EGroup, nil + return ev.PTrace.Tracee.Process.Credentials.EGroup, nil case "ptrace.tracee.envp": - return e.PTrace.Tracee.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.envs": - return e.PTrace.Tracee.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.envs_truncated": - return e.PTrace.Tracee.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.euid": - return int(e.PTrace.Tracee.Process.Credentials.EUID), nil + return int(ev.PTrace.Tracee.Process.Credentials.EUID), nil case "ptrace.tracee.euser": - return e.PTrace.Tracee.Process.Credentials.EUser, nil + return ev.PTrace.Tracee.Process.Credentials.EUser, nil case "ptrace.tracee.file.change_time": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.CTime), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.CTime), nil case "ptrace.tracee.file.filesystem": - return e.PTrace.Tracee.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.gid": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.GID), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.GID), nil case "ptrace.tracee.file.group": - return e.PTrace.Tracee.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields), nil case "ptrace.tracee.file.in_upper_layer": - return e.PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields), nil case "ptrace.tracee.file.inode": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Inode), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.Inode), nil case "ptrace.tracee.file.mode": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Mode), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.Mode), nil case "ptrace.tracee.file.modification_time": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.MTime), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.MTime), nil case "ptrace.tracee.file.mount_id": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.MountID), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.MountID), nil case "ptrace.tracee.file.name": - return e.PTrace.Tracee.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.name.length": - return len(e.PTrace.Tracee.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.path": - return e.PTrace.Tracee.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.path.length": - return len(e.PTrace.Tracee.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.rights": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields)), nil case "ptrace.tracee.file.uid": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.UID), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.UID), nil case "ptrace.tracee.file.user": - return e.PTrace.Tracee.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields), nil case "ptrace.tracee.fsgid": - return int(e.PTrace.Tracee.Process.Credentials.FSGID), nil + return int(ev.PTrace.Tracee.Process.Credentials.FSGID), nil case "ptrace.tracee.fsgroup": - return e.PTrace.Tracee.Process.Credentials.FSGroup, nil + return ev.PTrace.Tracee.Process.Credentials.FSGroup, nil case "ptrace.tracee.fsuid": - return int(e.PTrace.Tracee.Process.Credentials.FSUID), nil + return int(ev.PTrace.Tracee.Process.Credentials.FSUID), nil case "ptrace.tracee.fsuser": - return e.PTrace.Tracee.Process.Credentials.FSUser, nil + return ev.PTrace.Tracee.Process.Credentials.FSUser, nil case "ptrace.tracee.gid": - return int(e.PTrace.Tracee.Process.Credentials.GID), nil + return int(ev.PTrace.Tracee.Process.Credentials.GID), nil case "ptrace.tracee.group": - return e.PTrace.Tracee.Process.Credentials.Group, nil + return ev.PTrace.Tracee.Process.Credentials.Group, nil case "ptrace.tracee.interpreter.file.change_time": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "ptrace.tracee.interpreter.file.filesystem": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.gid": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "ptrace.tracee.interpreter.file.group": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.interpreter.file.in_upper_layer": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.interpreter.file.inode": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "ptrace.tracee.interpreter.file.mode": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "ptrace.tracee.interpreter.file.modification_time": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "ptrace.tracee.interpreter.file.mount_id": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "ptrace.tracee.interpreter.file.name": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.name.length": - return len(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.path": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.path.length": - return len(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.rights": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields)), nil case "ptrace.tracee.interpreter.file.uid": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "ptrace.tracee.interpreter.file.user": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.is_kworker": - return e.PTrace.Tracee.Process.PIDContext.IsKworker, nil + return ev.PTrace.Tracee.Process.PIDContext.IsKworker, nil case "ptrace.tracee.is_thread": - return e.PTrace.Tracee.Process.IsThread, nil + return ev.PTrace.Tracee.Process.IsThread, nil case "ptrace.tracee.parent.args": - return e.PTrace.Tracee.Parent.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.args_flags": - return e.PTrace.Tracee.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.args_options": - return e.PTrace.Tracee.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.args_truncated": - return e.PTrace.Tracee.Parent.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.argv": - return e.PTrace.Tracee.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.argv0": - return e.PTrace.Tracee.Parent.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.cap_effective": - return int(e.PTrace.Tracee.Parent.Credentials.CapEffective), nil + return int(ev.PTrace.Tracee.Parent.Credentials.CapEffective), nil case "ptrace.tracee.parent.cap_permitted": - return int(e.PTrace.Tracee.Parent.Credentials.CapPermitted), nil + return int(ev.PTrace.Tracee.Parent.Credentials.CapPermitted), nil case "ptrace.tracee.parent.comm": - return e.PTrace.Tracee.Parent.Comm, nil + return ev.PTrace.Tracee.Parent.Comm, nil case "ptrace.tracee.parent.container.id": - return e.PTrace.Tracee.Parent.ContainerID, nil + return ev.PTrace.Tracee.Parent.ContainerID, nil case "ptrace.tracee.parent.cookie": - return int(e.PTrace.Tracee.Parent.Cookie), nil + return int(ev.PTrace.Tracee.Parent.Cookie), nil case "ptrace.tracee.parent.created_at": - return int(e.PTrace.Tracee.Parent.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.PTrace.Tracee.Parent)), nil case "ptrace.tracee.parent.egid": - return int(e.PTrace.Tracee.Parent.Credentials.EGID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.EGID), nil case "ptrace.tracee.parent.egroup": - return e.PTrace.Tracee.Parent.Credentials.EGroup, nil + return ev.PTrace.Tracee.Parent.Credentials.EGroup, nil case "ptrace.tracee.parent.envp": - return e.PTrace.Tracee.Parent.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.envs": - return e.PTrace.Tracee.Parent.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.envs_truncated": - return e.PTrace.Tracee.Parent.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.euid": - return int(e.PTrace.Tracee.Parent.Credentials.EUID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.EUID), nil case "ptrace.tracee.parent.euser": - return e.PTrace.Tracee.Parent.Credentials.EUser, nil + return ev.PTrace.Tracee.Parent.Credentials.EUser, nil case "ptrace.tracee.parent.file.change_time": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.CTime), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.CTime), nil case "ptrace.tracee.parent.file.filesystem": - return e.PTrace.Tracee.Parent.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.gid": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.GID), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.GID), nil case "ptrace.tracee.parent.file.group": - return e.PTrace.Tracee.Parent.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields), nil case "ptrace.tracee.parent.file.in_upper_layer": - return e.PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields), nil case "ptrace.tracee.parent.file.inode": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Inode), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.Inode), nil case "ptrace.tracee.parent.file.mode": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.Mode), nil case "ptrace.tracee.parent.file.modification_time": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.MTime), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.MTime), nil case "ptrace.tracee.parent.file.mount_id": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.MountID), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.MountID), nil case "ptrace.tracee.parent.file.name": - return e.PTrace.Tracee.Parent.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.name.length": - return len(e.PTrace.Tracee.Parent.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.path": - return e.PTrace.Tracee.Parent.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.path.length": - return len(e.PTrace.Tracee.Parent.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.rights": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields)), nil case "ptrace.tracee.parent.file.uid": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.UID), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.UID), nil case "ptrace.tracee.parent.file.user": - return e.PTrace.Tracee.Parent.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields), nil case "ptrace.tracee.parent.fsgid": - return int(e.PTrace.Tracee.Parent.Credentials.FSGID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.FSGID), nil case "ptrace.tracee.parent.fsgroup": - return e.PTrace.Tracee.Parent.Credentials.FSGroup, nil + return ev.PTrace.Tracee.Parent.Credentials.FSGroup, nil case "ptrace.tracee.parent.fsuid": - return int(e.PTrace.Tracee.Parent.Credentials.FSUID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.FSUID), nil case "ptrace.tracee.parent.fsuser": - return e.PTrace.Tracee.Parent.Credentials.FSUser, nil + return ev.PTrace.Tracee.Parent.Credentials.FSUser, nil case "ptrace.tracee.parent.gid": - return int(e.PTrace.Tracee.Parent.Credentials.GID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.GID), nil case "ptrace.tracee.parent.group": - return e.PTrace.Tracee.Parent.Credentials.Group, nil + return ev.PTrace.Tracee.Parent.Credentials.Group, nil case "ptrace.tracee.parent.interpreter.file.change_time": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil case "ptrace.tracee.parent.interpreter.file.filesystem": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.gid": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil case "ptrace.tracee.parent.interpreter.file.group": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.parent.interpreter.file.inode": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil case "ptrace.tracee.parent.interpreter.file.mode": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil case "ptrace.tracee.parent.interpreter.file.modification_time": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil case "ptrace.tracee.parent.interpreter.file.mount_id": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil case "ptrace.tracee.parent.interpreter.file.name": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.name.length": - return len(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.path": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.path.length": - return len(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.rights": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields)), nil case "ptrace.tracee.parent.interpreter.file.uid": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil case "ptrace.tracee.parent.interpreter.file.user": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.parent.is_kworker": - return e.PTrace.Tracee.Parent.PIDContext.IsKworker, nil + return ev.PTrace.Tracee.Parent.PIDContext.IsKworker, nil case "ptrace.tracee.parent.is_thread": - return e.PTrace.Tracee.Parent.IsThread, nil + return ev.PTrace.Tracee.Parent.IsThread, nil case "ptrace.tracee.parent.pid": - return int(e.PTrace.Tracee.Parent.PIDContext.Pid), nil + return int(ev.PTrace.Tracee.Parent.PIDContext.Pid), nil case "ptrace.tracee.parent.ppid": - return int(e.PTrace.Tracee.Parent.PPid), nil + return int(ev.PTrace.Tracee.Parent.PPid), nil case "ptrace.tracee.parent.tid": - return int(e.PTrace.Tracee.Parent.PIDContext.Tid), nil + return int(ev.PTrace.Tracee.Parent.PIDContext.Tid), nil case "ptrace.tracee.parent.tty_name": - return e.PTrace.Tracee.Parent.TTYName, nil + return ev.PTrace.Tracee.Parent.TTYName, nil case "ptrace.tracee.parent.uid": - return int(e.PTrace.Tracee.Parent.Credentials.UID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.UID), nil case "ptrace.tracee.parent.user": - return e.PTrace.Tracee.Parent.Credentials.User, nil + return ev.PTrace.Tracee.Parent.Credentials.User, nil case "ptrace.tracee.pid": - return int(e.PTrace.Tracee.Process.PIDContext.Pid), nil + return int(ev.PTrace.Tracee.Process.PIDContext.Pid), nil case "ptrace.tracee.ppid": - return int(e.PTrace.Tracee.Process.PPid), nil + return int(ev.PTrace.Tracee.Process.PPid), nil case "ptrace.tracee.tid": - return int(e.PTrace.Tracee.Process.PIDContext.Tid), nil + return int(ev.PTrace.Tracee.Process.PIDContext.Tid), nil case "ptrace.tracee.tty_name": - return e.PTrace.Tracee.Process.TTYName, nil + return ev.PTrace.Tracee.Process.TTYName, nil case "ptrace.tracee.uid": - return int(e.PTrace.Tracee.Process.Credentials.UID), nil + return int(ev.PTrace.Tracee.Process.Credentials.UID), nil case "ptrace.tracee.user": - return e.PTrace.Tracee.Process.Credentials.User, nil + return ev.PTrace.Tracee.Process.Credentials.User, nil case "removexattr.file.change_time": - return int(e.RemoveXAttr.File.FileFields.CTime), nil + return int(ev.RemoveXAttr.File.FileFields.CTime), nil case "removexattr.file.destination.name": - return e.RemoveXAttr.Name, nil + return ev.FieldHandlers.ResolveXAttrName(ev, &ev.RemoveXAttr), nil case "removexattr.file.destination.namespace": - return e.RemoveXAttr.Namespace, nil + return ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.RemoveXAttr), nil case "removexattr.file.filesystem": - return e.RemoveXAttr.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.gid": - return int(e.RemoveXAttr.File.FileFields.GID), nil + return int(ev.RemoveXAttr.File.FileFields.GID), nil case "removexattr.file.group": - return e.RemoveXAttr.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.RemoveXAttr.File.FileFields), nil case "removexattr.file.in_upper_layer": - return e.RemoveXAttr.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.RemoveXAttr.File.FileFields), nil case "removexattr.file.inode": - return int(e.RemoveXAttr.File.FileFields.Inode), nil + return int(ev.RemoveXAttr.File.FileFields.Inode), nil case "removexattr.file.mode": - return int(e.RemoveXAttr.File.FileFields.Mode), nil + return int(ev.RemoveXAttr.File.FileFields.Mode), nil case "removexattr.file.modification_time": - return int(e.RemoveXAttr.File.FileFields.MTime), nil + return int(ev.RemoveXAttr.File.FileFields.MTime), nil case "removexattr.file.mount_id": - return int(e.RemoveXAttr.File.FileFields.MountID), nil + return int(ev.RemoveXAttr.File.FileFields.MountID), nil case "removexattr.file.name": - return e.RemoveXAttr.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.name.length": - return len(e.RemoveXAttr.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.path": - return e.RemoveXAttr.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.path.length": - return len(e.RemoveXAttr.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.rights": - return int(e.RemoveXAttr.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.RemoveXAttr.File.FileFields)), nil case "removexattr.file.uid": - return int(e.RemoveXAttr.File.FileFields.UID), nil + return int(ev.RemoveXAttr.File.FileFields.UID), nil case "removexattr.file.user": - return e.RemoveXAttr.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.RemoveXAttr.File.FileFields), nil case "removexattr.retval": - return int(e.RemoveXAttr.SyscallEvent.Retval), nil + return int(ev.RemoveXAttr.SyscallEvent.Retval), nil case "rename.file.change_time": - return int(e.Rename.Old.FileFields.CTime), nil + return int(ev.Rename.Old.FileFields.CTime), nil case "rename.file.destination.change_time": - return int(e.Rename.New.FileFields.CTime), nil + return int(ev.Rename.New.FileFields.CTime), nil case "rename.file.destination.filesystem": - return e.Rename.New.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.New), nil case "rename.file.destination.gid": - return int(e.Rename.New.FileFields.GID), nil + return int(ev.Rename.New.FileFields.GID), nil case "rename.file.destination.group": - return e.Rename.New.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.New.FileFields), nil case "rename.file.destination.in_upper_layer": - return e.Rename.New.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.New.FileFields), nil case "rename.file.destination.inode": - return int(e.Rename.New.FileFields.Inode), nil + return int(ev.Rename.New.FileFields.Inode), nil case "rename.file.destination.mode": - return int(e.Rename.New.FileFields.Mode), nil + return int(ev.Rename.New.FileFields.Mode), nil case "rename.file.destination.modification_time": - return int(e.Rename.New.FileFields.MTime), nil + return int(ev.Rename.New.FileFields.MTime), nil case "rename.file.destination.mount_id": - return int(e.Rename.New.FileFields.MountID), nil + return int(ev.Rename.New.FileFields.MountID), nil case "rename.file.destination.name": - return e.Rename.New.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New), nil case "rename.file.destination.name.length": - return len(e.Rename.New.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New), nil case "rename.file.destination.path": - return e.Rename.New.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New), nil case "rename.file.destination.path.length": - return len(e.Rename.New.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New), nil case "rename.file.destination.rights": - return int(e.Rename.New.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rename.New.FileFields)), nil case "rename.file.destination.uid": - return int(e.Rename.New.FileFields.UID), nil + return int(ev.Rename.New.FileFields.UID), nil case "rename.file.destination.user": - return e.Rename.New.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.New.FileFields), nil case "rename.file.filesystem": - return e.Rename.Old.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.Old), nil case "rename.file.gid": - return int(e.Rename.Old.FileFields.GID), nil + return int(ev.Rename.Old.FileFields.GID), nil case "rename.file.group": - return e.Rename.Old.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.Old.FileFields), nil case "rename.file.in_upper_layer": - return e.Rename.Old.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.Old.FileFields), nil case "rename.file.inode": - return int(e.Rename.Old.FileFields.Inode), nil + return int(ev.Rename.Old.FileFields.Inode), nil case "rename.file.mode": - return int(e.Rename.Old.FileFields.Mode), nil + return int(ev.Rename.Old.FileFields.Mode), nil case "rename.file.modification_time": - return int(e.Rename.Old.FileFields.MTime), nil + return int(ev.Rename.Old.FileFields.MTime), nil case "rename.file.mount_id": - return int(e.Rename.Old.FileFields.MountID), nil + return int(ev.Rename.Old.FileFields.MountID), nil case "rename.file.name": - return e.Rename.Old.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old), nil case "rename.file.name.length": - return len(e.Rename.Old.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old), nil case "rename.file.path": - return e.Rename.Old.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old), nil case "rename.file.path.length": - return len(e.Rename.Old.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old), nil case "rename.file.rights": - return int(e.Rename.Old.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rename.Old.FileFields)), nil case "rename.file.uid": - return int(e.Rename.Old.FileFields.UID), nil + return int(ev.Rename.Old.FileFields.UID), nil case "rename.file.user": - return e.Rename.Old.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.Old.FileFields), nil case "rename.retval": - return int(e.Rename.SyscallEvent.Retval), nil + return int(ev.Rename.SyscallEvent.Retval), nil case "rmdir.file.change_time": - return int(e.Rmdir.File.FileFields.CTime), nil + return int(ev.Rmdir.File.FileFields.CTime), nil case "rmdir.file.filesystem": - return e.Rmdir.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rmdir.File), nil case "rmdir.file.gid": - return int(e.Rmdir.File.FileFields.GID), nil + return int(ev.Rmdir.File.FileFields.GID), nil case "rmdir.file.group": - return e.Rmdir.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rmdir.File.FileFields), nil case "rmdir.file.in_upper_layer": - return e.Rmdir.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rmdir.File.FileFields), nil case "rmdir.file.inode": - return int(e.Rmdir.File.FileFields.Inode), nil + return int(ev.Rmdir.File.FileFields.Inode), nil case "rmdir.file.mode": - return int(e.Rmdir.File.FileFields.Mode), nil + return int(ev.Rmdir.File.FileFields.Mode), nil case "rmdir.file.modification_time": - return int(e.Rmdir.File.FileFields.MTime), nil + return int(ev.Rmdir.File.FileFields.MTime), nil case "rmdir.file.mount_id": - return int(e.Rmdir.File.FileFields.MountID), nil + return int(ev.Rmdir.File.FileFields.MountID), nil case "rmdir.file.name": - return e.Rmdir.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File), nil case "rmdir.file.name.length": - return len(e.Rmdir.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File), nil case "rmdir.file.path": - return e.Rmdir.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File), nil case "rmdir.file.path.length": - return len(e.Rmdir.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File), nil case "rmdir.file.rights": - return int(e.Rmdir.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rmdir.File.FileFields)), nil case "rmdir.file.uid": - return int(e.Rmdir.File.FileFields.UID), nil + return int(ev.Rmdir.File.FileFields.UID), nil case "rmdir.file.user": - return e.Rmdir.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rmdir.File.FileFields), nil case "rmdir.retval": - return int(e.Rmdir.SyscallEvent.Retval), nil + return int(ev.Rmdir.SyscallEvent.Retval), nil case "selinux.bool.name": - return e.SELinux.BoolName, nil + return ev.FieldHandlers.ResolveSELinuxBoolName(ev, &ev.SELinux), nil case "selinux.bool.state": - return e.SELinux.BoolChangeValue, nil + return ev.SELinux.BoolChangeValue, nil case "selinux.bool_commit.state": - return e.SELinux.BoolCommitValue, nil + return ev.SELinux.BoolCommitValue, nil case "selinux.enforce.status": - return e.SELinux.EnforceStatus, nil + return ev.SELinux.EnforceStatus, nil case "setgid.egid": - return int(e.SetGID.EGID), nil + return int(ev.SetGID.EGID), nil case "setgid.egroup": - return e.SetGID.EGroup, nil + return ev.FieldHandlers.ResolveSetgidEGroup(ev, &ev.SetGID), nil case "setgid.fsgid": - return int(e.SetGID.FSGID), nil + return int(ev.SetGID.FSGID), nil case "setgid.fsgroup": - return e.SetGID.FSGroup, nil + return ev.FieldHandlers.ResolveSetgidFSGroup(ev, &ev.SetGID), nil case "setgid.gid": - return int(e.SetGID.GID), nil + return int(ev.SetGID.GID), nil case "setgid.group": - return e.SetGID.Group, nil + return ev.FieldHandlers.ResolveSetgidGroup(ev, &ev.SetGID), nil case "setuid.euid": - return int(e.SetUID.EUID), nil + return int(ev.SetUID.EUID), nil case "setuid.euser": - return e.SetUID.EUser, nil + return ev.FieldHandlers.ResolveSetuidEUser(ev, &ev.SetUID), nil case "setuid.fsuid": - return int(e.SetUID.FSUID), nil + return int(ev.SetUID.FSUID), nil case "setuid.fsuser": - return e.SetUID.FSUser, nil + return ev.FieldHandlers.ResolveSetuidFSUser(ev, &ev.SetUID), nil case "setuid.uid": - return int(e.SetUID.UID), nil + return int(ev.SetUID.UID), nil case "setuid.user": - return e.SetUID.User, nil + return ev.FieldHandlers.ResolveSetuidUser(ev, &ev.SetUID), nil case "setxattr.file.change_time": - return int(e.SetXAttr.File.FileFields.CTime), nil + return int(ev.SetXAttr.File.FileFields.CTime), nil case "setxattr.file.destination.name": - return e.SetXAttr.Name, nil + return ev.FieldHandlers.ResolveXAttrName(ev, &ev.SetXAttr), nil case "setxattr.file.destination.namespace": - return e.SetXAttr.Namespace, nil + return ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.SetXAttr), nil case "setxattr.file.filesystem": - return e.SetXAttr.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.SetXAttr.File), nil case "setxattr.file.gid": - return int(e.SetXAttr.File.FileFields.GID), nil + return int(ev.SetXAttr.File.FileFields.GID), nil case "setxattr.file.group": - return e.SetXAttr.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.SetXAttr.File.FileFields), nil case "setxattr.file.in_upper_layer": - return e.SetXAttr.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.SetXAttr.File.FileFields), nil case "setxattr.file.inode": - return int(e.SetXAttr.File.FileFields.Inode), nil + return int(ev.SetXAttr.File.FileFields.Inode), nil case "setxattr.file.mode": - return int(e.SetXAttr.File.FileFields.Mode), nil + return int(ev.SetXAttr.File.FileFields.Mode), nil case "setxattr.file.modification_time": - return int(e.SetXAttr.File.FileFields.MTime), nil + return int(ev.SetXAttr.File.FileFields.MTime), nil case "setxattr.file.mount_id": - return int(e.SetXAttr.File.FileFields.MountID), nil + return int(ev.SetXAttr.File.FileFields.MountID), nil case "setxattr.file.name": - return e.SetXAttr.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File), nil case "setxattr.file.name.length": - return len(e.SetXAttr.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File), nil case "setxattr.file.path": - return e.SetXAttr.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File), nil case "setxattr.file.path.length": - return len(e.SetXAttr.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File), nil case "setxattr.file.rights": - return int(e.SetXAttr.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.SetXAttr.File.FileFields)), nil case "setxattr.file.uid": - return int(e.SetXAttr.File.FileFields.UID), nil + return int(ev.SetXAttr.File.FileFields.UID), nil case "setxattr.file.user": - return e.SetXAttr.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.SetXAttr.File.FileFields), nil case "setxattr.retval": - return int(e.SetXAttr.SyscallEvent.Retval), nil + return int(ev.SetXAttr.SyscallEvent.Retval), nil case "signal.pid": - return int(e.Signal.PID), nil + return int(ev.Signal.PID), nil case "signal.retval": - return int(e.Signal.SyscallEvent.Retval), nil + return int(ev.Signal.SyscallEvent.Retval), nil case "signal.target.ancestors.args": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.args_flags": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.args_options": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.args_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.argv": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.argv0": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.cap_effective": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15429,7 +18235,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.cap_permitted": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15441,7 +18247,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.comm": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15453,7 +18259,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.container.id": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15465,7 +18271,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.cookie": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15477,19 +18283,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.created_at": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.egid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15501,7 +18307,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.egroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15513,43 +18319,43 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.envp": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.envs": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.envs_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.euid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15561,7 +18367,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.euser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15573,7 +18379,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15585,19 +18391,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15609,31 +18415,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15645,7 +18451,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15657,7 +18463,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15669,7 +18475,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15681,67 +18487,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15753,19 +18559,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.fsgid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15777,7 +18583,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.fsgroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15789,7 +18595,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.fsuid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15801,7 +18607,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.fsuser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15813,7 +18619,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15825,7 +18631,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15837,7 +18643,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15849,19 +18655,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15873,31 +18679,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15909,7 +18715,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15921,7 +18727,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15933,7 +18739,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15945,67 +18751,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16017,19 +18823,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.is_kworker": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16041,7 +18847,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.is_thread": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16053,7 +18859,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.pid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16065,7 +18871,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.ppid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16077,7 +18883,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.tid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16089,7 +18895,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.tty_name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16101,7 +18907,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16113,7 +18919,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16124,383 +18930,383 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { } return values, nil case "signal.target.args": - return e.Signal.Target.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.Signal.Target.Process), nil case "signal.target.args_flags": - return e.Signal.Target.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.Signal.Target.Process), nil case "signal.target.args_options": - return e.Signal.Target.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.Signal.Target.Process), nil case "signal.target.args_truncated": - return e.Signal.Target.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.Signal.Target.Process), nil case "signal.target.argv": - return e.Signal.Target.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.Signal.Target.Process), nil case "signal.target.argv0": - return e.Signal.Target.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.Signal.Target.Process), nil case "signal.target.cap_effective": - return int(e.Signal.Target.Process.Credentials.CapEffective), nil + return int(ev.Signal.Target.Process.Credentials.CapEffective), nil case "signal.target.cap_permitted": - return int(e.Signal.Target.Process.Credentials.CapPermitted), nil + return int(ev.Signal.Target.Process.Credentials.CapPermitted), nil case "signal.target.comm": - return e.Signal.Target.Process.Comm, nil + return ev.Signal.Target.Process.Comm, nil case "signal.target.container.id": - return e.Signal.Target.Process.ContainerID, nil + return ev.Signal.Target.Process.ContainerID, nil case "signal.target.cookie": - return int(e.Signal.Target.Process.Cookie), nil + return int(ev.Signal.Target.Process.Cookie), nil case "signal.target.created_at": - return int(e.Signal.Target.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.Signal.Target.Process)), nil case "signal.target.egid": - return int(e.Signal.Target.Process.Credentials.EGID), nil + return int(ev.Signal.Target.Process.Credentials.EGID), nil case "signal.target.egroup": - return e.Signal.Target.Process.Credentials.EGroup, nil + return ev.Signal.Target.Process.Credentials.EGroup, nil case "signal.target.envp": - return e.Signal.Target.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.Signal.Target.Process), nil case "signal.target.envs": - return e.Signal.Target.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.Signal.Target.Process), nil case "signal.target.envs_truncated": - return e.Signal.Target.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.Signal.Target.Process), nil case "signal.target.euid": - return int(e.Signal.Target.Process.Credentials.EUID), nil + return int(ev.Signal.Target.Process.Credentials.EUID), nil case "signal.target.euser": - return e.Signal.Target.Process.Credentials.EUser, nil + return ev.Signal.Target.Process.Credentials.EUser, nil case "signal.target.file.change_time": - return int(e.Signal.Target.Process.FileEvent.FileFields.CTime), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.CTime), nil case "signal.target.file.filesystem": - return e.Signal.Target.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.gid": - return int(e.Signal.Target.Process.FileEvent.FileFields.GID), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.GID), nil case "signal.target.file.group": - return e.Signal.Target.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.FileEvent.FileFields), nil case "signal.target.file.in_upper_layer": - return e.Signal.Target.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.FileEvent.FileFields), nil case "signal.target.file.inode": - return int(e.Signal.Target.Process.FileEvent.FileFields.Inode), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.Inode), nil case "signal.target.file.mode": - return int(e.Signal.Target.Process.FileEvent.FileFields.Mode), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.Mode), nil case "signal.target.file.modification_time": - return int(e.Signal.Target.Process.FileEvent.FileFields.MTime), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.MTime), nil case "signal.target.file.mount_id": - return int(e.Signal.Target.Process.FileEvent.FileFields.MountID), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.MountID), nil case "signal.target.file.name": - return e.Signal.Target.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.name.length": - return len(e.Signal.Target.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.path": - return e.Signal.Target.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.path.length": - return len(e.Signal.Target.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.rights": - return int(e.Signal.Target.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Process.FileEvent.FileFields)), nil case "signal.target.file.uid": - return int(e.Signal.Target.Process.FileEvent.FileFields.UID), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.UID), nil case "signal.target.file.user": - return e.Signal.Target.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.FileEvent.FileFields), nil case "signal.target.fsgid": - return int(e.Signal.Target.Process.Credentials.FSGID), nil + return int(ev.Signal.Target.Process.Credentials.FSGID), nil case "signal.target.fsgroup": - return e.Signal.Target.Process.Credentials.FSGroup, nil + return ev.Signal.Target.Process.Credentials.FSGroup, nil case "signal.target.fsuid": - return int(e.Signal.Target.Process.Credentials.FSUID), nil + return int(ev.Signal.Target.Process.Credentials.FSUID), nil case "signal.target.fsuser": - return e.Signal.Target.Process.Credentials.FSUser, nil + return ev.Signal.Target.Process.Credentials.FSUser, nil case "signal.target.gid": - return int(e.Signal.Target.Process.Credentials.GID), nil + return int(ev.Signal.Target.Process.Credentials.GID), nil case "signal.target.group": - return e.Signal.Target.Process.Credentials.Group, nil + return ev.Signal.Target.Process.Credentials.Group, nil case "signal.target.interpreter.file.change_time": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "signal.target.interpreter.file.filesystem": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.gid": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "signal.target.interpreter.file.group": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.interpreter.file.in_upper_layer": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.interpreter.file.inode": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "signal.target.interpreter.file.mode": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "signal.target.interpreter.file.modification_time": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "signal.target.interpreter.file.mount_id": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "signal.target.interpreter.file.name": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.name.length": - return len(e.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.path": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.path.length": - return len(e.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.rights": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields)), nil case "signal.target.interpreter.file.uid": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "signal.target.interpreter.file.user": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.is_kworker": - return e.Signal.Target.Process.PIDContext.IsKworker, nil + return ev.Signal.Target.Process.PIDContext.IsKworker, nil case "signal.target.is_thread": - return e.Signal.Target.Process.IsThread, nil + return ev.Signal.Target.Process.IsThread, nil case "signal.target.parent.args": - return e.Signal.Target.Parent.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.args_flags": - return e.Signal.Target.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.args_options": - return e.Signal.Target.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.args_truncated": - return e.Signal.Target.Parent.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.argv": - return e.Signal.Target.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.argv0": - return e.Signal.Target.Parent.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.cap_effective": - return int(e.Signal.Target.Parent.Credentials.CapEffective), nil + return int(ev.Signal.Target.Parent.Credentials.CapEffective), nil case "signal.target.parent.cap_permitted": - return int(e.Signal.Target.Parent.Credentials.CapPermitted), nil + return int(ev.Signal.Target.Parent.Credentials.CapPermitted), nil case "signal.target.parent.comm": - return e.Signal.Target.Parent.Comm, nil + return ev.Signal.Target.Parent.Comm, nil case "signal.target.parent.container.id": - return e.Signal.Target.Parent.ContainerID, nil + return ev.Signal.Target.Parent.ContainerID, nil case "signal.target.parent.cookie": - return int(e.Signal.Target.Parent.Cookie), nil + return int(ev.Signal.Target.Parent.Cookie), nil case "signal.target.parent.created_at": - return int(e.Signal.Target.Parent.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Signal.Target.Parent)), nil case "signal.target.parent.egid": - return int(e.Signal.Target.Parent.Credentials.EGID), nil + return int(ev.Signal.Target.Parent.Credentials.EGID), nil case "signal.target.parent.egroup": - return e.Signal.Target.Parent.Credentials.EGroup, nil + return ev.Signal.Target.Parent.Credentials.EGroup, nil case "signal.target.parent.envp": - return e.Signal.Target.Parent.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.envs": - return e.Signal.Target.Parent.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.envs_truncated": - return e.Signal.Target.Parent.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.euid": - return int(e.Signal.Target.Parent.Credentials.EUID), nil + return int(ev.Signal.Target.Parent.Credentials.EUID), nil case "signal.target.parent.euser": - return e.Signal.Target.Parent.Credentials.EUser, nil + return ev.Signal.Target.Parent.Credentials.EUser, nil case "signal.target.parent.file.change_time": - return int(e.Signal.Target.Parent.FileEvent.FileFields.CTime), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.CTime), nil case "signal.target.parent.file.filesystem": - return e.Signal.Target.Parent.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.gid": - return int(e.Signal.Target.Parent.FileEvent.FileFields.GID), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.GID), nil case "signal.target.parent.file.group": - return e.Signal.Target.Parent.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.FileEvent.FileFields), nil case "signal.target.parent.file.in_upper_layer": - return e.Signal.Target.Parent.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.FileEvent.FileFields), nil case "signal.target.parent.file.inode": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Inode), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.Inode), nil case "signal.target.parent.file.mode": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Mode), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.Mode), nil case "signal.target.parent.file.modification_time": - return int(e.Signal.Target.Parent.FileEvent.FileFields.MTime), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.MTime), nil case "signal.target.parent.file.mount_id": - return int(e.Signal.Target.Parent.FileEvent.FileFields.MountID), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.MountID), nil case "signal.target.parent.file.name": - return e.Signal.Target.Parent.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.name.length": - return len(e.Signal.Target.Parent.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.path": - return e.Signal.Target.Parent.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.path.length": - return len(e.Signal.Target.Parent.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.rights": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Parent.FileEvent.FileFields)), nil case "signal.target.parent.file.uid": - return int(e.Signal.Target.Parent.FileEvent.FileFields.UID), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.UID), nil case "signal.target.parent.file.user": - return e.Signal.Target.Parent.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.FileEvent.FileFields), nil case "signal.target.parent.fsgid": - return int(e.Signal.Target.Parent.Credentials.FSGID), nil + return int(ev.Signal.Target.Parent.Credentials.FSGID), nil case "signal.target.parent.fsgroup": - return e.Signal.Target.Parent.Credentials.FSGroup, nil + return ev.Signal.Target.Parent.Credentials.FSGroup, nil case "signal.target.parent.fsuid": - return int(e.Signal.Target.Parent.Credentials.FSUID), nil + return int(ev.Signal.Target.Parent.Credentials.FSUID), nil case "signal.target.parent.fsuser": - return e.Signal.Target.Parent.Credentials.FSUser, nil + return ev.Signal.Target.Parent.Credentials.FSUser, nil case "signal.target.parent.gid": - return int(e.Signal.Target.Parent.Credentials.GID), nil + return int(ev.Signal.Target.Parent.Credentials.GID), nil case "signal.target.parent.group": - return e.Signal.Target.Parent.Credentials.Group, nil + return ev.Signal.Target.Parent.Credentials.Group, nil case "signal.target.parent.interpreter.file.change_time": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil case "signal.target.parent.interpreter.file.filesystem": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.gid": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil case "signal.target.parent.interpreter.file.group": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.parent.interpreter.file.in_upper_layer": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.parent.interpreter.file.inode": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil case "signal.target.parent.interpreter.file.mode": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil case "signal.target.parent.interpreter.file.modification_time": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil case "signal.target.parent.interpreter.file.mount_id": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil case "signal.target.parent.interpreter.file.name": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.name.length": - return len(e.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.path": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.path.length": - return len(e.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.rights": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields)), nil case "signal.target.parent.interpreter.file.uid": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil case "signal.target.parent.interpreter.file.user": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.parent.is_kworker": - return e.Signal.Target.Parent.PIDContext.IsKworker, nil + return ev.Signal.Target.Parent.PIDContext.IsKworker, nil case "signal.target.parent.is_thread": - return e.Signal.Target.Parent.IsThread, nil + return ev.Signal.Target.Parent.IsThread, nil case "signal.target.parent.pid": - return int(e.Signal.Target.Parent.PIDContext.Pid), nil + return int(ev.Signal.Target.Parent.PIDContext.Pid), nil case "signal.target.parent.ppid": - return int(e.Signal.Target.Parent.PPid), nil + return int(ev.Signal.Target.Parent.PPid), nil case "signal.target.parent.tid": - return int(e.Signal.Target.Parent.PIDContext.Tid), nil + return int(ev.Signal.Target.Parent.PIDContext.Tid), nil case "signal.target.parent.tty_name": - return e.Signal.Target.Parent.TTYName, nil + return ev.Signal.Target.Parent.TTYName, nil case "signal.target.parent.uid": - return int(e.Signal.Target.Parent.Credentials.UID), nil + return int(ev.Signal.Target.Parent.Credentials.UID), nil case "signal.target.parent.user": - return e.Signal.Target.Parent.Credentials.User, nil + return ev.Signal.Target.Parent.Credentials.User, nil case "signal.target.pid": - return int(e.Signal.Target.Process.PIDContext.Pid), nil + return int(ev.Signal.Target.Process.PIDContext.Pid), nil case "signal.target.ppid": - return int(e.Signal.Target.Process.PPid), nil + return int(ev.Signal.Target.Process.PPid), nil case "signal.target.tid": - return int(e.Signal.Target.Process.PIDContext.Tid), nil + return int(ev.Signal.Target.Process.PIDContext.Tid), nil case "signal.target.tty_name": - return e.Signal.Target.Process.TTYName, nil + return ev.Signal.Target.Process.TTYName, nil case "signal.target.uid": - return int(e.Signal.Target.Process.Credentials.UID), nil + return int(ev.Signal.Target.Process.Credentials.UID), nil case "signal.target.user": - return e.Signal.Target.Process.Credentials.User, nil + return ev.Signal.Target.Process.Credentials.User, nil case "signal.type": - return int(e.Signal.Type), nil + return int(ev.Signal.Type), nil case "splice.file.change_time": - return int(e.Splice.File.FileFields.CTime), nil + return int(ev.Splice.File.FileFields.CTime), nil case "splice.file.filesystem": - return e.Splice.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Splice.File), nil case "splice.file.gid": - return int(e.Splice.File.FileFields.GID), nil + return int(ev.Splice.File.FileFields.GID), nil case "splice.file.group": - return e.Splice.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Splice.File.FileFields), nil case "splice.file.in_upper_layer": - return e.Splice.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Splice.File.FileFields), nil case "splice.file.inode": - return int(e.Splice.File.FileFields.Inode), nil + return int(ev.Splice.File.FileFields.Inode), nil case "splice.file.mode": - return int(e.Splice.File.FileFields.Mode), nil + return int(ev.Splice.File.FileFields.Mode), nil case "splice.file.modification_time": - return int(e.Splice.File.FileFields.MTime), nil + return int(ev.Splice.File.FileFields.MTime), nil case "splice.file.mount_id": - return int(e.Splice.File.FileFields.MountID), nil + return int(ev.Splice.File.FileFields.MountID), nil case "splice.file.name": - return e.Splice.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File), nil case "splice.file.name.length": - return len(e.Splice.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File), nil case "splice.file.path": - return e.Splice.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File), nil case "splice.file.path.length": - return len(e.Splice.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File), nil case "splice.file.rights": - return int(e.Splice.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Splice.File.FileFields)), nil case "splice.file.uid": - return int(e.Splice.File.FileFields.UID), nil + return int(ev.Splice.File.FileFields.UID), nil case "splice.file.user": - return e.Splice.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Splice.File.FileFields), nil case "splice.pipe_entry_flag": - return int(e.Splice.PipeEntryFlag), nil + return int(ev.Splice.PipeEntryFlag), nil case "splice.pipe_exit_flag": - return int(e.Splice.PipeExitFlag), nil + return int(ev.Splice.PipeExitFlag), nil case "splice.retval": - return int(e.Splice.SyscallEvent.Retval), nil + return int(ev.Splice.SyscallEvent.Retval), nil case "unlink.file.change_time": - return int(e.Unlink.File.FileFields.CTime), nil + return int(ev.Unlink.File.FileFields.CTime), nil case "unlink.file.filesystem": - return e.Unlink.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Unlink.File), nil case "unlink.file.gid": - return int(e.Unlink.File.FileFields.GID), nil + return int(ev.Unlink.File.FileFields.GID), nil case "unlink.file.group": - return e.Unlink.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Unlink.File.FileFields), nil case "unlink.file.in_upper_layer": - return e.Unlink.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Unlink.File.FileFields), nil case "unlink.file.inode": - return int(e.Unlink.File.FileFields.Inode), nil + return int(ev.Unlink.File.FileFields.Inode), nil case "unlink.file.mode": - return int(e.Unlink.File.FileFields.Mode), nil + return int(ev.Unlink.File.FileFields.Mode), nil case "unlink.file.modification_time": - return int(e.Unlink.File.FileFields.MTime), nil + return int(ev.Unlink.File.FileFields.MTime), nil case "unlink.file.mount_id": - return int(e.Unlink.File.FileFields.MountID), nil + return int(ev.Unlink.File.FileFields.MountID), nil case "unlink.file.name": - return e.Unlink.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File), nil case "unlink.file.name.length": - return len(e.Unlink.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File), nil case "unlink.file.path": - return e.Unlink.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File), nil case "unlink.file.path.length": - return len(e.Unlink.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File), nil case "unlink.file.rights": - return int(e.Unlink.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Unlink.File.FileFields)), nil case "unlink.file.uid": - return int(e.Unlink.File.FileFields.UID), nil + return int(ev.Unlink.File.FileFields.UID), nil case "unlink.file.user": - return e.Unlink.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Unlink.File.FileFields), nil case "unlink.flags": - return int(e.Unlink.Flags), nil + return int(ev.Unlink.Flags), nil case "unlink.retval": - return int(e.Unlink.SyscallEvent.Retval), nil + return int(ev.Unlink.SyscallEvent.Retval), nil case "unload_module.name": - return e.UnloadModule.Name, nil + return ev.UnloadModule.Name, nil case "unload_module.retval": - return int(e.UnloadModule.SyscallEvent.Retval), nil + return int(ev.UnloadModule.SyscallEvent.Retval), nil case "utimes.file.change_time": - return int(e.Utimes.File.FileFields.CTime), nil + return int(ev.Utimes.File.FileFields.CTime), nil case "utimes.file.filesystem": - return e.Utimes.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Utimes.File), nil case "utimes.file.gid": - return int(e.Utimes.File.FileFields.GID), nil + return int(ev.Utimes.File.FileFields.GID), nil case "utimes.file.group": - return e.Utimes.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Utimes.File.FileFields), nil case "utimes.file.in_upper_layer": - return e.Utimes.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Utimes.File.FileFields), nil case "utimes.file.inode": - return int(e.Utimes.File.FileFields.Inode), nil + return int(ev.Utimes.File.FileFields.Inode), nil case "utimes.file.mode": - return int(e.Utimes.File.FileFields.Mode), nil + return int(ev.Utimes.File.FileFields.Mode), nil case "utimes.file.modification_time": - return int(e.Utimes.File.FileFields.MTime), nil + return int(ev.Utimes.File.FileFields.MTime), nil case "utimes.file.mount_id": - return int(e.Utimes.File.FileFields.MountID), nil + return int(ev.Utimes.File.FileFields.MountID), nil case "utimes.file.name": - return e.Utimes.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File), nil case "utimes.file.name.length": - return len(e.Utimes.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File), nil case "utimes.file.path": - return e.Utimes.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File), nil case "utimes.file.path.length": - return len(e.Utimes.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File), nil case "utimes.file.rights": - return int(e.Utimes.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Utimes.File.FileFields)), nil case "utimes.file.uid": - return int(e.Utimes.File.FileFields.UID), nil + return int(ev.Utimes.File.FileFields.UID), nil case "utimes.file.user": - return e.Utimes.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Utimes.File.FileFields), nil case "utimes.retval": - return int(e.Utimes.SyscallEvent.Retval), nil + return int(ev.Utimes.SyscallEvent.Retval), nil } return nil, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { +func (ev *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { switch field { case "async": return "*", nil @@ -17076,6 +19882,14 @@ func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { return "mmap", nil case "mmap.retval": return "mmap", nil + case "mount.fs_type": + return "mount", nil + case "mount.mountpoint.path": + return "mount", nil + case "mount.retval": + return "mount", nil + case "mount.source.path": + return "mount", nil case "mprotect.req_protection": return "mprotect", nil case "mprotect.retval": @@ -18641,7 +21455,7 @@ func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { } return "", &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { +func (ev *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { switch field { case "async": return reflect.Bool, nil @@ -19217,6 +22031,14 @@ func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { return reflect.Int, nil case "mmap.retval": return reflect.Int, nil + case "mount.fs_type": + return reflect.String, nil + case "mount.mountpoint.path": + return reflect.String, nil + case "mount.retval": + return reflect.Int, nil + case "mount.source.path": + return reflect.String, nil case "mprotect.req_protection": return reflect.Int, nil case "mprotect.retval": @@ -20782,11 +23604,11 @@ func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { } return reflect.Invalid, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { +func (ev *Event) SetFieldValue(field eval.Field, value interface{}) error { switch field { case "async": var ok bool - if e.Async, ok = value.(bool); !ok { + if ev.Async, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Async"} } return nil @@ -20795,151 +23617,151 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Bind.AddrFamily"} } - e.Bind.AddrFamily = uint16(v) + ev.Bind.AddrFamily = uint16(v) return nil case "bind.addr.ip": v, ok := value.(net.IPNet) if !ok { return &eval.ErrValueTypeMismatch{Field: "Bind.Addr.IPNet"} } - e.Bind.Addr.IPNet = v + ev.Bind.Addr.IPNet = v return nil case "bind.addr.port": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Bind.Addr.Port"} } - e.Bind.Addr.Port = uint16(v) + ev.Bind.Addr.Port = uint16(v) return nil case "bind.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Bind.SyscallEvent.Retval"} } - e.Bind.SyscallEvent.Retval = int64(v) + ev.Bind.SyscallEvent.Retval = int64(v) return nil case "bpf.cmd": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Cmd"} } - e.BPF.Cmd = uint32(v) + ev.BPF.Cmd = uint32(v) return nil case "bpf.map.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Map.Name"} } - e.BPF.Map.Name = str + ev.BPF.Map.Name = str return nil case "bpf.map.type": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Map.Type"} } - e.BPF.Map.Type = uint32(v) + ev.BPF.Map.Type = uint32(v) return nil case "bpf.prog.attach_type": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.AttachType"} } - e.BPF.Program.AttachType = uint32(v) + ev.BPF.Program.AttachType = uint32(v) return nil case "bpf.prog.helpers": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Helpers"} } - e.BPF.Program.Helpers = append(e.BPF.Program.Helpers, uint32(v)) + ev.BPF.Program.Helpers = append(ev.BPF.Program.Helpers, uint32(v)) return nil case "bpf.prog.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Name"} } - e.BPF.Program.Name = str + ev.BPF.Program.Name = str return nil case "bpf.prog.tag": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Tag"} } - e.BPF.Program.Tag = str + ev.BPF.Program.Tag = str return nil case "bpf.prog.type": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Type"} } - e.BPF.Program.Type = uint32(v) + ev.BPF.Program.Type = uint32(v) return nil case "bpf.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.SyscallEvent.Retval"} } - e.BPF.SyscallEvent.Retval = int64(v) + ev.BPF.SyscallEvent.Retval = int64(v) return nil case "capset.cap_effective": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Capset.CapEffective"} } - e.Capset.CapEffective = uint64(v) + ev.Capset.CapEffective = uint64(v) return nil case "capset.cap_permitted": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Capset.CapPermitted"} } - e.Capset.CapPermitted = uint64(v) + ev.Capset.CapPermitted = uint64(v) return nil case "chmod.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.CTime"} } - e.Chmod.File.FileFields.CTime = uint64(v) + ev.Chmod.File.FileFields.CTime = uint64(v) return nil case "chmod.file.destination.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.Mode"} } - e.Chmod.Mode = uint32(v) + ev.Chmod.Mode = uint32(v) return nil case "chmod.file.destination.rights": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.Mode"} } - e.Chmod.Mode = uint32(v) + ev.Chmod.Mode = uint32(v) return nil case "chmod.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.Filesystem"} } - e.Chmod.File.Filesystem = str + ev.Chmod.File.Filesystem = str return nil case "chmod.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.GID"} } - e.Chmod.File.FileFields.GID = uint32(v) + ev.Chmod.File.FileFields.GID = uint32(v) return nil case "chmod.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Group"} } - e.Chmod.File.FileFields.Group = str + ev.Chmod.File.FileFields.Group = str return nil case "chmod.file.in_upper_layer": var ok bool - if e.Chmod.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Chmod.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.InUpperLayer"} } return nil @@ -20948,35 +23770,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Inode"} } - e.Chmod.File.FileFields.Inode = uint64(v) + ev.Chmod.File.FileFields.Inode = uint64(v) return nil case "chmod.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Mode"} } - e.Chmod.File.FileFields.Mode = uint16(v) + ev.Chmod.File.FileFields.Mode = uint16(v) return nil case "chmod.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.MTime"} } - e.Chmod.File.FileFields.MTime = uint64(v) + ev.Chmod.File.FileFields.MTime = uint64(v) return nil case "chmod.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.MountID"} } - e.Chmod.File.FileFields.MountID = uint32(v) + ev.Chmod.File.FileFields.MountID = uint32(v) return nil case "chmod.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.BasenameStr"} } - e.Chmod.File.BasenameStr = str + ev.Chmod.File.BasenameStr = str return nil case "chmod.file.name.length": return &eval.ErrFieldReadOnly{Field: "chmod.file.name.length"} @@ -20985,7 +23807,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.PathnameStr"} } - e.Chmod.File.PathnameStr = str + ev.Chmod.File.PathnameStr = str return nil case "chmod.file.path.length": return &eval.ErrFieldReadOnly{Field: "chmod.file.path.length"} @@ -20994,88 +23816,88 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Mode"} } - e.Chmod.File.FileFields.Mode = uint16(v) + ev.Chmod.File.FileFields.Mode = uint16(v) return nil case "chmod.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.UID"} } - e.Chmod.File.FileFields.UID = uint32(v) + ev.Chmod.File.FileFields.UID = uint32(v) return nil case "chmod.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.User"} } - e.Chmod.File.FileFields.User = str + ev.Chmod.File.FileFields.User = str return nil case "chmod.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.SyscallEvent.Retval"} } - e.Chmod.SyscallEvent.Retval = int64(v) + ev.Chmod.SyscallEvent.Retval = int64(v) return nil case "chown.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.CTime"} } - e.Chown.File.FileFields.CTime = uint64(v) + ev.Chown.File.FileFields.CTime = uint64(v) return nil case "chown.file.destination.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.GID"} } - e.Chown.GID = int64(v) + ev.Chown.GID = int64(v) return nil case "chown.file.destination.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.Group"} } - e.Chown.Group = str + ev.Chown.Group = str return nil case "chown.file.destination.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.UID"} } - e.Chown.UID = int64(v) + ev.Chown.UID = int64(v) return nil case "chown.file.destination.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.User"} } - e.Chown.User = str + ev.Chown.User = str return nil case "chown.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.Filesystem"} } - e.Chown.File.Filesystem = str + ev.Chown.File.Filesystem = str return nil case "chown.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.GID"} } - e.Chown.File.FileFields.GID = uint32(v) + ev.Chown.File.FileFields.GID = uint32(v) return nil case "chown.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Group"} } - e.Chown.File.FileFields.Group = str + ev.Chown.File.FileFields.Group = str return nil case "chown.file.in_upper_layer": var ok bool - if e.Chown.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Chown.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.InUpperLayer"} } return nil @@ -21084,35 +23906,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Inode"} } - e.Chown.File.FileFields.Inode = uint64(v) + ev.Chown.File.FileFields.Inode = uint64(v) return nil case "chown.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Mode"} } - e.Chown.File.FileFields.Mode = uint16(v) + ev.Chown.File.FileFields.Mode = uint16(v) return nil case "chown.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.MTime"} } - e.Chown.File.FileFields.MTime = uint64(v) + ev.Chown.File.FileFields.MTime = uint64(v) return nil case "chown.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.MountID"} } - e.Chown.File.FileFields.MountID = uint32(v) + ev.Chown.File.FileFields.MountID = uint32(v) return nil case "chown.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.BasenameStr"} } - e.Chown.File.BasenameStr = str + ev.Chown.File.BasenameStr = str return nil case "chown.file.name.length": return &eval.ErrFieldReadOnly{Field: "chown.file.name.length"} @@ -21121,7 +23943,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.PathnameStr"} } - e.Chown.File.PathnameStr = str + ev.Chown.File.PathnameStr = str return nil case "chown.file.path.length": return &eval.ErrFieldReadOnly{Field: "chown.file.path.length"} @@ -21130,77 +23952,77 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Mode"} } - e.Chown.File.FileFields.Mode = uint16(v) + ev.Chown.File.FileFields.Mode = uint16(v) return nil case "chown.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.UID"} } - e.Chown.File.FileFields.UID = uint32(v) + ev.Chown.File.FileFields.UID = uint32(v) return nil case "chown.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.User"} } - e.Chown.File.FileFields.User = str + ev.Chown.File.FileFields.User = str return nil case "chown.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.SyscallEvent.Retval"} } - e.Chown.SyscallEvent.Retval = int64(v) + ev.Chown.SyscallEvent.Retval = int64(v) return nil case "container.id": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ContainerContext.ID"} } - e.ContainerContext.ID = str + ev.ContainerContext.ID = str return nil case "container.tags": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ContainerContext.Tags"} } - e.ContainerContext.Tags = append(e.ContainerContext.Tags, str) + ev.ContainerContext.Tags = append(ev.ContainerContext.Tags, str) return nil case "dns.id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.ID"} } - e.DNS.ID = uint16(v) + ev.DNS.ID = uint16(v) return nil case "dns.question.class": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Class"} } - e.DNS.Class = uint16(v) + ev.DNS.Class = uint16(v) return nil case "dns.question.count": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Count"} } - e.DNS.Count = uint16(v) + ev.DNS.Count = uint16(v) return nil case "dns.question.length": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Size"} } - e.DNS.Size = uint16(v) + ev.DNS.Size = uint16(v) return nil case "dns.question.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Name"} } - e.DNS.Name = str + ev.DNS.Name = str return nil case "dns.question.name.length": return &eval.ErrFieldReadOnly{Field: "dns.question.name.length"} @@ -21209,1308 +24031,1308 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Type"} } - e.DNS.Type = uint16(v) + ev.DNS.Type = uint16(v) return nil case "exec.args": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Args"} } - e.Exec.Process.Args = str + ev.Exec.Process.Args = str return nil case "exec.args_flags": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) + ev.Exec.Process.Argv = append(ev.Exec.Process.Argv, str) return nil case "exec.args_options": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) + ev.Exec.Process.Argv = append(ev.Exec.Process.Argv, str) return nil case "exec.args_truncated": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } var ok bool - if e.Exec.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.Exec.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.ArgsTruncated"} } return nil case "exec.argv": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) + ev.Exec.Process.Argv = append(ev.Exec.Process.Argv, str) return nil case "exec.argv0": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv0"} } - e.Exec.Process.Argv0 = str + ev.Exec.Process.Argv0 = str return nil case "exec.cap_effective": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.CapEffective"} } - e.Exec.Process.Credentials.CapEffective = uint64(v) + ev.Exec.Process.Credentials.CapEffective = uint64(v) return nil case "exec.cap_permitted": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.CapPermitted"} } - e.Exec.Process.Credentials.CapPermitted = uint64(v) + ev.Exec.Process.Credentials.CapPermitted = uint64(v) return nil case "exec.comm": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Comm"} } - e.Exec.Process.Comm = str + ev.Exec.Process.Comm = str return nil case "exec.container.id": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.ContainerID"} } - e.Exec.Process.ContainerID = str + ev.Exec.Process.ContainerID = str return nil case "exec.cookie": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Cookie"} } - e.Exec.Process.Cookie = uint32(v) + ev.Exec.Process.Cookie = uint32(v) return nil case "exec.created_at": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.CreatedAt"} } - e.Exec.Process.CreatedAt = uint64(v) + ev.Exec.Process.CreatedAt = uint64(v) return nil case "exec.egid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EGID"} } - e.Exec.Process.Credentials.EGID = uint32(v) + ev.Exec.Process.Credentials.EGID = uint32(v) return nil case "exec.egroup": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EGroup"} } - e.Exec.Process.Credentials.EGroup = str + ev.Exec.Process.Credentials.EGroup = str return nil case "exec.envp": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Envp"} } - e.Exec.Process.Envp = append(e.Exec.Process.Envp, str) + ev.Exec.Process.Envp = append(ev.Exec.Process.Envp, str) return nil case "exec.envs": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Envs"} } - e.Exec.Process.Envs = append(e.Exec.Process.Envs, str) + ev.Exec.Process.Envs = append(ev.Exec.Process.Envs, str) return nil case "exec.envs_truncated": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } var ok bool - if e.Exec.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.Exec.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.EnvsTruncated"} } return nil case "exec.euid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EUID"} } - e.Exec.Process.Credentials.EUID = uint32(v) + ev.Exec.Process.Credentials.EUID = uint32(v) return nil case "exec.euser": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EUser"} } - e.Exec.Process.Credentials.EUser = str + ev.Exec.Process.Credentials.EUser = str return nil case "exec.file.change_time": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.CTime"} } - e.Exec.Process.FileEvent.FileFields.CTime = uint64(v) + ev.Exec.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "exec.file.filesystem": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.Filesystem"} } - e.Exec.Process.FileEvent.Filesystem = str + ev.Exec.Process.FileEvent.Filesystem = str return nil case "exec.file.gid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.GID"} } - e.Exec.Process.FileEvent.FileFields.GID = uint32(v) + ev.Exec.Process.FileEvent.FileFields.GID = uint32(v) return nil case "exec.file.group": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Group"} } - e.Exec.Process.FileEvent.FileFields.Group = str + ev.Exec.Process.FileEvent.FileFields.Group = str return nil case "exec.file.in_upper_layer": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } var ok bool - if e.Exec.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Exec.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "exec.file.inode": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Inode"} } - e.Exec.Process.FileEvent.FileFields.Inode = uint64(v) + ev.Exec.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "exec.file.mode": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Mode"} } - e.Exec.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Exec.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "exec.file.modification_time": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.MTime"} } - e.Exec.Process.FileEvent.FileFields.MTime = uint64(v) + ev.Exec.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "exec.file.mount_id": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.MountID"} } - e.Exec.Process.FileEvent.FileFields.MountID = uint32(v) + ev.Exec.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "exec.file.name": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.BasenameStr"} } - e.Exec.Process.FileEvent.BasenameStr = str + ev.Exec.Process.FileEvent.BasenameStr = str return nil case "exec.file.name.length": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exec.file.name.length"} case "exec.file.path": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.PathnameStr"} } - e.Exec.Process.FileEvent.PathnameStr = str + ev.Exec.Process.FileEvent.PathnameStr = str return nil case "exec.file.path.length": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exec.file.path.length"} case "exec.file.rights": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Mode"} } - e.Exec.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Exec.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "exec.file.uid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.UID"} } - e.Exec.Process.FileEvent.FileFields.UID = uint32(v) + ev.Exec.Process.FileEvent.FileFields.UID = uint32(v) return nil case "exec.file.user": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.User"} } - e.Exec.Process.FileEvent.FileFields.User = str + ev.Exec.Process.FileEvent.FileFields.User = str return nil case "exec.fsgid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSGID"} } - e.Exec.Process.Credentials.FSGID = uint32(v) + ev.Exec.Process.Credentials.FSGID = uint32(v) return nil case "exec.fsgroup": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSGroup"} } - e.Exec.Process.Credentials.FSGroup = str + ev.Exec.Process.Credentials.FSGroup = str return nil case "exec.fsuid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSUID"} } - e.Exec.Process.Credentials.FSUID = uint32(v) + ev.Exec.Process.Credentials.FSUID = uint32(v) return nil case "exec.fsuser": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSUser"} } - e.Exec.Process.Credentials.FSUser = str + ev.Exec.Process.Credentials.FSUser = str return nil case "exec.gid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.GID"} } - e.Exec.Process.Credentials.GID = uint32(v) + ev.Exec.Process.Credentials.GID = uint32(v) return nil case "exec.group": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.Group"} } - e.Exec.Process.Credentials.Group = str + ev.Exec.Process.Credentials.Group = str return nil case "exec.interpreter.file.change_time": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "exec.interpreter.file.filesystem": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.Exec.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.Exec.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "exec.interpreter.file.gid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "exec.interpreter.file.group": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "exec.interpreter.file.in_upper_layer": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } var ok bool - if e.Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "exec.interpreter.file.inode": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "exec.interpreter.file.mode": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "exec.interpreter.file.modification_time": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "exec.interpreter.file.mount_id": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "exec.interpreter.file.name": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.Exec.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.Exec.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "exec.interpreter.file.name.length": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exec.interpreter.file.name.length"} case "exec.interpreter.file.path": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.Exec.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.Exec.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "exec.interpreter.file.path.length": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exec.interpreter.file.path.length"} case "exec.interpreter.file.rights": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "exec.interpreter.file.uid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "exec.interpreter.file.user": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "exec.is_kworker": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } var ok bool - if e.Exec.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.Exec.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.IsKworker"} } return nil case "exec.is_thread": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } var ok bool - if e.Exec.Process.IsThread, ok = value.(bool); !ok { + if ev.Exec.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.IsThread"} } return nil case "exec.pid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.Pid"} } - e.Exec.Process.PIDContext.Pid = uint32(v) + ev.Exec.Process.PIDContext.Pid = uint32(v) return nil case "exec.ppid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PPid"} } - e.Exec.Process.PPid = uint32(v) + ev.Exec.Process.PPid = uint32(v) return nil case "exec.tid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.Tid"} } - e.Exec.Process.PIDContext.Tid = uint32(v) + ev.Exec.Process.PIDContext.Tid = uint32(v) return nil case "exec.tty_name": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.TTYName"} } - e.Exec.Process.TTYName = str + ev.Exec.Process.TTYName = str return nil case "exec.uid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.UID"} } - e.Exec.Process.Credentials.UID = uint32(v) + ev.Exec.Process.Credentials.UID = uint32(v) return nil case "exec.user": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.User"} } - e.Exec.Process.Credentials.User = str + ev.Exec.Process.Credentials.User = str return nil case "exit.args": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Args"} } - e.Exit.Process.Args = str + ev.Exit.Process.Args = str return nil case "exit.args_flags": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) + ev.Exit.Process.Argv = append(ev.Exit.Process.Argv, str) return nil case "exit.args_options": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) + ev.Exit.Process.Argv = append(ev.Exit.Process.Argv, str) return nil case "exit.args_truncated": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } var ok bool - if e.Exit.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.Exit.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.ArgsTruncated"} } return nil case "exit.argv": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) + ev.Exit.Process.Argv = append(ev.Exit.Process.Argv, str) return nil case "exit.argv0": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv0"} } - e.Exit.Process.Argv0 = str + ev.Exit.Process.Argv0 = str return nil case "exit.cap_effective": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.CapEffective"} } - e.Exit.Process.Credentials.CapEffective = uint64(v) + ev.Exit.Process.Credentials.CapEffective = uint64(v) return nil case "exit.cap_permitted": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.CapPermitted"} } - e.Exit.Process.Credentials.CapPermitted = uint64(v) + ev.Exit.Process.Credentials.CapPermitted = uint64(v) return nil case "exit.cause": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Cause"} } - e.Exit.Cause = uint32(v) + ev.Exit.Cause = uint32(v) return nil case "exit.code": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Code"} } - e.Exit.Code = uint32(v) + ev.Exit.Code = uint32(v) return nil case "exit.comm": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Comm"} } - e.Exit.Process.Comm = str + ev.Exit.Process.Comm = str return nil case "exit.container.id": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.ContainerID"} } - e.Exit.Process.ContainerID = str + ev.Exit.Process.ContainerID = str return nil case "exit.cookie": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Cookie"} } - e.Exit.Process.Cookie = uint32(v) + ev.Exit.Process.Cookie = uint32(v) return nil case "exit.created_at": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.CreatedAt"} } - e.Exit.Process.CreatedAt = uint64(v) + ev.Exit.Process.CreatedAt = uint64(v) return nil case "exit.egid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EGID"} } - e.Exit.Process.Credentials.EGID = uint32(v) + ev.Exit.Process.Credentials.EGID = uint32(v) return nil case "exit.egroup": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EGroup"} } - e.Exit.Process.Credentials.EGroup = str + ev.Exit.Process.Credentials.EGroup = str return nil case "exit.envp": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Envp"} } - e.Exit.Process.Envp = append(e.Exit.Process.Envp, str) + ev.Exit.Process.Envp = append(ev.Exit.Process.Envp, str) return nil case "exit.envs": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Envs"} } - e.Exit.Process.Envs = append(e.Exit.Process.Envs, str) + ev.Exit.Process.Envs = append(ev.Exit.Process.Envs, str) return nil case "exit.envs_truncated": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } var ok bool - if e.Exit.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.Exit.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.EnvsTruncated"} } return nil case "exit.euid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EUID"} } - e.Exit.Process.Credentials.EUID = uint32(v) + ev.Exit.Process.Credentials.EUID = uint32(v) return nil case "exit.euser": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EUser"} } - e.Exit.Process.Credentials.EUser = str + ev.Exit.Process.Credentials.EUser = str return nil case "exit.file.change_time": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.CTime"} } - e.Exit.Process.FileEvent.FileFields.CTime = uint64(v) + ev.Exit.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "exit.file.filesystem": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.Filesystem"} } - e.Exit.Process.FileEvent.Filesystem = str + ev.Exit.Process.FileEvent.Filesystem = str return nil case "exit.file.gid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.GID"} } - e.Exit.Process.FileEvent.FileFields.GID = uint32(v) + ev.Exit.Process.FileEvent.FileFields.GID = uint32(v) return nil case "exit.file.group": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Group"} } - e.Exit.Process.FileEvent.FileFields.Group = str + ev.Exit.Process.FileEvent.FileFields.Group = str return nil case "exit.file.in_upper_layer": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } var ok bool - if e.Exit.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Exit.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "exit.file.inode": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Inode"} } - e.Exit.Process.FileEvent.FileFields.Inode = uint64(v) + ev.Exit.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "exit.file.mode": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Mode"} } - e.Exit.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Exit.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "exit.file.modification_time": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.MTime"} } - e.Exit.Process.FileEvent.FileFields.MTime = uint64(v) + ev.Exit.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "exit.file.mount_id": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.MountID"} } - e.Exit.Process.FileEvent.FileFields.MountID = uint32(v) + ev.Exit.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "exit.file.name": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.BasenameStr"} } - e.Exit.Process.FileEvent.BasenameStr = str + ev.Exit.Process.FileEvent.BasenameStr = str return nil case "exit.file.name.length": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exit.file.name.length"} case "exit.file.path": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.PathnameStr"} } - e.Exit.Process.FileEvent.PathnameStr = str + ev.Exit.Process.FileEvent.PathnameStr = str return nil case "exit.file.path.length": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exit.file.path.length"} case "exit.file.rights": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Mode"} } - e.Exit.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Exit.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "exit.file.uid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.UID"} } - e.Exit.Process.FileEvent.FileFields.UID = uint32(v) + ev.Exit.Process.FileEvent.FileFields.UID = uint32(v) return nil case "exit.file.user": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.User"} } - e.Exit.Process.FileEvent.FileFields.User = str + ev.Exit.Process.FileEvent.FileFields.User = str return nil case "exit.fsgid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSGID"} } - e.Exit.Process.Credentials.FSGID = uint32(v) + ev.Exit.Process.Credentials.FSGID = uint32(v) return nil case "exit.fsgroup": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSGroup"} } - e.Exit.Process.Credentials.FSGroup = str + ev.Exit.Process.Credentials.FSGroup = str return nil case "exit.fsuid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSUID"} } - e.Exit.Process.Credentials.FSUID = uint32(v) + ev.Exit.Process.Credentials.FSUID = uint32(v) return nil case "exit.fsuser": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSUser"} } - e.Exit.Process.Credentials.FSUser = str + ev.Exit.Process.Credentials.FSUser = str return nil case "exit.gid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.GID"} } - e.Exit.Process.Credentials.GID = uint32(v) + ev.Exit.Process.Credentials.GID = uint32(v) return nil case "exit.group": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.Group"} } - e.Exit.Process.Credentials.Group = str + ev.Exit.Process.Credentials.Group = str return nil case "exit.interpreter.file.change_time": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "exit.interpreter.file.filesystem": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.Exit.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.Exit.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "exit.interpreter.file.gid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "exit.interpreter.file.group": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "exit.interpreter.file.in_upper_layer": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } var ok bool - if e.Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "exit.interpreter.file.inode": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "exit.interpreter.file.mode": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "exit.interpreter.file.modification_time": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "exit.interpreter.file.mount_id": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "exit.interpreter.file.name": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.Exit.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.Exit.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "exit.interpreter.file.name.length": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exit.interpreter.file.name.length"} case "exit.interpreter.file.path": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.Exit.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.Exit.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "exit.interpreter.file.path.length": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exit.interpreter.file.path.length"} case "exit.interpreter.file.rights": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "exit.interpreter.file.uid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "exit.interpreter.file.user": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "exit.is_kworker": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } var ok bool - if e.Exit.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.Exit.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.IsKworker"} } return nil case "exit.is_thread": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } var ok bool - if e.Exit.Process.IsThread, ok = value.(bool); !ok { + if ev.Exit.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.IsThread"} } return nil case "exit.pid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.Pid"} } - e.Exit.Process.PIDContext.Pid = uint32(v) + ev.Exit.Process.PIDContext.Pid = uint32(v) return nil case "exit.ppid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PPid"} } - e.Exit.Process.PPid = uint32(v) + ev.Exit.Process.PPid = uint32(v) return nil case "exit.tid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.Tid"} } - e.Exit.Process.PIDContext.Tid = uint32(v) + ev.Exit.Process.PIDContext.Tid = uint32(v) return nil case "exit.tty_name": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.TTYName"} } - e.Exit.Process.TTYName = str + ev.Exit.Process.TTYName = str return nil case "exit.uid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.UID"} } - e.Exit.Process.Credentials.UID = uint32(v) + ev.Exit.Process.Credentials.UID = uint32(v) return nil case "exit.user": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.User"} } - e.Exit.Process.Credentials.User = str + ev.Exit.Process.Credentials.User = str return nil case "link.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.CTime"} } - e.Link.Source.FileFields.CTime = uint64(v) + ev.Link.Source.FileFields.CTime = uint64(v) return nil case "link.file.destination.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.CTime"} } - e.Link.Target.FileFields.CTime = uint64(v) + ev.Link.Target.FileFields.CTime = uint64(v) return nil case "link.file.destination.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.Filesystem"} } - e.Link.Target.Filesystem = str + ev.Link.Target.Filesystem = str return nil case "link.file.destination.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.GID"} } - e.Link.Target.FileFields.GID = uint32(v) + ev.Link.Target.FileFields.GID = uint32(v) return nil case "link.file.destination.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Group"} } - e.Link.Target.FileFields.Group = str + ev.Link.Target.FileFields.Group = str return nil case "link.file.destination.in_upper_layer": var ok bool - if e.Link.Target.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Link.Target.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.InUpperLayer"} } return nil @@ -22519,35 +25341,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Inode"} } - e.Link.Target.FileFields.Inode = uint64(v) + ev.Link.Target.FileFields.Inode = uint64(v) return nil case "link.file.destination.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Mode"} } - e.Link.Target.FileFields.Mode = uint16(v) + ev.Link.Target.FileFields.Mode = uint16(v) return nil case "link.file.destination.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.MTime"} } - e.Link.Target.FileFields.MTime = uint64(v) + ev.Link.Target.FileFields.MTime = uint64(v) return nil case "link.file.destination.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.MountID"} } - e.Link.Target.FileFields.MountID = uint32(v) + ev.Link.Target.FileFields.MountID = uint32(v) return nil case "link.file.destination.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.BasenameStr"} } - e.Link.Target.BasenameStr = str + ev.Link.Target.BasenameStr = str return nil case "link.file.destination.name.length": return &eval.ErrFieldReadOnly{Field: "link.file.destination.name.length"} @@ -22556,7 +25378,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.PathnameStr"} } - e.Link.Target.PathnameStr = str + ev.Link.Target.PathnameStr = str return nil case "link.file.destination.path.length": return &eval.ErrFieldReadOnly{Field: "link.file.destination.path.length"} @@ -22565,46 +25387,46 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Mode"} } - e.Link.Target.FileFields.Mode = uint16(v) + ev.Link.Target.FileFields.Mode = uint16(v) return nil case "link.file.destination.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.UID"} } - e.Link.Target.FileFields.UID = uint32(v) + ev.Link.Target.FileFields.UID = uint32(v) return nil case "link.file.destination.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.User"} } - e.Link.Target.FileFields.User = str + ev.Link.Target.FileFields.User = str return nil case "link.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.Filesystem"} } - e.Link.Source.Filesystem = str + ev.Link.Source.Filesystem = str return nil case "link.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.GID"} } - e.Link.Source.FileFields.GID = uint32(v) + ev.Link.Source.FileFields.GID = uint32(v) return nil case "link.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Group"} } - e.Link.Source.FileFields.Group = str + ev.Link.Source.FileFields.Group = str return nil case "link.file.in_upper_layer": var ok bool - if e.Link.Source.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Link.Source.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.InUpperLayer"} } return nil @@ -22613,35 +25435,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Inode"} } - e.Link.Source.FileFields.Inode = uint64(v) + ev.Link.Source.FileFields.Inode = uint64(v) return nil case "link.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Mode"} } - e.Link.Source.FileFields.Mode = uint16(v) + ev.Link.Source.FileFields.Mode = uint16(v) return nil case "link.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.MTime"} } - e.Link.Source.FileFields.MTime = uint64(v) + ev.Link.Source.FileFields.MTime = uint64(v) return nil case "link.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.MountID"} } - e.Link.Source.FileFields.MountID = uint32(v) + ev.Link.Source.FileFields.MountID = uint32(v) return nil case "link.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.BasenameStr"} } - e.Link.Source.BasenameStr = str + ev.Link.Source.BasenameStr = str return nil case "link.file.name.length": return &eval.ErrFieldReadOnly{Field: "link.file.name.length"} @@ -22650,7 +25472,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.PathnameStr"} } - e.Link.Source.PathnameStr = str + ev.Link.Source.PathnameStr = str return nil case "link.file.path.length": return &eval.ErrFieldReadOnly{Field: "link.file.path.length"} @@ -22659,60 +25481,60 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Mode"} } - e.Link.Source.FileFields.Mode = uint16(v) + ev.Link.Source.FileFields.Mode = uint16(v) return nil case "link.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.UID"} } - e.Link.Source.FileFields.UID = uint32(v) + ev.Link.Source.FileFields.UID = uint32(v) return nil case "link.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.User"} } - e.Link.Source.FileFields.User = str + ev.Link.Source.FileFields.User = str return nil case "link.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.SyscallEvent.Retval"} } - e.Link.SyscallEvent.Retval = int64(v) + ev.Link.SyscallEvent.Retval = int64(v) return nil case "load_module.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.CTime"} } - e.LoadModule.File.FileFields.CTime = uint64(v) + ev.LoadModule.File.FileFields.CTime = uint64(v) return nil case "load_module.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.Filesystem"} } - e.LoadModule.File.Filesystem = str + ev.LoadModule.File.Filesystem = str return nil case "load_module.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.GID"} } - e.LoadModule.File.FileFields.GID = uint32(v) + ev.LoadModule.File.FileFields.GID = uint32(v) return nil case "load_module.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Group"} } - e.LoadModule.File.FileFields.Group = str + ev.LoadModule.File.FileFields.Group = str return nil case "load_module.file.in_upper_layer": var ok bool - if e.LoadModule.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.LoadModule.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.InUpperLayer"} } return nil @@ -22721,35 +25543,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Inode"} } - e.LoadModule.File.FileFields.Inode = uint64(v) + ev.LoadModule.File.FileFields.Inode = uint64(v) return nil case "load_module.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Mode"} } - e.LoadModule.File.FileFields.Mode = uint16(v) + ev.LoadModule.File.FileFields.Mode = uint16(v) return nil case "load_module.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.MTime"} } - e.LoadModule.File.FileFields.MTime = uint64(v) + ev.LoadModule.File.FileFields.MTime = uint64(v) return nil case "load_module.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.MountID"} } - e.LoadModule.File.FileFields.MountID = uint32(v) + ev.LoadModule.File.FileFields.MountID = uint32(v) return nil case "load_module.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.BasenameStr"} } - e.LoadModule.File.BasenameStr = str + ev.LoadModule.File.BasenameStr = str return nil case "load_module.file.name.length": return &eval.ErrFieldReadOnly{Field: "load_module.file.name.length"} @@ -22758,7 +25580,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.PathnameStr"} } - e.LoadModule.File.PathnameStr = str + ev.LoadModule.File.PathnameStr = str return nil case "load_module.file.path.length": return &eval.ErrFieldReadOnly{Field: "load_module.file.path.length"} @@ -22767,25 +25589,25 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Mode"} } - e.LoadModule.File.FileFields.Mode = uint16(v) + ev.LoadModule.File.FileFields.Mode = uint16(v) return nil case "load_module.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.UID"} } - e.LoadModule.File.FileFields.UID = uint32(v) + ev.LoadModule.File.FileFields.UID = uint32(v) return nil case "load_module.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.User"} } - e.LoadModule.File.FileFields.User = str + ev.LoadModule.File.FileFields.User = str return nil case "load_module.loaded_from_memory": var ok bool - if e.LoadModule.LoadedFromMemory, ok = value.(bool); !ok { + if ev.LoadModule.LoadedFromMemory, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.LoadedFromMemory"} } return nil @@ -22794,60 +25616,60 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.Name"} } - e.LoadModule.Name = str + ev.LoadModule.Name = str return nil case "load_module.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.SyscallEvent.Retval"} } - e.LoadModule.SyscallEvent.Retval = int64(v) + ev.LoadModule.SyscallEvent.Retval = int64(v) return nil case "mkdir.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.CTime"} } - e.Mkdir.File.FileFields.CTime = uint64(v) + ev.Mkdir.File.FileFields.CTime = uint64(v) return nil case "mkdir.file.destination.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.Mode"} } - e.Mkdir.Mode = uint32(v) + ev.Mkdir.Mode = uint32(v) return nil case "mkdir.file.destination.rights": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.Mode"} } - e.Mkdir.Mode = uint32(v) + ev.Mkdir.Mode = uint32(v) return nil case "mkdir.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.Filesystem"} } - e.Mkdir.File.Filesystem = str + ev.Mkdir.File.Filesystem = str return nil case "mkdir.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.GID"} } - e.Mkdir.File.FileFields.GID = uint32(v) + ev.Mkdir.File.FileFields.GID = uint32(v) return nil case "mkdir.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Group"} } - e.Mkdir.File.FileFields.Group = str + ev.Mkdir.File.FileFields.Group = str return nil case "mkdir.file.in_upper_layer": var ok bool - if e.Mkdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Mkdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.InUpperLayer"} } return nil @@ -22856,35 +25678,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Inode"} } - e.Mkdir.File.FileFields.Inode = uint64(v) + ev.Mkdir.File.FileFields.Inode = uint64(v) return nil case "mkdir.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Mode"} } - e.Mkdir.File.FileFields.Mode = uint16(v) + ev.Mkdir.File.FileFields.Mode = uint16(v) return nil case "mkdir.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.MTime"} } - e.Mkdir.File.FileFields.MTime = uint64(v) + ev.Mkdir.File.FileFields.MTime = uint64(v) return nil case "mkdir.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.MountID"} } - e.Mkdir.File.FileFields.MountID = uint32(v) + ev.Mkdir.File.FileFields.MountID = uint32(v) return nil case "mkdir.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.BasenameStr"} } - e.Mkdir.File.BasenameStr = str + ev.Mkdir.File.BasenameStr = str return nil case "mkdir.file.name.length": return &eval.ErrFieldReadOnly{Field: "mkdir.file.name.length"} @@ -22893,7 +25715,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.PathnameStr"} } - e.Mkdir.File.PathnameStr = str + ev.Mkdir.File.PathnameStr = str return nil case "mkdir.file.path.length": return &eval.ErrFieldReadOnly{Field: "mkdir.file.path.length"} @@ -22902,60 +25724,60 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Mode"} } - e.Mkdir.File.FileFields.Mode = uint16(v) + ev.Mkdir.File.FileFields.Mode = uint16(v) return nil case "mkdir.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.UID"} } - e.Mkdir.File.FileFields.UID = uint32(v) + ev.Mkdir.File.FileFields.UID = uint32(v) return nil case "mkdir.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.User"} } - e.Mkdir.File.FileFields.User = str + ev.Mkdir.File.FileFields.User = str return nil case "mkdir.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.SyscallEvent.Retval"} } - e.Mkdir.SyscallEvent.Retval = int64(v) + ev.Mkdir.SyscallEvent.Retval = int64(v) return nil case "mmap.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.CTime"} } - e.MMap.File.FileFields.CTime = uint64(v) + ev.MMap.File.FileFields.CTime = uint64(v) return nil case "mmap.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.Filesystem"} } - e.MMap.File.Filesystem = str + ev.MMap.File.Filesystem = str return nil case "mmap.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.GID"} } - e.MMap.File.FileFields.GID = uint32(v) + ev.MMap.File.FileFields.GID = uint32(v) return nil case "mmap.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Group"} } - e.MMap.File.FileFields.Group = str + ev.MMap.File.FileFields.Group = str return nil case "mmap.file.in_upper_layer": var ok bool - if e.MMap.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.MMap.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.InUpperLayer"} } return nil @@ -22964,35 +25786,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Inode"} } - e.MMap.File.FileFields.Inode = uint64(v) + ev.MMap.File.FileFields.Inode = uint64(v) return nil case "mmap.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Mode"} } - e.MMap.File.FileFields.Mode = uint16(v) + ev.MMap.File.FileFields.Mode = uint16(v) return nil case "mmap.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.MTime"} } - e.MMap.File.FileFields.MTime = uint64(v) + ev.MMap.File.FileFields.MTime = uint64(v) return nil case "mmap.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.MountID"} } - e.MMap.File.FileFields.MountID = uint32(v) + ev.MMap.File.FileFields.MountID = uint32(v) return nil case "mmap.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.BasenameStr"} } - e.MMap.File.BasenameStr = str + ev.MMap.File.BasenameStr = str return nil case "mmap.file.name.length": return &eval.ErrFieldReadOnly{Field: "mmap.file.name.length"} @@ -23001,7 +25823,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.PathnameStr"} } - e.MMap.File.PathnameStr = str + ev.MMap.File.PathnameStr = str return nil case "mmap.file.path.length": return &eval.ErrFieldReadOnly{Field: "mmap.file.path.length"} @@ -23010,165 +25832,193 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Mode"} } - e.MMap.File.FileFields.Mode = uint16(v) + ev.MMap.File.FileFields.Mode = uint16(v) return nil case "mmap.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.UID"} } - e.MMap.File.FileFields.UID = uint32(v) + ev.MMap.File.FileFields.UID = uint32(v) return nil case "mmap.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.User"} } - e.MMap.File.FileFields.User = str + ev.MMap.File.FileFields.User = str return nil case "mmap.flags": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.Flags"} } - e.MMap.Flags = int(v) + ev.MMap.Flags = int(v) return nil case "mmap.protection": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.Protection"} } - e.MMap.Protection = int(v) + ev.MMap.Protection = int(v) return nil case "mmap.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.SyscallEvent.Retval"} } - e.MMap.SyscallEvent.Retval = int64(v) + ev.MMap.SyscallEvent.Retval = int64(v) + return nil + case "mount.fs_type": + str, ok := value.(string) + if !ok { + return &eval.ErrValueTypeMismatch{Field: "Mount.Mount.FSType"} + } + ev.Mount.Mount.FSType = str + return nil + case "mount.mountpoint.path": + str, ok := value.(string) + if !ok { + return &eval.ErrValueTypeMismatch{Field: "Mount.MountPointPath"} + } + ev.Mount.MountPointPath = str + return nil + case "mount.retval": + v, ok := value.(int) + if !ok { + return &eval.ErrValueTypeMismatch{Field: "Mount.SyscallEvent.Retval"} + } + ev.Mount.SyscallEvent.Retval = int64(v) + return nil + case "mount.source.path": + str, ok := value.(string) + if !ok { + return &eval.ErrValueTypeMismatch{Field: "Mount.MountSourcePath"} + } + ev.Mount.MountSourcePath = str return nil case "mprotect.req_protection": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MProtect.ReqProtection"} } - e.MProtect.ReqProtection = int(v) + ev.MProtect.ReqProtection = int(v) return nil case "mprotect.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MProtect.SyscallEvent.Retval"} } - e.MProtect.SyscallEvent.Retval = int64(v) + ev.MProtect.SyscallEvent.Retval = int64(v) return nil case "mprotect.vm_protection": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MProtect.VMProtection"} } - e.MProtect.VMProtection = int(v) + ev.MProtect.VMProtection = int(v) return nil case "network.destination.ip": v, ok := value.(net.IPNet) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Destination.IPNet"} } - e.NetworkContext.Destination.IPNet = v + ev.NetworkContext.Destination.IPNet = v return nil case "network.destination.port": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Destination.Port"} } - e.NetworkContext.Destination.Port = uint16(v) + ev.NetworkContext.Destination.Port = uint16(v) return nil case "network.device.ifindex": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Device.IfIndex"} } - e.NetworkContext.Device.IfIndex = uint32(v) + ev.NetworkContext.Device.IfIndex = uint32(v) return nil case "network.device.ifname": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Device.IfName"} } - e.NetworkContext.Device.IfName = str + ev.NetworkContext.Device.IfName = str return nil case "network.l3_protocol": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.L3Protocol"} } - e.NetworkContext.L3Protocol = uint16(v) + ev.NetworkContext.L3Protocol = uint16(v) return nil case "network.l4_protocol": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.L4Protocol"} } - e.NetworkContext.L4Protocol = uint16(v) + ev.NetworkContext.L4Protocol = uint16(v) return nil case "network.size": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Size"} } - e.NetworkContext.Size = uint32(v) + ev.NetworkContext.Size = uint32(v) return nil case "network.source.ip": v, ok := value.(net.IPNet) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Source.IPNet"} } - e.NetworkContext.Source.IPNet = v + ev.NetworkContext.Source.IPNet = v return nil case "network.source.port": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Source.Port"} } - e.NetworkContext.Source.Port = uint16(v) + ev.NetworkContext.Source.Port = uint16(v) return nil case "open.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.CTime"} } - e.Open.File.FileFields.CTime = uint64(v) + ev.Open.File.FileFields.CTime = uint64(v) return nil case "open.file.destination.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.Mode"} } - e.Open.Mode = uint32(v) + ev.Open.Mode = uint32(v) return nil case "open.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.Filesystem"} } - e.Open.File.Filesystem = str + ev.Open.File.Filesystem = str return nil case "open.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.GID"} } - e.Open.File.FileFields.GID = uint32(v) + ev.Open.File.FileFields.GID = uint32(v) return nil case "open.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Group"} } - e.Open.File.FileFields.Group = str + ev.Open.File.FileFields.Group = str return nil case "open.file.in_upper_layer": var ok bool - if e.Open.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Open.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.InUpperLayer"} } return nil @@ -23177,35 +26027,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Inode"} } - e.Open.File.FileFields.Inode = uint64(v) + ev.Open.File.FileFields.Inode = uint64(v) return nil case "open.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Mode"} } - e.Open.File.FileFields.Mode = uint16(v) + ev.Open.File.FileFields.Mode = uint16(v) return nil case "open.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.MTime"} } - e.Open.File.FileFields.MTime = uint64(v) + ev.Open.File.FileFields.MTime = uint64(v) return nil case "open.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.MountID"} } - e.Open.File.FileFields.MountID = uint32(v) + ev.Open.File.FileFields.MountID = uint32(v) return nil case "open.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.BasenameStr"} } - e.Open.File.BasenameStr = str + ev.Open.File.BasenameStr = str return nil case "open.file.name.length": return &eval.ErrFieldReadOnly{Field: "open.file.name.length"} @@ -23214,7 +26064,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.PathnameStr"} } - e.Open.File.PathnameStr = str + ev.Open.File.PathnameStr = str return nil case "open.file.path.length": return &eval.ErrFieldReadOnly{Field: "open.file.path.length"} @@ -23223,4619 +26073,4619 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Mode"} } - e.Open.File.FileFields.Mode = uint16(v) + ev.Open.File.FileFields.Mode = uint16(v) return nil case "open.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.UID"} } - e.Open.File.FileFields.UID = uint32(v) + ev.Open.File.FileFields.UID = uint32(v) return nil case "open.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.User"} } - e.Open.File.FileFields.User = str + ev.Open.File.FileFields.User = str return nil case "open.flags": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.Flags"} } - e.Open.Flags = uint32(v) + ev.Open.Flags = uint32(v) return nil case "open.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.SyscallEvent.Retval"} } - e.Open.SyscallEvent.Retval = int64(v) + ev.Open.SyscallEvent.Retval = int64(v) return nil case "process.ancestors.args": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Args"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Args = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Args = str return nil case "process.ancestors.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) return nil case "process.ancestors.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) return nil case "process.ancestors.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated"} } return nil case "process.ancestors.argv": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) return nil case "process.ancestors.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv0"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv0 = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv0 = str return nil case "process.ancestors.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) return nil case "process.ancestors.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) return nil case "process.ancestors.comm": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Comm"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Comm = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Comm = str return nil case "process.ancestors.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.ContainerID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.ContainerID = str + ev.ProcessContext.Ancestor.ProcessContext.Process.ContainerID = str return nil case "process.ancestors.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Cookie"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Cookie = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Cookie = uint32(v) return nil case "process.ancestors.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.CreatedAt"} } - e.ProcessContext.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) return nil case "process.ancestors.egid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) return nil case "process.ancestors.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup = str return nil case "process.ancestors.envp": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Envp"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Envp = append(e.ProcessContext.Ancestor.ProcessContext.Process.Envp, str) + ev.ProcessContext.Ancestor.ProcessContext.Process.Envp = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Envp, str) return nil case "process.ancestors.envs": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Envs"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Envs = append(e.ProcessContext.Ancestor.ProcessContext.Process.Envs, str) + ev.ProcessContext.Ancestor.ProcessContext.Process.Envs = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Envs, str) return nil case "process.ancestors.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated"} } return nil case "process.ancestors.euid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) return nil case "process.ancestors.euser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser = str return nil case "process.ancestors.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "process.ancestors.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str return nil case "process.ancestors.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) return nil case "process.ancestors.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str return nil case "process.ancestors.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "process.ancestors.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "process.ancestors.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "process.ancestors.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "process.ancestors.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "process.ancestors.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str return nil case "process.ancestors.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "process.ancestors.file.name.length"} case "process.ancestors.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str return nil case "process.ancestors.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "process.ancestors.file.path.length"} case "process.ancestors.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "process.ancestors.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) return nil case "process.ancestors.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str return nil case "process.ancestors.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) return nil case "process.ancestors.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup = str return nil case "process.ancestors.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) return nil case "process.ancestors.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser = str return nil case "process.ancestors.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) return nil case "process.ancestors.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group = str return nil case "process.ancestors.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "process.ancestors.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "process.ancestors.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "process.ancestors.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "process.ancestors.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "process.ancestors.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "process.ancestors.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "process.ancestors.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "process.ancestors.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "process.ancestors.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "process.ancestors.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "process.ancestors.interpreter.file.name.length"} case "process.ancestors.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "process.ancestors.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "process.ancestors.interpreter.file.path.length"} case "process.ancestors.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "process.ancestors.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "process.ancestors.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "process.ancestors.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} } return nil case "process.ancestors.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { + if ev.ProcessContext.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.IsThread"} } return nil case "process.ancestors.pid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid"} } - e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) return nil case "process.ancestors.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PPid"} } - e.ProcessContext.Ancestor.ProcessContext.Process.PPid = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.PPid = uint32(v) return nil case "process.ancestors.tid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid"} } - e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) return nil case "process.ancestors.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.TTYName"} } - e.ProcessContext.Ancestor.ProcessContext.Process.TTYName = str + ev.ProcessContext.Ancestor.ProcessContext.Process.TTYName = str return nil case "process.ancestors.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) return nil case "process.ancestors.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.User"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.User = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.User = str return nil case "process.args": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Args"} } - e.ProcessContext.Process.Args = str + ev.ProcessContext.Process.Args = str return nil case "process.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) + ev.ProcessContext.Process.Argv = append(ev.ProcessContext.Process.Argv, str) return nil case "process.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) + ev.ProcessContext.Process.Argv = append(ev.ProcessContext.Process.Argv, str) return nil case "process.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } var ok bool - if e.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.ArgsTruncated"} } return nil case "process.argv": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) + ev.ProcessContext.Process.Argv = append(ev.ProcessContext.Process.Argv, str) return nil case "process.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv0"} } - e.ProcessContext.Process.Argv0 = str + ev.ProcessContext.Process.Argv0 = str return nil case "process.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.CapEffective"} } - e.ProcessContext.Process.Credentials.CapEffective = uint64(v) + ev.ProcessContext.Process.Credentials.CapEffective = uint64(v) return nil case "process.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.CapPermitted"} } - e.ProcessContext.Process.Credentials.CapPermitted = uint64(v) + ev.ProcessContext.Process.Credentials.CapPermitted = uint64(v) return nil case "process.comm": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Comm"} } - e.ProcessContext.Process.Comm = str + ev.ProcessContext.Process.Comm = str return nil case "process.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.ContainerID"} } - e.ProcessContext.Process.ContainerID = str + ev.ProcessContext.Process.ContainerID = str return nil case "process.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Cookie"} } - e.ProcessContext.Process.Cookie = uint32(v) + ev.ProcessContext.Process.Cookie = uint32(v) return nil case "process.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.CreatedAt"} } - e.ProcessContext.Process.CreatedAt = uint64(v) + ev.ProcessContext.Process.CreatedAt = uint64(v) return nil case "process.egid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EGID"} } - e.ProcessContext.Process.Credentials.EGID = uint32(v) + ev.ProcessContext.Process.Credentials.EGID = uint32(v) return nil case "process.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EGroup"} } - e.ProcessContext.Process.Credentials.EGroup = str + ev.ProcessContext.Process.Credentials.EGroup = str return nil case "process.envp": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Envp"} } - e.ProcessContext.Process.Envp = append(e.ProcessContext.Process.Envp, str) + ev.ProcessContext.Process.Envp = append(ev.ProcessContext.Process.Envp, str) return nil case "process.envs": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Envs"} } - e.ProcessContext.Process.Envs = append(e.ProcessContext.Process.Envs, str) + ev.ProcessContext.Process.Envs = append(ev.ProcessContext.Process.Envs, str) return nil case "process.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } var ok bool - if e.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.EnvsTruncated"} } return nil case "process.euid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EUID"} } - e.ProcessContext.Process.Credentials.EUID = uint32(v) + ev.ProcessContext.Process.Credentials.EUID = uint32(v) return nil case "process.euser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EUser"} } - e.ProcessContext.Process.Credentials.EUser = str + ev.ProcessContext.Process.Credentials.EUser = str return nil case "process.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.CTime"} } - e.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "process.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.Filesystem"} } - e.ProcessContext.Process.FileEvent.Filesystem = str + ev.ProcessContext.Process.FileEvent.Filesystem = str return nil case "process.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.GID"} } - e.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) return nil case "process.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Group"} } - e.ProcessContext.Process.FileEvent.FileFields.Group = str + ev.ProcessContext.Process.FileEvent.FileFields.Group = str return nil case "process.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } var ok bool - if e.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "process.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Inode"} } - e.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "process.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "process.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.MTime"} } - e.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "process.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.MountID"} } - e.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "process.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.BasenameStr"} } - e.ProcessContext.Process.FileEvent.BasenameStr = str + ev.ProcessContext.Process.FileEvent.BasenameStr = str return nil case "process.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "process.file.name.length"} case "process.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.PathnameStr"} } - e.ProcessContext.Process.FileEvent.PathnameStr = str + ev.ProcessContext.Process.FileEvent.PathnameStr = str return nil case "process.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "process.file.path.length"} case "process.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "process.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.UID"} } - e.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) return nil case "process.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.User"} } - e.ProcessContext.Process.FileEvent.FileFields.User = str + ev.ProcessContext.Process.FileEvent.FileFields.User = str return nil case "process.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSGID"} } - e.ProcessContext.Process.Credentials.FSGID = uint32(v) + ev.ProcessContext.Process.Credentials.FSGID = uint32(v) return nil case "process.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSGroup"} } - e.ProcessContext.Process.Credentials.FSGroup = str + ev.ProcessContext.Process.Credentials.FSGroup = str return nil case "process.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSUID"} } - e.ProcessContext.Process.Credentials.FSUID = uint32(v) + ev.ProcessContext.Process.Credentials.FSUID = uint32(v) return nil case "process.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSUser"} } - e.ProcessContext.Process.Credentials.FSUser = str + ev.ProcessContext.Process.Credentials.FSUser = str return nil case "process.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.GID"} } - e.ProcessContext.Process.Credentials.GID = uint32(v) + ev.ProcessContext.Process.Credentials.GID = uint32(v) return nil case "process.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.Group"} } - e.ProcessContext.Process.Credentials.Group = str + ev.ProcessContext.Process.Credentials.Group = str return nil case "process.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "process.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "process.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "process.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "process.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } var ok bool - if e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "process.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "process.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "process.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "process.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "process.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "process.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "process.interpreter.file.name.length"} case "process.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "process.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "process.interpreter.file.path.length"} case "process.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "process.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "process.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "process.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } var ok bool - if e.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.IsKworker"} } return nil case "process.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } var ok bool - if e.ProcessContext.Process.IsThread, ok = value.(bool); !ok { + if ev.ProcessContext.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.IsThread"} } return nil case "process.parent.args": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Args"} } - e.ProcessContext.Parent.Args = str + ev.ProcessContext.Parent.Args = str return nil case "process.parent.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) + ev.ProcessContext.Parent.Argv = append(ev.ProcessContext.Parent.Argv, str) return nil case "process.parent.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) + ev.ProcessContext.Parent.Argv = append(ev.ProcessContext.Parent.Argv, str) return nil case "process.parent.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } var ok bool - if e.ProcessContext.Parent.ArgsTruncated, ok = value.(bool); !ok { + if ev.ProcessContext.Parent.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.ArgsTruncated"} } return nil case "process.parent.argv": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) + ev.ProcessContext.Parent.Argv = append(ev.ProcessContext.Parent.Argv, str) return nil case "process.parent.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv0"} } - e.ProcessContext.Parent.Argv0 = str + ev.ProcessContext.Parent.Argv0 = str return nil case "process.parent.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.CapEffective"} } - e.ProcessContext.Parent.Credentials.CapEffective = uint64(v) + ev.ProcessContext.Parent.Credentials.CapEffective = uint64(v) return nil case "process.parent.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.CapPermitted"} } - e.ProcessContext.Parent.Credentials.CapPermitted = uint64(v) + ev.ProcessContext.Parent.Credentials.CapPermitted = uint64(v) return nil case "process.parent.comm": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Comm"} } - e.ProcessContext.Parent.Comm = str + ev.ProcessContext.Parent.Comm = str return nil case "process.parent.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.ContainerID"} } - e.ProcessContext.Parent.ContainerID = str + ev.ProcessContext.Parent.ContainerID = str return nil case "process.parent.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Cookie"} } - e.ProcessContext.Parent.Cookie = uint32(v) + ev.ProcessContext.Parent.Cookie = uint32(v) return nil case "process.parent.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.CreatedAt"} } - e.ProcessContext.Parent.CreatedAt = uint64(v) + ev.ProcessContext.Parent.CreatedAt = uint64(v) return nil case "process.parent.egid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EGID"} } - e.ProcessContext.Parent.Credentials.EGID = uint32(v) + ev.ProcessContext.Parent.Credentials.EGID = uint32(v) return nil case "process.parent.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EGroup"} } - e.ProcessContext.Parent.Credentials.EGroup = str + ev.ProcessContext.Parent.Credentials.EGroup = str return nil case "process.parent.envp": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Envp"} } - e.ProcessContext.Parent.Envp = append(e.ProcessContext.Parent.Envp, str) + ev.ProcessContext.Parent.Envp = append(ev.ProcessContext.Parent.Envp, str) return nil case "process.parent.envs": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Envs"} } - e.ProcessContext.Parent.Envs = append(e.ProcessContext.Parent.Envs, str) + ev.ProcessContext.Parent.Envs = append(ev.ProcessContext.Parent.Envs, str) return nil case "process.parent.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } var ok bool - if e.ProcessContext.Parent.EnvsTruncated, ok = value.(bool); !ok { + if ev.ProcessContext.Parent.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.EnvsTruncated"} } return nil case "process.parent.euid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EUID"} } - e.ProcessContext.Parent.Credentials.EUID = uint32(v) + ev.ProcessContext.Parent.Credentials.EUID = uint32(v) return nil case "process.parent.euser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EUser"} } - e.ProcessContext.Parent.Credentials.EUser = str + ev.ProcessContext.Parent.Credentials.EUser = str return nil case "process.parent.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.CTime"} } - e.ProcessContext.Parent.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Parent.FileEvent.FileFields.CTime = uint64(v) return nil case "process.parent.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.Filesystem"} } - e.ProcessContext.Parent.FileEvent.Filesystem = str + ev.ProcessContext.Parent.FileEvent.Filesystem = str return nil case "process.parent.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.GID"} } - e.ProcessContext.Parent.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Parent.FileEvent.FileFields.GID = uint32(v) return nil case "process.parent.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Group"} } - e.ProcessContext.Parent.FileEvent.FileFields.Group = str + ev.ProcessContext.Parent.FileEvent.FileFields.Group = str return nil case "process.parent.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } var ok bool - if e.ProcessContext.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.ProcessContext.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.InUpperLayer"} } return nil case "process.parent.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Inode"} } - e.ProcessContext.Parent.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Parent.FileEvent.FileFields.Inode = uint64(v) return nil case "process.parent.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Mode"} } - e.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) return nil case "process.parent.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.MTime"} } - e.ProcessContext.Parent.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Parent.FileEvent.FileFields.MTime = uint64(v) return nil case "process.parent.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.MountID"} } - e.ProcessContext.Parent.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Parent.FileEvent.FileFields.MountID = uint32(v) return nil case "process.parent.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.BasenameStr"} } - e.ProcessContext.Parent.FileEvent.BasenameStr = str + ev.ProcessContext.Parent.FileEvent.BasenameStr = str return nil case "process.parent.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "process.parent.file.name.length"} case "process.parent.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.PathnameStr"} } - e.ProcessContext.Parent.FileEvent.PathnameStr = str + ev.ProcessContext.Parent.FileEvent.PathnameStr = str return nil case "process.parent.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "process.parent.file.path.length"} case "process.parent.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Mode"} } - e.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) return nil case "process.parent.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.UID"} } - e.ProcessContext.Parent.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Parent.FileEvent.FileFields.UID = uint32(v) return nil case "process.parent.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.User"} } - e.ProcessContext.Parent.FileEvent.FileFields.User = str + ev.ProcessContext.Parent.FileEvent.FileFields.User = str return nil case "process.parent.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSGID"} } - e.ProcessContext.Parent.Credentials.FSGID = uint32(v) + ev.ProcessContext.Parent.Credentials.FSGID = uint32(v) return nil case "process.parent.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSGroup"} } - e.ProcessContext.Parent.Credentials.FSGroup = str + ev.ProcessContext.Parent.Credentials.FSGroup = str return nil case "process.parent.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSUID"} } - e.ProcessContext.Parent.Credentials.FSUID = uint32(v) + ev.ProcessContext.Parent.Credentials.FSUID = uint32(v) return nil case "process.parent.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSUser"} } - e.ProcessContext.Parent.Credentials.FSUser = str + ev.ProcessContext.Parent.Credentials.FSUser = str return nil case "process.parent.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.GID"} } - e.ProcessContext.Parent.Credentials.GID = uint32(v) + ev.ProcessContext.Parent.Credentials.GID = uint32(v) return nil case "process.parent.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.Group"} } - e.ProcessContext.Parent.Credentials.Group = str + ev.ProcessContext.Parent.Credentials.Group = str return nil case "process.parent.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "process.parent.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem = str return nil case "process.parent.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "process.parent.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "process.parent.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } var ok bool - if e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "process.parent.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "process.parent.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "process.parent.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "process.parent.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "process.parent.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr = str return nil case "process.parent.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "process.parent.interpreter.file.name.length"} case "process.parent.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr = str return nil case "process.parent.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "process.parent.interpreter.file.path.length"} case "process.parent.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "process.parent.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "process.parent.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User = str return nil case "process.parent.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } var ok bool - if e.ProcessContext.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.ProcessContext.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.IsKworker"} } return nil case "process.parent.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } var ok bool - if e.ProcessContext.Parent.IsThread, ok = value.(bool); !ok { + if ev.ProcessContext.Parent.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.IsThread"} } return nil case "process.parent.pid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.Pid"} } - e.ProcessContext.Parent.PIDContext.Pid = uint32(v) + ev.ProcessContext.Parent.PIDContext.Pid = uint32(v) return nil case "process.parent.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PPid"} } - e.ProcessContext.Parent.PPid = uint32(v) + ev.ProcessContext.Parent.PPid = uint32(v) return nil case "process.parent.tid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.Tid"} } - e.ProcessContext.Parent.PIDContext.Tid = uint32(v) + ev.ProcessContext.Parent.PIDContext.Tid = uint32(v) return nil case "process.parent.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.TTYName"} } - e.ProcessContext.Parent.TTYName = str + ev.ProcessContext.Parent.TTYName = str return nil case "process.parent.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.UID"} } - e.ProcessContext.Parent.Credentials.UID = uint32(v) + ev.ProcessContext.Parent.Credentials.UID = uint32(v) return nil case "process.parent.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.User"} } - e.ProcessContext.Parent.Credentials.User = str + ev.ProcessContext.Parent.Credentials.User = str return nil case "process.pid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.Pid"} } - e.ProcessContext.Process.PIDContext.Pid = uint32(v) + ev.ProcessContext.Process.PIDContext.Pid = uint32(v) return nil case "process.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PPid"} } - e.ProcessContext.Process.PPid = uint32(v) + ev.ProcessContext.Process.PPid = uint32(v) return nil case "process.tid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.Tid"} } - e.ProcessContext.Process.PIDContext.Tid = uint32(v) + ev.ProcessContext.Process.PIDContext.Tid = uint32(v) return nil case "process.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.TTYName"} } - e.ProcessContext.Process.TTYName = str + ev.ProcessContext.Process.TTYName = str return nil case "process.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.UID"} } - e.ProcessContext.Process.Credentials.UID = uint32(v) + ev.ProcessContext.Process.Credentials.UID = uint32(v) return nil case "process.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.User"} } - e.ProcessContext.Process.Credentials.User = str + ev.ProcessContext.Process.Credentials.User = str return nil case "ptrace.request": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Request"} } - e.PTrace.Request = uint32(v) + ev.PTrace.Request = uint32(v) return nil case "ptrace.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.SyscallEvent.Retval"} } - e.PTrace.SyscallEvent.Retval = int64(v) + ev.PTrace.SyscallEvent.Retval = int64(v) return nil case "ptrace.tracee.ancestors.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Args"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Args = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Args = str return nil case "ptrace.tracee.ancestors.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) return nil case "ptrace.tracee.ancestors.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) return nil case "ptrace.tracee.ancestors.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated"} } return nil case "ptrace.tracee.ancestors.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) return nil case "ptrace.tracee.ancestors.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0 = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0 = str return nil case "ptrace.tracee.ancestors.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) return nil case "ptrace.tracee.ancestors.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) return nil case "ptrace.tracee.ancestors.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Comm"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Comm = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Comm = str return nil case "ptrace.tracee.ancestors.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID = str return nil case "ptrace.tracee.ancestors.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie = uint32(v) return nil case "ptrace.tracee.ancestors.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) return nil case "ptrace.tracee.ancestors.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) return nil case "ptrace.tracee.ancestors.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup = str return nil case "ptrace.tracee.ancestors.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Envp"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp, str) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp, str) return nil case "ptrace.tracee.ancestors.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Envs"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs, str) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs, str) return nil case "ptrace.tracee.ancestors.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated"} } return nil case "ptrace.tracee.ancestors.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) return nil case "ptrace.tracee.ancestors.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser = str return nil case "ptrace.tracee.ancestors.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "ptrace.tracee.ancestors.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str return nil case "ptrace.tracee.ancestors.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) return nil case "ptrace.tracee.ancestors.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str return nil case "ptrace.tracee.ancestors.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "ptrace.tracee.ancestors.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "ptrace.tracee.ancestors.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.ancestors.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "ptrace.tracee.ancestors.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "ptrace.tracee.ancestors.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str return nil case "ptrace.tracee.ancestors.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.file.name.length"} case "ptrace.tracee.ancestors.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str return nil case "ptrace.tracee.ancestors.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.file.path.length"} case "ptrace.tracee.ancestors.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.ancestors.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) return nil case "ptrace.tracee.ancestors.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str return nil case "ptrace.tracee.ancestors.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) return nil case "ptrace.tracee.ancestors.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup = str return nil case "ptrace.tracee.ancestors.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) return nil case "ptrace.tracee.ancestors.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser = str return nil case "ptrace.tracee.ancestors.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) return nil case "ptrace.tracee.ancestors.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group = str return nil case "ptrace.tracee.ancestors.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "ptrace.tracee.ancestors.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "ptrace.tracee.ancestors.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "ptrace.tracee.ancestors.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "ptrace.tracee.ancestors.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "ptrace.tracee.ancestors.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.ancestors.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "ptrace.tracee.ancestors.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "ptrace.tracee.ancestors.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "ptrace.tracee.ancestors.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.interpreter.file.name.length"} case "ptrace.tracee.ancestors.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "ptrace.tracee.ancestors.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.interpreter.file.path.length"} case "ptrace.tracee.ancestors.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.ancestors.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "ptrace.tracee.ancestors.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "ptrace.tracee.ancestors.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} } return nil case "ptrace.tracee.ancestors.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread"} } return nil case "ptrace.tracee.ancestors.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) return nil case "ptrace.tracee.ancestors.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PPid"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PPid = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.PPid = uint32(v) return nil case "ptrace.tracee.ancestors.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) return nil case "ptrace.tracee.ancestors.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName = str return nil case "ptrace.tracee.ancestors.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) return nil case "ptrace.tracee.ancestors.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User = str return nil case "ptrace.tracee.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Args"} } - e.PTrace.Tracee.Process.Args = str + ev.PTrace.Tracee.Process.Args = str return nil case "ptrace.tracee.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) + ev.PTrace.Tracee.Process.Argv = append(ev.PTrace.Tracee.Process.Argv, str) return nil case "ptrace.tracee.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) + ev.PTrace.Tracee.Process.Argv = append(ev.PTrace.Tracee.Process.Argv, str) return nil case "ptrace.tracee.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } var ok bool - if e.PTrace.Tracee.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.ArgsTruncated"} } return nil case "ptrace.tracee.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) + ev.PTrace.Tracee.Process.Argv = append(ev.PTrace.Tracee.Process.Argv, str) return nil case "ptrace.tracee.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv0"} } - e.PTrace.Tracee.Process.Argv0 = str + ev.PTrace.Tracee.Process.Argv0 = str return nil case "ptrace.tracee.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.CapEffective"} } - e.PTrace.Tracee.Process.Credentials.CapEffective = uint64(v) + ev.PTrace.Tracee.Process.Credentials.CapEffective = uint64(v) return nil case "ptrace.tracee.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.CapPermitted"} } - e.PTrace.Tracee.Process.Credentials.CapPermitted = uint64(v) + ev.PTrace.Tracee.Process.Credentials.CapPermitted = uint64(v) return nil case "ptrace.tracee.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Comm"} } - e.PTrace.Tracee.Process.Comm = str + ev.PTrace.Tracee.Process.Comm = str return nil case "ptrace.tracee.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.ContainerID"} } - e.PTrace.Tracee.Process.ContainerID = str + ev.PTrace.Tracee.Process.ContainerID = str return nil case "ptrace.tracee.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Cookie"} } - e.PTrace.Tracee.Process.Cookie = uint32(v) + ev.PTrace.Tracee.Process.Cookie = uint32(v) return nil case "ptrace.tracee.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.CreatedAt"} } - e.PTrace.Tracee.Process.CreatedAt = uint64(v) + ev.PTrace.Tracee.Process.CreatedAt = uint64(v) return nil case "ptrace.tracee.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EGID"} } - e.PTrace.Tracee.Process.Credentials.EGID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.EGID = uint32(v) return nil case "ptrace.tracee.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EGroup"} } - e.PTrace.Tracee.Process.Credentials.EGroup = str + ev.PTrace.Tracee.Process.Credentials.EGroup = str return nil case "ptrace.tracee.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Envp"} } - e.PTrace.Tracee.Process.Envp = append(e.PTrace.Tracee.Process.Envp, str) + ev.PTrace.Tracee.Process.Envp = append(ev.PTrace.Tracee.Process.Envp, str) return nil case "ptrace.tracee.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Envs"} } - e.PTrace.Tracee.Process.Envs = append(e.PTrace.Tracee.Process.Envs, str) + ev.PTrace.Tracee.Process.Envs = append(ev.PTrace.Tracee.Process.Envs, str) return nil case "ptrace.tracee.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } var ok bool - if e.PTrace.Tracee.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.EnvsTruncated"} } return nil case "ptrace.tracee.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EUID"} } - e.PTrace.Tracee.Process.Credentials.EUID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.EUID = uint32(v) return nil case "ptrace.tracee.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EUser"} } - e.PTrace.Tracee.Process.Credentials.EUser = str + ev.PTrace.Tracee.Process.Credentials.EUser = str return nil case "ptrace.tracee.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "ptrace.tracee.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.Filesystem"} } - e.PTrace.Tracee.Process.FileEvent.Filesystem = str + ev.PTrace.Tracee.Process.FileEvent.Filesystem = str return nil case "ptrace.tracee.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.GID = uint32(v) return nil case "ptrace.tracee.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Process.FileEvent.FileFields.Group = str return nil case "ptrace.tracee.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } var ok bool - if e.PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "ptrace.tracee.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "ptrace.tracee.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "ptrace.tracee.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "ptrace.tracee.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Process.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Process.FileEvent.BasenameStr = str return nil case "ptrace.tracee.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.file.name.length"} case "ptrace.tracee.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Process.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Process.FileEvent.PathnameStr = str return nil case "ptrace.tracee.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.file.path.length"} case "ptrace.tracee.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.UID = uint32(v) return nil case "ptrace.tracee.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Process.FileEvent.FileFields.User = str return nil case "ptrace.tracee.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSGID"} } - e.PTrace.Tracee.Process.Credentials.FSGID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.FSGID = uint32(v) return nil case "ptrace.tracee.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSGroup"} } - e.PTrace.Tracee.Process.Credentials.FSGroup = str + ev.PTrace.Tracee.Process.Credentials.FSGroup = str return nil case "ptrace.tracee.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSUID"} } - e.PTrace.Tracee.Process.Credentials.FSUID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.FSUID = uint32(v) return nil case "ptrace.tracee.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSUser"} } - e.PTrace.Tracee.Process.Credentials.FSUser = str + ev.PTrace.Tracee.Process.Credentials.FSUser = str return nil case "ptrace.tracee.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.GID"} } - e.PTrace.Tracee.Process.Credentials.GID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.GID = uint32(v) return nil case "ptrace.tracee.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.Group"} } - e.PTrace.Tracee.Process.Credentials.Group = str + ev.PTrace.Tracee.Process.Credentials.Group = str return nil case "ptrace.tracee.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "ptrace.tracee.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "ptrace.tracee.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "ptrace.tracee.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "ptrace.tracee.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } var ok bool - if e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "ptrace.tracee.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "ptrace.tracee.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "ptrace.tracee.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "ptrace.tracee.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "ptrace.tracee.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.interpreter.file.name.length"} case "ptrace.tracee.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "ptrace.tracee.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.interpreter.file.path.length"} case "ptrace.tracee.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "ptrace.tracee.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "ptrace.tracee.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } var ok bool - if e.PTrace.Tracee.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.IsKworker"} } return nil case "ptrace.tracee.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } var ok bool - if e.PTrace.Tracee.Process.IsThread, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.IsThread"} } return nil case "ptrace.tracee.parent.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Args"} } - e.PTrace.Tracee.Parent.Args = str + ev.PTrace.Tracee.Parent.Args = str return nil case "ptrace.tracee.parent.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) + ev.PTrace.Tracee.Parent.Argv = append(ev.PTrace.Tracee.Parent.Argv, str) return nil case "ptrace.tracee.parent.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) + ev.PTrace.Tracee.Parent.Argv = append(ev.PTrace.Tracee.Parent.Argv, str) return nil case "ptrace.tracee.parent.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } var ok bool - if e.PTrace.Tracee.Parent.ArgsTruncated, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Parent.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.ArgsTruncated"} } return nil case "ptrace.tracee.parent.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) + ev.PTrace.Tracee.Parent.Argv = append(ev.PTrace.Tracee.Parent.Argv, str) return nil case "ptrace.tracee.parent.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv0"} } - e.PTrace.Tracee.Parent.Argv0 = str + ev.PTrace.Tracee.Parent.Argv0 = str return nil case "ptrace.tracee.parent.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.CapEffective"} } - e.PTrace.Tracee.Parent.Credentials.CapEffective = uint64(v) + ev.PTrace.Tracee.Parent.Credentials.CapEffective = uint64(v) return nil case "ptrace.tracee.parent.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.CapPermitted"} } - e.PTrace.Tracee.Parent.Credentials.CapPermitted = uint64(v) + ev.PTrace.Tracee.Parent.Credentials.CapPermitted = uint64(v) return nil case "ptrace.tracee.parent.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Comm"} } - e.PTrace.Tracee.Parent.Comm = str + ev.PTrace.Tracee.Parent.Comm = str return nil case "ptrace.tracee.parent.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.ContainerID"} } - e.PTrace.Tracee.Parent.ContainerID = str + ev.PTrace.Tracee.Parent.ContainerID = str return nil case "ptrace.tracee.parent.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Cookie"} } - e.PTrace.Tracee.Parent.Cookie = uint32(v) + ev.PTrace.Tracee.Parent.Cookie = uint32(v) return nil case "ptrace.tracee.parent.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.CreatedAt"} } - e.PTrace.Tracee.Parent.CreatedAt = uint64(v) + ev.PTrace.Tracee.Parent.CreatedAt = uint64(v) return nil case "ptrace.tracee.parent.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EGID"} } - e.PTrace.Tracee.Parent.Credentials.EGID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.EGID = uint32(v) return nil case "ptrace.tracee.parent.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EGroup"} } - e.PTrace.Tracee.Parent.Credentials.EGroup = str + ev.PTrace.Tracee.Parent.Credentials.EGroup = str return nil case "ptrace.tracee.parent.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Envp"} } - e.PTrace.Tracee.Parent.Envp = append(e.PTrace.Tracee.Parent.Envp, str) + ev.PTrace.Tracee.Parent.Envp = append(ev.PTrace.Tracee.Parent.Envp, str) return nil case "ptrace.tracee.parent.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Envs"} } - e.PTrace.Tracee.Parent.Envs = append(e.PTrace.Tracee.Parent.Envs, str) + ev.PTrace.Tracee.Parent.Envs = append(ev.PTrace.Tracee.Parent.Envs, str) return nil case "ptrace.tracee.parent.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } var ok bool - if e.PTrace.Tracee.Parent.EnvsTruncated, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Parent.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.EnvsTruncated"} } return nil case "ptrace.tracee.parent.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EUID"} } - e.PTrace.Tracee.Parent.Credentials.EUID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.EUID = uint32(v) return nil case "ptrace.tracee.parent.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EUser"} } - e.PTrace.Tracee.Parent.Credentials.EUser = str + ev.PTrace.Tracee.Parent.Credentials.EUser = str return nil case "ptrace.tracee.parent.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.CTime = uint64(v) return nil case "ptrace.tracee.parent.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.Filesystem"} } - e.PTrace.Tracee.Parent.FileEvent.Filesystem = str + ev.PTrace.Tracee.Parent.FileEvent.Filesystem = str return nil case "ptrace.tracee.parent.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.GID = uint32(v) return nil case "ptrace.tracee.parent.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Parent.FileEvent.FileFields.Group = str return nil case "ptrace.tracee.parent.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } var ok bool - if e.PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer"} } return nil case "ptrace.tracee.parent.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.Inode = uint64(v) return nil case "ptrace.tracee.parent.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.parent.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.MTime = uint64(v) return nil case "ptrace.tracee.parent.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.MountID = uint32(v) return nil case "ptrace.tracee.parent.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Parent.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Parent.FileEvent.BasenameStr = str return nil case "ptrace.tracee.parent.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.file.name.length"} case "ptrace.tracee.parent.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Parent.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Parent.FileEvent.PathnameStr = str return nil case "ptrace.tracee.parent.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.file.path.length"} case "ptrace.tracee.parent.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.parent.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.UID = uint32(v) return nil case "ptrace.tracee.parent.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Parent.FileEvent.FileFields.User = str return nil case "ptrace.tracee.parent.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSGID"} } - e.PTrace.Tracee.Parent.Credentials.FSGID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.FSGID = uint32(v) return nil case "ptrace.tracee.parent.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSGroup"} } - e.PTrace.Tracee.Parent.Credentials.FSGroup = str + ev.PTrace.Tracee.Parent.Credentials.FSGroup = str return nil case "ptrace.tracee.parent.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSUID"} } - e.PTrace.Tracee.Parent.Credentials.FSUID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.FSUID = uint32(v) return nil case "ptrace.tracee.parent.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSUser"} } - e.PTrace.Tracee.Parent.Credentials.FSUser = str + ev.PTrace.Tracee.Parent.Credentials.FSUser = str return nil case "ptrace.tracee.parent.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.GID"} } - e.PTrace.Tracee.Parent.Credentials.GID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.GID = uint32(v) return nil case "ptrace.tracee.parent.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.Group"} } - e.PTrace.Tracee.Parent.Credentials.Group = str + ev.PTrace.Tracee.Parent.Credentials.Group = str return nil case "ptrace.tracee.parent.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "ptrace.tracee.parent.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem = str return nil case "ptrace.tracee.parent.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "ptrace.tracee.parent.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } var ok bool - if e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "ptrace.tracee.parent.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "ptrace.tracee.parent.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.parent.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "ptrace.tracee.parent.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "ptrace.tracee.parent.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr = str return nil case "ptrace.tracee.parent.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.interpreter.file.name.length"} case "ptrace.tracee.parent.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr = str return nil case "ptrace.tracee.parent.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.interpreter.file.path.length"} case "ptrace.tracee.parent.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "ptrace.tracee.parent.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "ptrace.tracee.parent.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User = str return nil case "ptrace.tracee.parent.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } var ok bool - if e.PTrace.Tracee.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.IsKworker"} } return nil case "ptrace.tracee.parent.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } var ok bool - if e.PTrace.Tracee.Parent.IsThread, ok = value.(bool); !ok { + if ev.PTrace.Tracee.Parent.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.IsThread"} } return nil case "ptrace.tracee.parent.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.Pid"} } - e.PTrace.Tracee.Parent.PIDContext.Pid = uint32(v) + ev.PTrace.Tracee.Parent.PIDContext.Pid = uint32(v) return nil case "ptrace.tracee.parent.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PPid"} } - e.PTrace.Tracee.Parent.PPid = uint32(v) + ev.PTrace.Tracee.Parent.PPid = uint32(v) return nil case "ptrace.tracee.parent.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.Tid"} } - e.PTrace.Tracee.Parent.PIDContext.Tid = uint32(v) + ev.PTrace.Tracee.Parent.PIDContext.Tid = uint32(v) return nil case "ptrace.tracee.parent.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.TTYName"} } - e.PTrace.Tracee.Parent.TTYName = str + ev.PTrace.Tracee.Parent.TTYName = str return nil case "ptrace.tracee.parent.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.UID"} } - e.PTrace.Tracee.Parent.Credentials.UID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.UID = uint32(v) return nil case "ptrace.tracee.parent.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.User"} } - e.PTrace.Tracee.Parent.Credentials.User = str + ev.PTrace.Tracee.Parent.Credentials.User = str return nil case "ptrace.tracee.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.Pid"} } - e.PTrace.Tracee.Process.PIDContext.Pid = uint32(v) + ev.PTrace.Tracee.Process.PIDContext.Pid = uint32(v) return nil case "ptrace.tracee.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PPid"} } - e.PTrace.Tracee.Process.PPid = uint32(v) + ev.PTrace.Tracee.Process.PPid = uint32(v) return nil case "ptrace.tracee.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.Tid"} } - e.PTrace.Tracee.Process.PIDContext.Tid = uint32(v) + ev.PTrace.Tracee.Process.PIDContext.Tid = uint32(v) return nil case "ptrace.tracee.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.TTYName"} } - e.PTrace.Tracee.Process.TTYName = str + ev.PTrace.Tracee.Process.TTYName = str return nil case "ptrace.tracee.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.UID"} } - e.PTrace.Tracee.Process.Credentials.UID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.UID = uint32(v) return nil case "ptrace.tracee.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.User"} } - e.PTrace.Tracee.Process.Credentials.User = str + ev.PTrace.Tracee.Process.Credentials.User = str return nil case "removexattr.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.CTime"} } - e.RemoveXAttr.File.FileFields.CTime = uint64(v) + ev.RemoveXAttr.File.FileFields.CTime = uint64(v) return nil case "removexattr.file.destination.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.Name"} } - e.RemoveXAttr.Name = str + ev.RemoveXAttr.Name = str return nil case "removexattr.file.destination.namespace": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.Namespace"} } - e.RemoveXAttr.Namespace = str + ev.RemoveXAttr.Namespace = str return nil case "removexattr.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.Filesystem"} } - e.RemoveXAttr.File.Filesystem = str + ev.RemoveXAttr.File.Filesystem = str return nil case "removexattr.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.GID"} } - e.RemoveXAttr.File.FileFields.GID = uint32(v) + ev.RemoveXAttr.File.FileFields.GID = uint32(v) return nil case "removexattr.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Group"} } - e.RemoveXAttr.File.FileFields.Group = str + ev.RemoveXAttr.File.FileFields.Group = str return nil case "removexattr.file.in_upper_layer": var ok bool - if e.RemoveXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.RemoveXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.InUpperLayer"} } return nil @@ -27844,35 +30694,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Inode"} } - e.RemoveXAttr.File.FileFields.Inode = uint64(v) + ev.RemoveXAttr.File.FileFields.Inode = uint64(v) return nil case "removexattr.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Mode"} } - e.RemoveXAttr.File.FileFields.Mode = uint16(v) + ev.RemoveXAttr.File.FileFields.Mode = uint16(v) return nil case "removexattr.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.MTime"} } - e.RemoveXAttr.File.FileFields.MTime = uint64(v) + ev.RemoveXAttr.File.FileFields.MTime = uint64(v) return nil case "removexattr.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.MountID"} } - e.RemoveXAttr.File.FileFields.MountID = uint32(v) + ev.RemoveXAttr.File.FileFields.MountID = uint32(v) return nil case "removexattr.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.BasenameStr"} } - e.RemoveXAttr.File.BasenameStr = str + ev.RemoveXAttr.File.BasenameStr = str return nil case "removexattr.file.name.length": return &eval.ErrFieldReadOnly{Field: "removexattr.file.name.length"} @@ -27881,7 +30731,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.PathnameStr"} } - e.RemoveXAttr.File.PathnameStr = str + ev.RemoveXAttr.File.PathnameStr = str return nil case "removexattr.file.path.length": return &eval.ErrFieldReadOnly{Field: "removexattr.file.path.length"} @@ -27890,67 +30740,67 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Mode"} } - e.RemoveXAttr.File.FileFields.Mode = uint16(v) + ev.RemoveXAttr.File.FileFields.Mode = uint16(v) return nil case "removexattr.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.UID"} } - e.RemoveXAttr.File.FileFields.UID = uint32(v) + ev.RemoveXAttr.File.FileFields.UID = uint32(v) return nil case "removexattr.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.User"} } - e.RemoveXAttr.File.FileFields.User = str + ev.RemoveXAttr.File.FileFields.User = str return nil case "removexattr.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.SyscallEvent.Retval"} } - e.RemoveXAttr.SyscallEvent.Retval = int64(v) + ev.RemoveXAttr.SyscallEvent.Retval = int64(v) return nil case "rename.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.CTime"} } - e.Rename.Old.FileFields.CTime = uint64(v) + ev.Rename.Old.FileFields.CTime = uint64(v) return nil case "rename.file.destination.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.CTime"} } - e.Rename.New.FileFields.CTime = uint64(v) + ev.Rename.New.FileFields.CTime = uint64(v) return nil case "rename.file.destination.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.Filesystem"} } - e.Rename.New.Filesystem = str + ev.Rename.New.Filesystem = str return nil case "rename.file.destination.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.GID"} } - e.Rename.New.FileFields.GID = uint32(v) + ev.Rename.New.FileFields.GID = uint32(v) return nil case "rename.file.destination.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Group"} } - e.Rename.New.FileFields.Group = str + ev.Rename.New.FileFields.Group = str return nil case "rename.file.destination.in_upper_layer": var ok bool - if e.Rename.New.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Rename.New.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.InUpperLayer"} } return nil @@ -27959,35 +30809,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Inode"} } - e.Rename.New.FileFields.Inode = uint64(v) + ev.Rename.New.FileFields.Inode = uint64(v) return nil case "rename.file.destination.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Mode"} } - e.Rename.New.FileFields.Mode = uint16(v) + ev.Rename.New.FileFields.Mode = uint16(v) return nil case "rename.file.destination.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.MTime"} } - e.Rename.New.FileFields.MTime = uint64(v) + ev.Rename.New.FileFields.MTime = uint64(v) return nil case "rename.file.destination.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.MountID"} } - e.Rename.New.FileFields.MountID = uint32(v) + ev.Rename.New.FileFields.MountID = uint32(v) return nil case "rename.file.destination.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.BasenameStr"} } - e.Rename.New.BasenameStr = str + ev.Rename.New.BasenameStr = str return nil case "rename.file.destination.name.length": return &eval.ErrFieldReadOnly{Field: "rename.file.destination.name.length"} @@ -27996,7 +30846,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.PathnameStr"} } - e.Rename.New.PathnameStr = str + ev.Rename.New.PathnameStr = str return nil case "rename.file.destination.path.length": return &eval.ErrFieldReadOnly{Field: "rename.file.destination.path.length"} @@ -28005,46 +30855,46 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Mode"} } - e.Rename.New.FileFields.Mode = uint16(v) + ev.Rename.New.FileFields.Mode = uint16(v) return nil case "rename.file.destination.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.UID"} } - e.Rename.New.FileFields.UID = uint32(v) + ev.Rename.New.FileFields.UID = uint32(v) return nil case "rename.file.destination.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.User"} } - e.Rename.New.FileFields.User = str + ev.Rename.New.FileFields.User = str return nil case "rename.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.Filesystem"} } - e.Rename.Old.Filesystem = str + ev.Rename.Old.Filesystem = str return nil case "rename.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.GID"} } - e.Rename.Old.FileFields.GID = uint32(v) + ev.Rename.Old.FileFields.GID = uint32(v) return nil case "rename.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Group"} } - e.Rename.Old.FileFields.Group = str + ev.Rename.Old.FileFields.Group = str return nil case "rename.file.in_upper_layer": var ok bool - if e.Rename.Old.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Rename.Old.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.InUpperLayer"} } return nil @@ -28053,35 +30903,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Inode"} } - e.Rename.Old.FileFields.Inode = uint64(v) + ev.Rename.Old.FileFields.Inode = uint64(v) return nil case "rename.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Mode"} } - e.Rename.Old.FileFields.Mode = uint16(v) + ev.Rename.Old.FileFields.Mode = uint16(v) return nil case "rename.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.MTime"} } - e.Rename.Old.FileFields.MTime = uint64(v) + ev.Rename.Old.FileFields.MTime = uint64(v) return nil case "rename.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.MountID"} } - e.Rename.Old.FileFields.MountID = uint32(v) + ev.Rename.Old.FileFields.MountID = uint32(v) return nil case "rename.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.BasenameStr"} } - e.Rename.Old.BasenameStr = str + ev.Rename.Old.BasenameStr = str return nil case "rename.file.name.length": return &eval.ErrFieldReadOnly{Field: "rename.file.name.length"} @@ -28090,7 +30940,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.PathnameStr"} } - e.Rename.Old.PathnameStr = str + ev.Rename.Old.PathnameStr = str return nil case "rename.file.path.length": return &eval.ErrFieldReadOnly{Field: "rename.file.path.length"} @@ -28099,60 +30949,60 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Mode"} } - e.Rename.Old.FileFields.Mode = uint16(v) + ev.Rename.Old.FileFields.Mode = uint16(v) return nil case "rename.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.UID"} } - e.Rename.Old.FileFields.UID = uint32(v) + ev.Rename.Old.FileFields.UID = uint32(v) return nil case "rename.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.User"} } - e.Rename.Old.FileFields.User = str + ev.Rename.Old.FileFields.User = str return nil case "rename.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.SyscallEvent.Retval"} } - e.Rename.SyscallEvent.Retval = int64(v) + ev.Rename.SyscallEvent.Retval = int64(v) return nil case "rmdir.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.CTime"} } - e.Rmdir.File.FileFields.CTime = uint64(v) + ev.Rmdir.File.FileFields.CTime = uint64(v) return nil case "rmdir.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.Filesystem"} } - e.Rmdir.File.Filesystem = str + ev.Rmdir.File.Filesystem = str return nil case "rmdir.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.GID"} } - e.Rmdir.File.FileFields.GID = uint32(v) + ev.Rmdir.File.FileFields.GID = uint32(v) return nil case "rmdir.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Group"} } - e.Rmdir.File.FileFields.Group = str + ev.Rmdir.File.FileFields.Group = str return nil case "rmdir.file.in_upper_layer": var ok bool - if e.Rmdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Rmdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.InUpperLayer"} } return nil @@ -28161,35 +31011,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Inode"} } - e.Rmdir.File.FileFields.Inode = uint64(v) + ev.Rmdir.File.FileFields.Inode = uint64(v) return nil case "rmdir.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Mode"} } - e.Rmdir.File.FileFields.Mode = uint16(v) + ev.Rmdir.File.FileFields.Mode = uint16(v) return nil case "rmdir.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.MTime"} } - e.Rmdir.File.FileFields.MTime = uint64(v) + ev.Rmdir.File.FileFields.MTime = uint64(v) return nil case "rmdir.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.MountID"} } - e.Rmdir.File.FileFields.MountID = uint32(v) + ev.Rmdir.File.FileFields.MountID = uint32(v) return nil case "rmdir.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.BasenameStr"} } - e.Rmdir.File.BasenameStr = str + ev.Rmdir.File.BasenameStr = str return nil case "rmdir.file.name.length": return &eval.ErrFieldReadOnly{Field: "rmdir.file.name.length"} @@ -28198,7 +31048,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.PathnameStr"} } - e.Rmdir.File.PathnameStr = str + ev.Rmdir.File.PathnameStr = str return nil case "rmdir.file.path.length": return &eval.ErrFieldReadOnly{Field: "rmdir.file.path.length"} @@ -28207,46 +31057,46 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Mode"} } - e.Rmdir.File.FileFields.Mode = uint16(v) + ev.Rmdir.File.FileFields.Mode = uint16(v) return nil case "rmdir.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.UID"} } - e.Rmdir.File.FileFields.UID = uint32(v) + ev.Rmdir.File.FileFields.UID = uint32(v) return nil case "rmdir.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.User"} } - e.Rmdir.File.FileFields.User = str + ev.Rmdir.File.FileFields.User = str return nil case "rmdir.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.SyscallEvent.Retval"} } - e.Rmdir.SyscallEvent.Retval = int64(v) + ev.Rmdir.SyscallEvent.Retval = int64(v) return nil case "selinux.bool.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolName"} } - e.SELinux.BoolName = str + ev.SELinux.BoolName = str return nil case "selinux.bool.state": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolChangeValue"} } - e.SELinux.BoolChangeValue = str + ev.SELinux.BoolChangeValue = str return nil case "selinux.bool_commit.state": var ok bool - if e.SELinux.BoolCommitValue, ok = value.(bool); !ok { + if ev.SELinux.BoolCommitValue, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolCommitValue"} } return nil @@ -28255,137 +31105,137 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "SELinux.EnforceStatus"} } - e.SELinux.EnforceStatus = str + ev.SELinux.EnforceStatus = str return nil case "setgid.egid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.EGID"} } - e.SetGID.EGID = uint32(v) + ev.SetGID.EGID = uint32(v) return nil case "setgid.egroup": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.EGroup"} } - e.SetGID.EGroup = str + ev.SetGID.EGroup = str return nil case "setgid.fsgid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.FSGID"} } - e.SetGID.FSGID = uint32(v) + ev.SetGID.FSGID = uint32(v) return nil case "setgid.fsgroup": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.FSGroup"} } - e.SetGID.FSGroup = str + ev.SetGID.FSGroup = str return nil case "setgid.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.GID"} } - e.SetGID.GID = uint32(v) + ev.SetGID.GID = uint32(v) return nil case "setgid.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.Group"} } - e.SetGID.Group = str + ev.SetGID.Group = str return nil case "setuid.euid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.EUID"} } - e.SetUID.EUID = uint32(v) + ev.SetUID.EUID = uint32(v) return nil case "setuid.euser": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.EUser"} } - e.SetUID.EUser = str + ev.SetUID.EUser = str return nil case "setuid.fsuid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.FSUID"} } - e.SetUID.FSUID = uint32(v) + ev.SetUID.FSUID = uint32(v) return nil case "setuid.fsuser": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.FSUser"} } - e.SetUID.FSUser = str + ev.SetUID.FSUser = str return nil case "setuid.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.UID"} } - e.SetUID.UID = uint32(v) + ev.SetUID.UID = uint32(v) return nil case "setuid.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.User"} } - e.SetUID.User = str + ev.SetUID.User = str return nil case "setxattr.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.CTime"} } - e.SetXAttr.File.FileFields.CTime = uint64(v) + ev.SetXAttr.File.FileFields.CTime = uint64(v) return nil case "setxattr.file.destination.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.Name"} } - e.SetXAttr.Name = str + ev.SetXAttr.Name = str return nil case "setxattr.file.destination.namespace": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.Namespace"} } - e.SetXAttr.Namespace = str + ev.SetXAttr.Namespace = str return nil case "setxattr.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.Filesystem"} } - e.SetXAttr.File.Filesystem = str + ev.SetXAttr.File.Filesystem = str return nil case "setxattr.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.GID"} } - e.SetXAttr.File.FileFields.GID = uint32(v) + ev.SetXAttr.File.FileFields.GID = uint32(v) return nil case "setxattr.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Group"} } - e.SetXAttr.File.FileFields.Group = str + ev.SetXAttr.File.FileFields.Group = str return nil case "setxattr.file.in_upper_layer": var ok bool - if e.SetXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.SetXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.InUpperLayer"} } return nil @@ -28394,35 +31244,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Inode"} } - e.SetXAttr.File.FileFields.Inode = uint64(v) + ev.SetXAttr.File.FileFields.Inode = uint64(v) return nil case "setxattr.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Mode"} } - e.SetXAttr.File.FileFields.Mode = uint16(v) + ev.SetXAttr.File.FileFields.Mode = uint16(v) return nil case "setxattr.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.MTime"} } - e.SetXAttr.File.FileFields.MTime = uint64(v) + ev.SetXAttr.File.FileFields.MTime = uint64(v) return nil case "setxattr.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.MountID"} } - e.SetXAttr.File.FileFields.MountID = uint32(v) + ev.SetXAttr.File.FileFields.MountID = uint32(v) return nil case "setxattr.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.BasenameStr"} } - e.SetXAttr.File.BasenameStr = str + ev.SetXAttr.File.BasenameStr = str return nil case "setxattr.file.name.length": return &eval.ErrFieldReadOnly{Field: "setxattr.file.name.length"} @@ -28431,7 +31281,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.PathnameStr"} } - e.SetXAttr.File.PathnameStr = str + ev.SetXAttr.File.PathnameStr = str return nil case "setxattr.file.path.length": return &eval.ErrFieldReadOnly{Field: "setxattr.file.path.length"} @@ -28440,2343 +31290,2343 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Mode"} } - e.SetXAttr.File.FileFields.Mode = uint16(v) + ev.SetXAttr.File.FileFields.Mode = uint16(v) return nil case "setxattr.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.UID"} } - e.SetXAttr.File.FileFields.UID = uint32(v) + ev.SetXAttr.File.FileFields.UID = uint32(v) return nil case "setxattr.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.User"} } - e.SetXAttr.File.FileFields.User = str + ev.SetXAttr.File.FileFields.User = str return nil case "setxattr.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.SyscallEvent.Retval"} } - e.SetXAttr.SyscallEvent.Retval = int64(v) + ev.SetXAttr.SyscallEvent.Retval = int64(v) return nil case "signal.pid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.PID"} } - e.Signal.PID = uint32(v) + ev.Signal.PID = uint32(v) return nil case "signal.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.SyscallEvent.Retval"} } - e.Signal.SyscallEvent.Retval = int64(v) + ev.Signal.SyscallEvent.Retval = int64(v) return nil case "signal.target.ancestors.args": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Args"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Args = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Args = str return nil case "signal.target.ancestors.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) return nil case "signal.target.ancestors.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) return nil case "signal.target.ancestors.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated"} } return nil case "signal.target.ancestors.argv": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) return nil case "signal.target.ancestors.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv0"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv0 = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv0 = str return nil case "signal.target.ancestors.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) return nil case "signal.target.ancestors.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) return nil case "signal.target.ancestors.comm": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Comm"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Comm = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Comm = str return nil case "signal.target.ancestors.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.ContainerID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.ContainerID = str + ev.Signal.Target.Ancestor.ProcessContext.Process.ContainerID = str return nil case "signal.target.ancestors.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Cookie"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Cookie = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Cookie = uint32(v) return nil case "signal.target.ancestors.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.CreatedAt"} } - e.Signal.Target.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) return nil case "signal.target.ancestors.egid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) return nil case "signal.target.ancestors.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup = str return nil case "signal.target.ancestors.envp": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Envp"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Envp = append(e.Signal.Target.Ancestor.ProcessContext.Process.Envp, str) + ev.Signal.Target.Ancestor.ProcessContext.Process.Envp = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Envp, str) return nil case "signal.target.ancestors.envs": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Envs"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Envs = append(e.Signal.Target.Ancestor.ProcessContext.Process.Envs, str) + ev.Signal.Target.Ancestor.ProcessContext.Process.Envs = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Envs, str) return nil case "signal.target.ancestors.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated"} } return nil case "signal.target.ancestors.euid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) return nil case "signal.target.ancestors.euser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser = str return nil case "signal.target.ancestors.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "signal.target.ancestors.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str return nil case "signal.target.ancestors.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) return nil case "signal.target.ancestors.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str return nil case "signal.target.ancestors.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "signal.target.ancestors.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "signal.target.ancestors.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.ancestors.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "signal.target.ancestors.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "signal.target.ancestors.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str return nil case "signal.target.ancestors.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.file.name.length"} case "signal.target.ancestors.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str return nil case "signal.target.ancestors.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.file.path.length"} case "signal.target.ancestors.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.ancestors.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) return nil case "signal.target.ancestors.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str return nil case "signal.target.ancestors.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) return nil case "signal.target.ancestors.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup = str return nil case "signal.target.ancestors.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) return nil case "signal.target.ancestors.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser = str return nil case "signal.target.ancestors.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) return nil case "signal.target.ancestors.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group = str return nil case "signal.target.ancestors.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "signal.target.ancestors.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "signal.target.ancestors.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "signal.target.ancestors.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "signal.target.ancestors.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "signal.target.ancestors.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "signal.target.ancestors.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.ancestors.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "signal.target.ancestors.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "signal.target.ancestors.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "signal.target.ancestors.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.interpreter.file.name.length"} case "signal.target.ancestors.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "signal.target.ancestors.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.interpreter.file.path.length"} case "signal.target.ancestors.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.ancestors.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "signal.target.ancestors.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "signal.target.ancestors.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} } return nil case "signal.target.ancestors.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { + if ev.Signal.Target.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.IsThread"} } return nil case "signal.target.ancestors.pid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid"} } - e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) return nil case "signal.target.ancestors.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PPid"} } - e.Signal.Target.Ancestor.ProcessContext.Process.PPid = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.PPid = uint32(v) return nil case "signal.target.ancestors.tid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid"} } - e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) return nil case "signal.target.ancestors.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.TTYName"} } - e.Signal.Target.Ancestor.ProcessContext.Process.TTYName = str + ev.Signal.Target.Ancestor.ProcessContext.Process.TTYName = str return nil case "signal.target.ancestors.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) return nil case "signal.target.ancestors.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.User"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.User = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.User = str return nil case "signal.target.args": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Args"} } - e.Signal.Target.Process.Args = str + ev.Signal.Target.Process.Args = str return nil case "signal.target.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) + ev.Signal.Target.Process.Argv = append(ev.Signal.Target.Process.Argv, str) return nil case "signal.target.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) + ev.Signal.Target.Process.Argv = append(ev.Signal.Target.Process.Argv, str) return nil case "signal.target.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } var ok bool - if e.Signal.Target.Process.ArgsTruncated, ok = value.(bool); !ok { + if ev.Signal.Target.Process.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.ArgsTruncated"} } return nil case "signal.target.argv": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) + ev.Signal.Target.Process.Argv = append(ev.Signal.Target.Process.Argv, str) return nil case "signal.target.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv0"} } - e.Signal.Target.Process.Argv0 = str + ev.Signal.Target.Process.Argv0 = str return nil case "signal.target.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.CapEffective"} } - e.Signal.Target.Process.Credentials.CapEffective = uint64(v) + ev.Signal.Target.Process.Credentials.CapEffective = uint64(v) return nil case "signal.target.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.CapPermitted"} } - e.Signal.Target.Process.Credentials.CapPermitted = uint64(v) + ev.Signal.Target.Process.Credentials.CapPermitted = uint64(v) return nil case "signal.target.comm": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Comm"} } - e.Signal.Target.Process.Comm = str + ev.Signal.Target.Process.Comm = str return nil case "signal.target.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.ContainerID"} } - e.Signal.Target.Process.ContainerID = str + ev.Signal.Target.Process.ContainerID = str return nil case "signal.target.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Cookie"} } - e.Signal.Target.Process.Cookie = uint32(v) + ev.Signal.Target.Process.Cookie = uint32(v) return nil case "signal.target.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.CreatedAt"} } - e.Signal.Target.Process.CreatedAt = uint64(v) + ev.Signal.Target.Process.CreatedAt = uint64(v) return nil case "signal.target.egid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EGID"} } - e.Signal.Target.Process.Credentials.EGID = uint32(v) + ev.Signal.Target.Process.Credentials.EGID = uint32(v) return nil case "signal.target.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EGroup"} } - e.Signal.Target.Process.Credentials.EGroup = str + ev.Signal.Target.Process.Credentials.EGroup = str return nil case "signal.target.envp": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Envp"} } - e.Signal.Target.Process.Envp = append(e.Signal.Target.Process.Envp, str) + ev.Signal.Target.Process.Envp = append(ev.Signal.Target.Process.Envp, str) return nil case "signal.target.envs": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Envs"} } - e.Signal.Target.Process.Envs = append(e.Signal.Target.Process.Envs, str) + ev.Signal.Target.Process.Envs = append(ev.Signal.Target.Process.Envs, str) return nil case "signal.target.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } var ok bool - if e.Signal.Target.Process.EnvsTruncated, ok = value.(bool); !ok { + if ev.Signal.Target.Process.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.EnvsTruncated"} } return nil case "signal.target.euid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EUID"} } - e.Signal.Target.Process.Credentials.EUID = uint32(v) + ev.Signal.Target.Process.Credentials.EUID = uint32(v) return nil case "signal.target.euser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EUser"} } - e.Signal.Target.Process.Credentials.EUser = str + ev.Signal.Target.Process.Credentials.EUser = str return nil case "signal.target.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.CTime"} } - e.Signal.Target.Process.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Process.FileEvent.FileFields.CTime = uint64(v) return nil case "signal.target.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.Filesystem"} } - e.Signal.Target.Process.FileEvent.Filesystem = str + ev.Signal.Target.Process.FileEvent.Filesystem = str return nil case "signal.target.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.GID"} } - e.Signal.Target.Process.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Process.FileEvent.FileFields.GID = uint32(v) return nil case "signal.target.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Group"} } - e.Signal.Target.Process.FileEvent.FileFields.Group = str + ev.Signal.Target.Process.FileEvent.FileFields.Group = str return nil case "signal.target.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } var ok bool - if e.Signal.Target.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Signal.Target.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.InUpperLayer"} } return nil case "signal.target.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Inode"} } - e.Signal.Target.Process.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Process.FileEvent.FileFields.Inode = uint64(v) return nil case "signal.target.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Mode"} } - e.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.MTime"} } - e.Signal.Target.Process.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Process.FileEvent.FileFields.MTime = uint64(v) return nil case "signal.target.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.MountID"} } - e.Signal.Target.Process.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Process.FileEvent.FileFields.MountID = uint32(v) return nil case "signal.target.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.BasenameStr"} } - e.Signal.Target.Process.FileEvent.BasenameStr = str + ev.Signal.Target.Process.FileEvent.BasenameStr = str return nil case "signal.target.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "signal.target.file.name.length"} case "signal.target.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.PathnameStr"} } - e.Signal.Target.Process.FileEvent.PathnameStr = str + ev.Signal.Target.Process.FileEvent.PathnameStr = str return nil case "signal.target.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "signal.target.file.path.length"} case "signal.target.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Mode"} } - e.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.UID"} } - e.Signal.Target.Process.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Process.FileEvent.FileFields.UID = uint32(v) return nil case "signal.target.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.User"} } - e.Signal.Target.Process.FileEvent.FileFields.User = str + ev.Signal.Target.Process.FileEvent.FileFields.User = str return nil case "signal.target.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSGID"} } - e.Signal.Target.Process.Credentials.FSGID = uint32(v) + ev.Signal.Target.Process.Credentials.FSGID = uint32(v) return nil case "signal.target.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSGroup"} } - e.Signal.Target.Process.Credentials.FSGroup = str + ev.Signal.Target.Process.Credentials.FSGroup = str return nil case "signal.target.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSUID"} } - e.Signal.Target.Process.Credentials.FSUID = uint32(v) + ev.Signal.Target.Process.Credentials.FSUID = uint32(v) return nil case "signal.target.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSUser"} } - e.Signal.Target.Process.Credentials.FSUser = str + ev.Signal.Target.Process.Credentials.FSUser = str return nil case "signal.target.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.GID"} } - e.Signal.Target.Process.Credentials.GID = uint32(v) + ev.Signal.Target.Process.Credentials.GID = uint32(v) return nil case "signal.target.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.Group"} } - e.Signal.Target.Process.Credentials.Group = str + ev.Signal.Target.Process.Credentials.Group = str return nil case "signal.target.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "signal.target.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem = str return nil case "signal.target.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "signal.target.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "signal.target.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } var ok bool - if e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "signal.target.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "signal.target.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "signal.target.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "signal.target.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr = str return nil case "signal.target.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "signal.target.interpreter.file.name.length"} case "signal.target.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr = str return nil case "signal.target.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "signal.target.interpreter.file.path.length"} case "signal.target.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "signal.target.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User = str return nil case "signal.target.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } var ok bool - if e.Signal.Target.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.Signal.Target.Process.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.IsKworker"} } return nil case "signal.target.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } var ok bool - if e.Signal.Target.Process.IsThread, ok = value.(bool); !ok { + if ev.Signal.Target.Process.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.IsThread"} } return nil case "signal.target.parent.args": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Args"} } - e.Signal.Target.Parent.Args = str + ev.Signal.Target.Parent.Args = str return nil case "signal.target.parent.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) + ev.Signal.Target.Parent.Argv = append(ev.Signal.Target.Parent.Argv, str) return nil case "signal.target.parent.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) + ev.Signal.Target.Parent.Argv = append(ev.Signal.Target.Parent.Argv, str) return nil case "signal.target.parent.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } var ok bool - if e.Signal.Target.Parent.ArgsTruncated, ok = value.(bool); !ok { + if ev.Signal.Target.Parent.ArgsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.ArgsTruncated"} } return nil case "signal.target.parent.argv": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) + ev.Signal.Target.Parent.Argv = append(ev.Signal.Target.Parent.Argv, str) return nil case "signal.target.parent.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv0"} } - e.Signal.Target.Parent.Argv0 = str + ev.Signal.Target.Parent.Argv0 = str return nil case "signal.target.parent.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.CapEffective"} } - e.Signal.Target.Parent.Credentials.CapEffective = uint64(v) + ev.Signal.Target.Parent.Credentials.CapEffective = uint64(v) return nil case "signal.target.parent.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.CapPermitted"} } - e.Signal.Target.Parent.Credentials.CapPermitted = uint64(v) + ev.Signal.Target.Parent.Credentials.CapPermitted = uint64(v) return nil case "signal.target.parent.comm": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Comm"} } - e.Signal.Target.Parent.Comm = str + ev.Signal.Target.Parent.Comm = str return nil case "signal.target.parent.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.ContainerID"} } - e.Signal.Target.Parent.ContainerID = str + ev.Signal.Target.Parent.ContainerID = str return nil case "signal.target.parent.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Cookie"} } - e.Signal.Target.Parent.Cookie = uint32(v) + ev.Signal.Target.Parent.Cookie = uint32(v) return nil case "signal.target.parent.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.CreatedAt"} } - e.Signal.Target.Parent.CreatedAt = uint64(v) + ev.Signal.Target.Parent.CreatedAt = uint64(v) return nil case "signal.target.parent.egid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EGID"} } - e.Signal.Target.Parent.Credentials.EGID = uint32(v) + ev.Signal.Target.Parent.Credentials.EGID = uint32(v) return nil case "signal.target.parent.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EGroup"} } - e.Signal.Target.Parent.Credentials.EGroup = str + ev.Signal.Target.Parent.Credentials.EGroup = str return nil case "signal.target.parent.envp": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Envp"} } - e.Signal.Target.Parent.Envp = append(e.Signal.Target.Parent.Envp, str) + ev.Signal.Target.Parent.Envp = append(ev.Signal.Target.Parent.Envp, str) return nil case "signal.target.parent.envs": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Envs"} } - e.Signal.Target.Parent.Envs = append(e.Signal.Target.Parent.Envs, str) + ev.Signal.Target.Parent.Envs = append(ev.Signal.Target.Parent.Envs, str) return nil case "signal.target.parent.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } var ok bool - if e.Signal.Target.Parent.EnvsTruncated, ok = value.(bool); !ok { + if ev.Signal.Target.Parent.EnvsTruncated, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.EnvsTruncated"} } return nil case "signal.target.parent.euid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EUID"} } - e.Signal.Target.Parent.Credentials.EUID = uint32(v) + ev.Signal.Target.Parent.Credentials.EUID = uint32(v) return nil case "signal.target.parent.euser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EUser"} } - e.Signal.Target.Parent.Credentials.EUser = str + ev.Signal.Target.Parent.Credentials.EUser = str return nil case "signal.target.parent.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.CTime"} } - e.Signal.Target.Parent.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Parent.FileEvent.FileFields.CTime = uint64(v) return nil case "signal.target.parent.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.Filesystem"} } - e.Signal.Target.Parent.FileEvent.Filesystem = str + ev.Signal.Target.Parent.FileEvent.Filesystem = str return nil case "signal.target.parent.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.GID"} } - e.Signal.Target.Parent.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Parent.FileEvent.FileFields.GID = uint32(v) return nil case "signal.target.parent.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Group"} } - e.Signal.Target.Parent.FileEvent.FileFields.Group = str + ev.Signal.Target.Parent.FileEvent.FileFields.Group = str return nil case "signal.target.parent.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } var ok bool - if e.Signal.Target.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Signal.Target.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.InUpperLayer"} } return nil case "signal.target.parent.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Inode"} } - e.Signal.Target.Parent.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Parent.FileEvent.FileFields.Inode = uint64(v) return nil case "signal.target.parent.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Mode"} } - e.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.parent.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.MTime"} } - e.Signal.Target.Parent.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Parent.FileEvent.FileFields.MTime = uint64(v) return nil case "signal.target.parent.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.MountID"} } - e.Signal.Target.Parent.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Parent.FileEvent.FileFields.MountID = uint32(v) return nil case "signal.target.parent.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.BasenameStr"} } - e.Signal.Target.Parent.FileEvent.BasenameStr = str + ev.Signal.Target.Parent.FileEvent.BasenameStr = str return nil case "signal.target.parent.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "signal.target.parent.file.name.length"} case "signal.target.parent.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.PathnameStr"} } - e.Signal.Target.Parent.FileEvent.PathnameStr = str + ev.Signal.Target.Parent.FileEvent.PathnameStr = str return nil case "signal.target.parent.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "signal.target.parent.file.path.length"} case "signal.target.parent.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Mode"} } - e.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.parent.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.UID"} } - e.Signal.Target.Parent.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Parent.FileEvent.FileFields.UID = uint32(v) return nil case "signal.target.parent.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.User"} } - e.Signal.Target.Parent.FileEvent.FileFields.User = str + ev.Signal.Target.Parent.FileEvent.FileFields.User = str return nil case "signal.target.parent.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSGID"} } - e.Signal.Target.Parent.Credentials.FSGID = uint32(v) + ev.Signal.Target.Parent.Credentials.FSGID = uint32(v) return nil case "signal.target.parent.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSGroup"} } - e.Signal.Target.Parent.Credentials.FSGroup = str + ev.Signal.Target.Parent.Credentials.FSGroup = str return nil case "signal.target.parent.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSUID"} } - e.Signal.Target.Parent.Credentials.FSUID = uint32(v) + ev.Signal.Target.Parent.Credentials.FSUID = uint32(v) return nil case "signal.target.parent.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSUser"} } - e.Signal.Target.Parent.Credentials.FSUser = str + ev.Signal.Target.Parent.Credentials.FSUser = str return nil case "signal.target.parent.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.GID"} } - e.Signal.Target.Parent.Credentials.GID = uint32(v) + ev.Signal.Target.Parent.Credentials.GID = uint32(v) return nil case "signal.target.parent.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.Group"} } - e.Signal.Target.Parent.Credentials.Group = str + ev.Signal.Target.Parent.Credentials.Group = str return nil case "signal.target.parent.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) return nil case "signal.target.parent.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem = str return nil case "signal.target.parent.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) return nil case "signal.target.parent.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group = str return nil case "signal.target.parent.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } var ok bool - if e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } return nil case "signal.target.parent.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) return nil case "signal.target.parent.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.parent.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) return nil case "signal.target.parent.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) return nil case "signal.target.parent.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr = str return nil case "signal.target.parent.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "signal.target.parent.interpreter.file.name.length"} case "signal.target.parent.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr = str return nil case "signal.target.parent.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "signal.target.parent.interpreter.file.path.length"} case "signal.target.parent.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) return nil case "signal.target.parent.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) return nil case "signal.target.parent.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User = str return nil case "signal.target.parent.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } var ok bool - if e.Signal.Target.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { + if ev.Signal.Target.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.IsKworker"} } return nil case "signal.target.parent.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } var ok bool - if e.Signal.Target.Parent.IsThread, ok = value.(bool); !ok { + if ev.Signal.Target.Parent.IsThread, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.IsThread"} } return nil case "signal.target.parent.pid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.Pid"} } - e.Signal.Target.Parent.PIDContext.Pid = uint32(v) + ev.Signal.Target.Parent.PIDContext.Pid = uint32(v) return nil case "signal.target.parent.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PPid"} } - e.Signal.Target.Parent.PPid = uint32(v) + ev.Signal.Target.Parent.PPid = uint32(v) return nil case "signal.target.parent.tid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.Tid"} } - e.Signal.Target.Parent.PIDContext.Tid = uint32(v) + ev.Signal.Target.Parent.PIDContext.Tid = uint32(v) return nil case "signal.target.parent.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.TTYName"} } - e.Signal.Target.Parent.TTYName = str + ev.Signal.Target.Parent.TTYName = str return nil case "signal.target.parent.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.UID"} } - e.Signal.Target.Parent.Credentials.UID = uint32(v) + ev.Signal.Target.Parent.Credentials.UID = uint32(v) return nil case "signal.target.parent.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.User"} } - e.Signal.Target.Parent.Credentials.User = str + ev.Signal.Target.Parent.Credentials.User = str return nil case "signal.target.pid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.Pid"} } - e.Signal.Target.Process.PIDContext.Pid = uint32(v) + ev.Signal.Target.Process.PIDContext.Pid = uint32(v) return nil case "signal.target.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PPid"} } - e.Signal.Target.Process.PPid = uint32(v) + ev.Signal.Target.Process.PPid = uint32(v) return nil case "signal.target.tid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.Tid"} } - e.Signal.Target.Process.PIDContext.Tid = uint32(v) + ev.Signal.Target.Process.PIDContext.Tid = uint32(v) return nil case "signal.target.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.TTYName"} } - e.Signal.Target.Process.TTYName = str + ev.Signal.Target.Process.TTYName = str return nil case "signal.target.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.UID"} } - e.Signal.Target.Process.Credentials.UID = uint32(v) + ev.Signal.Target.Process.Credentials.UID = uint32(v) return nil case "signal.target.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.User"} } - e.Signal.Target.Process.Credentials.User = str + ev.Signal.Target.Process.Credentials.User = str return nil case "signal.type": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Type"} } - e.Signal.Type = uint32(v) + ev.Signal.Type = uint32(v) return nil case "splice.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.CTime"} } - e.Splice.File.FileFields.CTime = uint64(v) + ev.Splice.File.FileFields.CTime = uint64(v) return nil case "splice.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.Filesystem"} } - e.Splice.File.Filesystem = str + ev.Splice.File.Filesystem = str return nil case "splice.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.GID"} } - e.Splice.File.FileFields.GID = uint32(v) + ev.Splice.File.FileFields.GID = uint32(v) return nil case "splice.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Group"} } - e.Splice.File.FileFields.Group = str + ev.Splice.File.FileFields.Group = str return nil case "splice.file.in_upper_layer": var ok bool - if e.Splice.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Splice.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.InUpperLayer"} } return nil @@ -30785,35 +33635,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Inode"} } - e.Splice.File.FileFields.Inode = uint64(v) + ev.Splice.File.FileFields.Inode = uint64(v) return nil case "splice.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Mode"} } - e.Splice.File.FileFields.Mode = uint16(v) + ev.Splice.File.FileFields.Mode = uint16(v) return nil case "splice.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.MTime"} } - e.Splice.File.FileFields.MTime = uint64(v) + ev.Splice.File.FileFields.MTime = uint64(v) return nil case "splice.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.MountID"} } - e.Splice.File.FileFields.MountID = uint32(v) + ev.Splice.File.FileFields.MountID = uint32(v) return nil case "splice.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.BasenameStr"} } - e.Splice.File.BasenameStr = str + ev.Splice.File.BasenameStr = str return nil case "splice.file.name.length": return &eval.ErrFieldReadOnly{Field: "splice.file.name.length"} @@ -30822,7 +33672,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.PathnameStr"} } - e.Splice.File.PathnameStr = str + ev.Splice.File.PathnameStr = str return nil case "splice.file.path.length": return &eval.ErrFieldReadOnly{Field: "splice.file.path.length"} @@ -30831,74 +33681,74 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Mode"} } - e.Splice.File.FileFields.Mode = uint16(v) + ev.Splice.File.FileFields.Mode = uint16(v) return nil case "splice.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.UID"} } - e.Splice.File.FileFields.UID = uint32(v) + ev.Splice.File.FileFields.UID = uint32(v) return nil case "splice.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.User"} } - e.Splice.File.FileFields.User = str + ev.Splice.File.FileFields.User = str return nil case "splice.pipe_entry_flag": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.PipeEntryFlag"} } - e.Splice.PipeEntryFlag = uint32(v) + ev.Splice.PipeEntryFlag = uint32(v) return nil case "splice.pipe_exit_flag": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.PipeExitFlag"} } - e.Splice.PipeExitFlag = uint32(v) + ev.Splice.PipeExitFlag = uint32(v) return nil case "splice.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.SyscallEvent.Retval"} } - e.Splice.SyscallEvent.Retval = int64(v) + ev.Splice.SyscallEvent.Retval = int64(v) return nil case "unlink.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.CTime"} } - e.Unlink.File.FileFields.CTime = uint64(v) + ev.Unlink.File.FileFields.CTime = uint64(v) return nil case "unlink.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.Filesystem"} } - e.Unlink.File.Filesystem = str + ev.Unlink.File.Filesystem = str return nil case "unlink.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.GID"} } - e.Unlink.File.FileFields.GID = uint32(v) + ev.Unlink.File.FileFields.GID = uint32(v) return nil case "unlink.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Group"} } - e.Unlink.File.FileFields.Group = str + ev.Unlink.File.FileFields.Group = str return nil case "unlink.file.in_upper_layer": var ok bool - if e.Unlink.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Unlink.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.InUpperLayer"} } return nil @@ -30907,35 +33757,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Inode"} } - e.Unlink.File.FileFields.Inode = uint64(v) + ev.Unlink.File.FileFields.Inode = uint64(v) return nil case "unlink.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Mode"} } - e.Unlink.File.FileFields.Mode = uint16(v) + ev.Unlink.File.FileFields.Mode = uint16(v) return nil case "unlink.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.MTime"} } - e.Unlink.File.FileFields.MTime = uint64(v) + ev.Unlink.File.FileFields.MTime = uint64(v) return nil case "unlink.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.MountID"} } - e.Unlink.File.FileFields.MountID = uint32(v) + ev.Unlink.File.FileFields.MountID = uint32(v) return nil case "unlink.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.BasenameStr"} } - e.Unlink.File.BasenameStr = str + ev.Unlink.File.BasenameStr = str return nil case "unlink.file.name.length": return &eval.ErrFieldReadOnly{Field: "unlink.file.name.length"} @@ -30944,7 +33794,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.PathnameStr"} } - e.Unlink.File.PathnameStr = str + ev.Unlink.File.PathnameStr = str return nil case "unlink.file.path.length": return &eval.ErrFieldReadOnly{Field: "unlink.file.path.length"} @@ -30953,81 +33803,81 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Mode"} } - e.Unlink.File.FileFields.Mode = uint16(v) + ev.Unlink.File.FileFields.Mode = uint16(v) return nil case "unlink.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.UID"} } - e.Unlink.File.FileFields.UID = uint32(v) + ev.Unlink.File.FileFields.UID = uint32(v) return nil case "unlink.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.User"} } - e.Unlink.File.FileFields.User = str + ev.Unlink.File.FileFields.User = str return nil case "unlink.flags": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.Flags"} } - e.Unlink.Flags = uint32(v) + ev.Unlink.Flags = uint32(v) return nil case "unlink.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.SyscallEvent.Retval"} } - e.Unlink.SyscallEvent.Retval = int64(v) + ev.Unlink.SyscallEvent.Retval = int64(v) return nil case "unload_module.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "UnloadModule.Name"} } - e.UnloadModule.Name = str + ev.UnloadModule.Name = str return nil case "unload_module.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "UnloadModule.SyscallEvent.Retval"} } - e.UnloadModule.SyscallEvent.Retval = int64(v) + ev.UnloadModule.SyscallEvent.Retval = int64(v) return nil case "utimes.file.change_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.CTime"} } - e.Utimes.File.FileFields.CTime = uint64(v) + ev.Utimes.File.FileFields.CTime = uint64(v) return nil case "utimes.file.filesystem": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.Filesystem"} } - e.Utimes.File.Filesystem = str + ev.Utimes.File.Filesystem = str return nil case "utimes.file.gid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.GID"} } - e.Utimes.File.FileFields.GID = uint32(v) + ev.Utimes.File.FileFields.GID = uint32(v) return nil case "utimes.file.group": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Group"} } - e.Utimes.File.FileFields.Group = str + ev.Utimes.File.FileFields.Group = str return nil case "utimes.file.in_upper_layer": var ok bool - if e.Utimes.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + if ev.Utimes.File.FileFields.InUpperLayer, ok = value.(bool); !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.InUpperLayer"} } return nil @@ -31036,35 +33886,35 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Inode"} } - e.Utimes.File.FileFields.Inode = uint64(v) + ev.Utimes.File.FileFields.Inode = uint64(v) return nil case "utimes.file.mode": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Mode"} } - e.Utimes.File.FileFields.Mode = uint16(v) + ev.Utimes.File.FileFields.Mode = uint16(v) return nil case "utimes.file.modification_time": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.MTime"} } - e.Utimes.File.FileFields.MTime = uint64(v) + ev.Utimes.File.FileFields.MTime = uint64(v) return nil case "utimes.file.mount_id": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.MountID"} } - e.Utimes.File.FileFields.MountID = uint32(v) + ev.Utimes.File.FileFields.MountID = uint32(v) return nil case "utimes.file.name": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.BasenameStr"} } - e.Utimes.File.BasenameStr = str + ev.Utimes.File.BasenameStr = str return nil case "utimes.file.name.length": return &eval.ErrFieldReadOnly{Field: "utimes.file.name.length"} @@ -31073,7 +33923,7 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.PathnameStr"} } - e.Utimes.File.PathnameStr = str + ev.Utimes.File.PathnameStr = str return nil case "utimes.file.path.length": return &eval.ErrFieldReadOnly{Field: "utimes.file.path.length"} @@ -31082,28 +33932,28 @@ func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Mode"} } - e.Utimes.File.FileFields.Mode = uint16(v) + ev.Utimes.File.FileFields.Mode = uint16(v) return nil case "utimes.file.uid": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.UID"} } - e.Utimes.File.FileFields.UID = uint32(v) + ev.Utimes.File.FileFields.UID = uint32(v) return nil case "utimes.file.user": str, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.User"} } - e.Utimes.File.FileFields.User = str + ev.Utimes.File.FileFields.User = str return nil case "utimes.retval": v, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.SyscallEvent.Retval"} } - e.Utimes.SyscallEvent.Retval = int64(v) + ev.Utimes.SyscallEvent.Retval = int64(v) return nil } return &eval.ErrFieldNotFound{Field: field} diff --git a/pkg/security/secl/model/events.go b/pkg/security/secl/model/events.go index e8fe413f446e0..dc23daecafc8c 100644 --- a/pkg/security/secl/model/events.go +++ b/pkg/security/secl/model/events.go @@ -85,6 +85,8 @@ const ( VethPairEventType // BindEventType Bind event BindEventType + // UnshareMountNsEventType is sent when a new mount is created from a mount namespace copy + UnshareMountNsEventType // SyscallsEventType Syscalls event SyscallsEventType // MaxKernelEventType is used internally to get the maximum number of kernel events. @@ -188,6 +190,8 @@ func (t EventType) String() string { return "veth_pair" case BindEventType: return "bind" + case UnshareMountNsEventType: + return "unshare_mntns" case SyscallsEventType: return "syscalls" diff --git a/pkg/security/secl/model/field_handlers.go b/pkg/security/secl/model/field_handlers.go new file mode 100644 index 0000000000000..a047e177f59bb --- /dev/null +++ b/pkg/security/secl/model/field_handlers.go @@ -0,0 +1,673 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. +// Code generated - DO NOT EDIT. +package model + +// ResolveFields resolves all the fields associate to the event type. Context fields are automatically resolved. +func (ev *Event) ResolveFields(forADs bool) { + // resolve context fields that are not related to any event type + _ = ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext) + if !forADs { + _ = ev.FieldHandlers.ResolveContainerTags(ev, &ev.ContainerContext) + } + _ = ev.FieldHandlers.ResolveNetworkDeviceIfName(ev, &ev.NetworkContext.Device) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.ProcessContext.Process) + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.FileEvent) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.FileEvent.FileFields) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.FileEvent.FileFields) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.FileEvent.FileFields) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) + } + // resolve event specific fields + switch ev.GetEventType().String() { + case "bind": + case "bpf": + case "capset": + case "chmod": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chmod.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chmod.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chmod.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chmod.File) + case "chown": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chown.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chown.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chown.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chown.File) + _ = ev.FieldHandlers.ResolveChownUID(ev, &ev.Chown) + _ = ev.FieldHandlers.ResolveChownGID(ev, &ev.Chown) + case "dns": + case "exec": + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.FileEvent.FileFields) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.FileEvent.FileFields) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.FileEvent.FileFields) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.FileEvent) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) + } + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exec.Process) + case "exit": + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.FileEvent.FileFields) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.FileEvent.FileFields) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.FileEvent.FileFields) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.FileEvent) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) + } + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exit.Process) + case "link": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Source.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Source.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Source.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Source) + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Target.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Target.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Target.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Target) + case "load_module": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.LoadModule.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.LoadModule.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.LoadModule.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.LoadModule.File) + case "mkdir": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Mkdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Mkdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Mkdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Mkdir.File) + case "mmap": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.MMap.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.MMap.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.MMap.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.MMap.File) + case "mount": + _ = ev.FieldHandlers.ResolveMountPointPath(ev, &ev.Mount) + _ = ev.FieldHandlers.ResolveMountSourcePath(ev, &ev.Mount) + case "mprotect": + case "open": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Open.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Open.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Open.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Open.File) + case "ptrace": + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.FileEvent) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) + } + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.PTrace.Tracee.Process) + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.PTrace.Tracee.Parent) + } + case "removexattr": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.RemoveXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.RemoveXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.RemoveXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.RemoveXAttr.File) + _ = ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.RemoveXAttr) + _ = ev.FieldHandlers.ResolveXAttrName(ev, &ev.RemoveXAttr) + case "rename": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.Old.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.Old.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.Old.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.Old) + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.New.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.New.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.New.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.New) + case "rmdir": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rmdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rmdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rmdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rmdir.File) + case "selinux": + _ = ev.FieldHandlers.ResolveSELinuxBoolName(ev, &ev.SELinux) + case "setgid": + _ = ev.FieldHandlers.ResolveSetgidGroup(ev, &ev.SetGID) + _ = ev.FieldHandlers.ResolveSetgidEGroup(ev, &ev.SetGID) + _ = ev.FieldHandlers.ResolveSetgidFSGroup(ev, &ev.SetGID) + case "setuid": + _ = ev.FieldHandlers.ResolveSetuidUser(ev, &ev.SetUID) + _ = ev.FieldHandlers.ResolveSetuidEUser(ev, &ev.SetUID) + _ = ev.FieldHandlers.ResolveSetuidFSUser(ev, &ev.SetUID) + case "setxattr": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.SetXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.SetXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.SetXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.SetXAttr.File) + _ = ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.SetXAttr) + _ = ev.FieldHandlers.ResolveXAttrName(ev, &ev.SetXAttr) + case "signal": + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.FileEvent.FileFields) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.FileEvent.FileFields) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.FileEvent.FileFields) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.FileEvent) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) + } + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.Signal.Target.Process) + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Signal.Target.Parent) + } + case "splice": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Splice.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Splice.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Splice.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Splice.File) + case "unlink": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Unlink.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Unlink.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Unlink.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Unlink.File) + case "unload_module": + case "utimes": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Utimes.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Utimes.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Utimes.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Utimes.File) + } +} + +type FieldHandlers interface { + ResolveChownGID(ev *Event, e *ChownEvent) string + ResolveChownUID(ev *Event, e *ChownEvent) string + ResolveContainerID(ev *Event, e *ContainerContext) string + ResolveContainerTags(ev *Event, e *ContainerContext) []string + ResolveFileBasename(ev *Event, e *FileEvent) string + ResolveFileFieldsGroup(ev *Event, e *FileFields) string + ResolveFileFieldsInUpperLayer(ev *Event, e *FileFields) bool + ResolveFileFieldsUser(ev *Event, e *FileFields) string + ResolveFileFilesystem(ev *Event, e *FileEvent) string + ResolveFilePath(ev *Event, e *FileEvent) string + ResolveMountPointPath(ev *Event, e *MountEvent) string + ResolveMountSourcePath(ev *Event, e *MountEvent) string + ResolveNetworkDeviceIfName(ev *Event, e *NetworkDeviceContext) string + ResolveProcessArgs(ev *Event, e *Process) string + ResolveProcessArgsFlags(ev *Event, e *Process) []string + ResolveProcessArgsOptions(ev *Event, e *Process) []string + ResolveProcessArgsTruncated(ev *Event, e *Process) bool + ResolveProcessArgv(ev *Event, e *Process) []string + ResolveProcessArgv0(ev *Event, e *Process) string + ResolveProcessCreatedAt(ev *Event, e *Process) int + ResolveProcessEnvp(ev *Event, e *Process) []string + ResolveProcessEnvs(ev *Event, e *Process) []string + ResolveProcessEnvsTruncated(ev *Event, e *Process) bool + ResolveRights(ev *Event, e *FileFields) int + ResolveSELinuxBoolName(ev *Event, e *SELinuxEvent) string + ResolveSetgidEGroup(ev *Event, e *SetgidEvent) string + ResolveSetgidFSGroup(ev *Event, e *SetgidEvent) string + ResolveSetgidGroup(ev *Event, e *SetgidEvent) string + ResolveSetuidEUser(ev *Event, e *SetuidEvent) string + ResolveSetuidFSUser(ev *Event, e *SetuidEvent) string + ResolveSetuidUser(ev *Event, e *SetuidEvent) string + ResolveXAttrName(ev *Event, e *SetXAttrEvent) string + ResolveXAttrNamespace(ev *Event, e *SetXAttrEvent) string + // custom handlers not tied to any fields + ExtraFieldHandlers +} +type DefaultFieldHandlers struct{} + +func (dfh *DefaultFieldHandlers) ResolveChownGID(ev *Event, e *ChownEvent) string { return e.Group } +func (dfh *DefaultFieldHandlers) ResolveChownUID(ev *Event, e *ChownEvent) string { return e.User } +func (dfh *DefaultFieldHandlers) ResolveContainerID(ev *Event, e *ContainerContext) string { + return e.ID +} +func (dfh *DefaultFieldHandlers) ResolveContainerTags(ev *Event, e *ContainerContext) []string { + return e.Tags +} +func (dfh *DefaultFieldHandlers) ResolveFileBasename(ev *Event, e *FileEvent) string { + return e.BasenameStr +} +func (dfh *DefaultFieldHandlers) ResolveFileFieldsGroup(ev *Event, e *FileFields) string { + return e.Group +} +func (dfh *DefaultFieldHandlers) ResolveFileFieldsInUpperLayer(ev *Event, e *FileFields) bool { + return e.InUpperLayer +} +func (dfh *DefaultFieldHandlers) ResolveFileFieldsUser(ev *Event, e *FileFields) string { + return e.User +} +func (dfh *DefaultFieldHandlers) ResolveFileFilesystem(ev *Event, e *FileEvent) string { + return e.Filesystem +} +func (dfh *DefaultFieldHandlers) ResolveFilePath(ev *Event, e *FileEvent) string { + return e.PathnameStr +} +func (dfh *DefaultFieldHandlers) ResolveMountPointPath(ev *Event, e *MountEvent) string { + return e.MountPointPath +} +func (dfh *DefaultFieldHandlers) ResolveMountSourcePath(ev *Event, e *MountEvent) string { + return e.MountSourcePath +} +func (dfh *DefaultFieldHandlers) ResolveNetworkDeviceIfName(ev *Event, e *NetworkDeviceContext) string { + return e.IfName +} +func (dfh *DefaultFieldHandlers) ResolveProcessArgs(ev *Event, e *Process) string { return e.Args } +func (dfh *DefaultFieldHandlers) ResolveProcessArgsFlags(ev *Event, e *Process) []string { + return e.Argv +} +func (dfh *DefaultFieldHandlers) ResolveProcessArgsOptions(ev *Event, e *Process) []string { + return e.Argv +} +func (dfh *DefaultFieldHandlers) ResolveProcessArgsTruncated(ev *Event, e *Process) bool { + return e.ArgsTruncated +} +func (dfh *DefaultFieldHandlers) ResolveProcessArgv(ev *Event, e *Process) []string { return e.Argv } +func (dfh *DefaultFieldHandlers) ResolveProcessArgv0(ev *Event, e *Process) string { return e.Argv0 } +func (dfh *DefaultFieldHandlers) ResolveProcessCreatedAt(ev *Event, e *Process) int { + return int(e.CreatedAt) +} +func (dfh *DefaultFieldHandlers) ResolveProcessEnvp(ev *Event, e *Process) []string { return e.Envp } +func (dfh *DefaultFieldHandlers) ResolveProcessEnvs(ev *Event, e *Process) []string { return e.Envs } +func (dfh *DefaultFieldHandlers) ResolveProcessEnvsTruncated(ev *Event, e *Process) bool { + return e.EnvsTruncated +} +func (dfh *DefaultFieldHandlers) ResolveRights(ev *Event, e *FileFields) int { return int(e.Mode) } +func (dfh *DefaultFieldHandlers) ResolveSELinuxBoolName(ev *Event, e *SELinuxEvent) string { + return e.BoolName +} +func (dfh *DefaultFieldHandlers) ResolveSetgidEGroup(ev *Event, e *SetgidEvent) string { + return e.EGroup +} +func (dfh *DefaultFieldHandlers) ResolveSetgidFSGroup(ev *Event, e *SetgidEvent) string { + return e.FSGroup +} +func (dfh *DefaultFieldHandlers) ResolveSetgidGroup(ev *Event, e *SetgidEvent) string { return e.Group } +func (dfh *DefaultFieldHandlers) ResolveSetuidEUser(ev *Event, e *SetuidEvent) string { return e.EUser } +func (dfh *DefaultFieldHandlers) ResolveSetuidFSUser(ev *Event, e *SetuidEvent) string { + return e.FSUser +} +func (dfh *DefaultFieldHandlers) ResolveSetuidUser(ev *Event, e *SetuidEvent) string { return e.User } +func (dfh *DefaultFieldHandlers) ResolveXAttrName(ev *Event, e *SetXAttrEvent) string { return e.Name } +func (dfh *DefaultFieldHandlers) ResolveXAttrNamespace(ev *Event, e *SetXAttrEvent) string { + return e.Namespace +} diff --git a/pkg/security/secl/model/model.go b/pkg/security/secl/model/model.go index ba23fcde07c5e..4f049b68ac0ac 100644 --- a/pkg/security/secl/model/model.go +++ b/pkg/security/secl/model/model.go @@ -3,12 +3,12 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/compiler/generators/accessors -mock -output accessors.go -//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/compiler/generators/accessors -tags linux -output ../../probe/accessors.go -doc ../../../../docs/cloud-workload-security/secl.json -fields-resolver ../../probe/fields_resolver.go +//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/compiler/generators/accessors -output accessors.go -field-handlers field_handlers.go package model import ( + "encoding/json" "errors" "fmt" "net" @@ -29,7 +29,9 @@ const ( ) // Model describes the data model for the runtime security agent events -type Model struct{} +type Model struct { + ExtraValidateFieldFnc func(field eval.Field, fieldValue eval.FieldValue) error +} // NewEvent returns a new Event func (m *Model) NewEvent() eval.Event { @@ -117,6 +119,10 @@ func (m *Model) ValidateField(field eval.Field, fieldValue eval.FieldValue) erro } } + if m.ExtraValidateFieldFnc != nil { + return m.ExtraValidateFieldFnc(field, fieldValue) + } + return nil } @@ -175,6 +181,7 @@ type Event struct { SetXAttr SetXAttrEvent `field:"setxattr" event:"setxattr"` // [7.27] [File] Set exteneded attributes RemoveXAttr SetXAttrEvent `field:"removexattr" event:"removexattr"` // [7.27] [File] Remove extended attributes Splice SpliceEvent `field:"splice" event:"splice"` // [7.36] [File] A splice command was executed + Mount MountEvent `field:"mount" event:"mount"` // [7.42] [File] [Experimental] A filesystem was mounted // process events Exec ExecEvent `field:"exec" event:"exec"` // [7.27] [Process] A process was executed or forked @@ -199,14 +206,21 @@ type Event struct { Bind BindEvent `field:"bind" event:"bind"` // [7.37] [Network] [Experimental] A bind was executed // internal usage - Mount MountEvent `field:"-" json:"-"` - Umount UmountEvent `field:"-" json:"-"` - InvalidateDentry InvalidateDentryEvent `field:"-" json:"-"` - ArgsEnvs ArgsEnvsEvent `field:"-" json:"-"` - MountReleased MountReleasedEvent `field:"-" json:"-"` - CgroupTracing CgroupTracingEvent `field:"-" json:"-"` - NetDevice NetDeviceEvent `field:"-" json:"-"` - VethPair VethPairEvent `field:"-" json:"-"` + Umount UmountEvent `field:"-" json:"-"` + InvalidateDentry InvalidateDentryEvent `field:"-" json:"-"` + ArgsEnvs ArgsEnvsEvent `field:"-" json:"-"` + MountReleased MountReleasedEvent `field:"-" json:"-"` + CgroupTracing CgroupTracingEvent `field:"-" json:"-"` + NetDevice NetDeviceEvent `field:"-" json:"-"` + VethPair VethPairEvent `field:"-" json:"-"` + UnshareMountNS UnshareMountNSEvent `field:"-" json:"-"` + PathResolutionError error `field:"-" json:"-"` // hold one of the path resolution error + + // field resolution + FieldHandlers FieldHandlers `field:"-" json:"-"` + + // Serializer + JSONMarshaler func(ev *Event) ([]byte, error) `field:"-" json:"-"` } func initMember(member reflect.Value, deja map[string]bool) { @@ -239,6 +253,13 @@ func initMember(member reflect.Value, deja map[string]bool) { } } +// NewDefaultEvent returns a new event using the default field handlers +func NewDefaultEvent() eval.Event { + return &Event{ + FieldHandlers: &DefaultFieldHandlers{}, + } +} + // Init initialize the event func (e *Event) Init() { initMember(reflect.ValueOf(e).Elem(), map[string]bool{}) @@ -265,9 +286,67 @@ func (e *Event) GetTags() []string { return tags } -// GetPointer return an unsafe.Pointer of the Event -func (e *Event) GetPointer() unsafe.Pointer { - return unsafe.Pointer(e) +func (ev *Event) String() string { + d, err := ev.MarshalJSON() + if err != nil { + return err.Error() + } + return string(d) +} + +// MarshalJSON returns the JSON encoding of the event +func (ev *Event) MarshalJSON() ([]byte, error) { + if ev.JSONMarshaler != nil { + return ev.JSONMarshaler(ev) + } + return json.Marshal(ev) +} + +// Retain the event +func (ev *Event) Retain() Event { + if ev.ProcessCacheEntry != nil { + ev.ProcessCacheEntry.Retain() + } + return *ev +} + +// Release the event +func (ev *Event) Release() { + if ev.ProcessCacheEntry != nil { + ev.ProcessCacheEntry.Release() + } +} + +// NewEmptyProcessCacheEntry returns an empty process cache entry for kworker events +func (ev *Event) NewEmptyProcessCacheEntry() *ProcessCacheEntry { + return &ProcessCacheEntry{ + ProcessContext: ProcessContext{ + Process: Process{ + PIDContext: ev.PIDContext, + }, + }, + } +} + +// SetPathResolutionError sets the Event.pathResolutionError +func (ev *Event) SetPathResolutionError(fileFields *FileEvent, err error) { + fileFields.PathResolutionError = err + ev.PathResolutionError = err +} + +// ResolveProcessCacheEntry uses the field handler +func (ev *Event) ResolveProcessCacheEntry() (*ProcessCacheEntry, bool) { + return ev.FieldHandlers.ResolveProcessCacheEntry(ev) +} + +// ResolveEventTimestamp uses the field handler +func (ev *Event) ResolveEventTimestamp() time.Time { + return ev.FieldHandlers.ResolveEventTimestamp(ev) +} + +// GetProcessServiceTag uses the field handler +func (ev *Event) GetProcessServiceTag() string { + return ev.FieldHandlers.GetProcessServiceTag(ev) } // SetuidEvent represents a setuid event @@ -319,15 +398,17 @@ type Credentials struct { // GetPathResolutionError returns the path resolution error as a string if there is one func (p *Process) GetPathResolutionError() string { - if p.FileEvent.PathResolutionError != nil { - return p.FileEvent.PathResolutionError.Error() - } - return "" + return p.FileEvent.GetPathResolutionError() } // HasInterpreter returns whether the process uses an interpreter func (p *Process) HasInterpreter() bool { - return p.LinuxBinprm.FileEvent.Inode != 0 && p.LinuxBinprm.FileEvent.MountID != 0 + return p.LinuxBinprm.FileEvent.Inode != 0 +} + +// IsNotKworker returns true if the process isn't a kworker +func (p *Process) IsNotKworker() bool { + return !p.IsKworker } // LinuxBinprm contains content from the linux_binprm struct, which holds the arguments used for loading binaries @@ -339,7 +420,7 @@ type LinuxBinprm struct { type Process struct { PIDContext - FileEvent FileEvent `field:"file"` + FileEvent FileEvent `field:"file,check:IsNotKworker"` ContainerID string `field:"container.id"` // Container ID ContainerTags []string `field:"-"` @@ -429,6 +510,12 @@ type FileFields struct { Flags int32 `field:"-" json:"-"` } +// IsFileless return whether it is a file less access +func (f *FileFields) IsFileless() bool { + // TODO(safchain) fix this heuristic by add a flag in the event intead of using mount ID 0 + return f.Inode != 0 && f.MountID == 0 +} + // HasHardLinks returns whether the file has hardlink func (f *FileFields) HasHardLinks() bool { return f.NLink > 1 @@ -509,31 +596,46 @@ type ArgsEnvsEvent struct { ArgsEnvs } +// Mount represents a mountpoint (used by MountEvent and UnshareMountNSEvent) +type Mount struct { + MountID uint32 `field:"-"` + GroupID uint32 `field:"-"` + Device uint32 `field:"-"` + ParentMountID uint32 `field:"-"` + ParentInode uint64 `field:"-"` + RootMountID uint32 `field:"-"` + RootInode uint64 `field:"-"` + BindSrcMountID uint32 `field:"-"` + FSType string `field:"fs_type"` // Type of the mounted file system + MountPointStr string `field:"-"` + RootStr string `field:"-"` + Path string `field:"-"` +} + // MountEvent represents a mount event +//msgp:ignore MountEvent type MountEvent struct { SyscallEvent - MountID uint32 - GroupID uint32 - Device uint32 - ParentMountID uint32 - ParentInode uint64 - FSType string - MountPointStr string - RootMountID uint32 - RootInode uint64 - RootStr string + Mount + MountPointPath string `field:"mountpoint.path,handler:ResolveMountPointPath"` // Path of the mount point + MountSourcePath string `field:"source.path,handler:ResolveMountSourcePath"` // Source path of a bind mount + MountPointPathResolutionError error `field:"-"` + MountSourcePathResolutionError error `field:"-"` +} - FSTypeRaw [16]byte +// UnshareMountNSEvent represents a mount cloned from a newly created mount namespace +type UnshareMountNSEvent struct { + Mount } // GetFSType returns the filesystem type of the mountpoint -func (m *MountEvent) GetFSType() string { +func (m *Mount) GetFSType() string { return m.FSType } // IsOverlayFS returns whether it is an overlay fs -func (m *MountEvent) IsOverlayFS() bool { - return m.GetFSType() == OverlayFS +func (m *Mount) IsOverlayFS() bool { + return m.GetFSType() == "overlay" } // OpenEvent represents an open event @@ -627,7 +729,7 @@ type ProcessAncestorsIterator struct { // Front returns the first element func (it *ProcessAncestorsIterator) Front(ctx *eval.Context) unsafe.Pointer { - if front := (*Event)(ctx.Object).ProcessContext.Ancestor; front != nil { + if front := ctx.Event.(*Event).ProcessContext.Ancestor; front != nil { it.prev = front return unsafe.Pointer(front) } @@ -655,7 +757,7 @@ type ProcessContext struct { Process Parent *Process `field:"parent,opts:exposed_at_event_root_only,check:HasParent"` - Ancestor *ProcessCacheEntry `field:"ancestors,iterator:ProcessAncestorsIterator"` + Ancestor *ProcessCacheEntry `field:"ancestors,iterator:ProcessAncestorsIterator,check:IsNotKworker"` } // PIDContext holds the process context of an kernel event @@ -733,12 +835,12 @@ type BPFMap struct { // BPFProgram represents a BPF program type BPFProgram struct { - ID uint32 `field:"-" json:"-"` // ID of the eBPF program - Type uint32 `field:"type" constants:"BPF program types"` // Type of the eBPF program - AttachType uint32 `field:"attach_type" constants:"BPF attach types"` // Attach type of the eBPF program - Helpers []uint32 `field:"helpers,handler:ResolveHelpers" constants:"BPF helper functions"` // eBPF helpers used by the eBPF program (added in 7.35) - Name string `field:"name"` // Name of the eBPF program (added in 7.35) - Tag string `field:"tag"` // Hash (sha1) of the eBPF program (added in 7.35) + ID uint32 `field:"-" json:"-"` // ID of the eBPF program + Type uint32 `field:"type" constants:"BPF program types"` // Type of the eBPF program + AttachType uint32 `field:"attach_type" constants:"BPF attach types"` // Attach type of the eBPF program + Helpers []uint32 `field:"helpers" constants:"BPF helper functions"` // eBPF helpers used by the eBPF program (added in 7.35) + Name string `field:"name"` // Name of the eBPF program (added in 7.35) + Tag string `field:"tag"` // Hash (sha1) of the eBPF program (added in 7.35) } // PTraceEvent represents a ptrace event @@ -906,3 +1008,25 @@ type VethPairEvent struct { type SyscallsEvent struct { Syscalls []Syscall // 64 * 8 = 512 > 450, bytes should be enough to hold all 450 syscalls } + +// ExtraFieldHandlers handlers not hold by any field +type ExtraFieldHandlers interface { + ResolveProcessCacheEntry(ev *Event) (*ProcessCacheEntry, bool) + ResolveEventTimestamp(ev *Event) time.Time + GetProcessServiceTag(ev *Event) string +} + +// ResolveProcessCacheEntry stub implementation +func (dfh *DefaultFieldHandlers) ResolveProcessCacheEntry(ev *Event) (*ProcessCacheEntry, bool) { + return nil, false +} + +// ResolveEventTimestamp stub implementation +func (dfh *DefaultFieldHandlers) ResolveEventTimestamp(ev *Event) time.Time { + return ev.Timestamp +} + +// GetProcessServiceTag stub implementation +func (dfh *DefaultFieldHandlers) GetProcessServiceTag(ev *Event) string { + return "" +} diff --git a/pkg/security/secl/model/oo_symlink.go b/pkg/security/secl/model/oo_symlink.go index 403f8bd3e0d0b..d8d940af8039a 100644 --- a/pkg/security/secl/model/oo_symlink.go +++ b/pkg/security/secl/model/oo_symlink.go @@ -15,10 +15,10 @@ var ( return &eval.StringEvaluator{ Field: field, EvalFnc: func(ctx *eval.Context) string { - if path := (*Event)(ctx.Object).ProcessContext.SymlinkPathnameStr[0]; path != "" { + if path := ctx.Event.(*Event).ProcessContext.SymlinkPathnameStr[0]; path != "" { return path } - return (*Event)(ctx.Object).ProcessContext.FileEvent.PathnameStr + return ctx.Event.(*Event).ProcessContext.FileEvent.PathnameStr }, } }, @@ -26,10 +26,10 @@ var ( return &eval.StringEvaluator{ Field: field, EvalFnc: func(ctx *eval.Context) string { - if path := (*Event)(ctx.Object).ProcessContext.SymlinkPathnameStr[1]; path != "" { + if path := ctx.Event.(*Event).ProcessContext.SymlinkPathnameStr[1]; path != "" { return path } - return (*Event)(ctx.Object).ProcessContext.FileEvent.PathnameStr + return ctx.Event.(*Event).ProcessContext.FileEvent.PathnameStr }, } }, @@ -39,10 +39,10 @@ var ( return &eval.StringEvaluator{ Field: field, EvalFnc: func(ctx *eval.Context) string { - if name := (*Event)(ctx.Object).ProcessContext.SymlinkBasenameStr; name != "" { + if name := ctx.Event.(*Event).ProcessContext.SymlinkBasenameStr; name != "" { return name } - return (*Event)(ctx.Object).ProcessContext.FileEvent.BasenameStr + return ctx.Event.(*Event).ProcessContext.FileEvent.BasenameStr }, } } diff --git a/pkg/security/secl/model/process_cache_entry.go b/pkg/security/secl/model/process_cache_entry.go index a65494433dd9e..9f5c788d6f4e7 100644 --- a/pkg/security/secl/model/process_cache_entry.go +++ b/pkg/security/secl/model/process_cache_entry.go @@ -373,21 +373,19 @@ func (p *EnvsEntry) FilterEnvs(envsWithValue map[string]bool) ([]string, bool) { return nil, p.truncated } - p.filteredEnvs = make([]string, len(values)) + p.filteredEnvs = make([]string, 0, len(values)) - var i int for _, value := range values { k, _, found := strings.Cut(value, "=") - if !found { - continue - } - - if envsWithValue[k] { - p.filteredEnvs[i] = value + if found { + if envsWithValue[k] { + p.filteredEnvs = append(p.filteredEnvs, value) + } else { + p.filteredEnvs = append(p.filteredEnvs, k) + } } else { - p.filteredEnvs[i] = k + p.filteredEnvs = append(p.filteredEnvs, value) } - i++ } return p.filteredEnvs, p.truncated diff --git a/pkg/security/secl/model/unmarshallers.go b/pkg/security/secl/model/unmarshallers.go index e1fc8e830d2ba..e50528f52eddc 100644 --- a/pkg/security/secl/model/unmarshallers.go +++ b/pkg/security/secl/model/unmarshallers.go @@ -373,29 +373,22 @@ func (e *MkdirEvent) UnmarshalBinary(data []byte) (int, error) { } // UnmarshalBinary unmarshalls a binary representation of itself -func (e *MountEvent) UnmarshalBinary(data []byte) (int, error) { - n, err := UnmarshalBinary(data, &e.SyscallEvent) - if err != nil { - return n, err - } - - data = data[n:] +func (m *Mount) UnmarshalBinary(data []byte) (int, error) { if len(data) < 56 { return 0, ErrNotEnoughData } - e.MountID = ByteOrder.Uint32(data[0:4]) - e.GroupID = ByteOrder.Uint32(data[4:8]) - e.Device = ByteOrder.Uint32(data[8:12]) - e.ParentMountID = ByteOrder.Uint32(data[12:16]) - e.ParentInode = ByteOrder.Uint64(data[16:24]) - e.RootInode = ByteOrder.Uint64(data[24:32]) - e.RootMountID = ByteOrder.Uint32(data[32:36]) - - // Notes: bytes 36 to 40 are used to pad the structure + m.MountID = ByteOrder.Uint32(data[0:4]) + m.GroupID = ByteOrder.Uint32(data[4:8]) + m.Device = ByteOrder.Uint32(data[8:12]) + m.ParentMountID = ByteOrder.Uint32(data[12:16]) + m.ParentInode = ByteOrder.Uint64(data[16:24]) + m.RootInode = ByteOrder.Uint64(data[24:32]) + m.RootMountID = ByteOrder.Uint32(data[32:36]) + m.BindSrcMountID = ByteOrder.Uint32(data[36:40]) - SliceToArray(data[40:56], e.FSTypeRaw[:]) - e.FSType, err = UnmarshalString(e.FSTypeRaw[:], 16) + var err error + m.FSType, err = UnmarshalString(data[40:56], 16) if err != nil { return 0, err } @@ -403,6 +396,16 @@ func (e *MountEvent) UnmarshalBinary(data []byte) (int, error) { return 56, nil } +// UnmarshalBinary unmarshalls a binary representation of itself +func (e *MountEvent) UnmarshalBinary(data []byte) (int, error) { + return UnmarshalBinary(data, &e.SyscallEvent, &e.Mount) +} + +// UnmarshalBinary unmarshalls a binary representation of itself +func (e *UnshareMountNSEvent) UnmarshalBinary(data []byte) (int, error) { + return e.Mount.UnmarshalBinary(data) +} + // UnmarshalBinary unmarshalls a binary representation of itself func (e *OpenEvent) UnmarshalBinary(data []byte) (int, error) { n, err := UnmarshalBinary(data, &e.SyscallEvent, &e.File) diff --git a/pkg/security/secl/model/variables.go b/pkg/security/secl/model/variables.go index b78e11ec0c243..545d6308e69d7 100644 --- a/pkg/security/secl/model/variables.go +++ b/pkg/security/secl/model/variables.go @@ -16,7 +16,7 @@ var ( // SECLVariables set of variables SECLVariables = map[string]eval.VariableValue{ "process.pid": eval.NewIntVariable(func(ctx *eval.Context) int { - pc := (*Event)(ctx.Object).ProcessContext + pc := ctx.Event.(*Event).ProcessContext if pc == nil { return 0 } diff --git a/pkg/security/secl/rules/approvers.go b/pkg/security/secl/rules/approvers.go index 6e07dfddd69aa..cc4898300d071 100644 --- a/pkg/security/secl/rules/approvers.go +++ b/pkg/security/secl/rules/approvers.go @@ -75,7 +75,7 @@ func bitmaskCombinations(bitmasks []int) []int { func GetApprovers(rules []*Rule, event eval.Event, fieldCaps FieldCapabilities) (Approvers, error) { approvers := make(Approvers) - ctx := eval.NewContext(event.GetPointer()) + ctx := eval.NewContext(event) // for each rule we should at least find one approver otherwise we will return no approver for the field for _, rule := range rules { diff --git a/pkg/security/secl/rules/model_test.go b/pkg/security/secl/rules/model_test.go index 955e38c1e9887..e922e0c9f8f7d 100644 --- a/pkg/security/secl/rules/model_test.go +++ b/pkg/security/secl/rules/model_test.go @@ -86,35 +86,35 @@ func (m *testModel) GetEvaluator(key string, regID eval.RegisterID) (eval.Evalua case "process.name": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*testEvent)(ctx.Object).process.name }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*testEvent).process.name }, Field: key, }, nil case "process.uid": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).process.uid }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).process.uid }, Field: key, }, nil case "process.gid": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).process.gid }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).process.gid }, Field: key, }, nil case "process.is_root": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*testEvent)(ctx.Object).process.isRoot }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*testEvent).process.isRoot }, Field: key, }, nil case "open.filename": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*testEvent)(ctx.Object).open.filename }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*testEvent).open.filename }, Field: key, OpOverrides: eval.GlobCmp, }, nil @@ -122,28 +122,28 @@ func (m *testModel) GetEvaluator(key string, regID eval.RegisterID) (eval.Evalua case "open.flags": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).open.flags }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).open.flags }, Field: key, }, nil case "open.mode": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).open.mode }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).open.mode }, Field: key, }, nil case "mkdir.filename": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*testEvent)(ctx.Object).mkdir.filename }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*testEvent).mkdir.filename }, Field: key, }, nil case "mkdir.mode": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).mkdir.mode }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).mkdir.mode }, Field: key, }, nil diff --git a/pkg/security/secl/rules/policy_test.go b/pkg/security/secl/rules/policy_test.go index 53275de040bc7..fc54698cbe386 100644 --- a/pkg/security/secl/rules/policy_test.go +++ b/pkg/security/secl/rules/policy_test.go @@ -31,14 +31,16 @@ func savePolicy(filename string, testPolicy *PolicyDef) error { func TestMacroMerge(t *testing.T) { var evalOpts eval.Opts - evalOpts.WithConstants(testConstants) + evalOpts. + WithConstants(testConstants). + WithMacroStore(&eval.MacroStore{}) var opts Opts opts. WithSupportedDiscarders(testSupportedDiscarders). WithEventTypeEnabled(map[eval.EventType]bool{"*": true}) - rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts) testPolicy := &PolicyDef{ Rules: []*RuleDefinition{{ ID: "test_rule", @@ -87,9 +89,9 @@ func TestMacroMerge(t *testing.T) { t.Error(err) } - macro := rs.macroStore.Macros["test_macro"] + macro := rs.evalOpts.MacroStore.Get("test_macro") if macro == nil { - t.Fatalf("failed to find test_macro in ruleset: %+v", rs.macroStore.Macros) + t.Fatalf("failed to find test_macro in ruleset: %+v", rs.evalOpts.MacroStore.List()) } testPolicy2.Macros[0].Combine = "" @@ -105,13 +107,15 @@ func TestMacroMerge(t *testing.T) { func TestRuleMerge(t *testing.T) { var evalOpts eval.Opts - evalOpts.WithConstants(testConstants) + evalOpts. + WithConstants(testConstants). + WithMacroStore(&eval.MacroStore{}) var opts Opts opts. WithSupportedDiscarders(testSupportedDiscarders). WithEventTypeEnabled(map[eval.EventType]bool{"*": true}) - rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts) testPolicy := &PolicyDef{ Rules: []*RuleDefinition{{ @@ -172,7 +176,7 @@ func (t *testVariableProvider) GetVariable(name string, value interface{}) (eval switch value.(type) { case []int: intVar := eval.NewIntArrayVariable(func(ctx *eval.Context) []int { - processName := (*testEvent)(ctx.Object).process.name + processName := ctx.Event.(*testEvent).process.name processVars, found := t.vars[processName] if !found { return nil @@ -186,7 +190,7 @@ func (t *testVariableProvider) GetVariable(name string, value interface{}) (eval i, _ := v.([]int) return i }, func(ctx *eval.Context, value interface{}) error { - processName := (*testEvent)(ctx.Object).process.name + processName := ctx.Event.(*testEvent).process.name if _, found := t.vars[processName]; !found { t.vars[processName] = map[string]interface{}{} } @@ -213,7 +217,8 @@ func TestActionSetVariable(t *testing.T) { var evalOpts eval.Opts evalOpts. WithConstants(testConstants). - WithVariables(make(map[string]eval.VariableValue)) + WithVariables(make(map[string]eval.VariableValue)). + WithMacroStore(&eval.MacroStore{}) var opts Opts opts. @@ -221,7 +226,7 @@ func TestActionSetVariable(t *testing.T) { WithEventTypeEnabled(enabled). WithStateScopes(stateScopes) - rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts) testPolicy := &PolicyDef{ Rules: []*RuleDefinition{{ @@ -364,14 +369,15 @@ func TestActionSetVariableConflict(t *testing.T) { var evalOpts eval.Opts evalOpts. WithConstants(testConstants). - WithVariables(make(map[string]eval.VariableValue)) + WithVariables(make(map[string]eval.VariableValue)). + WithMacroStore(&eval.MacroStore{}) var opts Opts opts. WithSupportedDiscarders(testSupportedDiscarders). WithEventTypeEnabled(enabled) - rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts) testPolicy := &PolicyDef{ Rules: []*RuleDefinition{{ @@ -418,14 +424,15 @@ func loadPolicy(t *testing.T, testPolicy *PolicyDef, policyOpts PolicyLoaderOpts var evalOpts eval.Opts evalOpts. WithConstants(testConstants). - WithVariables(make(map[string]eval.VariableValue)) + WithVariables(make(map[string]eval.VariableValue)). + WithMacroStore(&eval.MacroStore{}) var opts Opts opts. WithSupportedDiscarders(testSupportedDiscarders). WithEventTypeEnabled(enabled) - rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts, &eval.MacroStore{}) + rs := NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts) tmpDir := t.TempDir() diff --git a/pkg/security/secl/rules/rule_filters.go b/pkg/security/secl/rules/rule_filters.go index b48d8bc64830e..b3ba04b7bff56 100644 --- a/pkg/security/secl/rules/rule_filters.go +++ b/pkg/security/secl/rules/rule_filters.go @@ -89,7 +89,7 @@ func NewSECLRuleFilter(model eval.Model) *SECLRuleFilter { return &SECLRuleFilter{ model: model, context: &eval.Context{ - Object: model.NewEvent().GetPointer(), + Event: model.NewEvent(), }, parsingContext: ast.NewParsingContext(), } @@ -121,10 +121,7 @@ func (r *SECLRuleFilter) IsRuleAccepted(rule *RuleDefinition) (bool, error) { evalOpts. WithConstants(model.SECLConstants) - evaluator, err := eval.NewRuleEvaluator(astRule, r.model, eval.ReplacementContext{ - Opts: evalOpts, - MacroStore: &eval.MacroStore{}, - }) + evaluator, err := eval.NewRuleEvaluator(astRule, r.model, evalOpts) if err != nil { return false, err } @@ -144,7 +141,7 @@ func (r *SECLRuleFilter) IsMacroAccepted(macro *MacroDefinition) (bool, error) { return false, err } - evaluator, err := eval.NewRuleEvaluator(astRule, r.model, eval.ReplacementContext{}) + evaluator, err := eval.NewRuleEvaluator(astRule, r.model, &eval.Opts{}) if err != nil { return false, err } diff --git a/pkg/security/secl/rules/ruleset.go b/pkg/security/secl/rules/ruleset.go index 233785403ea46..5668c4bb57943 100644 --- a/pkg/security/secl/rules/ruleset.go +++ b/pkg/security/secl/rules/ruleset.go @@ -162,7 +162,6 @@ type RuleSetListener interface { type RuleSet struct { opts *Opts evalOpts *eval.Opts - macroStore *eval.MacroStore eventRuleBuckets map[eval.EventType]*RuleBucket rules map[eval.RuleID]*Rule policies []*Policy @@ -179,13 +178,6 @@ type RuleSet struct { pool *eval.ContextPool } -func (rs *RuleSet) replCtx() eval.ReplacementContext { - return eval.ReplacementContext{ - Opts: rs.evalOpts, - MacroStore: rs.macroStore, - } -} - // GetPolicies returns the policies func (rs *RuleSet) GetPolicies() []*Policy { return rs.policies @@ -208,8 +200,8 @@ func (rs *RuleSet) GetRules() map[eval.RuleID]*Rule { // ListMacroIDs returns the list of MacroIDs from the ruleset func (rs *RuleSet) ListMacroIDs() []MacroID { var ids []string - for macroID := range rs.macroStore.Macros { - ids = append(ids, macroID) + for _, macro := range rs.evalOpts.MacroStore.List() { + ids = append(ids, macro.ID) } return ids } @@ -232,7 +224,7 @@ func (rs *RuleSet) AddMacros(parsingContext *ast.ParsingContext, macros []*Macro func (rs *RuleSet) AddMacro(parsingContext *ast.ParsingContext, macroDef *MacroDefinition) (*eval.Macro, error) { var err error - if _, exists := rs.macroStore.Macros[macroDef.ID]; exists { + if macro := rs.evalOpts.MacroStore.Get(macroDef.ID); macro != nil { return nil, &ErrMacroLoad{Definition: macroDef, Err: errors.New("multiple definition with the same ID")} } @@ -242,16 +234,16 @@ func (rs *RuleSet) AddMacro(parsingContext *ast.ParsingContext, macroDef *MacroD case macroDef.Expression != "" && len(macroDef.Values) > 0: return nil, &ErrMacroLoad{Definition: macroDef, Err: errors.New("only one of 'expression' and 'values' can be defined")} case macroDef.Expression != "": - if macro.Macro, err = eval.NewMacro(macroDef.ID, macroDef.Expression, rs.model, parsingContext, rs.replCtx()); err != nil { + if macro.Macro, err = eval.NewMacro(macroDef.ID, macroDef.Expression, rs.model, parsingContext, rs.evalOpts); err != nil { return nil, &ErrMacroLoad{Definition: macroDef, Err: err} } default: - if macro.Macro, err = eval.NewStringValuesMacro(macroDef.ID, macroDef.Values, rs.macroStore); err != nil { + if macro.Macro, err = eval.NewStringValuesMacro(macroDef.ID, macroDef.Values, rs.evalOpts); err != nil { return nil, &ErrMacroLoad{Definition: macroDef, Err: err} } } - rs.macroStore.AddMacro(macro.Macro) + rs.evalOpts.MacroStore.Add(macro.Macro) return macro.Macro, nil } @@ -314,11 +306,7 @@ func (rs *RuleSet) AddRule(parsingContext *ast.ParsingContext, ruleDef *RuleDefi } rule := &Rule{ - Rule: &eval.Rule{ - ID: ruleDef.ID, - Expression: ruleDef.Expression, - Tags: tags, - }, + Rule: eval.NewRule(ruleDef.ID, ruleDef.Expression, rs.evalOpts, tags...), Definition: ruleDef, } @@ -326,7 +314,7 @@ func (rs *RuleSet) AddRule(parsingContext *ast.ParsingContext, ruleDef *RuleDefi return nil, &ErrRuleLoad{Definition: ruleDef, Err: &ErrRuleSyntax{Err: err}} } - if err := rule.GenEvaluator(rs.model, parsingContext, rs.replCtx()); err != nil { + if err := rule.GenEvaluator(rs.model, parsingContext); err != nil { return nil, &ErrRuleLoad{Definition: ruleDef, Err: err} } @@ -486,7 +474,7 @@ func (rs *RuleSet) IsDiscarder(event eval.Event, field eval.Field) (bool, error) return false, &ErrNoEventTypeBucket{EventType: eventType} } - ctx := rs.pool.Get(event.GetPointer()) + ctx := rs.pool.Get(event) defer rs.pool.Put(ctx) return IsDiscarder(ctx, field, bucket.rules) @@ -502,8 +490,8 @@ func (rs *RuleSet) runRuleActions(ctx *eval.Context, rule *Rule) error { } name += action.Set.Name - variable, found := rs.evalOpts.Variables[name] - if !found { + variable := rs.evalOpts.VariableStore.Get(name) + if variable == nil { return fmt.Errorf("unknown variable: %s", name) } @@ -533,7 +521,7 @@ func (rs *RuleSet) runRuleActions(ctx *eval.Context, rule *Rule) error { // Evaluate the specified event against the set of rules func (rs *RuleSet) Evaluate(event eval.Event) bool { - ctx := rs.pool.Get(event.GetPointer()) + ctx := rs.pool.Get(event) defer rs.pool.Put(ctx) eventType := event.GetType() @@ -684,7 +672,7 @@ func (rs *RuleSet) LoadPolicies(loader *PolicyLoader, opts PolicyLoaderOpts) *mu varName = string(action.Set.Scope) + "." + varName } - if _, err := rs.model.NewEvent().GetFieldValue(varName); err == nil { + if _, err := rs.eventCtor().GetFieldValue(varName); err == nil { errs = multierror.Append(errs, fmt.Errorf("variable '%s' conflicts with field", varName)) continue } @@ -765,12 +753,12 @@ func (rs *RuleSet) LoadPolicies(loader *PolicyLoader, opts PolicyLoaderOpts) *mu continue } - if existingVariable, found := rs.evalOpts.Variables[varName]; found && reflect.TypeOf(variable) != reflect.TypeOf(existingVariable) { + if existingVariable := rs.evalOpts.VariableStore.Get(varName); existingVariable != nil && reflect.TypeOf(variable) != reflect.TypeOf(existingVariable) { errs = multierror.Append(errs, fmt.Errorf("conflicting types for variable '%s'", varName)) continue } - rs.evalOpts.Variables[varName] = variable + rs.evalOpts.VariableStore.Add(varName, variable) } } } @@ -783,16 +771,28 @@ func (rs *RuleSet) LoadPolicies(loader *PolicyLoader, opts PolicyLoaderOpts) *mu return errs } +// NewEvent returns a new event using the embedded constructor +func (rs *RuleSet) NewEvent() eval.Event { + return rs.eventCtor() +} + // NewRuleSet returns a new ruleset for the specified data model -func NewRuleSet(model eval.Model, eventCtor func() eval.Event, opts *Opts, evalOpts *eval.Opts, macroStore *eval.MacroStore) *RuleSet { +func NewRuleSet(model eval.Model, eventCtor func() eval.Event, opts *Opts, evalOpts *eval.Opts) *RuleSet { logger := log.OrNullLogger(opts.Logger) + if evalOpts.MacroStore == nil { + evalOpts.WithMacroStore(&eval.MacroStore{}) + } + + if evalOpts.VariableStore == nil { + evalOpts.WithVariableStore(&eval.VariableStore{}) + } + return &RuleSet{ model: model, eventCtor: eventCtor, opts: opts, evalOpts: evalOpts, - macroStore: macroStore, eventRuleBuckets: make(map[eval.EventType]*RuleBucket), rules: make(map[eval.RuleID]*Rule), logger: logger, diff --git a/pkg/security/secl/rules/ruleset_test.go b/pkg/security/secl/rules/ruleset_test.go index d059fdd080c3a..9d1d031c66e6f 100644 --- a/pkg/security/secl/rules/ruleset_test.go +++ b/pkg/security/secl/rules/ruleset_test.go @@ -39,7 +39,7 @@ func (f *testHandler) EventDiscarderFound(rs *RuleSet, event eval.Event, field s } evaluator, _ := f.model.GetEvaluator(field, "") - ctx := eval.NewContext(event.GetPointer()) + ctx := eval.NewContext(event) value := evaluator.Eval(ctx) @@ -87,14 +87,7 @@ func newRuleSet() *RuleSet { WithSupportedDiscarders(testSupportedDiscarders). WithEventTypeEnabled(enabled) - return NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts, &eval.MacroStore{}) -} - -func emptyReplCtx() eval.ReplacementContext { - return eval.ReplacementContext{ - Opts: &eval.Opts{}, - MacroStore: &eval.MacroStore{}, - } + return NewRuleSet(&testModel{}, func() eval.Event { return &testEvent{} }, &opts, &evalOpts) } func TestRuleBuckets(t *testing.T) { @@ -572,12 +565,11 @@ func TestRuleSetApprovers14(t *testing.T) { } func TestGetRuleEventType(t *testing.T) { + rule := eval.NewRule("aaa", `open.filename == "test"`, &eval.Opts{}) + pc := ast.NewParsingContext() - rule := &eval.Rule{ - ID: "aaa", - Expression: `open.filename == "test"`, - } - if err := rule.GenEvaluator(&testModel{}, pc, emptyReplCtx()); err != nil { + + if err := rule.GenEvaluator(&testModel{}, pc); err != nil { t.Fatal(err) } diff --git a/pkg/security/tests/activity_dumps_test.go b/pkg/security/tests/activity_dumps_test.go index ce5c972be0746..9dcb69dd0424e 100644 --- a/pkg/security/tests/activity_dumps_test.go +++ b/pkg/security/tests/activity_dumps_test.go @@ -20,11 +20,18 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" + "github.com/stretchr/testify/assert" ) +// v see test/kitchen/test/integration/security-agent-test/rspec/security-agent-test_spec.rb +const dedicatedADNodeForTestsEnv = "DEDICATED_ACTIVITY_DUMP_NODE" + var expectedFormats = []string{"json", "protobuf"} const testActivityDumpRateLimiter = 20 +const testActivityDumpTracedCgroupsCount = 3 +const testActivityDumpCgroupDumpTimeout = 11 // probe.MinDumpTimeout(10) + 5 +var testActivityDumpTracedEventTypes = []string{"exec", "open", "syscalls", "dns", "bind"} func TestActivityDumps(t *testing.T) { // skip test that are about to be run on docker (to avoid trying spawning docker in docker) @@ -34,15 +41,21 @@ func TestActivityDumps(t *testing.T) { if _, err := whichNonFatal("docker"); err != nil { t.Skip("Skip test where docker is unavailable") } + if !IsDedicatedNode(dedicatedADNodeForTestsEnv) { + t.Skip("Skip test when not run in dedicated env") + } outputDir := t.TempDir() defer os.RemoveAll(outputDir) test, err := newTestModule(t, nil, []*rules.RuleDefinition{}, testOpts{ enableActivityDump: true, activityDumpRateLimiter: testActivityDumpRateLimiter, + activityDumpTracedCgroupsCount: testActivityDumpTracedCgroupsCount, + activityDumpCgroupDumpTimeout: testActivityDumpCgroupDumpTimeout, activityDumpLocalStorageDirectory: outputDir, activityDumpLocalStorageCompression: false, activityDumpLocalStorageFormats: expectedFormats, + activityDumpTracedEventTypes: testActivityDumpTracedEventTypes, }) if err != nil { t.Fatal(err) @@ -53,6 +66,86 @@ func TestActivityDumps(t *testing.T) { t.Fatal(err) } + t.Run("activity-dump-cgroup-process", func(t *testing.T) { + dockerInstance, dump, err := test.StartADockerGetDump() + if err != nil { + t.Fatal(err) + } + defer dockerInstance.stop() + + cmd := dockerInstance.Command(syscallTester, []string{"sleep", "1"}, []string{}) + _, err = cmd.CombinedOutput() + if err != nil { + t.Fatal(err) + } + time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump + + err = test.StopActivityDump(dump.Name, "", "") + if err != nil { + t.Fatal(err) + } + // time.Sleep(time.Second * 60) + + validateActivityDumpOutputs(t, test, expectedFormats, dump.OutputFiles, func(ad *probe.ActivityDump) bool { + nodes := ad.FindMatchingNodes("syscall_tester") + if nodes == nil { + t.Fatalf("Node not found in activity dump: %+v", nodes) + } + if len(nodes) != 1 { + t.Fatalf("Found %d nodes, expected only one.", len(nodes)) + } + node := nodes[0] + + // ProcessActivityNode content1 + assert.Equal(t, probe.Runtime, node.GenerationType) + assert.Equal(t, 0, len(node.Children)) + assert.Equal(t, 0, len(node.Files)) + assert.Equal(t, 0, len(node.DNSNames)) + assert.Equal(t, 0, len(node.Sockets)) + + // Process content + assert.Equal(t, node.Process.Pid, node.Process.Tid) + assert.Equal(t, uint32(0), node.Process.UID) + assert.Equal(t, uint32(0), node.Process.GID) + assert.Equal(t, "root", node.Process.User) + assert.Equal(t, "root", node.Process.Group) + if node.Process.Pid < node.Process.PPid { + t.Errorf("PID < PPID") + } + assert.Equal(t, false, node.Process.IsThread) + assert.Equal(t, uint64(0), node.Process.SpanID) + assert.Equal(t, uint64(0), node.Process.TraceID) + assert.Equal(t, "", node.Process.TTYName) + assert.Equal(t, "syscall_tester", node.Process.Comm) + assert.Equal(t, false, node.Process.ArgsTruncated) + assert.Equal(t, 2, len(node.Process.Argv)) + if len(node.Process.Argv) >= 2 { + assert.Equal(t, "sleep", node.Process.Argv[0]) + assert.Equal(t, "1", node.Process.Argv[1]) + } + assert.Equal(t, syscallTester, node.Process.Argv0) + assert.Equal(t, false, node.Process.ArgsTruncated) + assert.Equal(t, false, node.Process.EnvsTruncated) + found := false + for _, env := range node.Process.Envs { + if strings.HasPrefix(env, "PATH=") { + found = true + break + } + } + if !found { + t.Errorf("PATH not present in envs") + } + + // Process.FileEvent content + if !strings.HasSuffix(node.Process.FileEvent.PathnameStr, "/syscall_tester") { + t.Errorf("PathnameStr did not ends with /syscall_tester: %s", node.Process.FileEvent.PathnameStr) + } + assert.Equal(t, "syscall_tester", node.Process.FileEvent.BasenameStr) + return true + }) + }) + t.Run("activity-dump-cgroup-bind", func(t *testing.T) { dockerInstance, dump, err := test.StartADockerGetDump() if err != nil { @@ -282,6 +375,62 @@ func TestActivityDumps(t *testing.T) { }) }) + t.Run("activity-dump-cgroup-timeout", func(t *testing.T) { + dockerInstance, dump, err := test.StartADockerGetDump() + if err != nil { + t.Fatal(err) + } + defer dockerInstance.stop() + + // check that the dump is still alive + time.Sleep((testActivityDumpCgroupDumpTimeout*60 - 20) * time.Second) + assert.Equal(t, true, test.isDumpRunning(dump)) + + // check that the dump has timeouted after the cleanup period (30s) + 2s + time.Sleep(1 * time.Minute) + assert.Equal(t, false, test.isDumpRunning(dump)) + }) + + t.Run("activity-dump-cgroup-counts", func(t *testing.T) { + // first, stop all running activity dumps + err := test.StopAllActivityDumps() + if err != nil { + t.Fatal("Can't stop all running activity dumps") + } + + // then, launch enough docker instances to reach the testActivityDumpCgroupDumpTimeout + var startedDumps []*activityDumpIdentifier + for i := 0; i < testActivityDumpTracedCgroupsCount; i++ { + dockerInstance, dump, err := test.StartADockerGetDump() + if err != nil { + t.Fatal(err) + } + defer dockerInstance.stop() + startedDumps = append(startedDumps, dump) + } + + // verify that we have the corresponding running dumps + dumps, err := test.ListActivityDumps() + if err != nil { + t.Fatal(err) + } + assert.Equal(t, testActivityDumpTracedCgroupsCount, len(dumps)) + if !isListOfDumpsEqual(startedDumps, dumps) { + t.Fatal("List of active dumps don't match the started ones") + } + + // then, start an extra one and check that it's not dumping + dockerInstance, err := test.StartADocker() + if err != nil { + t.Fatal(err) + } + defer dockerInstance.stop() + dumps, err = test.ListActivityDumps() + if err != nil { + t.Fatal(err) + } + assert.Equal(t, testActivityDumpTracedCgroupsCount, len(dumps)) + }) } func validateActivityDumpOutputs(t *testing.T, test *testModule, expectedFormats []string, outputFiles []string, validator func(ad *probe.ActivityDump) bool) { @@ -309,7 +458,7 @@ func validateActivityDumpOutputs(t *testing.T, test *testModule, expectedFormats perExtOK[ext] = true case ".protobuf": - ad, err := test.DecodeActivityDump(t, f) + ad, err := test.DecodeActivityDump(f) if err != nil { t.Fatal(err) } @@ -331,3 +480,249 @@ func validateActivityDumpOutputs(t *testing.T, test *testModule, expectedFormats } } } + +func TestActivityDumpsLoadControllerTimeout(t *testing.T) { + // skip test that are about to be run on docker (to avoid trying spawning docker in docker) + if testEnvironment == DockerEnvironment { + t.Skip("Skip test spawning docker containers on docker") + } + if _, err := whichNonFatal("docker"); err != nil { + t.Skip("Skip test where docker is unavailable") + } + if !IsDedicatedNode(dedicatedADNodeForTestsEnv) { + t.Skip("Skip test when not run in dedicated env") + } + + outputDir := t.TempDir() + defer os.RemoveAll(outputDir) + test, err := newTestModule(t, nil, []*rules.RuleDefinition{}, testOpts{ + enableActivityDump: true, + activityDumpRateLimiter: testActivityDumpRateLimiter, + activityDumpTracedCgroupsCount: testActivityDumpTracedCgroupsCount, + activityDumpCgroupDumpTimeout: testActivityDumpCgroupDumpTimeout, + activityDumpLocalStorageDirectory: outputDir, + activityDumpLocalStorageCompression: false, + activityDumpLocalStorageFormats: expectedFormats, + activityDumpTracedEventTypes: testActivityDumpTracedEventTypes, + }) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + // first, stop all running activity dumps + err = test.StopAllActivityDumps() + if err != nil { + t.Fatal("Can't stop all running activity dumps") + } + + dockerInstance, dump, err := test.StartADockerGetDump() + if err != nil { + t.Fatal(err) + } + defer dockerInstance.stop() + assert.Equal(t, "11m0s", dump.Timeout) + + // trigg reducer (before t > timeout / 4) + test.triggerLoadControlerReducer(dockerInstance, dump) + + // find the new dump, with timeout *= 3/4, or min timeout + secondDump, err := test.findNextPartialDump(dockerInstance, dump) + if err != nil { + t.Fatal(err) + } + assert.Equal(t, "10m0s", secondDump.Timeout) +} + +func TestActivityDumpsLoadControllerEventTypes(t *testing.T) { + // skip test that are about to be run on docker (to avoid trying spawning docker in docker) + if testEnvironment == DockerEnvironment { + t.Skip("Skip test spawning docker containers on docker") + } + if _, err := whichNonFatal("docker"); err != nil { + t.Skip("Skip test where docker is unavailable") + } + if !IsDedicatedNode(dedicatedADNodeForTestsEnv) { + t.Skip("Skip test when not run in dedicated env") + } + + outputDir := t.TempDir() + defer os.RemoveAll(outputDir) + test, err := newTestModule(t, nil, []*rules.RuleDefinition{}, testOpts{ + enableActivityDump: true, + activityDumpRateLimiter: testActivityDumpRateLimiter, + activityDumpTracedCgroupsCount: testActivityDumpTracedCgroupsCount, + activityDumpCgroupDumpTimeout: testActivityDumpCgroupDumpTimeout, + activityDumpLocalStorageDirectory: outputDir, + activityDumpLocalStorageCompression: false, + activityDumpLocalStorageFormats: expectedFormats, + activityDumpTracedEventTypes: testActivityDumpTracedEventTypes, + }) + if err != nil { + t.Fatal(err) + } + defer test.Close() + syscallTester, err := loadSyscallTester(t, test, "syscall_tester") + if err != nil { + t.Fatal(err) + } + + // first, stop all running activity dumps + err = test.StopAllActivityDumps() + if err != nil { + t.Fatal("Can't stop all running activity dumps") + } + + dockerInstance, dump, err := test.StartADockerGetDump() + if err != nil { + t.Fatal(err) + } + defer dockerInstance.stop() + + for activeEventTypes := probe.TracedEventTypesReductionOrder; ; activeEventTypes = activeEventTypes[1:] { + // add all event types to the dump + test.addAllEventTypesOnDump(dockerInstance, dump, syscallTester) + time.Sleep(time.Second * 3) + // trigg reducer + test.triggerLoadControlerReducer(dockerInstance, dump) + // find the new dump + nextDump, err := test.findNextPartialDump(dockerInstance, dump) + if err != nil { + t.Fatal(err) + } + + // extract all present event types present on the first dump + presentEventTypes, err := test.extractAllDumpEventTypes(dump) + if err != nil { + t.Fatal(err) + } + if !isEventTypesStringSlicesEqual(activeEventTypes, presentEventTypes) { + t.Fatalf("Dump's event types are different as expected (%v) vs (%v)", activeEventTypes, presentEventTypes) + } + if len(activeEventTypes) == 0 { + break + } + dump = nextDump + } +} + +func TestActivityDumpsLoadControllerRateLimiter(t *testing.T) { + // skip test that are about to be run on docker (to avoid trying spawning docker in docker) + if testEnvironment == DockerEnvironment { + t.Skip("Skip test spawning docker containers on docker") + } + if _, err := whichNonFatal("docker"); err != nil { + t.Skip("Skip test where docker is unavailable") + } + if !IsDedicatedNode(dedicatedADNodeForTestsEnv) { + t.Skip("Skip test when not run in dedicated env") + } + + outputDir := t.TempDir() + defer os.RemoveAll(outputDir) + test, err := newTestModule(t, nil, []*rules.RuleDefinition{}, testOpts{ + enableActivityDump: true, + activityDumpRateLimiter: testActivityDumpRateLimiter, + activityDumpTracedCgroupsCount: testActivityDumpTracedCgroupsCount, + activityDumpCgroupDumpTimeout: testActivityDumpCgroupDumpTimeout, + activityDumpLocalStorageDirectory: outputDir, + activityDumpLocalStorageCompression: false, + activityDumpLocalStorageFormats: expectedFormats, + activityDumpTracedEventTypes: testActivityDumpTracedEventTypes, + }) + if err != nil { + t.Fatal(err) + } + defer test.Close() + syscallTester, err := loadSyscallTester(t, test, "syscall_tester") + if err != nil { + t.Fatal(err) + } + + // first, stop all running activity dumps + err = test.StopAllActivityDumps() + if err != nil { + t.Fatal("Can't stop all running activity dumps") + } + + dockerInstance, dump, err := test.StartADockerGetDump() + if err != nil { + t.Fatal(err) + } + defer dockerInstance.stop() + + // burst file creation + testDir := filepath.Join(test.Root(), "ratelimiter") + os.MkdirAll(testDir, os.ModePerm) + test.dockerCreateFiles(dockerInstance, syscallTester, testDir, testActivityDumpRateLimiter*2) + time.Sleep(time.Second * 3) + // trigg reducer + test.triggerLoadControlerReducer(dockerInstance, dump) + // find the new dump, with ratelimiter *= 3/4 + secondDump, err := test.findNextPartialDump(dockerInstance, dump) + if err != nil { + t.Fatal(err) + } + + // find the number of files creation that were added to the dump + numberOfFiles, err := test.findNumberOfExistingDirectoryFiles(dump, testDir) + if err != nil { + t.Fatal(err) + } + if numberOfFiles < testActivityDumpRateLimiter/4 || numberOfFiles > testActivityDumpRateLimiter { + t.Fatalf("number of files not expected (%d) with %d ratelimiter\n", numberOfFiles, testActivityDumpRateLimiter) + } + + dump = secondDump + // burst file creation + test.dockerCreateFiles(dockerInstance, syscallTester, testDir, testActivityDumpRateLimiter*2) + time.Sleep(time.Second * 3) + // trigg reducer + test.triggerLoadControlerReducer(dockerInstance, dump) + // find the new dump, with ratelimiter *= 3/4 + _, err = test.findNextPartialDump(dockerInstance, dump) + if err != nil { + t.Fatal(err) + } + // find the number of files creation that were added to the dump + numberOfFiles, err = test.findNumberOfExistingDirectoryFiles(dump, testDir) + if err != nil { + t.Fatal(err) + } + newRateLimiter := testActivityDumpRateLimiter / 4 * 3 + if numberOfFiles < newRateLimiter/4 || numberOfFiles > newRateLimiter { + t.Fatalf("number of files not expected (%d) with %d ratelimiter\n", numberOfFiles, newRateLimiter) + } +} + +func isEventTypesStringSlicesEqual(slice1 []model.EventType, slice2 []string) bool { + if len(slice1) != len(slice2) { + return false + } +firstLoop: + for _, s1 := range slice1 { + for _, s2 := range slice2 { + if s1.String() == s2 { + continue firstLoop + } + } + return false + } + return true +} + +func isListOfDumpsEqual(list1, list2 []*activityDumpIdentifier) bool { + if len(list1) != len(list2) { + return false + } +firstLoop: + for _, l1 := range list1 { + for _, l2 := range list2 { + if l1.Name == l2.Name { + continue firstLoop + } + } + return false + } + return true +} diff --git a/pkg/security/tests/bind_test.go b/pkg/security/tests/bind_test.go index 602fc67af9377..19569d29aaa09 100644 --- a/pkg/security/tests/bind_test.go +++ b/pkg/security/tests/bind_test.go @@ -17,7 +17,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -59,7 +59,7 @@ func TestBindEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bind", event.GetType(), "wrong event type") assert.Equal(t, uint16(unix.AF_INET), event.Bind.AddrFamily, "wrong address family") assert.Equal(t, uint16(4242), event.Bind.Addr.Port, "wrong address port") @@ -83,7 +83,7 @@ func TestBindEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bind", event.GetType(), "wrong event type") assert.Equal(t, uint16(unix.AF_INET), event.Bind.AddrFamily, "wrong address family") assert.Equal(t, uint16(4242), event.Bind.Addr.Port, "wrong address port") @@ -107,7 +107,7 @@ func TestBindEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bind", event.GetType(), "wrong event type") assert.Equal(t, uint16(unix.AF_INET6), event.Bind.AddrFamily, "wrong address family") assert.Equal(t, uint16(4242), event.Bind.Addr.Port, "wrong address port") @@ -131,7 +131,7 @@ func TestBindEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bind", event.GetType(), "wrong event type") assert.Equal(t, uint16(unix.AF_UNIX), event.Bind.AddrFamily, "wrong address family") assert.Equal(t, uint16(0), event.Bind.Addr.Port, "wrong address port") diff --git a/pkg/security/tests/bpf_test.go b/pkg/security/tests/bpf_test.go index 0df5a8af9f6cd..815fc1247177a 100644 --- a/pkg/security/tests/bpf_test.go +++ b/pkg/security/tests/bpf_test.go @@ -14,7 +14,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -45,7 +44,7 @@ func TestBPFEventLoad(t *testing.T) { t.Run("prog_load", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "-load-bpf") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bpf", event.GetType(), "wrong event type") assert.Equal(t, uint32(model.BpfProgTypeKprobe), event.BPF.Program.Type, "wrong program type") @@ -82,7 +81,7 @@ func TestBPFEventMap(t *testing.T) { t.Run("map_lookup", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "-load-bpf", "-clone-bpf") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bpf", event.GetType(), "wrong event type") assert.Equal(t, uint32(model.BpfMapTypeHash), event.BPF.Map.Type, "wrong map type") diff --git a/pkg/security/tests/chmod_test.go b/pkg/security/tests/chmod_test.go index 0892a7472cce8..8aa10ac9fac69 100644 --- a/pkg/security/tests/chmod_test.go +++ b/pkg/security/tests/chmod_test.go @@ -15,7 +15,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -54,7 +54,7 @@ func TestChmod(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chmod", event.GetType(), "wrong event type") assertRights(t, uint16(event.Chmod.Mode), 0o707) assert.Equal(t, getInode(t, testFile), event.Chmod.File.Inode, "wrong inode") @@ -77,7 +77,7 @@ func TestChmod(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chmod", event.GetType(), "wrong event type") assertRights(t, uint16(event.Chmod.Mode), 0o757) assert.Equal(t, getInode(t, testFile), event.Chmod.File.Inode, "wrong inode") @@ -98,7 +98,7 @@ func TestChmod(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chmod", event.GetType(), "wrong event type") assertRights(t, uint16(event.Chmod.Mode), 0o717, "wrong mode") assert.Equal(t, getInode(t, testFile), event.Chmod.File.Inode, "wrong inode") diff --git a/pkg/security/tests/chown32_test.go b/pkg/security/tests/chown32_test.go index c24db9f7caa14..8b1f9166fabc7 100644 --- a/pkg/security/tests/chown32_test.go +++ b/pkg/security/tests/chown32_test.go @@ -15,7 +15,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -64,7 +64,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "chown", testFile, "100", "200") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(100), event.Chown.UID, "wrong user") assert.Equal(t, int64(200), event.Chown.GID, "wrong user") @@ -91,7 +91,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "fchown", testFile, "101", "201") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(101), event.Chown.UID, "wrong user") assert.Equal(t, int64(201), event.Chown.GID, "wrong user") @@ -118,7 +118,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "fchownat", testFile, "102", "202") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(102), event.Chown.UID, "wrong user") assert.Equal(t, int64(202), event.Chown.GID, "wrong user") @@ -150,7 +150,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "lchown", testSymlink, "103", "203") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(103), event.Chown.UID, "wrong user") assert.Equal(t, int64(203), event.Chown.GID, "wrong user") @@ -182,7 +182,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "lchown32", testSymlink, "104", "204") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(104), event.Chown.UID, "wrong user") assert.Equal(t, int64(204), event.Chown.GID, "wrong user") @@ -210,7 +210,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "fchown32", testFile, "105", "205") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(105), event.Chown.UID, "wrong user") assert.Equal(t, int64(205), event.Chown.GID, "wrong user") @@ -237,7 +237,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "chown32", testFile, "106", "206") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(106), event.Chown.UID, "wrong user") assert.Equal(t, int64(206), event.Chown.GID, "wrong user") diff --git a/pkg/security/tests/chown_test.go b/pkg/security/tests/chown_test.go index 714a34e2f3e69..51bb1dbae0964 100644 --- a/pkg/security/tests/chown_test.go +++ b/pkg/security/tests/chown_test.go @@ -18,7 +18,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -78,7 +78,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(100), event.Chown.UID, "wrong user") assert.Equal(t, int64(200), event.Chown.GID, "wrong user") @@ -107,7 +107,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(101), event.Chown.UID, "wrong user") assert.Equal(t, int64(201), event.Chown.GID, "wrong user") @@ -145,7 +145,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assertTriggeredRule(t, rule, "test_rule2") assert.Equal(t, int64(102), event.Chown.UID, "wrong user") @@ -172,7 +172,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(103), event.Chown.UID, "wrong user") assert.Equal(t, int64(203), event.Chown.GID, "wrong user") @@ -199,7 +199,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assertTriggeredRule(t, r, "test_rule3") assert.Equal(t, int64(104), event.Chown.UID, "wrong user") @@ -221,7 +221,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assertTriggeredRule(t, r, "test_rule4") assert.Equal(t, int64(-1), event.Chown.UID, "wrong user") @@ -246,7 +246,7 @@ func TestChown(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { t.Error("Event received") }) }) diff --git a/pkg/security/tests/cmdwrapper.go b/pkg/security/tests/cmdwrapper.go index 8fe7ba1cb5244..6048a65f087b8 100644 --- a/pkg/security/tests/cmdwrapper.go +++ b/pkg/security/tests/cmdwrapper.go @@ -71,7 +71,8 @@ func newStdCmdWrapper() *stdCmdWrapper { type dockerCmdWrapper struct { executable string - root string + mountSrc string + mountDest string containerName string containerID string image string @@ -93,7 +94,7 @@ func (d *dockerCmdWrapper) Command(bin string, args []string, envs []string) *ex func (d *dockerCmdWrapper) start() ([]byte, error) { d.containerName = fmt.Sprintf("docker-wrapper-%s", eval.RandString(6)) - cmd := exec.Command(d.executable, "run", "--rm", "-d", "--name", d.containerName, "-v", d.root+":"+d.root, d.image, "sleep", "600") + cmd := exec.Command(d.executable, "run", "--rm", "-d", "--name", d.containerName, "-v", d.mountSrc+":"+d.mountDest, d.image, "sleep", "600") out, err := cmd.CombinedOutput() if err == nil { d.containerID = strings.TrimSpace(string(out)) @@ -140,7 +141,7 @@ func (d *dockerCmdWrapper) selectImageFromLibrary(kind string) error { return err } -func newDockerCmdWrapper(root string, kind string) (*dockerCmdWrapper, error) { +func newDockerCmdWrapper(mountSrc, mountDest string, kind string) (*dockerCmdWrapper, error) { executable, err := exec.LookPath("docker") if err != nil { return nil, err @@ -154,7 +155,8 @@ func newDockerCmdWrapper(root string, kind string) (*dockerCmdWrapper, error) { wrapper := &dockerCmdWrapper{ executable: executable, - root: root, + mountSrc: mountSrc, + mountDest: mountDest, } if err := wrapper.selectImageFromLibrary(kind); err != nil { diff --git a/pkg/security/tests/dentry_test.go b/pkg/security/tests/dentry_test.go index 24b0baf018ab9..1b07c0eb4dfed 100644 --- a/pkg/security/tests/dentry_test.go +++ b/pkg/security/tests/dentry_test.go @@ -19,13 +19,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" "github.com/DataDog/datadog-agent/pkg/security/metrics" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/probe/resolvers" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) -func validateResolution(test *testModule, event *sprobe.Event, testFile string, pathFnc func(uint32, uint64, uint32, bool) (string, error), parentFnc func(uint32, uint64, uint32) (uint32, uint64, error), nameFnc func(uint32, uint64, uint32) (string, error)) { +func validateResolution(test *testModule, event *model.Event, testFile string, pathFnc func(uint32, uint64, uint32, bool) (string, error), parentFnc func(uint32, uint64, uint32) (uint32, uint64, error), nameFnc func(uint32, uint64, uint32) (string, error)) { basename := path.Base(testFile) // Force an eRPC resolution to refresh the entry with the last generation as lost events may have invalidated the entry @@ -103,7 +102,7 @@ func TestDentryResolutionERPC(t *testing.T) { test.WaitSignal(t, func() error { _, err = os.Create(testFile) return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_erpc_rule") test.module.SendStats() @@ -157,7 +156,7 @@ func TestDentryResolutionMap(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_map_rule") test.module.SendStats() @@ -207,7 +206,7 @@ func BenchmarkERPCDentryResolutionSegment(b *testing.B) { return err } return syscall.Close(fd) - }, func(event *sprobe.Event, _ *rules.Rule) { + }, func(event *model.Event, _ *rules.Rule) { mountID = event.Open.File.MountID inode = event.Open.File.Inode pathID = event.Open.File.PathID @@ -276,7 +275,7 @@ func BenchmarkERPCDentryResolutionPath(b *testing.B) { return err } return syscall.Close(fd) - }, func(event *sprobe.Event, _ *rules.Rule) { + }, func(event *model.Event, _ *rules.Rule) { mountID = event.Open.File.MountID inode = event.Open.File.Inode pathID = event.Open.File.PathID @@ -345,7 +344,7 @@ func BenchmarkMapDentryResolutionSegment(b *testing.B) { return err } return syscall.Close(fd) - }, func(event *sprobe.Event, _ *rules.Rule) { + }, func(event *model.Event, _ *rules.Rule) { mountID = event.Open.File.MountID inode = event.Open.File.Inode pathID = event.Open.File.PathID @@ -414,7 +413,7 @@ func BenchmarkMapDentryResolutionPath(b *testing.B) { return err } return syscall.Close(fd) - }, func(event *sprobe.Event, _ *rules.Rule) { + }, func(event *model.Event, _ *rules.Rule) { mountID = event.Open.File.MountID inode = event.Open.File.Inode pathID = event.Open.File.PathID diff --git a/pkg/security/tests/discarders_stress_test.go b/pkg/security/tests/discarders_stress_test.go new file mode 100644 index 0000000000000..a7c1707f297c8 --- /dev/null +++ b/pkg/security/tests/discarders_stress_test.go @@ -0,0 +1,250 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build stresstests +// +build stresstests + +package tests + +import ( + "flag" + "fmt" + "os" + "runtime" + "runtime/pprof" + "strings" + "testing" + "time" + + "github.com/DataDog/datadog-agent/pkg/security/metrics" + "github.com/DataDog/datadog-agent/pkg/security/secl/rules" +) + +var ( + nbDiscardersRuns int + testDuration time.Duration + maxTotalFiles int + eventsPerSec int + mountDir bool + mountParentDir bool + remountEvery time.Duration + maxDepth int + memTopFrom string + open bool +) + +type metric struct { + vals []int64 + min int64 + max int64 + avg int64 +} + +func computeMetrics(metrics map[string]*metric) { + for _, metric := range metrics { + metric.min = metric.vals[0] + metric.max = metric.vals[0] + total := metric.vals[0] + for _, val := range metric.vals[1:] { + if val > metric.max { + metric.max = val + } else if val < metric.min { + metric.min = val + } + total += val + } + metric.avg = int64(total / int64(len(metric.vals))) + } +} + +func dumpMetrics(metrics map[string]*metric) { + fmt.Printf("\nRESULT METRICS for %d runs of %v: \n", nbDiscardersRuns, testDuration) + for id, metric := range metrics { + if strings.Contains(id, "action.") { + fmt.Printf("%s: %d (min: %d, max: %d)\n", id, metric.avg, metric.min, metric.max) + } + } + fmt.Printf("---\n") + for id, metric := range metrics { + if strings.Contains(id, "datadog.") { + fmt.Printf("%s: %d (min: %d, max: %d)\n", id, metric.avg, metric.min, metric.max) + } + } + fmt.Printf("---\n") + for id, metric := range metrics { + if strings.Contains(id, "mem.") { + fmt.Printf("%s: %d (min: %d, max: %d)\n", id, metric.avg, metric.min, metric.max) + } + } +} + +func addMetricVal(ms map[string]*metric, key string, val int64) { + m := ms[key] + if m == nil { + m = &metric{} + ms[key] = m + } + m.vals = append(m.vals, val) +} + +func addResultMetrics(res *EstimatedResult, metrics map[string]*metric) { + addMetricVal(metrics, "action.file_creation", res.FileCreation) + addMetricVal(metrics, "action.file_access", res.FileAccess) + addMetricVal(metrics, "action.file_deletion", res.FileDeletion) +} + +func addMemoryMetrics(t *testing.T, test *testModule, metrics map[string]*metric) error { + runtime.GC() + proMemFile, err := os.CreateTemp("/tmp", "stress-mem-") + if err != nil { + t.Error(err) + return err + } + + if err := pprof.WriteHeapProfile(proMemFile); err != nil { + t.Error(err) + return err + } + + topDataMem, err := getTopData(proMemFile.Name(), memTopFrom, 50) + if err != nil { + t.Error(err) + return err + } + + fmt.Printf("\nMemory report:\n%s\n", string(topDataMem)) + return nil +} + +func addModuleMetrics(test *testModule, ms map[string]*metric) { + test.module.SendStats() + test.module.SendStats() + + fmt.Printf("Metrics:\n") + + key := metrics.MetricDiscarderAdded + ":event_type:open" + val := test.statsdClient.Get(key) + key = metrics.MetricDiscarderAdded + ":event_type:unlink" + val += test.statsdClient.Get(key) + fmt.Printf(" %s:event_type:* %d\n", metrics.MetricDiscarderAdded, val) + addMetricVal(ms, metrics.MetricDiscarderAdded, val) + + key = metrics.MetricEventDiscarded + ":event_type:open" + val = test.statsdClient.Get(key) + key = metrics.MetricEventDiscarded + ":event_type:unlink" + val += test.statsdClient.Get(key) + fmt.Printf(" %s:event_type:* %d\n", metrics.MetricEventDiscarded, val) + addMetricVal(ms, metrics.MetricEventDiscarded, val) + + key = metrics.MetricPerfBufferEventsWrite + ":event_type:open" + val = test.statsdClient.Get(key) + key = metrics.MetricPerfBufferEventsWrite + ":event_type:unlink" + val += test.statsdClient.Get(key) + fmt.Printf(" %s:event_type:* %d\n", metrics.MetricPerfBufferEventsWrite, val) + addMetricVal(ms, metrics.MetricPerfBufferEventsWrite, val) + + key = metrics.MetricPerfBufferEventsRead + ":event_type:open" + val = test.statsdClient.Get(key) + key = metrics.MetricPerfBufferEventsRead + ":event_type:unlink" + val += test.statsdClient.Get(key) + fmt.Printf(" %s:event_type:* %d\n", metrics.MetricPerfBufferEventsRead, val) + addMetricVal(ms, metrics.MetricPerfBufferEventsRead, val) + + for _, key = range []string{ + metrics.MetricPerfBufferBytesWrite + ":map:events", + metrics.MetricPerfBufferBytesRead + ":map:events", + metrics.MetricDentryResolverHits + ":type:cache", + metrics.MetricDentryResolverMiss + ":type:cache", + } { + val = test.statsdClient.Get(key) + fmt.Printf(" %s: %d\n", key, val) + addMetricVal(ms, key, val) + } +} + +// goal: measure the performance behavior of discarders on load +func runTestDiscarders(t *testing.T, metrics map[string]*metric) { + rules := []*rules.RuleDefinition{ + { + ID: "rule", + Expression: fmt.Sprintf(`open.file.path =~ "{{.Root}}/files_generator_root/%s/no-approver-*"`, noDiscardersDirName), + }, + { + ID: "rule2", + Expression: fmt.Sprintf(`unlink.file.path =~ "{{.Root}}/files_generator_root/%s/no-approver-*"`, noDiscardersDirName), + }, + } + test, err := newTestModule(t, nil, rules, testOpts{enableActivityDump: false}) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + rootPath, _, err := test.Path("files_generator_root") + if err != nil { + t.Fatal(err) + } + fileGen, err := NewFileGenerator(rootPath) + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(rootPath) + + err = fileGen.PrepareFileGenerator(FileGeneratorConfig{ + id: "parent_mount", + TestDuration: testDuration, + Debug: false, + MaxTotalFiles: maxTotalFiles, + EventsPerSec: eventsPerSec, + MountDir: mountDir, + MountParentDir: mountParentDir, + RemountEvery: remountEvery, + MaxDepth: maxDepth, + Open: open, + }) + if err != nil { + t.Fatal(err) + } + if err := fileGen.Start(); err != nil { + t.Fatal(err) + } + res, err := fileGen.Wait() + if err != nil { + t.Fatal(err) + } + + fmt.Printf("Test result:\n") + res.Print() + addResultMetrics(res, metrics) + res = nil + + addModuleMetrics(test, metrics) + addMemoryMetrics(t, test, metrics) +} + +// goal: measure the performance behavior of discarders on load +func TestDiscarders(t *testing.T) { + metrics := make(map[string]*metric) + + for i := 0; i < nbDiscardersRuns; i++ { + fmt.Printf("\nRUN: %d\n", i+1) + runTestDiscarders(t, metrics) + } + computeMetrics(metrics) + dumpMetrics(metrics) +} + +func init() { + flag.IntVar(&nbDiscardersRuns, "nb_discarders_runs", 5, "number of tests to run") + flag.DurationVar(&testDuration, "test_duration", time.Second*60*5, "duration of the test") + flag.IntVar(&maxTotalFiles, "max_total_files", 10000, "maximum number of files") + flag.IntVar(&eventsPerSec, "events_per_sec", 2000, "max events per sec") + flag.BoolVar(&mountDir, "mount_dir", true, "set to true to have a working directory tmpfs mounted") + flag.BoolVar(&mountParentDir, "mount_parent_dir", false, "set to true to have a parent working directory tmpfs mounted") + flag.DurationVar(&remountEvery, "remount_every", time.Second*60*3, "time between every mount points umount/remount") + flag.IntVar(&maxDepth, "max_depth", 1, "directories max depth") + flag.StringVar(&memTopFrom, "memory top from", "probe", "set to the package to filter for mem stats") + flag.BoolVar(&open, "open", true, "true to enable randomly open events") +} diff --git a/pkg/security/tests/dns_test.go b/pkg/security/tests/dns_test.go index bac933332426c..158ed25fc0edb 100644 --- a/pkg/security/tests/dns_test.go +++ b/pkg/security/tests/dns_test.go @@ -20,7 +20,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -65,7 +65,7 @@ func TestDNS(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_dns") assert.Equal(t, "google.com", event.DNS.Name, "wrong domain name") @@ -82,7 +82,7 @@ func TestDNS(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_dns") assert.Equal(t, "GOOGLE.COM", event.DNS.Name, "wrong domain name") @@ -97,7 +97,7 @@ func TestDNS(t *testing.T) { test.WaitSignal(t, func() error { net.LookupIP(longDomain) return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_long_query") assert.Equal(t, "dns", event.GetType(), "wrong event type") assert.Equal(t, longDomain, event.DNS.Name, "wrong domain name") diff --git a/pkg/security/tests/event_monitoring_test.go b/pkg/security/tests/event_monitoring_test.go new file mode 100644 index 0000000000000..7dcd5cb284860 --- /dev/null +++ b/pkg/security/tests/event_monitoring_test.go @@ -0,0 +1,106 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build functionaltests +// +build functionaltests + +package tests + +import ( + "os/exec" + "testing" + "time" + + pmodel "github.com/DataDog/datadog-agent/pkg/process/events/model" + "github.com/stretchr/testify/assert" +) + +func TestProcessMonitoringDisabled(t *testing.T) { + test, err := newTestModule(t, nil, nil, testOpts{}) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + t.Run("no-event", func(t *testing.T) { + lsExecutable := which(t, "ls") + + err = test.GetProcessEvent(func() error { + cmd := exec.Command(lsExecutable) + return cmd.Run() + }, func(event *pmodel.ProcessEvent) bool { + t.Fatal("shouldn't get a process event") + return true + }, 3*time.Second, "") + if err == nil { + t.Fatal("shouldn't get a process event") + } else if otherErr, ok := err.(ErrTimeout); !ok { + t.Fatal(otherErr) + } + }) +} + +func TestProcessMonitoring(t *testing.T) { + test, err := newTestModule(t, nil, nil, testOpts{ + disableRuntimeSecurity: true, + enableEventMonitoring: true, + }) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + syscallTester, err := loadSyscallTester(t, test, "syscall_tester") + if err != nil { + t.Fatal(err) + } + + t.Run("fork", func(t *testing.T) { + err = test.GetProcessEvent(func() error { + cmd := exec.Command(syscallTester, "fork") + return cmd.Run() + }, func(event *pmodel.ProcessEvent) bool { + return assert.Equal(t, pmodel.Fork.String(), event.EventType.String(), "wrong process event type") && + assert.Equal(t, syscallTester, event.Exe, "wrong executable name") && + assert.Equal(t, []string{syscallTester, "fork"}, event.Cmdline, "wrong command line") && + assertNearTimeObject(t, event.ForkTime) + }, getEventTimeout, syscallTester, pmodel.Fork) + if err != nil { + t.Fatal(err) + } + }) + + t.Run("exec", func(t *testing.T) { + err = test.GetProcessEvent(func() error { + cmd := exec.Command(syscallTester, "check") + return cmd.Run() + }, func(event *pmodel.ProcessEvent) bool { + return assert.Equal(t, pmodel.Exec.String(), event.EventType.String(), "wrong process event type") && + assert.Equal(t, syscallTester, event.Exe, "wrong executable name") && + assert.Equal(t, []string{syscallTester, "check"}, event.Cmdline, "wrong command line") && + assertNearTimeObject(t, event.ExecTime) + }, getEventTimeout, syscallTester, pmodel.Exec) + if err != nil { + t.Fatal(err) + } + }) + + t.Run("exit", func(t *testing.T) { + err = test.GetProcessEvent(func() error { + cmd := exec.Command(syscallTester, "this-is-a-non-existing-command") + _ = cmd.Run() + return nil + }, func(event *pmodel.ProcessEvent) bool { + return assert.Equal(t, pmodel.Exit.String(), event.EventType.String(), "wrong process event type") && + assert.Equal(t, syscallTester, event.Exe, "wrong executable name") && + assert.Equal(t, []string{syscallTester, "this-is-a-non-existing-command"}, event.Cmdline, "wrong command line") && + assertNearTimeObject(t, event.ExitTime) && + assert.Equal(t, uint32(1), event.ExitCode, "wrong exit code") + }, getEventTimeout, syscallTester, pmodel.Exit) + if err != nil { + t.Fatal(err) + } + }) +} diff --git a/pkg/security/tests/fields_test.go b/pkg/security/tests/fields_test.go index d1c0bc531c220..acffcc110409f 100644 --- a/pkg/security/tests/fields_test.go +++ b/pkg/security/tests/fields_test.go @@ -12,7 +12,7 @@ import ( "os/exec" "testing" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -38,7 +38,7 @@ func TestFieldsResolver(t *testing.T) { test.WaitSignal(t, func() error { _, _, err = test.Create("test-fields") return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_fields_open") event.ResolveFields(false) @@ -54,7 +54,7 @@ func TestFieldsResolver(t *testing.T) { cmd := exec.Command(lsExecutable, "test-fields") _ = cmd.Run() return nil - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_fields_exec") event.ResolveFields(false) diff --git a/pkg/security/tests/files_generator.go b/pkg/security/tests/files_generator.go new file mode 100644 index 0000000000000..bed68d093edc9 --- /dev/null +++ b/pkg/security/tests/files_generator.go @@ -0,0 +1,420 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build functionaltests || stresstests +// +build functionaltests stresstests + +package tests + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "sync" + "time" + + "golang.org/x/sys/unix" + "golang.org/x/time/rate" + + "k8s.io/apimachinery/pkg/util/rand" +) + +const ( + mountDirName = "mount" + parentMountDirName = "parent_mount" + discardersDirName = "discarders" + noDiscardersDirName = "no_discarders" + filePathLen = 10 +) + +type fgMessage int + +const ( + stop fgMessage = iota + start +) + +type FileGenerator struct { + rootPath string + contexts map[string]*FileGeneratorContext + wg sync.WaitGroup +} + +func NewFileGenerator(rootPath string) (*FileGenerator, error) { + if err := os.MkdirAll(rootPath, 0755); err != nil { + return nil, err + } + return &FileGenerator{ + rootPath: rootPath, + contexts: make(map[string]*FileGeneratorContext), + }, nil +} + +type FileGeneratorConfig struct { + id string + TestDuration time.Duration + Debug bool + + // files creation + MaxTotalFiles int + EventsPerSec int + MountDir bool + MountParentDir bool + RemountEvery time.Duration + MaxDepth int + + // select actions to be executed randomly on created files: + Open bool + // Rename bool + // Utimes bool + // Chmod bool + // Chown bool +} + +type FileStat struct { + path string + ino uint64 +} + +type EstimatedResult struct { + FileCreation int64 + FileAccess int64 + FileDeletion int64 + + DiscarderPushed []FileStat + ParentDiscarderPushed []FileStat + EventDiscarded int64 + EventSent int64 +} + +func (es *EstimatedResult) Print() { + fmt.Printf(" == Done:\n") + fmt.Printf(" File creation: %d\n", es.FileCreation) + fmt.Printf(" File access: %d\n", es.FileAccess) + fmt.Printf(" File deletion: %d\n", es.FileDeletion) + fmt.Printf(" == Estimated result:\n") + fmt.Printf(" DiscarderPushed: %d\n", len(es.DiscarderPushed)) + fmt.Printf(" ParentDiscarderPushed: %d\n", len(es.ParentDiscarderPushed)) + fmt.Printf(" EventDiscarded: %d\n", es.EventDiscarded) + fmt.Printf(" EventSent: %d\n", es.EventSent) +} + +func (es *EstimatedResult) add(es2 *EstimatedResult) { + es.DiscarderPushed = append(es.DiscarderPushed, es2.DiscarderPushed...) + es.ParentDiscarderPushed = append(es.ParentDiscarderPushed, es2.ParentDiscarderPushed...) + es.EventDiscarded += es2.EventDiscarded + es.EventSent += es2.EventSent + es.FileCreation += es2.FileCreation + es.FileAccess += es2.FileAccess + es.FileDeletion += es2.FileDeletion +} + +type FileGeneratorContext struct { + config FileGeneratorConfig + rootPath string + mountPoint string + parentMountPoint string + baseDirDiscarders string + baseDirNoDiscarders string + files []string + limiter *rate.Limiter + messages chan fgMessage + result EstimatedResult + firstOpen bool + firstUnlink bool +} + +func (fg *FileGenerator) newFileGeneratorContext(config FileGeneratorConfig) *FileGeneratorContext { + baseDir := fg.rootPath + var mountPoint, parentMountPoint string + if config.MountDir { + if config.MountParentDir { + parentMountPoint = filepath.Join(baseDir, parentMountDirName) + baseDir = filepath.Join(baseDir, parentMountDirName, mountDirName) + } else { + baseDir = filepath.Join(baseDir, mountDirName) + } + mountPoint = baseDir + } + baseDirDiscarders := filepath.Join(baseDir, discardersDirName) + baseDirNoDiscarders := filepath.Join(baseDir, noDiscardersDirName) + + return &FileGeneratorContext{ + config: config, + rootPath: fg.rootPath, + mountPoint: mountPoint, + parentMountPoint: parentMountPoint, + baseDirDiscarders: baseDirDiscarders, + baseDirNoDiscarders: baseDirNoDiscarders, + limiter: rate.NewLimiter(rate.Limit(config.EventsPerSec), 1), + messages: make(chan fgMessage), + } +} + +func (fgc *FileGeneratorContext) Printf(format string, a ...any) { + if fgc.config.Debug { + fmt.Printf(format, a...) + } +} + +func (fgc *FileGeneratorContext) resetFirstStates() { + fgc.firstOpen = true + fgc.firstUnlink = true +} + +func (fgc *FileGeneratorContext) getFileInode(file string) (uint64, error) { + var s unix.Stat_t + if err := unix.Stat(file, &s); err != nil { + fmt.Printf("getFileInode error: %s (%s)\n", err, file) + return 0, err + } + fgc.Printf(" -> Ino: %d for %s\n", s.Ino, file) + return s.Ino, nil +} + +func (fgc *FileGeneratorContext) addFileToMetric(file string, metric *[]FileStat) { + ino, err := fgc.getFileInode(file) + if err != nil { + return + } + *metric = append(*metric, FileStat{ + path: file, + ino: ino, + }) +} + +func (fgc *FileGeneratorContext) generateNewFile() { + var filename string + for depth := rand.Int() % fgc.config.MaxDepth; depth >= 0; depth-- { + filename = filepath.Join(filename, rand.String(filePathLen)) + } + filename += ".txt" + fgc.files = append(fgc.files, filename) + + file := filepath.Join(fgc.baseDirDiscarders, filename) + fgc.Printf("Create: %s\n", file) + _ = os.MkdirAll(filepath.Dir(file), 0755) + _ = os.WriteFile(file, []byte("Is this a discarder?\n"), 0666) + if fgc.firstOpen { + fgc.firstOpen = false + fgc.addFileToMetric(filepath.Dir(file), &fgc.result.ParentDiscarderPushed) + fgc.result.EventSent++ + } else { + fgc.result.EventDiscarded++ + } + + file = filepath.Join(fgc.baseDirNoDiscarders, filename) + fgc.Printf("Create: %s\n", file) + _ = os.MkdirAll(filepath.Dir(file), 0755) + _ = os.WriteFile(file, []byte("Is this a discarder?\n"), 0666) + fgc.addFileToMetric(file, &fgc.result.DiscarderPushed) + fgc.result.EventSent++ + + fgc.result.FileCreation++ +} + +func (fgc *FileGeneratorContext) unlinkFile() { + if len(fgc.files) <= 0 { + return // should not happen + } + index := rand.Int() % len(fgc.files) + randomFile := fgc.files[index] + + file := filepath.Join(fgc.baseDirDiscarders, randomFile) + fgc.Printf("Removing: %s\n", file) + if fgc.firstUnlink { + fgc.firstUnlink = false + fgc.addFileToMetric(filepath.Dir(file), &fgc.result.ParentDiscarderPushed) + fgc.result.EventSent++ + } else { + fgc.result.EventDiscarded++ + } + _ = os.Remove(file) + + file = filepath.Join(fgc.baseDirNoDiscarders, randomFile) + fgc.Printf("Removing: %s\n", file) + _ = os.Remove(file) + fgc.result.EventSent++ + + fgc.result.FileDeletion++ + fgc.files = append(fgc.files[:index], fgc.files[index+1:]...) +} + +func (fgc *FileGeneratorContext) openFile() { + if len(fgc.files) <= 0 { + return // should not happen + } + index := rand.Int() % len(fgc.files) + randomFile := fgc.files[index] + + file := filepath.Join(fgc.baseDirDiscarders, randomFile) + fgc.Printf("Opening: %s\n", file) + _ = os.WriteFile(file, []byte("file opened once!\n"), 0666) + fgc.result.EventDiscarded++ + + file = filepath.Join(fgc.baseDirNoDiscarders, randomFile) + fgc.Printf("Opening: %s\n", file) + _ = os.WriteFile(file, []byte("file opened once!\n"), 0666) + fgc.result.EventDiscarded++ + + fgc.result.FileAccess++ +} + +func (fgc *FileGeneratorContext) doSomething() { + if len(fgc.files) == fgc.config.MaxTotalFiles { + fgc.unlinkFile() + } else if len(fgc.files) < fgc.config.MaxTotalFiles/2 { + fgc.generateNewFile() + } else { + rand := rand.Int() % 3 + if fgc.config.Open && rand == 0 { + fgc.openFile() + } else if rand == 1 { + fgc.generateNewFile() + } else { + fgc.unlinkFile() + } + } + return +} + +func (fgc *FileGeneratorContext) mountParentWordDir() { + if fgc.parentMountPoint == "" { + return + } + fgc.Printf("Mount memfs on %s\n", fgc.parentMountPoint) + _ = os.MkdirAll(fgc.parentMountPoint, 0755) + err := unix.Mount("", fgc.parentMountPoint, "tmpfs", 0, "") + if err != nil { + fmt.Printf("mountParentWordDir error: %s\n", err) + } + fgc.resetFirstStates() +} + +func (fgc *FileGeneratorContext) mountWordDir() { + if fgc.mountPoint == "" { + return + } + fgc.Printf("Mount memfs on %s\n", fgc.mountPoint) + _ = os.MkdirAll(fgc.mountPoint, 0755) + err := unix.Mount("", fgc.mountPoint, "tmpfs", 0, "") + if err != nil { + fmt.Printf("mountWordDir error: %s\n", err) + } + fgc.resetFirstStates() +} + +func (fgc *FileGeneratorContext) unmountParentWordDir() { + if fgc.parentMountPoint == "" { + return + } + fgc.Printf("Unmount %s\n", fgc.parentMountPoint) + err := unix.Unmount(fgc.parentMountPoint, unix.MNT_DETACH) + if err != nil { + fmt.Printf("unmountParentWordDir error: %s\n", err) + } + fgc.files = []string{} +} + +func (fgc *FileGeneratorContext) unmountWordDir() { + if fgc.mountPoint == "" { + return + } + fgc.Printf("Unmount %s\n", fgc.mountPoint) + err := unix.Unmount(fgc.mountPoint, 0) + if err != nil { + fmt.Printf("unmountWordDir error: %s\n", err) + } + fgc.files = []string{} +} + +func (fgc *FileGeneratorContext) start(wg *sync.WaitGroup) { + wg.Add(1) + go func() { + defer wg.Done() + + fgc.mountParentWordDir() + defer fgc.unmountParentWordDir() + fgc.mountWordDir() + defer fgc.unmountWordDir() + remountTicker := time.NewTicker(fgc.config.RemountEvery) + + var testEnd *time.Time = nil + started := false + fgc.resetFirstStates() + for { + if testEnd != nil && time.Now().After(*testEnd) { + fgc.Printf("%s enddd!\n", fgc.config.id) + return + } + + select { + case res := <-fgc.messages: + if res == stop { + fgc.Printf("%s stopped!\n", fgc.config.id) + return // stop + } else if res == start { + fgc.Printf("%s started!\n", fgc.config.id) + t := time.Now().Add(fgc.config.TestDuration) + testEnd = &t + started = true + } + case _ = <-remountTicker.C: + if fgc.parentMountPoint != "" { + fgc.unmountParentWordDir() + } else { + fgc.unmountWordDir() + } + fgc.mountParentWordDir() + fgc.mountWordDir() + case <-time.After(time.Millisecond * 10): + if started && fgc.limiter.Allow() { + fgc.doSomething() + } else { + time.Sleep(time.Millisecond * 100) + } + } + } + }() +} + +func (fg *FileGenerator) PrepareFileGenerator(config FileGeneratorConfig) error { + ctx := fg.newFileGeneratorContext(config) + if fg.contexts[config.id] != nil { + return errors.New("Context ID already present.") + } + fg.contexts[config.id] = ctx + ctx.start(&fg.wg) + return nil +} + +func (fg *FileGenerator) Start() error { + if len(fg.contexts) == 0 { + return errors.New("no prepared contexts") + } + for _, ctx := range fg.contexts { + ctx.Printf("Starting file generator: %s\n", ctx.config.id) + ctx.messages <- start + } + return nil +} + +func (fg *FileGenerator) Wait() (*EstimatedResult, error) { + if len(fg.contexts) == 0 { + return nil, errors.New("no running contexts") + } + + // wait + fg.wg.Wait() + + // get estimated results + var res EstimatedResult + for _, ctx := range fg.contexts { + res.add(&ctx.result) + } + fg.contexts = make(map[string]*FileGeneratorContext) + return &res, nil +} diff --git a/pkg/security/tests/filters_test.go b/pkg/security/tests/filters_test.go index 1a8066be38144..b78c36f0a940e 100644 --- a/pkg/security/tests/filters_test.go +++ b/pkg/security/tests/filters_test.go @@ -183,7 +183,7 @@ func TestFilterOpenLeafDiscarderActivityDump(t *testing.T) { defer os.Remove(testFile) outputDir := t.TempDir() - _, err = test.StartActivityDumpComm(t, "testsuite", outputDir, []string{"protobuf"}) + _, err = test.StartActivityDumpComm("testsuite", outputDir, []string{"protobuf"}) if err != nil { t.Fatal(err) } @@ -206,7 +206,7 @@ func TestFilterOpenLeafDiscarderActivityDump(t *testing.T) { } return syscall.Close(fd) }, func(event eval.Event, field eval.Field, eventType eval.EventType) bool { - e := event.(*probe.Event) + e := event.(*model.Event) if e == nil || (e != nil && e.GetEventType() != model.FileOpenEventType) { return false } @@ -226,7 +226,7 @@ func TestFilterOpenLeafDiscarderActivityDump(t *testing.T) { return err } return syscall.Close(fd) - }, func(event *probe.Event) bool { + }, func(event *model.Event) bool { return event.GetType() == "open" && event.SavedByActivityDumps && event.Open.File.Inode == getInode(t, testFile) @@ -340,7 +340,7 @@ func TestFilterDiscarderMask(t *testing.T) { testFile, testFilePtr, err = test.CreateWithOptions("test-mask", 98, 99, 0o447) return err - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_mask_open_rule") }) @@ -373,7 +373,7 @@ func TestFilterDiscarderMask(t *testing.T) { return err } return f.Close() - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_mask_open_rule") }) })) @@ -637,7 +637,7 @@ func TestFilterDiscarderRetention(t *testing.T) { } return syscall.Close(fd) }, func(event eval.Event, field eval.Field, eventType eval.EventType) bool { - e := event.(*probe.Event) + e := event.(*model.Event) if e == nil || (e != nil && e.GetEventType() != model.FileOpenEventType) { return false } diff --git a/pkg/security/tests/hardlink_test.go b/pkg/security/tests/hardlink_test.go index b727e4985358f..8950c654cfe2a 100644 --- a/pkg/security/tests/hardlink_test.go +++ b/pkg/security/tests/hardlink_test.go @@ -13,7 +13,7 @@ import ( "os/exec" "testing" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -52,7 +52,7 @@ func runHardlinkTests(t *testing.T, opts testOpts) { test.WaitSignal(t, func() error { cmd := exec.Command(testOrigExecutable, "/tmp/test1") return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_orig") }) @@ -70,7 +70,7 @@ func runHardlinkTests(t *testing.T, opts testOpts) { test.WaitSignal(t, func() error { cmd := exec.Command(testNewExecutable, "/tmp/test2") return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_link") }) }) @@ -90,14 +90,14 @@ func runHardlinkTests(t *testing.T, opts testOpts) { test.WaitSignal(t, func() error { cmd := exec.Command(testOrigExecutable, "/tmp/test1") return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_orig") }) test.WaitSignal(t, func() error { cmd := exec.Command(testNewExecutable, "/tmp/test2") return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_link") }) }) diff --git a/pkg/security/tests/kernel_module_test.go b/pkg/security/tests/kernel_module_test.go index 4c2712b5e52bb..78560a5a88814 100644 --- a/pkg/security/tests/kernel_module_test.go +++ b/pkg/security/tests/kernel_module_test.go @@ -20,7 +20,6 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -166,11 +165,13 @@ func TestLoadModule(t *testing.T) { } return unix.DeleteModule(testModuleName, unix.O_NONBLOCK) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "test_load_module_from_memory", r.ID, "invalid rule triggered") - assert.Equal(t, "", event.ResolveFilePath(&event.LoadModule.File), "shouldn't get a path") assert.Equal(t, event.Async, false) + event.ResolveFields(false) + assert.Equal(t, "", event.LoadModule.File.PathnameStr, "shouldn't get a path") + if !validateLoadModuleNoFileSchema(t, event) { t.Error(event.String()) } @@ -191,7 +192,7 @@ func TestLoadModule(t *testing.T) { } return unix.DeleteModule(testModuleName, unix.O_NONBLOCK) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "test_load_module", r.ID, "invalid rule triggered") if !validateLoadModuleSchema(t, event) { @@ -223,7 +224,7 @@ func TestLoadModule(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "test_load_module_kworker", r.ID, "invalid rule triggered") }) }) @@ -284,7 +285,7 @@ func TestUnloadModule(t *testing.T) { } return unix.DeleteModule(testModuleName, unix.O_NONBLOCK) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "test_unload_module", r.ID, "invalid rule triggered") if !validateUnloadModuleSchema(t, event) { diff --git a/pkg/security/tests/link_test.go b/pkg/security/tests/link_test.go index 166a140a47fbc..b093d0323c27d 100644 --- a/pkg/security/tests/link_test.go +++ b/pkg/security/tests/link_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -54,7 +54,7 @@ func TestLink(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "link", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Link.Source.Inode, "wrong inode") assertRights(t, event.Link.Source.Mode, uint16(expectedMode)) @@ -82,7 +82,7 @@ func TestLink(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "link", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Link.Source.Inode, "wrong inode") assertRights(t, event.Link.Source.Mode, uint16(expectedMode)) @@ -138,7 +138,7 @@ func TestLink(t *testing.T) { return fmt.Errorf("failed to create a link with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "link", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Link.Source.Inode, "wrong inode") assertRights(t, event.Link.Source.Mode, uint16(expectedMode)) diff --git a/pkg/security/tests/macros_test.go b/pkg/security/tests/macros_test.go index 97572454db7df..312148c099906 100644 --- a/pkg/security/tests/macros_test.go +++ b/pkg/security/tests/macros_test.go @@ -14,7 +14,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -53,7 +53,7 @@ func TestMacros(t *testing.T) { return err } return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "mkdir", event.GetType(), "wrong event type") }) } diff --git a/pkg/security/tests/mkdir_test.go b/pkg/security/tests/mkdir_test.go index e9ea4839cdbe6..f9c6de0486222 100644 --- a/pkg/security/tests/mkdir_test.go +++ b/pkg/security/tests/mkdir_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -56,7 +56,7 @@ func TestMkdir(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_mkdir") assertRights(t, uint16(event.Mkdir.Mode), mkdirMode) assert.Equal(t, getInode(t, testFile), event.Mkdir.File.Inode, "wrong inode") @@ -79,7 +79,7 @@ func TestMkdir(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_mkdirat") assert.Equal(t, getInode(t, testatFile), event.Mkdir.File.Inode, "wrong inode") assertRights(t, uint16(event.Mkdir.Mode), 0777) @@ -132,7 +132,7 @@ func TestMkdir(t *testing.T) { return fmt.Errorf("failed to create directory with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_mkdirat") assert.Equal(t, getInode(t, testatFile), event.Mkdir.File.Inode, "wrong inode") assertRights(t, uint16(event.Mkdir.Mode), 0777) @@ -182,7 +182,7 @@ func TestMkdirError(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "mkdirat-error", testatFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_mkdirat_error") assert.Equal(t, event.Mkdir.Retval, -int64(syscall.EACCES)) }) diff --git a/pkg/security/tests/mmap_test.go b/pkg/security/tests/mmap_test.go index 402e624447135..8c09422768bc0 100644 --- a/pkg/security/tests/mmap_test.go +++ b/pkg/security/tests/mmap_test.go @@ -16,7 +16,6 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -46,7 +45,7 @@ func TestMMapEvent(t *testing.T) { return fmt.Errorf("couldn't unmap memory segment: %w", err) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "mmap", event.GetType(), "wrong event type") assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE|unix.PROT_EXEC, event.MMap.Protection&(unix.PROT_READ|unix.PROT_WRITE|unix.PROT_EXEC), fmt.Sprintf("wrong protection: %s", model.Protection(event.MMap.Protection))) assert.Equal(t, event.Async, false) diff --git a/pkg/security/tests/module_tester.go b/pkg/security/tests/module_tester.go index 4dd3612ab4829..b2b58b10d330e 100644 --- a/pkg/security/tests/module_tester.go +++ b/pkg/security/tests/module_tester.go @@ -41,10 +41,12 @@ import ( "golang.org/x/sys/unix" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" + pmodel "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/security/api" "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/module" sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" @@ -61,7 +63,8 @@ var ( ) const ( - getEventTimeout = 10 * time.Second + getEventTimeout = 10 * time.Second + filelessExecutionFilenamePrefix = "memfd:" ) type stringSlice []string @@ -75,8 +78,8 @@ system_probe_config: enable_runtime_compiler: true runtime_security_config: - enabled: true - fim_enabled: true + enabled: {{ .RuntimeSecurityEnabled }} + event_monitoring.enabled: {{ .EventMonitoringEnabled }} runtime_compilation: enabled: true remote_tagger: false @@ -90,6 +93,8 @@ runtime_security_config: activity_dump: enabled: true rate_limiter: {{ .ActivityDumpRateLimiter }} + cgroup_dump_timeout: {{ .ActivityDumpCgroupDumpTimeout }} + traced_cgroups_count: {{ .ActivityDumpTracedCgroupsCount }} traced_event_types: {{range .ActivityDumpTracedEventTypes}} - {{.}} {{end}} @@ -181,6 +186,8 @@ type testOpts struct { disableApprovers bool enableActivityDump bool activityDumpRateLimiter int + activityDumpCgroupDumpTimeout int + activityDumpTracedCgroupsCount int activityDumpTracedEventTypes []string activityDumpLocalStorageDirectory string activityDumpLocalStorageCompression bool @@ -191,6 +198,8 @@ type testOpts struct { disableMapDentryResolution bool envsWithValue []string disableAbnormalPathCheck bool + disableRuntimeSecurity bool + enableEventMonitoring bool } func (s *stringSlice) String() string { @@ -207,6 +216,8 @@ func (to testOpts) Equal(opts testOpts) bool { to.disableApprovers == opts.disableApprovers && to.enableActivityDump == opts.enableActivityDump && to.activityDumpRateLimiter == opts.activityDumpRateLimiter && + to.activityDumpCgroupDumpTimeout == opts.activityDumpCgroupDumpTimeout && + to.activityDumpTracedCgroupsCount == opts.activityDumpTracedCgroupsCount && reflect.DeepEqual(to.activityDumpTracedEventTypes, opts.activityDumpTracedEventTypes) && to.activityDumpLocalStorageDirectory == opts.activityDumpLocalStorageDirectory && to.activityDumpLocalStorageCompression == opts.activityDumpLocalStorageCompression && @@ -216,7 +227,10 @@ func (to testOpts) Equal(opts testOpts) bool { to.eventsCountThreshold == opts.eventsCountThreshold && to.disableERPCDentryResolution == opts.disableERPCDentryResolution && to.disableMapDentryResolution == opts.disableMapDentryResolution && - reflect.DeepEqual(to.envsWithValue, opts.envsWithValue) + reflect.DeepEqual(to.envsWithValue, opts.envsWithValue) && + to.disableAbnormalPathCheck == opts.disableAbnormalPathCheck && + to.disableRuntimeSecurity == opts.disableRuntimeSecurity && + to.enableEventMonitoring == opts.enableEventMonitoring } type testModule struct { @@ -235,17 +249,19 @@ type testModule struct { var testMod *testModule -type onRuleHandler func(*sprobe.Event, *rules.Rule) -type onProbeEventHandler func(*sprobe.Event) -type onCustomSendEventHandler func(*rules.Rule, *sprobe.CustomEvent) +type onRuleHandler func(*model.Event, *rules.Rule) +type onProbeEventHandler func(*model.Event) +type onCustomSendEventHandler func(*rules.Rule, *events.CustomEvent) type onDiscarderPushedHandler func(event eval.Event, field eval.Field, eventType eval.EventType) bool +type onProcessEventSendDataHandler func([]byte) type eventHandlers struct { sync.RWMutex - onRuleMatch onRuleHandler - onProbeEvent onProbeEventHandler - onCustomSendEvent onCustomSendEventHandler - onDiscarderPushed onDiscarderPushedHandler + onRuleMatch onRuleHandler + onProbeEvent onProbeEventHandler + onCustomSendEvent onCustomSendEventHandler + onDiscarderPushed onDiscarderPushedHandler + onProcessEventSendData onProcessEventSendDataHandler } //nolint:deadcode,unused @@ -316,16 +332,22 @@ func assertRights(tb testing.TB, actualMode, expectedMode uint16, msgAndArgs ... } //nolint:deadcode,unused -func assertNearTime(tb testing.TB, ns uint64) bool { +func assertNearTimeObject(tb testing.TB, eventTime time.Time) bool { tb.Helper() - now, event := time.Now(), time.Unix(0, int64(ns)) - if event.After(now) || event.Before(now.Add(-1*time.Hour)) { - tb.Errorf("expected time close to %s, got %s", now, event) + now := time.Now() + if eventTime.After(now) || eventTime.Before(now.Add(-1*time.Hour)) { + tb.Errorf("expected time close to %s, got %s", now, eventTime) return false } return true } +//nolint:deadcode,unused +func assertNearTime(tb testing.TB, ns uint64) bool { + tb.Helper() + return assertNearTimeObject(tb, time.Unix(0, int64(ns))) +} + //nolint:deadcode,unused func assertTriggeredRule(tb testing.TB, r *rules.Rule, id string) bool { tb.Helper() @@ -339,7 +361,7 @@ func assertReturnValue(tb testing.TB, retval, expected int64) bool { } //nolint:deadcode,unused -func assertFieldEqual(tb testing.TB, e *sprobe.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { +func assertFieldEqual(tb testing.TB, e *model.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -350,7 +372,18 @@ func assertFieldEqual(tb testing.TB, e *sprobe.Event, field string, value interf } //nolint:deadcode,unused -func assertFieldNotEmpty(tb testing.TB, e *sprobe.Event, field string, msgAndArgs ...interface{}) bool { +func assertFieldNotEqual(tb testing.TB, e *model.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { + tb.Helper() + fieldValue, err := e.GetFieldValue(field) + if err != nil { + tb.Errorf("failed to get field '%s': %s", field, err) + return false + } + return assert.NotEqual(tb, value, fieldValue, msgAndArgs...) +} + +//nolint:deadcode,unused +func assertFieldNotEmpty(tb testing.TB, e *model.Event, field string, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -361,7 +394,7 @@ func assertFieldNotEmpty(tb testing.TB, e *sprobe.Event, field string, msgAndArg } //nolint:deadcode,unused -func assertFieldContains(tb testing.TB, e *sprobe.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { +func assertFieldContains(tb testing.TB, e *model.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -372,7 +405,7 @@ func assertFieldContains(tb testing.TB, e *sprobe.Event, field string, value int } //nolint:deadcode,unused -func assertFieldIsOneOf(tb testing.TB, e *sprobe.Event, field string, possibleValues interface{}, msgAndArgs ...interface{}) bool { +func assertFieldIsOneOf(tb testing.TB, e *model.Event, field string, possibleValues interface{}, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -383,7 +416,7 @@ func assertFieldIsOneOf(tb testing.TB, e *sprobe.Event, field string, possibleVa } //nolint:deadcode,unused -func assertFieldStringArrayIndexedOneOf(tb *testing.T, e *sprobe.Event, field string, index int, values []string, msgAndArgs ...interface{}) bool { +func assertFieldStringArrayIndexedOneOf(tb *testing.T, e *model.Event, field string, index int, values []string, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -400,7 +433,7 @@ func assertFieldStringArrayIndexedOneOf(tb *testing.T, e *sprobe.Event, field st } //nolint:deadcode,unused -func validateProcessContextLineage(tb testing.TB, event *sprobe.Event) bool { +func validateProcessContextLineage(tb testing.TB, event *model.Event) bool { var data interface{} if err := json.Unmarshal([]byte(event.String()), &data); err != nil { tb.Error(err) @@ -453,47 +486,73 @@ func validateProcessContextLineage(tb testing.TB, event *sprobe.Event) bool { } //nolint:deadcode,unused -func validateProcessContextSECL(tb testing.TB, event *sprobe.Event) bool { - fields := []string{ - "process.file.path", +func validateProcessContextSECL(tb testing.TB, event *model.Event) bool { + // Process file name values cannot be blank + nameFields := []string{ "process.file.name", - "process.ancestors.file.path", "process.ancestors.file.name", "process.parent.file.path", "process.parent.file.name", } - for _, field := range fields { + nameFieldValid, hasPath := checkProcessContextFieldsForBlankValues(tb, event, nameFields) + + // Process path values can be blank if the process was a fileless execution + pathFields := []string{ + "process.file.path", + "process.ancestors.file.path", + } + + pathFieldValid := true + if hasPath { + pathFieldValid, _ = checkProcessContextFieldsForBlankValues(tb, event, pathFields) + } + + return nameFieldValid && pathFieldValid +} + +func checkProcessContextFieldsForBlankValues(tb testing.TB, event *model.Event, fieldNamesToCheck []string) (bool, bool) { + validField := true + hasPath := true + + for _, field := range fieldNamesToCheck { fieldValue, err := event.GetFieldValue(field) if err != nil { tb.Errorf("failed to get field '%s': %s", field, err) - return false + validField = false } switch value := fieldValue.(type) { case string: if len(value) == 0 { tb.Errorf("empty value for '%s'", field) - return false + validField = false + } + + if strings.HasSuffix(field, ".name") && strings.HasPrefix(value, filelessExecutionFilenamePrefix) { + hasPath = false } case []string: for _, v := range value { if len(v) == 0 { tb.Errorf("empty value for '%s'", field) - return false + validField = false + } + if strings.HasSuffix(field, ".name") && strings.HasPrefix(v, filelessExecutionFilenamePrefix) { + hasPath = false } } default: tb.Errorf("unknown type value for '%s'", field) - return false + validField = false } } - return true + return validField, hasPath } //nolint:deadcode,unused -func validateProcessContext(tb testing.TB, event *sprobe.Event) { +func validateProcessContext(tb testing.TB, event *model.Event) { if event.ProcessContext.IsKworker { return } @@ -508,16 +567,16 @@ func validateProcessContext(tb testing.TB, event *sprobe.Event) { } //nolint:deadcode,unused -func validateEvent(tb testing.TB, validate func(event *sprobe.Event, rule *rules.Rule)) func(event *sprobe.Event, rule *rules.Rule) { - return func(event *sprobe.Event, rule *rules.Rule) { +func validateEvent(tb testing.TB, validate func(event *model.Event, rule *rules.Rule)) func(event *model.Event, rule *rules.Rule) { + return func(event *model.Event, rule *rules.Rule) { validateProcessContext(tb, event) validate(event, rule) } } //nolint:deadcode,unused -func validateExecEvent(tb *testing.T, kind wrapperType, validate func(event *sprobe.Event, rule *rules.Rule)) func(event *sprobe.Event, rule *rules.Rule) { - return func(event *sprobe.Event, rule *rules.Rule) { +func validateExecEvent(tb *testing.T, kind wrapperType, validate func(event *model.Event, rule *rules.Rule)) func(event *model.Event, rule *rules.Rule) { + return func(event *model.Event, rule *rules.Rule) { validate(event, rule) if kind == dockerWrapperType { @@ -581,6 +640,14 @@ func genTestConfig(dir string, opts testOpts) (*config.Config, error) { opts.activityDumpRateLimiter = 500 } + if opts.activityDumpTracedCgroupsCount == 0 { + opts.activityDumpTracedCgroupsCount = 5 + } + + if opts.activityDumpCgroupDumpTimeout == 0 { + opts.activityDumpTracedCgroupsCount = 30 + } + if len(opts.activityDumpTracedEventTypes) == 0 { opts.activityDumpTracedEventTypes = []string{"exec", "open", "bind", "dns", "syscalls"} } @@ -599,12 +666,19 @@ func genTestConfig(dir string, opts testOpts) (*config.Config, error) { mapDentryResolutionEnabled = false } + runtimeSecurityEnabled := true + if opts.disableRuntimeSecurity { + runtimeSecurityEnabled = false + } + buffer := new(bytes.Buffer) if err := tmpl.Execute(buffer, map[string]interface{}{ "TestPoliciesDir": dir, "DisableApprovers": opts.disableApprovers, "EnableActivityDump": opts.enableActivityDump, "ActivityDumpRateLimiter": opts.activityDumpRateLimiter, + "ActivityDumpCgroupDumpTimeout": opts.activityDumpCgroupDumpTimeout, + "ActivityDumpTracedCgroupsCount": opts.activityDumpTracedCgroupsCount, "ActivityDumpTracedEventTypes": opts.activityDumpTracedEventTypes, "ActivityDumpLocalStorageDirectory": opts.activityDumpLocalStorageDirectory, "ActivityDumpLocalStorageCompression": opts.activityDumpLocalStorageCompression, @@ -615,6 +689,8 @@ func genTestConfig(dir string, opts testOpts) (*config.Config, error) { "LogPatterns": logPatterns, "LogTags": logTags, "EnvsWithValue": opts.envsWithValue, + "RuntimeSecurityEnabled": runtimeSecurityEnabled, + "EventMonitoringEnabled": opts.enableEventMonitoring, }); err != nil { return nil, err } @@ -687,7 +763,7 @@ func newTestModule(t testing.TB, macroDefs []*rules.MacroDefinition, ruleDefs [] if testEnvironment == DockerEnvironment { cmdWrapper = newStdCmdWrapper() } else { - wrapper, err := newDockerCmdWrapper(st.Root(), "ubuntu") + wrapper, err := newDockerCmdWrapper(st.Root(), st.Root(), "ubuntu") if err == nil { cmdWrapper = newMultiCmdWrapper(wrapper, newStdCmdWrapper()) } else { @@ -776,7 +852,7 @@ func newTestModule(t testing.TB, macroDefs []*rules.MacroDefinition, ruleDefs [] return testMod, nil } -func (tm *testModule) HandleEvent(event *sprobe.Event) { +func (tm *testModule) HandleEvent(event *model.Event) { tm.eventHandlers.RLock() defer tm.eventHandlers.RUnlock() @@ -785,21 +861,30 @@ func (tm *testModule) HandleEvent(event *sprobe.Event) { } } -func (tm *testModule) HandleCustomEvent(rule *rules.Rule, event *sprobe.CustomEvent) {} +func (tm *testModule) HandleCustomEvent(rule *rules.Rule, event *events.CustomEvent) {} func (tm *testModule) SendEvent(rule *rules.Rule, event module.Event, extTagsCb func() []string, service string) { tm.eventHandlers.RLock() defer tm.eventHandlers.RUnlock() switch ev := event.(type) { - case *sprobe.Event: - case *sprobe.CustomEvent: + case *model.Event: + case *events.CustomEvent: if tm.eventHandlers.onCustomSendEvent != nil { tm.eventHandlers.onCustomSendEvent(rule, ev) } } } +func (tm *testModule) SendProcessEventData(data []byte) { + tm.eventHandlers.RLock() + defer tm.eventHandlers.RUnlock() + + if tm.eventHandlers.onProcessEventSendData != nil { + tm.eventHandlers.onProcessEventSendData(data) + } +} + func (tm *testModule) Run(t *testing.T, name string, fnc func(t *testing.T, kind wrapperType, cmd func(bin string, args []string, envs []string) *exec.Cmd)) { tm.cmdWrapper.Run(t, name, fnc) } @@ -830,7 +915,7 @@ func (tm *testModule) RuleMatch(rule *rules.Rule, event eval.Event) { tm.eventHandlers.RUnlock() if callback != nil { - callback(event.(*sprobe.Event), rule) + callback(event.(*model.Event), rule) } } @@ -843,7 +928,7 @@ func (tm *testModule) RegisterDiscarderPushedHandler(cb onDiscarderPushedHandler tm.eventHandlers.Unlock() } -func (tm *testModule) NotifyDiscarderPushedCallback(eventType string, event *sprobe.Event, field string) { +func (tm *testModule) NotifyDiscarderPushedCallback(eventType string, event *model.Event, field string) { tm.eventHandlers.RLock() callback := tm.eventHandlers.onDiscarderPushed tm.eventHandlers.RUnlock() @@ -987,7 +1072,7 @@ func (tm *testModule) GetSignal(tb testing.TB, action func() error, cb onRuleHan message := make(chan ActionMessage, 1) failNow := make(chan bool, 1) - tm.RegisterRuleEventHandler(func(e *sprobe.Event, r *rules.Rule) { + tm.RegisterRuleEventHandler(func(e *model.Event, r *rules.Rule) { tb.Helper() select { case <-ctx.Done(): @@ -1032,14 +1117,14 @@ func (tm *testModule) RegisterRuleEventHandler(cb onRuleHandler) { tm.eventHandlers.Unlock() } -func (tm *testModule) GetCustomEventSent(tb testing.TB, action func() error, cb func(rule *rules.Rule, event *sprobe.CustomEvent) bool, timeout time.Duration, eventType ...model.EventType) error { +func (tm *testModule) GetCustomEventSent(tb testing.TB, action func() error, cb func(rule *rules.Rule, event *events.CustomEvent) bool, timeout time.Duration, eventType ...model.EventType) error { tb.Helper() ctx, cancel := context.WithCancel(context.Background()) defer cancel() message := make(chan ActionMessage, 1) - tm.RegisterCustomSendEventHandler(func(rule *rules.Rule, event *sprobe.CustomEvent) { + tm.RegisterCustomSendEventHandler(func(rule *rules.Rule, event *events.CustomEvent) { if len(eventType) > 0 { if event.GetEventType() != eventType[0] { return @@ -1090,13 +1175,19 @@ func (tm *testModule) RegisterCustomSendEventHandler(cb onCustomSendEventHandler tm.eventHandlers.Unlock() } -func (tm *testModule) GetProbeEvent(action func() error, cb func(event *sprobe.Event) bool, timeout time.Duration, eventTypes ...model.EventType) error { +func (tm *testModule) RegisterProcessEventSendDataHandler(cb onProcessEventSendDataHandler) { + tm.eventHandlers.Lock() + tm.eventHandlers.onProcessEventSendData = cb + tm.eventHandlers.Unlock() +} + +func (tm *testModule) GetProbeEvent(action func() error, cb func(event *model.Event) bool, timeout time.Duration, eventTypes ...model.EventType) error { ctx, cancel := context.WithCancel(context.Background()) defer cancel() message := make(chan ActionMessage, 1) - tm.RegisterProbeEventHandler(func(event *sprobe.Event) { + tm.RegisterProbeEventHandler(func(event *model.Event) { if len(eventTypes) > 0 { match := false for _, eventType := range eventTypes { @@ -1146,6 +1237,72 @@ func (tm *testModule) GetProbeEvent(action func() error, cb func(event *sprobe.E } } +func (tm *testModule) GetProcessEvent(action func() error, cb func(event *pmodel.ProcessEvent) bool, timeout time.Duration, executablePath string, eventTypes ...pmodel.EventType) error { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + message := make(chan ActionMessage, 1) + var event pmodel.ProcessEvent + + tm.RegisterProcessEventSendDataHandler(func(data []byte) { + if _, err := event.UnmarshalMsg(data); err != nil { + tm.t.Logf("failed to unmarshall process event: %v\n", err) + return + } + + if len(eventTypes) > 0 { + match := false + for _, eventType := range eventTypes { + if event.EventType == eventType { + match = true + break + } + } + if !match { + return + } + } + + if executablePath != "" && event.Exe != executablePath { + return + } + + select { + case <-ctx.Done(): + return + case msg := <-message: + switch msg { + case Continue: + if cb(&event) { + cancel() + } else { + message <- Continue + } + case Skip: + cancel() + } + } + }) + defer tm.RegisterProcessEventSendDataHandler(nil) + + if action == nil { + message <- Continue + } else { + if err := action(); err != nil { + message <- Skip + return err + } + message <- Continue + } + + select { + case <-time.After(timeout): + return NewTimeoutError(tm.probe) + case <-ctx.Done(): + return nil + } +} + func (tm *testModule) Path(filename ...string) (string, unsafe.Pointer, error) { return tm.st.Path(filename...) } @@ -1267,7 +1424,9 @@ func (tm *testModule) validateAbnormalPaths() { } func (tm *testModule) Close() { - tm.module.SendStats() + if tm.config.RuntimeEnabled { + tm.module.SendStats() + } if !tm.opts.disableAbnormalPathCheck { tm.validateAbnormalPaths() @@ -1430,7 +1589,7 @@ func ifSyscallSupported(syscall string, test func(t *testing.T, syscallNB uintpt // //nolint:deadcode,unused func waitForProbeEvent(test *testModule, action func() error, key string, value interface{}, eventType model.EventType) error { - return test.GetProbeEvent(action, func(event *sprobe.Event) bool { + return test.GetProbeEvent(action, func(event *model.Event) bool { if v, _ := event.GetFieldValue(key); v == value { return true } @@ -1481,7 +1640,7 @@ func checkKernelCompatibility(tb testing.TB, why string, skipCheck func(kv *kern } } -func (tm *testModule) StartActivityDumpComm(t *testing.T, comm string, outputDir string, formats []string) ([]string, error) { +func (tm *testModule) StartActivityDumpComm(comm string, outputDir string, formats []string) ([]string, error) { monitor := tm.probe.GetMonitor() if monitor == nil { return nil, errors.New("No monitor") @@ -1500,8 +1659,7 @@ func (tm *testModule) StartActivityDumpComm(t *testing.T, comm string, outputDir } mess, err := monitor.DumpActivity(p) if err != nil || mess == nil || len(mess.Storage) < 1 { - t.Errorf("failed to start activity dump: %s", err) - return nil, err + return nil, errors.New("failed to start activity dump") } var files []string @@ -1531,10 +1689,11 @@ func (tm *testModule) StopActivityDump(name, containerID, comm string) error { type activityDumpIdentifier struct { Name string ContainerID string + Timeout string OutputFiles []string } -func (tm *testModule) ListActivityDumps() ([]activityDumpIdentifier, error) { +func (tm *testModule) ListActivityDumps() ([]*activityDumpIdentifier, error) { monitor := tm.probe.GetMonitor() if monitor == nil { return nil, errors.New("No monitor") @@ -1545,7 +1704,7 @@ func (tm *testModule) ListActivityDumps() ([]activityDumpIdentifier, error) { return nil, err } - var dumps []activityDumpIdentifier + var dumps []*activityDumpIdentifier for _, dump := range mess.Dumps { var files []string for _, storage := range dump.Storage { @@ -1557,16 +1716,17 @@ func (tm *testModule) ListActivityDumps() ([]activityDumpIdentifier, error) { continue // do not add activity dumps without any local storage files } - dumps = append(dumps, activityDumpIdentifier{ + dumps = append(dumps, &activityDumpIdentifier{ Name: dump.Metadata.Name, ContainerID: dump.Metadata.ContainerID, + Timeout: dump.Metadata.Timeout, OutputFiles: files, }) } return dumps, nil } -func (tm *testModule) DecodeActivityDump(t *testing.T, path string) (*sprobe.ActivityDump, error) { +func (tm *testModule) DecodeActivityDump(path string) (*sprobe.ActivityDump, error) { monitor := tm.probe.GetMonitor() if monitor == nil { return nil, errors.New("No monitor") @@ -1590,7 +1750,7 @@ func (tm *testModule) DecodeActivityDump(t *testing.T, path string) (*sprobe.Act } func (tm *testModule) StartADocker() (*dockerCmdWrapper, error) { - docker, err := newDockerCmdWrapper(tm.st.Root(), "alpine") + docker, err := newDockerCmdWrapper(tm.st.Root(), tm.st.Root(), "alpine") if err != nil { return nil, err } @@ -1614,7 +1774,7 @@ func (tm *testModule) StartADockerGetDump() (*dockerCmdWrapper, *activityDumpIde _, _ = dockerInstance.stop() return nil, nil, err } - dump := findLearningContainer(dumps, dockerInstance.containerID) + dump := findLearningContainerID(dumps, dockerInstance.containerID) if dump == nil { _, _ = dockerInstance.stop() return nil, nil, errors.New("ContainerID not found on activity dump list") @@ -1622,11 +1782,258 @@ func (tm *testModule) StartADockerGetDump() (*dockerCmdWrapper, *activityDumpIde return dockerInstance, dump, nil } -func findLearningContainer(dumps []activityDumpIdentifier, containerID string) *activityDumpIdentifier { +//nolint:deadcode,unused +func findLearningContainerID(dumps []*activityDumpIdentifier, containerID string) *activityDumpIdentifier { for _, dump := range dumps { if dump.ContainerID == containerID { - return &dump + return dump } } return nil } + +//nolint:deadcode,unused +func findLearningContainerName(dumps []*activityDumpIdentifier, name string) *activityDumpIdentifier { + for _, dump := range dumps { + if dump.Name == name { + return dump + } + } + return nil +} + +//nolint:deadcode,unused +func (tm *testModule) isDumpRunning(id *activityDumpIdentifier) bool { + dumps, err := tm.ListActivityDumps() + if err != nil { + return false + } + dump := findLearningContainerName(dumps, id.Name) + if dump == nil { + return false + } + return true +} + +//nolint:deadcode,unused +func (tm *testModule) findCgroupDump(id *activityDumpIdentifier) *activityDumpIdentifier { + dumps, err := tm.ListActivityDumps() + if err != nil { + return nil + } + dump := findLearningContainerID(dumps, id.ContainerID) + if dump == nil { + return nil + } + return dump +} + +//nolint:deadcode,unused +func (tm *testModule) addAllEventTypesOnDump(dockerInstance *dockerCmdWrapper, id *activityDumpIdentifier, syscallTester string) { + // open + cmd := dockerInstance.Command("touch", []string{filepath.Join(tm.Root(), "open")}, []string{}) + _, _ = cmd.CombinedOutput() + + // dns + cmd = dockerInstance.Command("nslookup", []string{"foo.bar"}, []string{}) + _, _ = cmd.CombinedOutput() + + // bind + cmd = dockerInstance.Command(syscallTester, []string{"bind", "AF_INET", "any", "tcp"}, []string{}) + _, _ = cmd.CombinedOutput() + + // syscalls should be added with previous events +} + +//nolint:deadcode,unused +func (tm *testModule) triggerLoadControlerReducer(dockerInstance *dockerCmdWrapper, id *activityDumpIdentifier) { + monitor := tm.probe.GetMonitor() + if monitor == nil { + return + } + adm := monitor.GetActivityDumpManager() + if adm == nil { + return + } + adm.FakeDumpOverweight(id.Name) + + // wait until the dump learning has stopped + for tm.isDumpRunning(id) { + time.Sleep(time.Second * 1) + } +} + +//nolint:deadcode,unused +func (tm *testModule) dockerCreateFiles(dockerInstance *dockerCmdWrapper, syscallTester string, directory string, numberOfFiles int) error { + var files []string + for i := 0; i < numberOfFiles; i++ { + files = append(files, filepath.Join(directory, "ad-test-create-"+fmt.Sprintf("%d", i))) + } + args := []string{"sleep", "2", ";", "open"} + args = append(args, files...) + cmd := dockerInstance.Command(syscallTester, args, []string{}) + _, err := cmd.CombinedOutput() + if err != nil { + return err + } + return nil +} + +//nolint:deadcode,unused +func (tm *testModule) findNextPartialDump(dockerInstance *dockerCmdWrapper, id *activityDumpIdentifier) (*activityDumpIdentifier, error) { + for i := 0; i < 10; i++ { // retry during 5sec + dump := tm.findCgroupDump(id) + if dump != nil { + return dump, nil + } + cmd := dockerInstance.Command("echo", []string{"trying to trigger the dump"}, []string{}) + _, err := cmd.CombinedOutput() + if err != nil { + return nil, err + } + time.Sleep(time.Second * 1) + } + return nil, errors.New("Unable to find the next partial dump") +} + +//nolint:deadcode,unused +func searchForOpen(ad *sprobe.ActivityDump) bool { + for _, node := range ad.ProcessActivityTree { + if len(node.Files) > 0 { + return true + } + } + return false +} + +//nolint:deadcode,unused +func searchForDns(ad *sprobe.ActivityDump) bool { + for _, node := range ad.ProcessActivityTree { + if len(node.DNSNames) > 0 { + return true + } + } + return false +} + +//nolint:deadcode,unused +func searchForBind(ad *sprobe.ActivityDump) bool { + for _, node := range ad.ProcessActivityTree { + if len(node.Sockets) > 0 { + return true + } + } + return false +} + +//nolint:deadcode,unused +func searchForSyscalls(ad *sprobe.ActivityDump) bool { + for _, node := range ad.ProcessActivityTree { + if len(node.Syscalls) > 0 { + return true + } + } + return false +} + +//nolint:deadcode,unused +func (tm *testModule) getADFromDumpId(id *activityDumpIdentifier) (*sprobe.ActivityDump, error) { + var fileProtobuf string + // decode the dump + for _, file := range id.OutputFiles { + if filepath.Ext(file) == ".protobuf" { + fileProtobuf = file + break + } + } + if len(fileProtobuf) < 1 { + return nil, errors.New("protobuf output file not found") + } + ad, err := tm.DecodeActivityDump(fileProtobuf) + if err != nil { + return nil, err + } + return ad, nil +} + +//nolint:deadcode,unused +func (tm *testModule) findNumberOfExistingDirectoryFiles(id *activityDumpIdentifier, testDir string) (int, error) { + ad, err := tm.getADFromDumpId(id) + if err != nil { + return 0, err + } + + var total int + tempPathParts := strings.Split(testDir, "/") + lastDir := filepath.Base(testDir) + +firstLoop: + for _, node := range ad.ProcessActivityTree { + current := node.Files + for _, part := range tempPathParts { + if part == "" { + continue + } + next, found := current[part] + if !found { + continue firstLoop + } + current = next.Children + if part == lastDir { + total += len(current) + continue firstLoop + } + } + } + return total, nil +} + +//nolint:deadcode,unused +func (tm *testModule) extractAllDumpEventTypes(id *activityDumpIdentifier) ([]string, error) { + var res []string + + ad, err := tm.getADFromDumpId(id) + if err != nil { + return res, err + } + + if searchForBind(ad) { + res = append(res, "bind") + } + if searchForDns(ad) { + res = append(res, "dns") + } + if searchForSyscalls(ad) { + res = append(res, "syscalls") + } + if searchForOpen(ad) { + res = append(res, "open") + } + return res, nil +} + +func (tm *testModule) StopAllActivityDumps() error { + dumps, err := tm.ListActivityDumps() + if err != nil { + return err + } + if len(dumps) == 0 { + return nil + } + for _, dump := range dumps { + _ = tm.StopActivityDump(dump.Name, "", "") + } + dumps, err = tm.ListActivityDumps() + if err != nil { + return err + } + if len(dumps) != 0 { + return errors.New("Didn't manage to stop all activity dumps") + } + return nil +} + +func IsDedicatedNode(env string) bool { + _, present := os.LookupEnv(env) + return present +} diff --git a/pkg/security/tests/mount_test.go b/pkg/security/tests/mount_test.go index 64a9c8cfbaf97..5c7e8822d0bc2 100644 --- a/pkg/security/tests/mount_test.go +++ b/pkg/security/tests/mount_test.go @@ -12,16 +12,19 @@ import ( "fmt" "os" "path" + "strings" "syscall" "testing" "time" + "github.com/moby/sys/mountinfo" "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" + "github.com/DataDog/datadog-agent/pkg/security/utils" + "github.com/DataDog/datadog-agent/pkg/util/kernel" ) func TestMount(t *testing.T) { @@ -63,7 +66,7 @@ func TestMount(t *testing.T) { return fmt.Errorf("could not create bind mount: %w", err) } return nil - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { mntID = event.Mount.MountID if !assert.Equal(t, "mount", event.GetType(), "wrong event type") { @@ -71,7 +74,7 @@ func TestMount(t *testing.T) { } // filter by pid - if pce := event.ResolveProcessCacheEntry(); pce.Pid != testSuitePid { + if pce, _ := event.ResolveProcessCacheEntry(); pce.Pid != testSuitePid { return false } @@ -98,7 +101,7 @@ func TestMount(t *testing.T) { test.WaitSignal(t, func() error { return os.Chmod(file, 0707) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "chmod", event.GetType(), "wrong event type") assert.Equal(t, file, event.Chmod.File.PathnameStr, "wrong path") }) @@ -117,13 +120,13 @@ func TestMount(t *testing.T) { return fmt.Errorf("could not unmount test-mount: %w", err) } return nil - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { if !assert.Equal(t, "umount", event.GetType(), "wrong event type") { return true } // filter by process - if pce := event.ResolveProcessCacheEntry(); pce.Pid != testSuitePid { + if pce, _ := event.ResolveProcessCacheEntry(); pce.Pid != testSuitePid { return false } @@ -137,7 +140,7 @@ func TestMount(t *testing.T) { t.Run("release-mount", func(t *testing.T) { test.WaitSignal(t, func() error { return syscall.Fchownat(int(releaseFile.Fd()), "", 123, 123, unix.AT_EMPTY_PATH) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assertTriggeredRule(t, rule, "test_rule_pending") }) @@ -145,6 +148,13 @@ func TestMount(t *testing.T) { } func TestMountPropagated(t *testing.T) { + // - testroot + // / dir1 + // / test-drive (xfs mount) + // / dir-bind-mounted (bind mount of testroot/dir1) + // / test-drive (propagated) + // / test-file + ruleDefs := []*rules.RuleDefinition{{ ID: "test_rule", Expression: fmt.Sprintf(`chmod.file.path == "{{.Root}}/dir1-bind-mounted/test-drive/test-file"`), @@ -162,7 +172,6 @@ func TestMountPropagated(t *testing.T) { } testDrivePath := path.Join(dir1Path, "test-drive") - if err := os.MkdirAll(testDrivePath, 0755); err != nil { t.Fatal(err) } @@ -183,17 +192,23 @@ func TestMountPropagated(t *testing.T) { } defer os.RemoveAll(dir1BindMntPath) - if err := syscall.Mount(dir1Path, dir1BindMntPath, "bind", syscall.MS_BIND|syscall.MS_REC, ""); err != nil { + bindMnt := newTestMount( + dir1BindMntPath, + withSource(dir1Path), + withFlags(syscall.MS_BIND|syscall.MS_REC), + ) + + if err := bindMnt.mount(); err != nil { t.Fatal(err) } defer func() { - testDrivePath := path.Join(dir1BindMntPath, "test-drive") - if err := syscall.Unmount(testDrivePath, syscall.MNT_FORCE); err != nil { - t.Logf("Failed to unmount %s", testDrivePath) + testPropagatedDrivePath := path.Join(dir1BindMntPath, "test-drive") + if err := syscall.Unmount(testPropagatedDrivePath, syscall.MNT_FORCE); err != nil { + t.Logf("Failed to unmount %s", testPropagatedDrivePath) } - if err := syscall.Unmount(dir1BindMntPath, syscall.MNT_FORCE); err != nil { - t.Logf("Failed to unmount %s", dir1BindMntPath) + if err := bindMnt.unmount(syscall.MNT_FORCE); err != nil { + t.Logf("Failed to umount %s", bindMnt.target) } }() @@ -209,10 +224,303 @@ func TestMountPropagated(t *testing.T) { t.Run("bind-mounted-chmod", func(t *testing.T) { test.WaitSignal(t, func() error { return os.Chmod(file, 0700) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { t.Log(event.Open.File.PathnameStr) assert.Equal(t, "chmod", event.GetType(), "wrong event type") assert.Equal(t, file, event.Chmod.File.PathnameStr, "wrong path") }) }) } + +func TestMountSnapshot(t *testing.T) { + // / testDrive + // / rootA + // / tmpfs-mount (tmpfs) + // / test-bind-source + // / test-bind-target (bind mount of test-bind-source) + // / rootB + // ... (same hierarchy as rootA) + // / test-bind-testdrive + + testDrive, err := newTestDrive(t, "xfs", []string{}, "") + if err != nil { + t.Fatal(err) + } + defer testDrive.Close() + + rootA := testDrive.Path("rootA") + rootB := testDrive.Path("rootB") + + createHierarchy := func(root string) (tmpfsMount, bindMount *testMount, err error) { + defer func() { + if err != nil { + if bindMount != nil { + bindMount.unmount(0) + } + if tmpfsMount != nil { + tmpfsMount.unmount(0) + } + } + }() + + tmpfsPath := path.Join(root, "tmpfs-mount") + if err = os.MkdirAll(tmpfsPath, 0755); err != nil { + return nil, nil, err + } + + // tmpfs mount + tmpfsMount = newTestMount( + tmpfsPath, + withFSType("tmpfs"), + ) + + if err := tmpfsMount.mount(); err != nil { + return nil, nil, fmt.Errorf("could not create tmpfs mount: %s", err) + } + + bindSourcePath := tmpfsMount.path("test-bind-source") + if err = os.Mkdir(bindSourcePath, 0755); err != nil { + return nil, nil, err + } + + bindTargetPath := path.Join(root, "test-bind-target") + if err = os.Mkdir(bindTargetPath, 0755); err != nil { + return nil, nil, err + } + + // bind mount + bindMount = newTestMount( + bindTargetPath, + withSource(bindSourcePath), + withFlags(syscall.MS_BIND), + ) + + if err = bindMount.mount(); err != nil { + return nil, nil, fmt.Errorf("could not create bind mount: %s", err) + } + + return + } + + tmpfsMountA, bindMountA, err := createHierarchy(rootA) + if err != nil { + t.Fatal(err) + } + defer tmpfsMountA.unmount(0) + defer bindMountA.unmount(0) + + test, err := newTestModule(t, nil, nil, testOpts{testDir: testDrive.Root()}) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + tmpfsMountB, bindMountB, err := createHierarchy(rootB) + if err != nil { + t.Fatal(err) + } + defer tmpfsMountB.unmount(0) + defer bindMountB.unmount(0) + + mountResolver := test.probe.GetResolvers().MountResolver + pid := uint32(utils.Getpid()) + + mounts, err := kernel.ParseMountInfoFile(int32(pid)) + if err != nil { + t.Fatal(err) + } + + // we need to wait for the mount events of the hierarchy B to be processed + time.Sleep(5 * time.Second) + + checkSnapshotAndModelMatch := func(mntInfo *mountinfo.Info) { + mount, err := mountResolver.ResolveMount(uint32(mntInfo.ID), pid, "") + if err != nil { + t.Errorf(err.Error()) + return + } + assert.Equal(t, uint32(mntInfo.ID), mount.MountID, "snapshot and model mount ID mismatch") + assert.Equal(t, uint32(mntInfo.Parent), mount.ParentMountID, "snapshot and model parent mount ID mismatch") + assert.Equal(t, uint32(unix.Mkdev(uint32(mntInfo.Major), uint32(mntInfo.Minor))), mount.Device, "snapshot and model device mismatch") + assert.Equal(t, mntInfo.FSType, mount.FSType, "snapshot and model fstype mismatch") + assert.Equal(t, mntInfo.Root, mount.RootStr, "snapshot and model root mismatch") + mountPointPath, err := mountResolver.ResolveMountPath(mount.MountID, pid, "") + if err != nil { + t.Errorf("failed to resolve mountpoint path of mountpoint with id %d", mount.MountID) + } + assert.Equal(t, mntInfo.Mountpoint, mountPointPath, "snapshot and model mountpoint path mismatch") + } + + mntResolved := 0 + for _, mntInfo := range mounts { + if strings.HasSuffix(mntInfo.Mountpoint, "rootA/tmpfs-mount") { + mntResolved |= 1 + checkSnapshotAndModelMatch(mntInfo) + } else if strings.HasSuffix(mntInfo.Mountpoint, "rootA/test-bind-target") { + mntResolved |= 2 + checkSnapshotAndModelMatch(mntInfo) + } else if strings.HasSuffix(mntInfo.Mountpoint, "rootB/tmpfs-mount") { + mntResolved |= 4 + checkSnapshotAndModelMatch(mntInfo) + } else if strings.HasSuffix(mntInfo.Mountpoint, "rootB/test-bind-target") { + mntResolved |= 8 + checkSnapshotAndModelMatch(mntInfo) + } + } + assert.Equal(t, 1|2|4|8, mntResolved) +} + +func TestMountEvent(t *testing.T) { + executable, err := os.Executable() + if err != nil { + t.Fatal(err) + } + + testDrive, err := newTestDrive(t, "xfs", []string{}, "") + if err != nil { + t.Fatal(err) + } + defer testDrive.Close() + + tmpfsMountPointName := "tmpfs_mnt" + bindMountPointName := "bind_mnt" + bindMountSourceName := "bind_src" + + ruleDefs := []*rules.RuleDefinition{ + { + ID: "test_mount_tmpfs", + Expression: fmt.Sprintf(`mount.mountpoint.path == "{{.Root}}/%s" && mount.fs_type == "tmpfs" && process.file.path == "%s"`, tmpfsMountPointName, executable), + }, + { + ID: "test_mount_bind", + Expression: fmt.Sprintf(`mount.mountpoint.path == "{{.Root}}/%s" && mount.source.path == "{{.Root}}/%s" && mount.fs_type == "%s" && process.file.path == "%s"`, bindMountPointName, bindMountSourceName, testDrive.FSType(), executable), + }, + { + ID: "test_mount_in_container_root", + Expression: `mount.mountpoint.path == "/host_root" && mount.source.path == "/" && mount.fs_type != "overlay" && container.id != ""`, + }, + } + + test, err := newTestModule(t, nil, ruleDefs, testOpts{testDir: testDrive.Root()}) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + tmpfsMountPointPath := testDrive.Path(tmpfsMountPointName) + if err = os.Mkdir(tmpfsMountPointPath, 0755); err != nil { + t.Fatal(err) + } + + bindMountPointPath := testDrive.Path(bindMountPointName) + if err = os.Mkdir(bindMountPointPath, 0755); err != nil { + t.Fatal(err) + } + + bindMountSourcePath := testDrive.Path(bindMountSourceName) + if err = os.Mkdir(bindMountSourcePath, 0755); err != nil { + t.Fatal(err) + } + + t.Run("mount-tmpfs", func(t *testing.T) { + tmpfsMount := newTestMount( + tmpfsMountPointPath, + withFSType("tmpfs"), + ) + + test.WaitSignal(t, func() error { + if err := tmpfsMount.mount(); err != nil { + return err + } + return tmpfsMount.unmount(syscall.MNT_FORCE) + }, func(event *model.Event, rule *rules.Rule) { + assertTriggeredRule(t, rule, "test_mount_tmpfs") + assertFieldEqual(t, event, "mount.mountpoint.path", tmpfsMountPointPath) + assertFieldEqual(t, event, "mount.fs_type", "tmpfs") + assertFieldEqual(t, event, "process.file.path", executable) + if !validateMountSchema(t, event) { + t.Error(event.String()) + } + }) + }) + + t.Run("mount-bind", func(t *testing.T) { + bindMount := newTestMount( + bindMountPointPath, + withSource(bindMountSourcePath), + withFlags(syscall.MS_BIND), + ) + + test.WaitSignal(t, func() error { + if err := bindMount.mount(); err != nil { + return err + } + return bindMount.unmount(syscall.MNT_FORCE) + }, func(event *model.Event, rule *rules.Rule) { + assertTriggeredRule(t, rule, "test_mount_bind") + assertFieldEqual(t, event, "mount.mountpoint.path", bindMountPointPath) + assertFieldEqual(t, event, "mount.source.path", bindMountSourcePath) + assertFieldEqual(t, event, "mount.fs_type", testDrive.FSType()) + assertFieldEqual(t, event, "process.file.path", executable) + if !validateMountSchema(t, event) { + t.Error(event.String()) + } + }) + }) + + const dockerMountDest = "/host_root" + wrapperTruePositive, err := newDockerCmdWrapper("/", dockerMountDest, "alpine") + if err != nil { + t.Skip("Skipping mounts in containers tests: Docker not available") + return + } + + t.Run("mount-in-container-root", func(t *testing.T) { + test.WaitSignal(t, func() error { + if _, err := wrapperTruePositive.start(); err != nil { + return err + } + if _, err := wrapperTruePositive.stop(); err != nil { + return err + } + return nil + }, func(event *model.Event, rule *rules.Rule) { + assertTriggeredRule(t, rule, "test_mount_in_container_root") + assertFieldEqual(t, event, "mount.mountpoint.path", "/host_root") + assertFieldEqual(t, event, "mount.source.path", "/") + assertFieldNotEqual(t, event, "mount.fs_type", "overlay") + assertFieldNotEmpty(t, event, "container.id", "container id shouldn't be empty") + if !validateMountSchema(t, event) { + t.Error(event.String()) + } + }) + }) + + legitimateSourcePath := testDrive.Path("legitimate_source") + if err = os.Mkdir(legitimateSourcePath, 0755); err != nil { + t.Fatal(err) + } + wrapperFalsePositive, err := newDockerCmdWrapper(legitimateSourcePath, dockerMountDest, "alpine") + if err != nil { + t.Fatal(err) + } + + t.Run("mount-in-container-legitimate", func(t *testing.T) { + err = test.GetSignal(t, func() error { + if _, err := wrapperFalsePositive.start(); err != nil { + return err + } + if _, err := wrapperFalsePositive.stop(); err != nil { + return err + } + return nil + }, func(event *model.Event, rule *rules.Rule) { + t.Errorf("shouldn't get an event: event %s matched rule %s", event, rule.Expression) + }) + if err == nil { + t.Error("shouldn't get an event") + } else if otherErr, ok := err.(ErrTimeout); !ok { + t.Fatal(otherErr) + } + }) +} diff --git a/pkg/security/tests/mprotect_test.go b/pkg/security/tests/mprotect_test.go index 8b3ba226edbff..8faeb1247c452 100644 --- a/pkg/security/tests/mprotect_test.go +++ b/pkg/security/tests/mprotect_test.go @@ -16,7 +16,6 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -47,7 +46,7 @@ func TestMProtectEvent(t *testing.T) { return fmt.Errorf("couldn't mprotect segment: %w", err) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "mprotect", event.GetType(), "wrong event type") assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE, event.MProtect.VMProtection&(unix.PROT_READ|unix.PROT_WRITE), fmt.Sprintf("wrong initial protection: %s", model.Protection(event.MProtect.VMProtection))) assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE|unix.PROT_EXEC, event.MProtect.ReqProtection&(unix.PROT_READ|unix.PROT_WRITE|unix.PROT_EXEC), fmt.Sprintf("wrong requested protection: %s", model.Protection(event.MProtect.ReqProtection))) diff --git a/pkg/security/tests/network_device_test.go b/pkg/security/tests/network_device_test.go index ac55f2db93972..531ea5d4f016d 100644 --- a/pkg/security/tests/network_device_test.go +++ b/pkg/security/tests/network_device_test.go @@ -20,7 +20,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/security/utils" @@ -78,7 +77,7 @@ func TestNetDevice(t *testing.T) { testNetns = uint32(stat.Ino) return nil - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { if !assert.Equal(t, "net_device", event.GetType(), "wrong event type") { return true } @@ -95,7 +94,7 @@ func TestNetDevice(t *testing.T) { err = test.GetProbeEvent(func() error { cmd := exec.Command(executable, "link", "add", "host-eth0", "type", "veth", "peer", "name", "ns-eth0", "netns", "test_netns") return cmd.Run() - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { if !assert.Equal(t, "veth_pair", event.GetType(), "wrong event type") { return true } @@ -119,7 +118,7 @@ func TestNetDevice(t *testing.T) { cmd = exec.Command(executable, "link", "set", "ns-eth1", "netns", "test_netns") return cmd.Run() - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { if !assert.Equal(t, "veth_pair", event.GetType(), "wrong event type") { return true } diff --git a/pkg/security/tests/network_test.go b/pkg/security/tests/network_test.go index df94a4ce3c1d7..30ceb61e58fda 100644 --- a/pkg/security/tests/network_test.go +++ b/pkg/security/tests/network_test.go @@ -19,7 +19,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -60,7 +60,7 @@ func TestNetworkCIDR(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "dns", event.GetType(), "wrong event type") assert.Equal(t, "google.com", event.DNS.Name, "wrong domain name") diff --git a/pkg/security/tests/open_test.go b/pkg/security/tests/open_test.go index 928a53a16d920..49ddf87bb71fc 100644 --- a/pkg/security/tests/open_test.go +++ b/pkg/security/tests/open_test.go @@ -25,7 +25,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -55,7 +55,7 @@ func TestOpen(t *testing.T) { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags), "wrong flags") assertRights(t, uint16(event.Open.Mode), 0755) @@ -77,7 +77,7 @@ func TestOpen(t *testing.T) { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags), "wrong flags") assertRights(t, uint16(event.Open.Mode), 0711) @@ -103,7 +103,7 @@ func TestOpen(t *testing.T) { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags), "wrong flags") assertRights(t, uint16(event.Open.Mode), 0711) @@ -121,7 +121,7 @@ func TestOpen(t *testing.T) { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT|syscall.O_WRONLY|syscall.O_TRUNC, int(event.Open.Flags), "wrong flags") assertRights(t, uint16(event.Open.Mode), 0711) @@ -145,7 +145,7 @@ func TestOpen(t *testing.T) { } return f.Close() - }, func(event *sprobe.Event, r *rules.Rule) {}) + }, func(event *model.Event, r *rules.Rule) {}) test.WaitSignal(t, func() error { // truncate @@ -154,7 +154,7 @@ func TestOpen(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT|syscall.O_WRONLY|syscall.O_TRUNC, int(event.Open.Flags), "wrong flags") assert.Equal(t, getInode(t, testFile), event.Open.File.Inode, "wrong inode") @@ -172,7 +172,7 @@ func TestOpen(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") }) @@ -198,7 +198,7 @@ func TestOpen(t *testing.T) { return fmt.Errorf("OpenByHandleAt: %w", err) } return unix.Close(fdInt) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags), "wrong flags") assert.Equal(t, getInode(t, testFile), event.Open.File.Inode, "wrong inode") @@ -215,7 +215,7 @@ func TestOpen(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") }) if err != nil { @@ -258,7 +258,7 @@ func TestOpen(t *testing.T) { } return unix.Close(fd) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") // O_LARGEFILE is added by io_uring during __io_openat_prep assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags&0xfff), "wrong flags") @@ -298,7 +298,7 @@ func TestOpen(t *testing.T) { } return unix.Close(fd) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") // O_LARGEFILE is added by io_uring during __io_openat_prep assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags&0xfff), "wrong flags") @@ -347,7 +347,7 @@ func TestOpenMetadata(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assertRights(t, event.Open.File.Mode, expectedMode) assert.Equal(t, getInode(t, testFile), event.Open.File.Inode, "wrong inode") diff --git a/pkg/security/tests/overlayfs_test.go b/pkg/security/tests/overlayfs_test.go index 7046a20a6851e..3158e031fa430 100644 --- a/pkg/security/tests/overlayfs_test.go +++ b/pkg/security/tests/overlayfs_test.go @@ -21,7 +21,7 @@ import ( "golang.org/x/sys/unix" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -181,7 +181,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("open.file.in_upper_layer") @@ -195,7 +195,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -217,7 +217,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("open.file.in_upper_layer") @@ -231,7 +231,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -253,7 +253,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("open.file.in_upper_layer") @@ -267,7 +267,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -290,7 +290,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Rename(oldFile, newFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { success := true if value, _ := event.GetFieldValue("rename.file.path"); value.(string) != oldFile { @@ -315,7 +315,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(newFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -341,7 +341,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_parent") }) @@ -360,7 +360,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_renamed_parent") }) }) @@ -375,7 +375,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testDir) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("rmdir.file.in_upper_layer") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong rmdir inode") @@ -393,7 +393,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Chmod(testFile, 0777) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("chmod.file.in_upper_layer") @@ -407,7 +407,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -425,7 +425,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return syscall.Mkdir(testFile, 0777) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("mkdir.file.in_upper_layer") @@ -439,7 +439,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("rmdir.file.in_upper_layer") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong rmdir inode") @@ -457,7 +457,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Chtimes(testFile, time.Now(), time.Now()) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("utimes.file.in_upper_layer") @@ -471,7 +471,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -489,7 +489,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Chown(testFile, os.Getuid(), os.Getgid()) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("chown.file.in_upper_layer") @@ -503,7 +503,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -532,7 +532,7 @@ func TestOverlayFS(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("setxattr.file.in_upper_layer") @@ -546,7 +546,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -564,7 +564,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Truncate(testFile, 0) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("open.file.in_upper_layer") @@ -578,7 +578,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -601,7 +601,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Link(testSrc, testTarget) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testSrc) success := assert.Equal(t, inode, event.Link.Source.Inode, "wrong link source inode") @@ -619,7 +619,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testSrc) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") success := assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -632,7 +632,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testTarget) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") diff --git a/pkg/security/tests/probe_monitor_test.go b/pkg/security/tests/probe_monitor_test.go index e26d520799f7f..e67469a08c45a 100644 --- a/pkg/security/tests/probe_monitor_test.go +++ b/pkg/security/tests/probe_monitor_test.go @@ -19,8 +19,8 @@ import ( "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/metrics" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -53,8 +53,8 @@ func TestRulesetLoaded(t *testing.T) { err = test.GetCustomEventSent(t, func() error { // force a reload return syscall.Kill(syscall.Getpid(), syscall.SIGHUP) - }, func(rule *rules.Rule, customEvent *sprobe.CustomEvent) bool { - assert.Equal(t, sprobe.RulesetLoadedRuleID, rule.ID, "wrong rule") + }, func(rule *rules.Rule, customEvent *events.CustomEvent) bool { + assert.Equal(t, events.RulesetLoadedRuleID, rule.ID, "wrong rule") test.module.SendStats() @@ -106,8 +106,8 @@ func truncatedParents(t *testing.T, opts testOpts) { return err } return f.Close() - }, func(rule *rules.Rule, customEvent *sprobe.CustomEvent) bool { - assert.Equal(t, sprobe.AbnormalPathRuleID, rule.ID, "wrong rule") + }, func(rule *rules.Rule, customEvent *events.CustomEvent) bool { + assert.Equal(t, events.AbnormalPathRuleID, rule.ID, "wrong rule") return true }, getEventTimeout, model.CustomTruncatedParentsEventType) if err != nil { @@ -120,7 +120,7 @@ func truncatedParents(t *testing.T, opts testOpts) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { // check the length of the filepath that triggered the custom event filepath, err := event.GetFieldValue("open.file.path") if err == nil { @@ -187,8 +187,8 @@ func TestNoisyProcess(t *testing.T) { } } return nil - }, func(rule *rules.Rule, customEvent *sprobe.CustomEvent) bool { - assert.Equal(t, sprobe.NoisyProcessRuleID, rule.ID, "wrong rule") + }, func(rule *rules.Rule, customEvent *events.CustomEvent) bool { + assert.Equal(t, events.NoisyProcessRuleID, rule.ID, "wrong rule") return true }, getEventTimeout, model.CustomNoisyProcessEventType) if err != nil { diff --git a/pkg/security/tests/process_test.go b/pkg/security/tests/process_test.go index 2a184f99e13dc..0b7583c55d62b 100644 --- a/pkg/security/tests/process_test.go +++ b/pkg/security/tests/process_test.go @@ -35,7 +35,6 @@ import ( "github.com/syndtr/gocapability/capability" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" @@ -64,7 +63,7 @@ func TestProcess(t *testing.T) { return err } return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule") }) } @@ -188,7 +187,7 @@ func TestProcessContext(t *testing.T) { os.Remove(testFile) return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { t.Errorf("shouldn't get an event: got event: %s", event) }) if err == nil { @@ -209,7 +208,7 @@ func TestProcessContext(t *testing.T) { os.Remove(testFile) return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_exec_time_2") }) }) @@ -232,9 +231,11 @@ func TestProcessContext(t *testing.T) { } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "process.file.path", executable) - assert.Equal(t, getInode(t, executable), event.ResolveProcessCacheEntry().FileEvent.Inode, "wrong inode") + + entry, _ := event.ResolveProcessCacheEntry() + assert.Equal(t, getInode(t, executable), entry.FileEvent.Inode, "wrong inode") }) }) @@ -247,7 +248,7 @@ func TestProcessContext(t *testing.T) { // we need to ignore the error because "--password" is not a valid option for ls _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { argv0, err := event.GetFieldValue("exec.argv0") if err != nil { t.Errorf("not able to get argv0") @@ -313,7 +314,7 @@ func TestProcessContext(t *testing.T) { cmd := cmdFunc("ls", args, envs) _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_envp", rule.ID, "wrong rule triggered") })) }) @@ -324,7 +325,7 @@ func TestProcessContext(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(lsExecutable, "-ll") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_argv") })) }) @@ -335,7 +336,7 @@ func TestProcessContext(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(lsExecutable, "-ls", "--escape") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_args_flags") })) }) @@ -346,7 +347,7 @@ func TestProcessContext(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(lsExecutable, "--block-size", "123") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_args_options") })) }) @@ -367,7 +368,7 @@ func TestProcessContext(t *testing.T) { // we need to ignore the error because the string of "a" generates a "File name too long" error _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { args, err := event.GetFieldValue("exec.args") if err != nil { t.Errorf("not able to get args") @@ -407,21 +408,21 @@ func TestProcessContext(t *testing.T) { args = append(args, eval.RandString(50)) } - test.WaitSignal(t, func() error { + test.GetSignal(t, func() error { cmd := cmdFunc("ls", args, envs) // we need to ignore the error because the string of "a" generates a "File name too long" error _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { execArgs, err := event.GetFieldValue("exec.args") if err != nil { t.Errorf("not able to get args") } argv := strings.Split(execArgs.(string), " ") - assert.Equal(t, 132, len(argv), "incorrect number of args: %s", argv) + assert.Equal(t, 379, len(argv), "incorrect number of args: %s", argv) - for i := 0; i != 132; i++ { + for i := 0; i != 379; i++ { assert.Equal(t, args[i], argv[i], "expected arg not found") } @@ -433,7 +434,7 @@ func TestProcessContext(t *testing.T) { if !truncated.(bool) { t.Errorf("arg not truncated: %s", execArgs.(string)) } - })) + }) }) test.Run(t, "args-overflow-list-500", func(t *testing.T, kind wrapperType, cmdFunc func(cmd string, args []string, envs []string) *exec.Cmd) { @@ -448,21 +449,21 @@ func TestProcessContext(t *testing.T) { args = append(args, eval.RandString(500)) } - test.WaitSignal(t, func() error { + test.GetSignal(t, func() error { cmd := cmdFunc("ls", args, envs) // we need to ignore the error because the string of "a" generates a "File name too long" error _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { execArgs, err := event.GetFieldValue("exec.args") if err != nil { t.Errorf("not able to get args") } argv := strings.Split(execArgs.(string), " ") - assert.Equal(t, 159, len(argv), "incorrect number of args: %s", argv) + assert.Equal(t, 389, len(argv), "incorrect number of args: %s", argv) - for i := 0; i != 159; i++ { + for i := 0; i != 389; i++ { expected := args[i] if len(expected) > model.MaxArgEnvSize { expected = args[i][:model.MaxArgEnvSize-4] + "..." // 4 is the size number of the string @@ -478,7 +479,7 @@ func TestProcessContext(t *testing.T) { if !truncated.(bool) { t.Errorf("arg not truncated: %s", execArgs.(string)) } - })) + }) }) test.Run(t, "envs-overflow-single", func(t *testing.T, kind wrapperType, cmdFunc func(cmd string, args []string, envs []string) *exec.Cmd) { @@ -504,7 +505,7 @@ func TestProcessContext(t *testing.T) { } cmd := cmdFunc(bin, args, envs) return cmd.Run() - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { execEnvp, err := event.GetFieldValue("exec.envp") if err != nil { t.Errorf("not able to get exec.envp") @@ -548,23 +549,23 @@ func TestProcessContext(t *testing.T) { args = []string{"-u", "PATH", "-u", "HOSTNAME", "-u", "HOME", "ls", "-al"} } - test.WaitSignal(t, func() error { + test.GetSignal(t, func() error { bin := "ls" if kind == dockerWrapperType { bin = "env" } cmd := cmdFunc(bin, args, envs) return cmd.Run() - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { execEnvp, err := event.GetFieldValue("exec.envp") if err != nil { t.Errorf("not able to get exec.envp") } envp := (execEnvp.([]string)) - assert.Equal(t, 57, len(envp), "incorrect number of envs: %s", envp) + assert.Equal(t, 380, len(envp), "incorrect number of envs: %s", envp) - for i := 0; i != 57; i++ { + for i := 0; i != 380; i++ { assert.Equal(t, envs[i], envp[i], "expected env not found") } @@ -576,7 +577,7 @@ func TestProcessContext(t *testing.T) { if !truncated.(bool) { t.Errorf("envs not truncated: %s", execEnvp.([]string)) } - })) + }) }) test.Run(t, "envs-overflow-list-500", func(t *testing.T, kind wrapperType, cmdFunc func(cmd string, args []string, envs []string) *exec.Cmd) { @@ -599,23 +600,23 @@ func TestProcessContext(t *testing.T) { args = []string{"-u", "PATH", "-u", "HOSTNAME", "-u", "HOME", "ls", "-al"} } - test.WaitSignal(t, func() error { + test.GetSignal(t, func() error { bin := "ls" if kind == dockerWrapperType { bin = "env" } cmd := cmdFunc(bin, args, envs) return cmd.Run() - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { execEnvp, err := event.GetFieldValue("exec.envp") if err != nil { t.Errorf("not able to get exec.envp") } envp := (execEnvp.([]string)) - assert.Equal(t, 68, len(envp), "incorrect number of envs: %s", envp) + assert.Equal(t, 390, len(envp), "incorrect number of envs: %s", envp) - for i := 0; i != 68; i++ { + for i := 0; i != 390; i++ { expected := envs[i] if len(expected) > model.MaxArgEnvSize { expected = envs[i][:model.MaxArgEnvSize-4] + "..." // 4 is the size number of the string @@ -631,7 +632,7 @@ func TestProcessContext(t *testing.T) { if !truncated.(bool) { t.Errorf("envs not truncated: %s", execEnvp.([]string)) } - })) + }) }) t.Run("tty", func(t *testing.T) { @@ -682,15 +683,17 @@ func TestProcessContext(t *testing.T) { } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "process.file.path", executable) if name, _ := event.GetFieldValue("process.tty_name"); !strings.HasPrefix(name.(string), "pts") { t.Errorf("not able to get a tty name: %s\n", name) } - if inode := getInode(t, executable); inode != event.ResolveProcessCacheEntry().FileEvent.Inode { - t.Errorf("expected inode %d, got %d => %+v", event.ResolveProcessCacheEntry().FileEvent.Inode, inode, event) + entry, _ := event.ResolveProcessCacheEntry() + + if inode := getInode(t, executable); inode != entry.FileEvent.Inode { + t.Errorf("expected inode %d, got %d => %+v", entry.FileEvent.Inode, inode, event) } str := event.String() @@ -719,7 +722,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_ancestors") assert.Equal(t, "sh", event.ProcessContext.Ancestor.Comm) }) @@ -743,7 +746,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_parent") assert.Equal(t, "sh", event.ProcessContext.Parent.Comm) assert.Equal(t, "sh", event.ProcessContext.Ancestor.Comm) @@ -768,7 +771,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_pid1", rule.ID, "wrong rule triggered") }) }) @@ -792,7 +795,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_inode", rule.ID, "wrong rule triggered") service := event.GetProcessServiceTag() @@ -815,7 +818,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_ancestors_args", rule.ID, "wrong rule triggered") }) }) @@ -827,7 +830,7 @@ func TestProcessContext(t *testing.T) { cmd := cmdFunc(shell, args, envs) _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_args_envs_dedup", rule.ID, "wrong rule triggered") var data interface{} @@ -861,7 +864,7 @@ func TestProcessContext(t *testing.T) { cmd := exec.Command(lsExecutable, "glob") _ = cmd.Run() return nil - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_ancestors_glob") })) }) @@ -875,7 +878,7 @@ func TestProcessContext(t *testing.T) { _, _ = cmd.CombinedOutput() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_self_exec") })) }) @@ -896,7 +899,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_container", rule.ID, "wrong rule triggered") if kind == dockerWrapperType { @@ -921,7 +924,7 @@ func TestProcessContext(t *testing.T) { } f.Close() return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, ruleID, rule.ID, "wrong rule triggered") }) }) @@ -961,7 +964,7 @@ func TestProcessEnvsWithValue(t *testing.T) { cmd.Env = envp _ = cmd.Run() return nil - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_ldpreload_from_tmp_with_envs") assertFieldEqual(t, event, "exec.file.path", lsExec) assertFieldStringArrayIndexedOneOf(t, event, "exec.envs", 0, []string{"LD_PRELOAD=/tmp/dyn.so"}) @@ -992,7 +995,7 @@ func TestProcessExecCTime(t *testing.T) { cmd := exec.Command(testFile, "/tmp/test") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_exec_ctime", rule.ID, "wrong rule triggered") })) } @@ -1014,7 +1017,7 @@ func TestProcessPIDVariable(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(executable, fmt.Sprintf("/proc/%d/maps", os.Getpid())) return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_var", rule.ID, "wrong rule triggered") }) if err != nil { @@ -1100,7 +1103,7 @@ func TestProcessMutableVariable(t *testing.T) { test.WaitSignal(t, func() error { filename1, _, err = test.Create("test-open") return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_set_mutable_vars", rule.ID, "wrong rule triggered") }) if err != nil { @@ -1111,7 +1114,7 @@ func TestProcessMutableVariable(t *testing.T) { test.WaitSignal(t, func() error { filename2, _, err = test.Create("test-open-2") return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_modify_mutable_vars", rule.ID, "wrong rule triggered") }) if err != nil { @@ -1122,7 +1125,7 @@ func TestProcessMutableVariable(t *testing.T) { test.WaitSignal(t, func() error { filename3, _, err = test.Create("test-open-3") return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_test_mutable_vars", rule.ID, "wrong rule triggered") }) if err != nil { @@ -1154,7 +1157,7 @@ func TestProcessExec(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command("sh", "-c", executable+" /dev/null") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "exec.file.path", executable) assertFieldIsOneOf(t, event, "process.parent.file.name", []string{"sh", "bash", "dash"}, "wrong process parent file name") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"sh", "bash", "dash"}) @@ -1166,7 +1169,7 @@ func TestProcessExec(t *testing.T) { args := []string{"exec-in-pthread", executable, "/dev/null"} cmd := exec.Command(syscallTester, args...) return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "exec.file.path", executable) assertFieldEqual(t, event, "process.parent.file.name", "syscall_tester", "wrong process parent file name") })) @@ -1212,7 +1215,7 @@ func TestProcessMetadata(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(testFile) return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "exec", event.GetType(), "wrong event type") assertRights(t, event.Exec.FileEvent.Mode, fileMode) assertNearTime(t, event.Exec.FileEvent.MTime) @@ -1232,7 +1235,7 @@ func TestProcessMetadata(t *testing.T) { } _, err := syscall.ForkExec(testFile, []string{}, attr) return err - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "exec", event.GetType(), "wrong event type") assert.Equal(t, 1001, int(event.Exec.Credentials.UID), "wrong uid") assert.Equal(t, 1001, int(event.Exec.Credentials.EUID), "wrong euid") @@ -1263,7 +1266,7 @@ func TestProcessExecExit(t *testing.T) { err = test.GetProbeEvent(func() error { cmd := exec.Command(executable, "-t", "01010101", "/dev/null") return cmd.Run() - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { switch event.GetEventType() { case model.ExecEventType: if basename, err := event.GetFieldValue("exec.file.name"); err != nil || basename.(string) != "touch" { @@ -1274,7 +1277,7 @@ func TestProcessExecExit(t *testing.T) { return false } - validate := validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + validate := validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { if !validateProcessContextLineage(t, event) { t.Error(event.String()) } @@ -1372,7 +1375,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setuid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setuid", "1001", "0") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setuid") assert.Equal(t, uint32(1001), event.SetUID.UID, "wrong uid") }) @@ -1381,7 +1384,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setreuid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setreuid", "1002", "1003") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setreuid") assert.Equal(t, uint32(1002), event.SetUID.UID, "wrong uid") assert.Equal(t, uint32(1003), event.SetUID.EUID, "wrong euid") @@ -1391,7 +1394,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setresuid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setresuid", "1002", "1003") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setreuid") assert.Equal(t, uint32(1002), event.SetUID.UID, "wrong uid") assert.Equal(t, uint32(1003), event.SetUID.EUID, "wrong euid") @@ -1401,7 +1404,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setfsuid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setfsuid", "1004", "0") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setfsuid") assert.Equal(t, uint32(1004), event.SetUID.FSUID, "wrong fsuid") }) @@ -1410,7 +1413,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setgid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setgid", "1005", "0") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setgid") assert.Equal(t, uint32(1005), event.SetGID.GID, "wrong gid") }) @@ -1419,7 +1422,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setregid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setregid", "1006", "1007") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setregid") assert.Equal(t, uint32(1006), event.SetGID.GID, "wrong gid") assert.Equal(t, uint32(1007), event.SetGID.EGID, "wrong egid") @@ -1429,7 +1432,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setresgid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setresgid", "1006", "1007") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setregid") assert.Equal(t, uint32(1006), event.SetGID.GID, "wrong gid") assert.Equal(t, uint32(1007), event.SetGID.EGID, "wrong egid") @@ -1439,7 +1442,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setfsgid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setfsgid", "1008", "0") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setfsgid") assert.Equal(t, uint32(1008), event.SetGID.FSGID, "wrong gid") }) @@ -1460,7 +1463,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, goSyscallTester, "-process-credentials-capset") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_capset") // transform the collected kernel capabilities into a usable capability set @@ -1525,7 +1528,7 @@ func TestProcessIsThread(t *testing.T) { cmd := exec.Command(syscallTester, args...) _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_process_fork_is_thread") assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE, event.MMap.Protection&(unix.PROT_READ|unix.PROT_WRITE), "wrong mmap protection flags") assert.Equal(t, "syscall_tester", event.ProcessContext.FileEvent.BasenameStr, "wrong process file basename") @@ -1541,7 +1544,7 @@ func TestProcessIsThread(t *testing.T) { cmd := exec.Command(syscallTester, args...) _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_process_exec_is_not_thread") assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE, event.MMap.Protection&(unix.PROT_READ|unix.PROT_WRITE), "wrong mmap protection flags") assert.Equal(t, "syscall_tester", event.ProcessContext.FileEvent.BasenameStr, "wrong process file basename") @@ -1578,11 +1581,11 @@ func TestProcessExit(t *testing.T) { }, { ID: "test_exit_time_1", - Expression: fmt.Sprintf(`exit.cause == EXITED && exit.code == 0 && process.created_at < 2s && process.file.path == "%s" && process.envp in ["%s"]`, sleepExec, envpExitSleepTime), + Expression: fmt.Sprintf(`exit.cause == EXITED && exit.code == 0 && process.created_at < 4s && process.file.path == "%s" && process.envp in ["%s"]`, sleepExec, envpExitSleepTime), }, { ID: "test_exit_time_2", - Expression: fmt.Sprintf(`exit.cause == EXITED && exit.code == 0 && process.created_at > 2s && process.file.path == "%s" && process.envp in ["%s"]`, sleepExec, envpExitSleepTime), + Expression: fmt.Sprintf(`exit.cause == EXITED && exit.code == 0 && process.created_at > 4s && process.file.path == "%s" && process.envp in ["%s"]`, sleepExec, envpExitSleepTime), }, } @@ -1600,7 +1603,7 @@ func TestProcessExit(t *testing.T) { cmd := exec.Command(sleepExec, args...) cmd.Env = envp return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { if !validateExitSchema(t, event) { t.Error(event.String()) } @@ -1621,7 +1624,7 @@ func TestProcessExit(t *testing.T) { cmd.Env = envp _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { if !validateExitSchema(t, event) { t.Error(event.String()) } @@ -1635,14 +1638,14 @@ func TestProcessExit(t *testing.T) { t.Run("exit-coredumped", func(t *testing.T) { test.WaitSignal(t, func() error { - args := []string{"--preserve-status", "--signal=SIGQUIT", "0.1", sleepExec, "1"} + args := []string{"--preserve-status", "--signal=SIGQUIT", "2", sleepExec, "9"} envp := []string{envpExitSleep} cmd := exec.Command(timeoutExec, args...) cmd.Env = envp _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { if !validateExitSchema(t, event) { t.Error(event.String()) } @@ -1656,14 +1659,14 @@ func TestProcessExit(t *testing.T) { t.Run("exit-signaled", func(t *testing.T) { test.WaitSignal(t, func() error { - args := []string{"--preserve-status", "--signal=SIGKILL", "0.1", sleepExec, "1"} + args := []string{"--preserve-status", "--signal=SIGKILL", "2", sleepExec, "9"} envp := []string{envpExitSleep} cmd := exec.Command(timeoutExec, args...) cmd.Env = envp _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { if !validateExitSchema(t, event) { t.Error(event.String()) } @@ -1677,13 +1680,13 @@ func TestProcessExit(t *testing.T) { t.Run("exit-time-1", func(t *testing.T) { test.WaitSignal(t, func() error { - args := []string{"--preserve-status", "--signal=SIGKILL", "1", sleepExec, "0.1"} + args := []string{"--preserve-status", "--signal=SIGKILL", "9", sleepExec, "2"} envp := []string{envpExitSleepTime} cmd := exec.Command(timeoutExec, args...) cmd.Env = envp return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { if !validateExitSchema(t, event) { t.Error(event.String()) } @@ -1697,13 +1700,13 @@ func TestProcessExit(t *testing.T) { t.Run("exit-time-2", func(t *testing.T) { test.WaitSignal(t, func() error { - args := []string{"--preserve-status", "--signal=SIGKILL", "3", sleepExec, "2.1"} + args := []string{"--preserve-status", "--signal=SIGKILL", "9", sleepExec, "5"} envp := []string{envpExitSleepTime} cmd := exec.Command(timeoutExec, args...) cmd.Env = envp return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { if !validateExitSchema(t, event) { t.Error(event.String()) } @@ -1742,7 +1745,7 @@ func TestProcessBusybox(t *testing.T) { } defer test.Close() - wrapper, err := newDockerCmdWrapper(test.Root(), "alpine") + wrapper, err := newDockerCmdWrapper(test.Root(), test.Root(), "alpine") if err != nil { t.Skip("docker no available") return @@ -1755,7 +1758,7 @@ func TestProcessBusybox(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_busybox_1", rule.ID, "wrong rule triggered") }) }) @@ -1767,7 +1770,7 @@ func TestProcessBusybox(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_busybox_2", rule.ID, "wrong rule triggered") }) }) @@ -1779,7 +1782,7 @@ func TestProcessBusybox(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_busybox_3", rule.ID, "wrong rule triggered") }) }) @@ -1791,7 +1794,7 @@ func TestProcessBusybox(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_busybox_4", rule.ID, "wrong rule triggered") }) }) @@ -1810,7 +1813,7 @@ func TestProcessIdentifyInterpreter(t *testing.T) { scriptName string executedScript string innerScriptName string - check func(event *sprobe.Event) + check func(event *model.Event) }{ { name: "regular exec", @@ -1829,7 +1832,7 @@ print('Executing print inside a python (%s) script inside a bash script') EOF echo "Back to bash"`, python, python), - check: func(event *sprobe.Event) { + check: func(event *model.Event) { assertFieldEqual(t, event, "exec.interpreter.file.name", "", "wrong interpreter file name") assertFieldEqual(t, event, "process.parent.file.name", "regularExec.sh", "wrong process parent file name") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"regularExec.sh"}, "ancestor file name not an option") @@ -1853,7 +1856,7 @@ print "Executing print inside a perl (%s) script inside a bash script\n"; __HERE__ echo "Back to bash"`, perl, perl, perl), - check: func(event *sprobe.Event) { + check: func(event *model.Event) { assertFieldEqual(t, event, "exec.interpreter.file.name", "", "wrong interpreter file name") assertFieldEqual(t, event, "process.parent.file.name", "regularExecWithInterpreterRule.sh", "wrong process parent file name") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"regularExecWithInterpreterRule.sh"}, "ancestor file name not an option") @@ -1882,7 +1885,7 @@ echo "Back to bash" chmod 755 pyscript.py ./pyscript.py`, python, python), - check: func(event *sprobe.Event) { + check: func(event *model.Event) { assertFieldEqual(t, event, "exec.interpreter.file.name", filepath.Base(python), "wrong interpreter file name") assertFieldEqual(t, event, "process.parent.file.name", "interpretedExec.sh", "wrong process parent file name") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"interpretedExec.sh"}, "ancestor file name not an option") @@ -1961,7 +1964,7 @@ chmod 755 pyscript.py t.Logf("%s: %+v\n", constantfetch.OffsetNameLinuxBinprmStructFile, offsets[constantfetch.OffsetNameLinuxBinprmStructFile]) return nil - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, test.rule.ID) test.check(event) })) @@ -2020,7 +2023,7 @@ func TestProcessResolution(t *testing.T) { } return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_resolution", rule.ID, "wrong rule triggered") value, err := event.GetFieldValue("process.pid") @@ -2066,3 +2069,106 @@ func TestProcessResolution(t *testing.T) { io.WriteString(stdin, "\n") }) } + +func TestProcessFilelessExecution(t *testing.T) { + + filelessDetectionRule := &rules.RuleDefinition{ + ID: "test_fileless", + Expression: fmt.Sprintf(`exec.file.name == "%s" && exec.file.path == ""`, filelessExecutionFilenamePrefix), + } + + filelessWithInterpreterDetectionRule := &rules.RuleDefinition{ + ID: "test_fileless_with_interpreter", + Expression: fmt.Sprintf(`exec.file.name == "%sscript" && exec.file.path == "" && exec.interpreter.file.name == "bash"`, filelessExecutionFilenamePrefix), + } + + tests := []struct { + name string + rule *rules.RuleDefinition + syscallTesterToRun string + syscallTesterScriptFilenameToRun string + check func(event *model.Event, rule *rules.Rule) + }{ + { + name: "fileless", + rule: filelessDetectionRule, + syscallTesterToRun: "fileless", + syscallTesterScriptFilenameToRun: "", + check: func(event *model.Event, rule *rules.Rule) { + assertFieldEqual(t, event, "process.file.name", filelessExecutionFilenamePrefix, "process.file.name not matching") + assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"syscall_tester"}, "process.ancestors.file.name not matching") + }, + }, + { + name: "fileless with script name", + rule: filelessWithInterpreterDetectionRule, + syscallTesterToRun: "fileless", + syscallTesterScriptFilenameToRun: "script", + check: func(event *model.Event, rule *rules.Rule) { + assertFieldEqual(t, event, "process.file.name", "memfd:script", "process.file.name not matching") + }, + }, + { + name: "real file with fileless prefix", + syscallTesterToRun: "none", + rule: filelessDetectionRule, + }, + } + + var ruleList []*rules.RuleDefinition + alreadyAddedRules := make(map[string]bool) + for _, test := range tests { + if _, ok := alreadyAddedRules[test.rule.ID]; !ok { + alreadyAddedRules[test.rule.ID] = true + ruleList = append(ruleList, test.rule) + } + } + + testModule, err := newTestModule(t, nil, ruleList, testOpts{}) + if err != nil { + t.Fatal(err) + } + defer testModule.Close() + + syscallTester, err := loadSyscallTester(t, testModule, "syscall_tester") + if err != nil { + t.Fatal(err) + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.syscallTesterToRun == "none" { + err = testModule.GetSignal(t, func() error { + fileMode := 0o477 + testFile, _, err := testModule.CreateWithOptions(filelessExecutionFilenamePrefix, 98, 99, fileMode) + if err != nil { + return err + } + defer os.Remove(testFile) + + f, err := os.OpenFile(testFile, os.O_WRONLY, 0) + if err != nil { + t.Fatal(err) + } + f.WriteString("#!/bin/bash") + f.Close() + + cmd := exec.Command(testFile) + return cmd.Run() + }, func(event *model.Event, rule *rules.Rule) { + t.Errorf("shouldn't get an event: got event: %s", event) + }) + if err == nil { + t.Fatal("shouldn't get an event") + } + } else { + testModule.WaitSignal(t, func() error { + return runSyscallTesterFunc(t, syscallTester, test.syscallTesterToRun, test.syscallTesterScriptFilenameToRun) + }, func(event *model.Event, rule *rules.Rule) { + assertTriggeredRule(t, rule, test.rule.ID) + test.check(event, rule) + }) + } + }) + } +} diff --git a/pkg/security/tests/ptrace_test.go b/pkg/security/tests/ptrace_test.go index a93d0e920d528..701beff60f22a 100644 --- a/pkg/security/tests/ptrace_test.go +++ b/pkg/security/tests/ptrace_test.go @@ -15,7 +15,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -49,7 +49,7 @@ func TestPTraceEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "ptrace", event.GetType(), "wrong event type") assert.Equal(t, uint64(42), event.PTrace.Address, "wrong address") assert.Equal(t, event.Async, false) diff --git a/pkg/security/tests/rename_test.go b/pkg/security/tests/rename_test.go index 6897f0d69b6fd..dada868adaa90 100644 --- a/pkg/security/tests/rename_test.go +++ b/pkg/security/tests/rename_test.go @@ -21,7 +21,7 @@ import ( "golang.org/x/sys/unix" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -62,7 +62,7 @@ func TestRename(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Rename.New.Inode, "wrong inode") assertFieldEqual(t, event, "rename.file.destination.inode", int(getInode(t, testNewFile)), "wrong inode") @@ -93,7 +93,7 @@ func TestRename(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Rename.New.Inode, "wrong inode") assertFieldEqual(t, event, "rename.file.destination.inode", int(getInode(t, testNewFile)), "wrong inode") @@ -125,7 +125,7 @@ func TestRename(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Rename.New.Inode, "wrong inode") assertFieldEqual(t, event, "rename.file.destination.inode", int(getInode(t, testNewFile)), "wrong inode") @@ -182,7 +182,7 @@ func TestRename(t *testing.T) { return fmt.Errorf("failed to rename file with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Rename.New.Inode, "wrong inode") assertFieldEqual(t, event, "rename.file.destination.inode", int(getInode(t, testNewFile)), "wrong inode") @@ -237,7 +237,7 @@ func TestRenameInvalidate(t *testing.T) { for i := 0; i != 5; i++ { test.WaitSignal(t, func() error { return os.Rename(testOldFile, testNewFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assertFieldEqual(t, event, "rename.file.destination.path", testNewFile) @@ -308,7 +308,7 @@ func TestRenameReuseInode(t *testing.T) { } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") }) @@ -335,7 +335,7 @@ func TestRenameReuseInode(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assertFieldEqual(t, event, "open.file.inode", int(testNewFileInode)) assertFieldEqual(t, event, "open.file.path", testReuseInodeFile) @@ -380,7 +380,7 @@ func TestRenameFolder(t *testing.T) { return err } return testFile.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assertFieldEqual(t, event, "open.file.path", filename) diff --git a/pkg/security/tests/rmdir_test.go b/pkg/security/tests/rmdir_test.go index 71b8487f75c6f..2ad7105c43754 100644 --- a/pkg/security/tests/rmdir_test.go +++ b/pkg/security/tests/rmdir_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -56,7 +56,7 @@ func TestRmdir(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rmdir", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong inode") assertRights(t, event.Rmdir.File.Mode, expectedMode, "wrong initial mode") @@ -84,7 +84,7 @@ func TestRmdir(t *testing.T) { return error(err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rmdir", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong inode") assertRights(t, event.Rmdir.File.Mode, expectedMode, "wrong initial mode") @@ -141,7 +141,7 @@ func TestRmdir(t *testing.T) { return fmt.Errorf("failed to unlink file with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rmdir", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong inode") assertRights(t, event.Rmdir.File.Mode, expectedMode, "wrong initial mode") @@ -182,7 +182,7 @@ func TestRmdirInvalidate(t *testing.T) { test.WaitSignal(t, func() error { return syscall.Rmdir(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rmdir", event.GetType(), "wrong event type") assertFieldEqual(t, event, "rmdir.file.path", testFile) }) diff --git a/pkg/security/tests/schemas.go b/pkg/security/tests/schemas.go index 8ddafb491603f..aca76623cf182 100644 --- a/pkg/security/tests/schemas.go +++ b/pkg/security/tests/schemas.go @@ -16,8 +16,9 @@ import ( "github.com/xeipuuv/gojsonschema" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/probe/resolvers" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" ) //nolint:deadcode,unused @@ -78,7 +79,7 @@ func validateSchema(t *testing.T, json string, path string) bool { } //nolint:deadcode,unused -func validateEventSchema(t *testing.T, event *sprobe.Event, path string) bool { +func validateEventSchema(t *testing.T, event *model.Event, path string) bool { t.Helper() return validateSchema(t, event.String(), path) } @@ -90,125 +91,131 @@ func validateStringSchema(t *testing.T, event string, path string) bool { } //nolint:deadcode,unused -func validateExecSchema(t *testing.T, event *sprobe.Event) bool { +func validateExecSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/exec.schema.json") } //nolint:deadcode,unused -func validateExitSchema(t *testing.T, event *sprobe.Event) bool { +func validateExitSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/exit.schema.json") } //nolint:deadcode,unused -func validateOpenSchema(t *testing.T, event *sprobe.Event) bool { +func validateOpenSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/open.schema.json") } //nolint:deadcode,unused -func validateRenameSchema(t *testing.T, event *sprobe.Event) bool { +func validateRenameSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/rename.schema.json") } //nolint:deadcode,unused -func validateChmodSchema(t *testing.T, event *sprobe.Event) bool { +func validateChmodSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/chmod.schema.json") } //nolint:deadcode,unused -func validateChownSchema(t *testing.T, event *sprobe.Event) bool { +func validateChownSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/chown.schema.json") } //nolint:deadcode,unused -func validateSELinuxSchema(t *testing.T, event *sprobe.Event) bool { +func validateSELinuxSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/selinux.schema.json") } //nolint:deadcode,unused -func validateLinkSchema(t *testing.T, event *sprobe.Event) bool { +func validateLinkSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/link.schema.json") } //nolint:deadcode,unused -func validateSpanSchema(t *testing.T, event *sprobe.Event) bool { +func validateSpanSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/span.schema.json") } //nolint:deadcode,unused -func validateBPFSchema(t *testing.T, event *sprobe.Event) bool { +func validateBPFSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/bpf.schema.json") } //nolint:deadcode,unused -func validateMMapSchema(t *testing.T, event *sprobe.Event) bool { +func validateMMapSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/mmap.schema.json") } //nolint:deadcode,unused -func validateMProtectSchema(t *testing.T, event *sprobe.Event) bool { +func validateMProtectSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/mprotect.schema.json") } //nolint:deadcode,unused -func validatePTraceSchema(t *testing.T, event *sprobe.Event) bool { +func validatePTraceSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/ptrace.schema.json") } //nolint:deadcode,unused -func validateLoadModuleSchema(t *testing.T, event *sprobe.Event) bool { +func validateLoadModuleSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/load_module.schema.json") } //nolint:deadcode,unused -func validateLoadModuleNoFileSchema(t *testing.T, event *sprobe.Event) bool { +func validateLoadModuleNoFileSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/load_module_no_file.schema.json") } //nolint:deadcode,unused -func validateUnloadModuleSchema(t *testing.T, event *sprobe.Event) bool { +func validateUnloadModuleSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/unload_module.schema.json") } //nolint:deadcode,unused -func validateSignalSchema(t *testing.T, event *sprobe.Event) bool { +func validateSignalSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/signal.schema.json") } //nolint:deadcode,unused -func validateSpliceSchema(t *testing.T, event *sprobe.Event) bool { +func validateSpliceSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/splice.schema.json") } //nolint:deadcode,unused -func validateDNSSchema(t *testing.T, event *sprobe.Event) bool { +func validateDNSSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/dns.schema.json") } //nolint:deadcode,unused -func validateBindSchema(t *testing.T, event *sprobe.Event) bool { +func validateBindSchema(t *testing.T, event *model.Event) bool { t.Helper() return validateEventSchema(t, event, "file:///schemas/bind.schema.json") } +//nolint:deadcode,unused +func validateMountSchema(t *testing.T, event *model.Event) bool { + t.Helper() + return validateEventSchema(t, event, "file:///schemas/mount.schema.json") +} + //nolint:deadcode,unused func validateActivityDumpProtoSchema(t *testing.T, ad string) bool { t.Helper() @@ -216,7 +223,7 @@ func validateActivityDumpProtoSchema(t *testing.T, ad string) bool { } //nolint:deadcode,unused -func validateRuleSetLoadedSchema(t *testing.T, event *sprobe.CustomEvent) bool { +func validateRuleSetLoadedSchema(t *testing.T, event *events.CustomEvent) bool { t.Helper() return validateStringSchema(t, event.String(), "file:///schemas/ruleset_loaded.schema.json") } diff --git a/pkg/security/tests/schemas/mount.schema.json b/pkg/security/tests/schemas/mount.schema.json new file mode 100644 index 0000000000000..dd923abbb18bf --- /dev/null +++ b/pkg/security/tests/schemas/mount.schema.json @@ -0,0 +1,59 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "mount.json", + "type": "object", + "anyOf": [ + { + "$ref": "/schemas/container_event.json" + }, + { + "$ref": "/schemas/host_event.json" + } + ], + "allOf": [ + { + "properties": { + "mount": { + "type": "object", + "required": [ + "mountpoint", + "mount_id", + "parent_mount_id", + "fs_type" + ], + "properties": { + "mountpoint": { + "properties": { + "path": { + "type": "string" + } + }, + "required": [ + "path" + ] + }, + "mount_id": { + "type": "integer" + }, + "parent_mount_id": { + "type": "integer" + }, + "fs_type": { + "type": "string" + }, + "source": { + "properties": { + "path": { + "type": "string" + } + } + } + } + } + }, + "required": [ + "mount" + ] + } + ] +} \ No newline at end of file diff --git a/pkg/security/tests/selinux_test.go b/pkg/security/tests/selinux_test.go index f48f611310e9a..ecaebd400e29c 100644 --- a/pkg/security/tests/selinux_test.go +++ b/pkg/security/tests/selinux_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -71,7 +71,7 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to run setenforce: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_enforce") assert.Equal(t, "selinux", event.GetType(), "wrong event type") assertFieldEqual(t, event, "selinux.enforce.status", "permissive", "wrong enforce value") @@ -88,7 +88,7 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to write to selinuxfs: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_enforce") assert.Equal(t, "selinux", event.GetType(), "wrong event type") @@ -104,7 +104,7 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to run setsebool: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_write_bool_true") assert.Equal(t, "selinux", event.GetType(), "wrong event type") assertFieldEqual(t, event, "selinux.bool.name", TestBoolName, "wrong bool name") @@ -122,7 +122,7 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to run setsebool: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_write_bool_false") assert.Equal(t, "selinux", event.GetType(), "wrong event type") assertFieldEqual(t, event, "selinux.bool.name", TestBoolName, "wrong bool name") @@ -140,7 +140,7 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to write to selinuxfs: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { t.Errorf("expected error and got an event: %s", event) }) if err == nil { @@ -182,7 +182,7 @@ func TestSELinuxCommitBools(t *testing.T) { return fmt.Errorf("failed to run setsebool: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_commit_bools") assert.Equal(t, "selinux", event.GetType(), "wrong event type") assertFieldEqual(t, event, "selinux.bool_commit.state", true, "wrong bool value") diff --git a/pkg/security/tests/serializers_test.go b/pkg/security/tests/serializers_test.go index e411161f376f1..511ca2dafbb4a 100644 --- a/pkg/security/tests/serializers_test.go +++ b/pkg/security/tests/serializers_test.go @@ -18,6 +18,7 @@ import ( "github.com/stretchr/testify/assert" sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -48,19 +49,19 @@ func fetchRealisticEventSerializerInner(tb testing.TB) *sprobe.EventSerializer { tb.Fatal(err) } - var workingEvent *sprobe.Event + var workingEvent *model.Event test.WaitSignal(tb, func() error { fd, _, errno := syscall.Syscall6(syscall.SYS_OPENAT, 0, uintptr(testFilePtr), syscall.O_CREAT, 0711, 0, 0) if errno != 0 { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { workingEvent = event assert.Equal(tb, "open", event.GetType(), "wrong event type") }) - return sprobe.NewEventSerializer(workingEvent) + return sprobe.NewEventSerializer(workingEvent, test.probe) } func BenchmarkSerializersEasyJson(b *testing.B) { diff --git a/pkg/security/tests/signal_test.go b/pkg/security/tests/signal_test.go index 1f3731b0fddf3..5af54ada71db0 100644 --- a/pkg/security/tests/signal_test.go +++ b/pkg/security/tests/signal_test.go @@ -16,7 +16,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -54,7 +54,7 @@ func TestSignalEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "signal", event.GetType(), "wrong event type") assert.Equal(t, uint32(unix.SIGUSR1), event.Signal.Type, "wrong signal") assert.Equal(t, int64(0), event.Signal.Retval, "wrong retval") @@ -77,7 +77,7 @@ func TestSignalEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "signal", event.GetType(), "wrong event type") assert.Equal(t, uint32(unix.SIGKILL), event.Signal.Type, "wrong signal") assert.Equal(t, -int64(unix.EPERM), event.Signal.Retval, "wrong retval") diff --git a/pkg/security/tests/span_test.go b/pkg/security/tests/span_test.go index 4ba766e9698d9..af88031b54320 100644 --- a/pkg/security/tests/span_test.go +++ b/pkg/security/tests/span_test.go @@ -16,7 +16,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -30,7 +30,7 @@ func TestSpan(t *testing.T) { }, { ID: "test_span_rule_exec", - Expression: fmt.Sprintf(`exec.file.path in [ "/usr/bin/touch", "%s" ]`, executable), + Expression: fmt.Sprintf(`exec.file.path in [ "/usr/bin/touch", "%s" ] && exec.args_flags == "reference"`, executable), }, } @@ -64,7 +64,7 @@ func TestSpan(t *testing.T) { } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_span_rule_open") if !validateSpanSchema(t, event) { @@ -86,9 +86,9 @@ func TestSpan(t *testing.T) { var args []string var envs []string if kind == dockerWrapperType { - args = []string{"span-exec", "104", "204", "/usr/bin/touch", testFile} + args = []string{"span-exec", "104", "204", "/usr/bin/touch", "--reference", "/etc/passwd", testFile} } else if kind == stdWrapperType { - args = []string{"span-exec", "104", "204", executable, testFile} + args = []string{"span-exec", "104", "204", executable, "--reference", "/etc/passwd", testFile} } test.WaitSignal(t, func() error { @@ -98,7 +98,7 @@ func TestSpan(t *testing.T) { } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_span_rule_exec") if !validateSpanSchema(t, event) { diff --git a/pkg/security/tests/splice_test.go b/pkg/security/tests/splice_test.go index cd14f6bcce01b..db8665afb6201 100644 --- a/pkg/security/tests/splice_test.go +++ b/pkg/security/tests/splice_test.go @@ -13,7 +13,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -39,7 +39,7 @@ func TestSpliceEvent(t *testing.T) { t.Run("test_splice", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "splice") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "splice", event.GetType(), "wrong event type") assert.Equal(t, uint32(0), event.Splice.PipeEntryFlag, "wrong pipe entry flag") assert.Equal(t, uint32(0), event.Splice.PipeExitFlag, "wrong pipe exit flag") diff --git a/pkg/security/tests/stress_test.go b/pkg/security/tests/stress_test.go index 85e206f9fe349..097163656f3fc 100644 --- a/pkg/security/tests/stress_test.go +++ b/pkg/security/tests/stress_test.go @@ -17,7 +17,7 @@ import ( "testing" "time" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -82,7 +82,7 @@ func stressOpen(t *testing.T, rule *rules.RuleDefinition, pathname string, size } events := 0 - test.RegisterRuleEventHandler(func(_ *sprobe.Event, _ *rules.Rule) { + test.RegisterRuleEventHandler(func(_ *model.Event, _ *rules.Rule) { events++ }) defer test.RegisterRuleEventHandler(nil) @@ -214,13 +214,13 @@ func stressExec(t *testing.T, rule *rules.RuleDefinition, pathname string, execu } events := 0 - test.RegisterRuleEventHandler(func(_ *sprobe.Event, _ *rules.Rule) { + test.RegisterRuleEventHandler(func(_ *model.Event, _ *rules.Rule) { events++ }) defer test.RegisterRuleEventHandler(nil) kevents := 0 - test.RegisterProbeEventHandler(func(_ *sprobe.Event) { + test.RegisterProbeEventHandler(func(_ *model.Event) { kevents++ }) defer test.RegisterProbeEventHandler(nil) diff --git a/pkg/security/tests/syscall_tester.go b/pkg/security/tests/syscall_tester.go index 34bb18abc31db..04b111f17a972 100644 --- a/pkg/security/tests/syscall_tester.go +++ b/pkg/security/tests/syscall_tester.go @@ -66,6 +66,7 @@ func runSyscallTesterFunc(t *testing.T, path string, args ...string) error { t.Helper() sideTester := exec.Command(path, args...) output, err := sideTester.CombinedOutput() + if err != nil { t.Error(err) output := string(output) diff --git a/pkg/security/tests/syscall_tester/c/ebpf_probe.c b/pkg/security/tests/syscall_tester/c/ebpf_probe.c index 731d3d4175b70..bd04b53c911d2 100644 --- a/pkg/security/tests/syscall_tester/c/ebpf_probe.c +++ b/pkg/security/tests/syscall_tester/c/ebpf_probe.c @@ -1,11 +1,7 @@ #include "bpf_helpers.h" -#define bpf_printk(fmt, ...) \ - ({ \ - char ____fmt[] = fmt; \ - bpf_trace_printk(____fmt, sizeof(____fmt), \ - ##__VA_ARGS__); \ - }) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" struct bpf_map_def SEC("maps/cache") cache = { .type = BPF_MAP_TYPE_HASH, @@ -14,6 +10,8 @@ struct bpf_map_def SEC("maps/cache") cache = { .max_entries = 10, }; +#pragma clang diagnostic pop + SEC("kprobe/vfs_open") int kprobe_vfs_open(void *ctx) { u32 key = 1; diff --git a/pkg/security/tests/syscall_tester/c/syscall_tester.c b/pkg/security/tests/syscall_tester/c/syscall_tester.c index 65771a507656f..fc29cce39e0e8 100644 --- a/pkg/security/tests/syscall_tester/c/syscall_tester.c +++ b/pkg/security/tests/syscall_tester/c/syscall_tester.c @@ -20,6 +20,8 @@ #include #include #include +#include +#include #define RPC_CMD 0xdeadc001 #define REGISTER_SPAN_TLS_OP 6 @@ -604,6 +606,43 @@ int test_sleep(int argc, char **argv) { return EXIT_SUCCESS; } +int test_memfd_create(int argc, char **argv) { + if (argc < 2) { + fprintf(stderr, "Please specify at least a file name \n"); + return EXIT_FAILURE; + } + + for (int i = 1; i != argc; i++) { + char *filename = argv[i]; + + int fd = memfd_create(filename, 0); + if (fd <= 0) { + err(1, "%s failed", "memfd_create"); + } + + const char *script = "#!/bin/bash\necho Hello, world!\n"; + + FILE *stream = fdopen(fd, "w"); + if (stream == NULL){ + err(1, "%s failed", "fdopen"); + } + if (fputs(script, stream) == EOF){ + err(1, "%s failed", "fputs"); + } + + char * const argv[] = {filename, NULL}; + char * const envp[] = {NULL}; + fflush(stream); + if (fexecve(fd, argv, envp) < 0){ + err(1, "%s failed", "fexecve"); + } + + fclose(stream); + } + + return EXIT_SUCCESS; +} + int main(int argc, char **argv) { if (argc <= 1) { fprintf(stderr, "Please pass a command\n"); @@ -669,6 +708,8 @@ int main(int argc, char **argv) { exit_code = test_exec_in_pthread(sub_argc, sub_argv); } else if (strcmp(cmd, "sleep") == 0) { exit_code = test_sleep(sub_argc, sub_argv); + } else if (strcmp(cmd, "fileless") == 0) { + exit_code = test_memfd_create(sub_argc, sub_argv); } else { fprintf(stderr, "Unknown command `%s`\n", cmd); exit_code = EXIT_FAILURE; diff --git a/pkg/security/tests/testdrive.go b/pkg/security/tests/testdrive.go index 5ae668e730b29..29291e886f168 100644 --- a/pkg/security/tests/testdrive.go +++ b/pkg/security/tests/testdrive.go @@ -12,8 +12,7 @@ import ( "fmt" "os" "os/exec" - "path" - "strings" + "syscall" "testing" "github.com/avast/retry-go/v4" @@ -21,20 +20,21 @@ import ( ) type testDrive struct { - file *os.File - dev *losetup.Device - mountPoint string + file *os.File + dev *losetup.Device + mount *testMount } func (td *testDrive) Root() string { - return td.mountPoint + return td.mount.target +} + +func (td *testDrive) FSType() string { + return td.mount.fstype } func (td *testDrive) Path(filename ...string) string { - components := []string{td.mountPoint} - components = append(components, filename...) - path := path.Join(components...) - return path + return td.mount.path(filename...) } func newTestDrive(tb testing.TB, fsType string, mountOpts []string, mountPoint string) (*testDrive, error) { @@ -72,9 +72,9 @@ func newTestDriveWithMountPoint(tb testing.TB, fsType string, mountOpts []string return nil, fmt.Errorf("failed to create testdrive loop device: %w", err) } - if len(mountOpts) == 0 { - mountOpts = append(mountOpts, "auto") - } + // if len(mountOpts) == 0 { + // mountOpts = append(mountOpts, "auto") + // } mkfsCmd := exec.Command("/sbin/mkfs."+fsType, dev.Path()) if err := mkfsCmd.Run(); err != nil { @@ -91,9 +91,14 @@ func newTestDriveWithMountPoint(tb testing.TB, fsType string, mountOpts []string devPath = "none" } - mountCmd := exec.Command("mount", "-t", fsType, "-o", strings.Join(mountOpts, ","), devPath, mountPoint) + mount := newTestMount( + mountPoint, + withSource(devPath), + withFSType(fsType), + withMountOpts(mountOpts...), + ) - if err := mountCmd.Run(); err != nil { + if err := mount.mount(); err != nil { if loopback != nil { _ = loopback.Detach() } @@ -103,25 +108,24 @@ func newTestDriveWithMountPoint(tb testing.TB, fsType string, mountOpts []string } return &testDrive{ - file: backingFile, - dev: loopback, - mountPoint: mountPoint, + file: backingFile, + dev: loopback, + mount: mount, }, nil } func (td *testDrive) lsof() string { - lsofCmd := exec.Command("lsof", td.mountPoint) + lsofCmd := exec.Command("lsof", td.Root()) output, _ := lsofCmd.CombinedOutput() return string(output) } -func (td *testDrive) Unmount() error { - unmountCmd := exec.Command("umount", "-f", td.mountPoint) - return unmountCmd.Run() +func (td *testDrive) unmount() error { + return td.mount.unmount(syscall.MNT_FORCE) } func (td *testDrive) Close() { - if err := td.Unmount(); err != nil { + if err := td.unmount(); err != nil { fmt.Printf("failed to unmount test drive: %s (lsof: %s)", err, td.lsof()) } if td.dev != nil { @@ -133,5 +137,5 @@ func (td *testDrive) Close() { } } os.Remove(td.file.Name()) - os.Remove(td.mountPoint) + os.RemoveAll(td.Root()) } diff --git a/pkg/security/tests/testmount.go b/pkg/security/tests/testmount.go new file mode 100644 index 0000000000000..1f58b6c4d031a --- /dev/null +++ b/pkg/security/tests/testmount.go @@ -0,0 +1,74 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build functionaltests +// +build functionaltests + +package tests + +import ( + "path" + "strings" + "syscall" +) + +type testMount struct { + target string + source string + fstype string + flags uintptr + mountOpts []string +} + +func withSource(source string) func(tm *testMount) { + return func(tm *testMount) { + tm.source = source + } +} + +func withFSType(fstype string) func(tm *testMount) { + return func(tm *testMount) { + tm.fstype = fstype + } +} + +func withFlags(flags uintptr) func(tm *testMount) { + return func(tm *testMount) { + tm.flags = flags + } +} + +func withMountOpts(mountOpts ...string) func(tm *testMount) { + return func(tm *testMount) { + tm.mountOpts = mountOpts + } +} + +func newTestMount(target string, opts ...func(tm *testMount)) *testMount { + mount := &testMount{ + target: target, + } + + for _, opt := range opts { + opt(mount) + } + + return mount +} + +func (tm *testMount) path(filename ...string) string { + components := []string{tm.target} + components = append(components, filename...) + path := path.Join(components...) + return path +} + +func (tm *testMount) mount() error { + return syscall.Mount(tm.source, tm.target, tm.fstype, tm.flags, strings.Join(tm.mountOpts, ",")) +} + +func (tm *testMount) unmount(flags int) error { + return syscall.Unmount(tm.target, flags) +} diff --git a/pkg/security/tests/unlink_test.go b/pkg/security/tests/unlink_test.go index c7add4606c9f1..401f6c59ce050 100644 --- a/pkg/security/tests/unlink_test.go +++ b/pkg/security/tests/unlink_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -51,7 +51,7 @@ func TestUnlink(t *testing.T) { return error(err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "unlink", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong inode") assertRights(t, event.Unlink.File.Mode, expectedMode) @@ -75,7 +75,7 @@ func TestUnlink(t *testing.T) { return error(err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "unlink", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong inode") assertRights(t, event.Unlink.File.Mode, expectedMode) @@ -128,7 +128,7 @@ func TestUnlink(t *testing.T) { return fmt.Errorf("failed to unlink file with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "unlink", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong inode") assertRights(t, event.Unlink.File.Mode, expectedMode) @@ -173,7 +173,7 @@ func TestUnlinkInvalidate(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "unlink", event.GetType(), "wrong event type") assertFieldEqual(t, event, "unlink.file.path", testFile) }) diff --git a/pkg/security/tests/utimes_test.go b/pkg/security/tests/utimes_test.go index 6c0ad70875071..74b97c6bb18c5 100644 --- a/pkg/security/tests/utimes_test.go +++ b/pkg/security/tests/utimes_test.go @@ -17,7 +17,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -52,7 +52,7 @@ func TestUtimes(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "utimes", event.GetType(), "wrong event type") assert.Equal(t, int64(123), event.Utimes.Atime.Unix()) assert.Equal(t, int64(456), event.Utimes.Mtime.Unix()) @@ -89,7 +89,7 @@ func TestUtimes(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "utimes", event.GetType(), "wrong event type") assert.Equal(t, int64(111), event.Utimes.Atime.Unix()) assert.Equal(t, int64(222), event.Utimes.Atime.UnixNano()%int64(time.Second)/int64(time.Microsecond)) @@ -129,7 +129,7 @@ func TestUtimes(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "utimes", event.GetType(), "wrong event type") assert.Equal(t, int64(555), event.Utimes.Mtime.Unix()) assert.Equal(t, int64(666), event.Utimes.Mtime.UnixNano()%int64(time.Second)/int64(time.Nanosecond)) diff --git a/pkg/security/tests/xattr_test.go b/pkg/security/tests/xattr_test.go index 7013075547023..da9f68b041087 100644 --- a/pkg/security/tests/xattr_test.go +++ b/pkg/security/tests/xattr_test.go @@ -17,7 +17,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -62,7 +62,7 @@ func TestSetXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "setxattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.SetXAttr.Name) assert.Equal(t, "user", event.SetXAttr.Namespace) @@ -100,7 +100,7 @@ func TestSetXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "setxattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.SetXAttr.Name) assert.Equal(t, "user", event.SetXAttr.Namespace) @@ -131,7 +131,7 @@ func TestSetXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "setxattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.SetXAttr.Name) assert.Equal(t, "user", event.SetXAttr.Namespace) @@ -198,7 +198,7 @@ func TestRemoveXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "removexattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.RemoveXAttr.Name) assert.Equal(t, getInode(t, testFile), event.RemoveXAttr.File.Inode, "wrong inode") @@ -242,7 +242,7 @@ func TestRemoveXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "removexattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.RemoveXAttr.Name) assert.Equal(t, getInode(t, testFile), event.RemoveXAttr.File.Inode, "wrong inode") @@ -278,7 +278,7 @@ func TestRemoveXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { if event.GetType() != "removexattr" { t.Errorf("expected removexattr event, got %s", event.GetType()) } diff --git a/pkg/security/utils/proc.go b/pkg/security/utils/proc.go index 8694376ba8d07..5ca4bd8825469 100644 --- a/pkg/security/utils/proc.go +++ b/pkg/security/utils/proc.go @@ -272,7 +272,10 @@ func EnvVars(pid int32) ([]string, error) { var envs []string for scanner.Scan() { - envs = append(envs, scanner.Text()) + text := scanner.Text() + if len(text) > 0 { + envs = append(envs, text) + } } return envs, nil diff --git a/pkg/serializer/internal/stream/compressor.go b/pkg/serializer/internal/stream/compressor.go index 87b20c693db4e..6b18e5ed7c2bc 100644 --- a/pkg/serializer/internal/stream/compressor.go +++ b/pkg/serializer/internal/stream/compressor.go @@ -76,7 +76,7 @@ type Compressor struct { separator []byte } -// NewCompressor TODO : IML-199 +// NewCompressor returns a new instance of a Compressor func NewCompressor(input, output *bytes.Buffer, maxPayloadSize, maxUncompressedSize int, header, footer []byte, separator []byte) (*Compressor, error) { c := &Compressor{ header: header, @@ -170,7 +170,7 @@ func (c *Compressor) AddItem(data []byte) error { return nil } -// Close TODO : IML-199 +// Close closes the Compressor, flushing any remaining uncompressed data func (c *Compressor) Close() ([]byte, error) { // Flush remaining uncompressed data if c.input.Len() > 0 { diff --git a/pkg/serializer/internal/stream/json_payload_builder.go b/pkg/serializer/internal/stream/json_payload_builder.go index 79eb80b85b23d..96986146c256a 100644 --- a/pkg/serializer/internal/stream/json_payload_builder.go +++ b/pkg/serializer/internal/stream/json_payload_builder.go @@ -70,7 +70,7 @@ type JSONPayloadBuilder struct { mu sync.Mutex } -// NewJSONPayloadBuilder TODO : IML-199 +// NewJSONPayloadBuilder returns a new JSONPayloadBuilder func NewJSONPayloadBuilder(shareAndLockBuffers bool) *JSONPayloadBuilder { if shareAndLockBuffers { return &JSONPayloadBuilder{ diff --git a/pkg/serializer/serializer.go b/pkg/serializer/serializer.go index 790a3a519e08a..b1e5884e8f4e1 100644 --- a/pkg/serializer/serializer.go +++ b/pkg/serializer/serializer.go @@ -500,9 +500,9 @@ func (s *Serializer) SendContainerImage(msgs []ContainerImageMessage, hostname s payloads := make([]*[]byte, 0, len(msgs)) - for _, msg := range msgs { - msg.Host = hostname - encoded, err := proto.Marshal(&msg) + for i := range msgs { + msgs[i].Host = hostname + encoded, err := proto.Marshal(&msgs[i]) if err != nil { return log.Errorf("Unable to encode message: %+v", err) } diff --git a/pkg/serverless/daemon/daemon.go b/pkg/serverless/daemon/daemon.go index 5e623ae168b1c..22d1c228da9f8 100644 --- a/pkg/serverless/daemon/daemon.go +++ b/pkg/serverless/daemon/daemon.go @@ -40,6 +40,8 @@ type Daemon struct { TraceAgent *trace.ServerlessTraceAgent + ColdStartCreator *trace.ColdStartSpanCreator + // lastInvocations stores last invocation times to be able to compute the // interval of invocation of the function. lastInvocations []time.Time @@ -164,10 +166,10 @@ func (d *Daemon) GetFlushStrategy() string { } // SetupLogCollectionHandler configures the log collection route handler -func (d *Daemon) SetupLogCollectionHandler(route string, logsChan chan *logConfig.ChannelMessage, logsEnabled bool, enhancedMetricsEnabled bool) { +func (d *Daemon) SetupLogCollectionHandler(route string, logsChan chan *logConfig.ChannelMessage, logsEnabled bool, enhancedMetricsEnabled bool, initDurationChan chan<- float64) { d.logCollector = serverlessLog.NewLambdaLogCollector(logsChan, - d.MetricAgent.Demux, d.ExtraTags, logsEnabled, enhancedMetricsEnabled, d.ExecutionContext, d.HandleRuntimeDone) + d.MetricAgent.Demux, d.ExtraTags, logsEnabled, enhancedMetricsEnabled, d.ExecutionContext, d.HandleRuntimeDone, initDurationChan) server := serverlessLog.NewLambdaLogsAPIServer(d.logCollector.In) d.mux.Handle(route, &server) @@ -184,6 +186,10 @@ func (d *Daemon) SetTraceAgent(traceAgent *trace.ServerlessTraceAgent) { d.TraceAgent = traceAgent } +func (d *Daemon) SetColdStartSpanCreator(creator *trace.ColdStartSpanCreator) { + d.ColdStartCreator = creator +} + // SetFlushStrategy sets the flush strategy to use. func (d *Daemon) SetFlushStrategy(strategy flush.Strategy) { log.Debugf("Set flush strategy: %s (was: %s)", strategy.String(), d.GetFlushStrategy()) @@ -305,6 +311,10 @@ func (d *Daemon) Stop() { if d.MetricAgent != nil { d.MetricAgent.Stop() } + + if d.ColdStartCreator != nil { + d.ColdStartCreator.Stop() + } logs.Stop() log.Debug("Serverless agent shutdown complete") } diff --git a/pkg/serverless/daemon/daemon_test.go b/pkg/serverless/daemon/daemon_test.go index 4d798afa02fdd..57b90701f4cc2 100644 --- a/pkg/serverless/daemon/daemon_test.go +++ b/pkg/serverless/daemon/daemon_test.go @@ -16,7 +16,9 @@ import ( "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/serverless/trace" + "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/testutil" ) @@ -81,14 +83,13 @@ func TestTellDaemonRuntimeDoneIfLocalTest(t *testing.T) { client := &http.Client{Timeout: 1 * time.Second} request, err := http.NewRequest(http.MethodPost, fmt.Sprintf("http://127.0.0.1:%d/lambda/flush", port), nil) assert.Nil(err) - response, err := client.Do(request) - response.Body.Close() + response, err := client.Do(request) //nolint:bodyclose if err != nil { // retry once in case the daemon wasn't ready to accept requests time.Sleep(100 * time.Millisecond) - response, err = client.Do(request) - response.Body.Close() + response, err = client.Do(request) //nolint:bodyclose } + defer response.Body.Close() assert.Nil(err) select { case <-wrapWait(d.RuntimeWg): @@ -164,7 +165,7 @@ func TestSetTraceTagOk(t *testing.T) { } var agent = &trace.ServerlessTraceAgent{} t.Setenv("DD_API_KEY", "x") - agent.Start(true, &trace.LoadConfig{Path: "/does-not-exist.yml"}, nil) + agent.Start(true, &trace.LoadConfig{Path: "/does-not-exist.yml"}, make(chan *pb.Span), random.Random.Uint64()) defer agent.Stop() d := Daemon{ TraceAgent: agent, diff --git a/pkg/serverless/daemon/routes.go b/pkg/serverless/daemon/routes.go index 5404bc87c387c..b2459ce26e2db 100644 --- a/pkg/serverless/daemon/routes.go +++ b/pkg/serverless/daemon/routes.go @@ -103,7 +103,6 @@ func (e *EndInvocation) ServeHTTP(w http.ResponseWriter, r *http.Request) { IsError: r.Header.Get(invocationlifecycle.InvocationErrorHeader) == "true", RequestID: ecs.LastRequestID, ResponseRawPayload: responseBody, - ColdStartDuration: ecs.ColdstartDuration, } executionContext := e.daemon.InvocationProcessor.GetExecutionInfo() if executionContext.TraceID == 0 { diff --git a/pkg/serverless/executioncontext/executioncontext.go b/pkg/serverless/executioncontext/executioncontext.go index 5669bc8a22133..83140922dd41a 100644 --- a/pkg/serverless/executioncontext/executioncontext.go +++ b/pkg/serverless/executioncontext/executioncontext.go @@ -23,7 +23,6 @@ type ExecutionContext struct { coldstartRequestID string lastLogRequestID string coldstart bool - coldstartDuration float64 startTime time.Time endTime time.Time } @@ -35,7 +34,6 @@ type State struct { ColdstartRequestID string LastLogRequestID string Coldstart bool - ColdstartDuration float64 StartTime time.Time EndTime time.Time } @@ -50,18 +48,11 @@ func (ec *ExecutionContext) GetCurrentState() State { ColdstartRequestID: ec.coldstartRequestID, LastLogRequestID: ec.lastLogRequestID, Coldstart: ec.coldstart, - ColdstartDuration: ec.coldstartDuration, StartTime: ec.startTime, EndTime: ec.endTime, } } -func (ec *ExecutionContext) SetColdStartDuration(duration float64) { - ec.m.Lock() - defer ec.m.Unlock() - ec.coldstartDuration = duration -} - // SetFromInvocation sets the execution context based on an invocation func (ec *ExecutionContext) SetFromInvocation(arn string, requestID string) { ec.m.Lock() diff --git a/pkg/serverless/invocationlifecycle/init.go b/pkg/serverless/invocationlifecycle/init.go index 31234c2f0c802..682ea827bb7f8 100644 --- a/pkg/serverless/invocationlifecycle/init.go +++ b/pkg/serverless/invocationlifecycle/init.go @@ -11,7 +11,6 @@ import ( "strings" "time" - "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/serverless/trace/inferredspan" "github.com/aws/aws-lambda-go/events" @@ -149,7 +148,7 @@ func (lp *LifecycleProcessor) initFromSQSEvent(event events.SQSEvent) { lp.requestHandler.inferredSpans[1] = &inferredspan.InferredSpan{ CurrentInvocationStartTime: time.Unix(lp.requestHandler.inferredSpans[0].Span.Start, 0), Span: &pb.Span{ - SpanID: random.Random.Uint64(), + SpanID: inferredspan.GenerateSpanId(), }, } diff --git a/pkg/serverless/invocationlifecycle/invocation_details.go b/pkg/serverless/invocationlifecycle/invocation_details.go index 94fad5bd70d01..7dcc6d8f92bfb 100644 --- a/pkg/serverless/invocationlifecycle/invocation_details.go +++ b/pkg/serverless/invocationlifecycle/invocation_details.go @@ -37,5 +37,4 @@ type InvocationEndDetails struct { IsError bool RequestID string ResponseRawPayload []byte - ColdStartDuration float64 } diff --git a/pkg/serverless/invocationlifecycle/lifecycle.go b/pkg/serverless/invocationlifecycle/lifecycle.go index d8dced5d4eb81..7479f8be8fb65 100644 --- a/pkg/serverless/invocationlifecycle/lifecycle.go +++ b/pkg/serverless/invocationlifecycle/lifecycle.go @@ -16,7 +16,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/aggregator" serverlessLog "github.com/DataDog/datadog-agent/pkg/serverless/logs" serverlessMetrics "github.com/DataDog/datadog-agent/pkg/serverless/metrics" - "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/serverless/trace/inferredspan" "github.com/DataDog/datadog-agent/pkg/serverless/trigger" "github.com/DataDog/datadog-agent/pkg/trace/api" @@ -280,7 +279,7 @@ func (lp *LifecycleProcessor) newRequest(lambdaPayloadString []byte, startTime t lp.requestHandler.inferredSpans[0] = &inferredspan.InferredSpan{ CurrentInvocationStartTime: startTime, Span: &pb.Span{ - SpanID: random.Random.Uint64(), + SpanID: inferredspan.GenerateSpanId(), }, } lp.requestHandler.triggerTags = make(map[string]string) diff --git a/pkg/serverless/invocationlifecycle/lifecycle_test.go b/pkg/serverless/invocationlifecycle/lifecycle_test.go index 59b316007dfb3..872c0ad18dba7 100644 --- a/pkg/serverless/invocationlifecycle/lifecycle_test.go +++ b/pkg/serverless/invocationlifecycle/lifecycle_test.go @@ -735,7 +735,7 @@ func TestTriggerTypesLifecycleEventForKinesis(t *testing.T) { RequestID: "test-request-id", }) assert.Equal(t, map[string]string{ - "function_trigger.event_source_arn": "arn:aws:kinesis:sa-east-1:601427279990:stream/kinesisStream", + "function_trigger.event_source_arn": "arn:aws:kinesis:sa-east-1:425362996713:stream/kinesisStream", "request_id": "test-request-id", "function_trigger.event_source": "kinesis", }, testProcessor.GetTags()) @@ -779,7 +779,7 @@ func TestTriggerTypesLifecycleEventForSNS(t *testing.T) { RequestID: "test-request-id", }) assert.Equal(t, map[string]string{ - "function_trigger.event_source_arn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy", + "function_trigger.event_source_arn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy", "request_id": "test-request-id", "function_trigger.event_source": "sns", }, testProcessor.GetTags()) @@ -801,7 +801,7 @@ func TestTriggerTypesLifecycleEventForSQS(t *testing.T) { RequestID: "test-request-id", }) assert.Equal(t, map[string]string{ - "function_trigger.event_source_arn": "arn:aws:sqs:sa-east-1:601427279990:InferredSpansQueueNode", + "function_trigger.event_source_arn": "arn:aws:sqs:sa-east-1:425362996713:InferredSpansQueueNode", "request_id": "test-request-id", "function_trigger.event_source": "sqs", }, testProcessor.GetTags()) diff --git a/pkg/serverless/logs/logs_collector.go b/pkg/serverless/logs/logs_collector.go index 3e7668999fe94..69112847c2bf0 100644 --- a/pkg/serverless/logs/logs_collector.go +++ b/pkg/serverless/logs/logs_collector.go @@ -46,6 +46,7 @@ type LambdaLogsCollector struct { invocationEndTime time.Time process_once *sync.Once executionContext *executioncontext.ExecutionContext + initDurationChan chan<- float64 arn string @@ -53,7 +54,7 @@ type LambdaLogsCollector struct { handleRuntimeDone func() } -func NewLambdaLogCollector(out chan<- *logConfig.ChannelMessage, demux aggregator.Demultiplexer, extraTags *Tags, logsEnabled bool, enhancedMetricsEnabled bool, executionContext *executioncontext.ExecutionContext, handleRuntimeDone func()) *LambdaLogsCollector { +func NewLambdaLogCollector(out chan<- *logConfig.ChannelMessage, demux aggregator.Demultiplexer, extraTags *Tags, logsEnabled bool, enhancedMetricsEnabled bool, executionContext *executioncontext.ExecutionContext, handleRuntimeDone func(), initDurationChan chan<- float64) *LambdaLogsCollector { return &LambdaLogsCollector{ In: make(chan []LambdaLogAPIMessage, maxBufferedLogs), // Buffered, so we can hold start-up logs before first invocation without blocking @@ -65,6 +66,7 @@ func NewLambdaLogCollector(out chan<- *logConfig.ChannelMessage, demux aggregato executionContext: executionContext, handleRuntimeDone: handleRuntimeDone, process_once: &sync.Once{}, + initDurationChan: initDurationChan, } } @@ -170,7 +172,7 @@ func (lc *LambdaLogsCollector) processMessage( return } if message.logType == logTypePlatformInitReport { - lc.executionContext.SetColdStartDuration(message.objectRecord.reportLogItem.initDurationTelemetry) + lc.initDurationChan <- message.objectRecord.reportLogItem.initDurationTelemetry } if message.logType == logTypePlatformStart { diff --git a/pkg/serverless/logs/logs_test.go b/pkg/serverless/logs/logs_test.go index 088c552ce15fc..0b6668bbb55ea 100644 --- a/pkg/serverless/logs/logs_test.go +++ b/pkg/serverless/logs/logs_test.go @@ -211,7 +211,7 @@ func TestProcessMessageValid(t *testing.T) { tags := Tags{ Tags: metricTags, } - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}, make(chan<- float64)) lc.processMessage(&message) @@ -255,7 +255,7 @@ func TestProcessMessageStartValid(t *testing.T) { tags := Tags{ Tags: metricTags, } - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, mockRuntimeDone) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, mockRuntimeDone, make(chan<- float64)) lc.lastRequestID = lastRequestID lc.processMessage(message) assert.Equal(t, runtimeDoneCallbackWasCalled, false) @@ -287,7 +287,7 @@ func TestProcessMessagePlatformRuntimeDoneValid(t *testing.T) { mockRuntimeDone := func() { runtimeDoneCallbackWasCalled = true } - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, mockRuntimeDone) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, mockRuntimeDone, make(chan<- float64)) lc.lastRequestID = lastRequestID lc.processMessage(&message) ecs := mockExecutionContext.GetCurrentState() @@ -323,7 +323,7 @@ func TestProcessMessagePlatformRuntimeDonePreviousInvocation(t *testing.T) { mockRuntimeDone := func() { runtimeDoneCallbackWasCalled = true } - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, mockRuntimeDone) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, mockRuntimeDone, make(chan<- float64)) lc.processMessage(message) // Runtime done callback should NOT be called if the log message was for a previous invocation @@ -355,7 +355,7 @@ func TestProcessMessageShouldNotProcessArnNotSet(t *testing.T) { mockExecutionContext := &executioncontext.ExecutionContext{} computeEnhancedMetrics := true - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}, make(chan<- float64)) go lc.processMessage(message) @@ -383,7 +383,7 @@ func TestProcessMessageShouldNotProcessLogsDropped(t *testing.T) { mockExecutionContext := &executioncontext.ExecutionContext{} mockExecutionContext.SetFromInvocation(arn, lastRequestID) - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}, make(chan<- float64)) go lc.processMessage(message) @@ -412,7 +412,7 @@ func TestProcessMessageShouldProcessLogTypeFunction(t *testing.T) { mockExecutionContext := &executioncontext.ExecutionContext{} mockExecutionContext.SetFromInvocation(arn, lastRequestID) - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}, make(chan<- float64)) go lc.processMessage(message) @@ -860,7 +860,7 @@ func TestRuntimeMetricsMatchLogs(t *testing.T) { }, }, } - lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}) + lc := NewLambdaLogCollector(make(chan<- *config.ChannelMessage), demux, &tags, true, computeEnhancedMetrics, mockExecutionContext, func() {}, make(chan<- float64)) lc.invocationStartTime = startTime lc.processMessage(doneMessage) diff --git a/pkg/serverless/serverless.go b/pkg/serverless/serverless.go index 5a0d4330ff4eb..5a44b6c2d0247 100644 --- a/pkg/serverless/serverless.go +++ b/pkg/serverless/serverless.go @@ -175,6 +175,7 @@ func WaitForNextInvocation(stopCh chan struct{}, daemon *daemon.Daemon, id regis if isTimeout { ecs := daemon.ExecutionContext.GetCurrentState() metricTags := tags.AddColdStartTag(daemon.ExtraTags.Tags, ecs.Coldstart) + metricTags = tags.AddInitTypeTag(metricTags) metrics.SendTimeoutEnhancedMetric(metricTags, daemon.MetricAgent.Demux) metrics.SendErrorsEnhancedMetric(metricTags, time.Now(), daemon.MetricAgent.Demux) } @@ -210,12 +211,13 @@ func callInvocationHandler(daemon *daemon.Daemon, arn string, deadlineMs int64, func handleInvocation(doneChannel chan bool, daemon *daemon.Daemon, arn string, requestID string) { log.Debug("Received invocation event...") daemon.ExecutionContext.SetFromInvocation(arn, requestID) - daemon.ComputeGlobalTags(config.GetConfiguredTags(true)) + daemon.ComputeGlobalTags(config.GetGlobalConfiguredTags(true)) daemon.StartLogCollection() ecs := daemon.ExecutionContext.GetCurrentState() if daemon.MetricAgent != nil { metricTags := tags.AddColdStartTag(daemon.ExtraTags.Tags, ecs.Coldstart) + metricTags = tags.AddInitTypeTag(metricTags) metrics.SendInvocationEnhancedMetric(metricTags, daemon.MetricAgent.Demux) } else { log.Error("Could not send the invocation enhanced metric") diff --git a/pkg/serverless/serverless_test.go b/pkg/serverless/serverless_test.go index 2dc6e88ed5a23..780921373a501 100644 --- a/pkg/serverless/serverless_test.go +++ b/pkg/serverless/serverless_test.go @@ -101,14 +101,14 @@ func TestComputeTimeout(t *testing.T) { } func TestRemoveQualifierFromArnWithAlias(t *testing.T) { - invokedFunctionArn := "arn:aws:lambda:eu-south-1:601427279990:function:inferred-spans-function-urls-dev-harv-function-urls:$latest" + invokedFunctionArn := "arn:aws:lambda:eu-south-1:425362996713:function:inferred-spans-function-urls-dev-harv-function-urls:$latest" functionArn := removeQualifierFromArn(invokedFunctionArn) - expectedArn := "arn:aws:lambda:eu-south-1:601427279990:function:inferred-spans-function-urls-dev-harv-function-urls" + expectedArn := "arn:aws:lambda:eu-south-1:425362996713:function:inferred-spans-function-urls-dev-harv-function-urls" assert.Equal(t, functionArn, expectedArn) } func TestRemoveQualifierFromArnWithoutAlias(t *testing.T) { - invokedFunctionArn := "arn:aws:lambda:eu-south-1:601427279990:function:inferred-spans-function-urls-dev-harv-function-urls" + invokedFunctionArn := "arn:aws:lambda:eu-south-1:425362996713:function:inferred-spans-function-urls-dev-harv-function-urls" functionArn := removeQualifierFromArn(invokedFunctionArn) assert.Equal(t, functionArn, invokedFunctionArn) } diff --git a/pkg/serverless/tags/tags.go b/pkg/serverless/tags/tags.go index 31c316836cd42..bff89ecc9bc6c 100644 --- a/pkg/serverless/tags/tags.go +++ b/pkg/serverless/tags/tags.go @@ -25,6 +25,7 @@ const ( qualifierEnvVar = "AWS_LAMBDA_FUNCTION_VERSION" runtimeVar = "AWS_EXECUTION_ENV" memorySizeVar = "AWS_LAMBDA_FUNCTION_MEMORY_SIZE" + InitType = "AWS_LAMBDA_INITIALIZATION_TYPE" // FunctionARNKey is the tag key for a function's arn FunctionARNKey = "function_arn" @@ -46,6 +47,9 @@ const ( // ServiceKey is the tag key for a function's service environment variable ServiceKey = "service" + // SnapStartValue is the Lambda init type env var value indicating SnapStart initialized the function + SnapStartValue = "snap-start" + traceOriginMetadataKey = "_dd.origin" traceOriginMetadataValue = "lambda" @@ -157,6 +161,15 @@ func AddColdStartTag(tags []string, coldStart bool) []string { return tags } +// AddInitTypeTag appends the init_type tag to existing tags +func AddInitTypeTag(tags []string) []string { + initType := os.Getenv(InitType) + if initType != "" { + tags = append(tags, fmt.Sprintf("init_type:%v", initType)) + } + return tags +} + // GetExtensionVersion returns the extension version which is fed at build time func GetExtensionVersion() string { return currentExtensionVersion diff --git a/pkg/serverless/tags/tags_test.go b/pkg/serverless/tags/tags_test.go index 91316afc01b45..c8714a029e963 100644 --- a/pkg/serverless/tags/tags_test.go +++ b/pkg/serverless/tags/tags_test.go @@ -271,6 +271,30 @@ func TestAddColdStartTagWithColdStart(t *testing.T) { }) } +func TestAddInitTypeTagWithoutInitType(t *testing.T) { + generatedTags := AddInitTypeTag([]string{ + "myTagName0:myTagValue0", + "myTagName1:myTagValue1", + }) + assert.Equal(t, generatedTags, []string{ + "myTagName0:myTagValue0", + "myTagName1:myTagValue1", + }) +} + +func TestAddInitTypeTagWithInitType(t *testing.T) { + t.Setenv(InitType, SnapStartValue) + generatedTags := AddInitTypeTag([]string{ + "myTagName0:myTagValue0", + "myTagName1:myTagValue1", + }) + assert.Equal(t, generatedTags, []string{ + "myTagName0:myTagValue0", + "myTagName1:myTagValue1", + "init_type:snap-start", + }) +} + func TestBuildTagMapWithRuntimeAndMemoryTag(t *testing.T) { t.Setenv("AWS_LAMBDA_FUNCTION_VERSION", "888") t.Setenv("AWS_EXECUTION_ENV", "AWS_Lambda_java") diff --git a/pkg/serverless/trace/cold_start_span_creator.go b/pkg/serverless/trace/cold_start_span_creator.go index 4fa91e9bd7591..f4a5fa8e24d9f 100644 --- a/pkg/serverless/trace/cold_start_span_creator.go +++ b/pkg/serverless/trace/cold_start_span_creator.go @@ -9,8 +9,6 @@ import ( "os" "sync" - "github.com/DataDog/datadog-agent/pkg/serverless/executioncontext" - "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/trace/api" "github.com/DataDog/datadog-agent/pkg/trace/info" "github.com/DataDog/datadog-agent/pkg/trace/pb" @@ -35,45 +33,99 @@ const ( var functionName = os.Getenv(functionNameEnvVar) type ColdStartSpanCreator struct { - executionContext *executioncontext.ExecutionContext - traceAgent *ServerlessTraceAgent - createSpan *sync.Once + TraceAgent *ServerlessTraceAgent + createSpan sync.Once + LambdaSpanChan <-chan *pb.Span + InitDurationChan <-chan float64 + syncSpanDurationMutex sync.Mutex + ColdStartSpanId uint64 + lambdaSpan *pb.Span + initDuration float64 + StopChan chan struct{} } -func (c *ColdStartSpanCreator) create(lambdaSpan *pb.Span) { - // Prevent infinite loop from SpanModifier call - if lambdaSpan.Name == "aws.lambda.cold_start" { +func (c *ColdStartSpanCreator) Run() { + go func() { + for { + select { + case traceAgentSpan := <-c.LambdaSpanChan: + c.handleLambdaSpan(traceAgentSpan) + + case initDuration := <-c.InitDurationChan: + c.handleInitDuration(initDuration) + + case <-c.StopChan: + log.Debugf("[ColdStartCreator] - shutting down") + return + } + } + }() +} + +func (c *ColdStartSpanCreator) Stop() { + log.Debugf("[ColdStartCreator] - sending shutdown msg") + c.StopChan <- struct{}{} +} + +func (c *ColdStartSpanCreator) handleLambdaSpan(traceAgentSpan *pb.Span) { + if traceAgentSpan.Name == spanName { return } - ecs := c.executionContext.GetCurrentState() - if !ecs.Coldstart || ecs.ColdstartDuration == 0 { + c.syncSpanDurationMutex.Lock() + defer c.syncSpanDurationMutex.Unlock() + + c.lambdaSpan = traceAgentSpan + c.createIfReady() +} + +func (c *ColdStartSpanCreator) handleInitDuration(initDuration float64) { + c.syncSpanDurationMutex.Lock() + defer c.syncSpanDurationMutex.Unlock() + c.initDuration = initDuration + c.createIfReady() +} - log.Debugf("[ColdStartSpanCreator] Skipping span creation - no duration received") +func (c *ColdStartSpanCreator) createIfReady() { + + if c.initDuration == 0 { + log.Debug("[ColdStartCreator] No init duration, passing") + return + } + if c.lambdaSpan == nil { + log.Debug("[ColdStartCreator] No lambda span, passing") + return + } + c.create() +} + +func (c *ColdStartSpanCreator) create() { + // Prevent infinite loop from SpanModifier call + if c.lambdaSpan.Name == spanName { return } // ColdStartDuration is given in milliseconds // APM spans are in nanoseconds // millis = nanos * 1e6 - durationNs := ecs.ColdstartDuration * 1e6 + durationNs := c.initDuration * 1e6 coldStartSpan := &pb.Span{ Service: service, Name: spanName, Resource: functionName, - SpanID: random.Random.Uint64(), - TraceID: lambdaSpan.TraceID, - ParentID: lambdaSpan.ParentID, - Start: lambdaSpan.Start - int64(durationNs), + SpanID: c.ColdStartSpanId, + TraceID: c.lambdaSpan.TraceID, + ParentID: c.lambdaSpan.ParentID, + Start: c.lambdaSpan.Start - int64(durationNs), Duration: int64(durationNs), + Type: "serverless", } - log.Debugf("[ColdStartSpanCreator] Lambda span %v", lambdaSpan) c.createSpan.Do(func() { c.processSpan(coldStartSpan) }) } func (c *ColdStartSpanCreator) processSpan(coldStartSpan *pb.Span) { - log.Debugf("[ColdStartSpanCreator] Creating cold start span %v", coldStartSpan) + log.Debugf("[ColdStartCreator] Creating cold start span %v", coldStartSpan) traceChunk := &pb.TraceChunk{ Origin: "lambda", @@ -85,7 +137,7 @@ func (c *ColdStartSpanCreator) processSpan(coldStartSpan *pb.Span) { Chunks: []*pb.TraceChunk{traceChunk}, } - c.traceAgent.ta.Process(&api.Payload{ + c.TraceAgent.ta.Process(&api.Payload{ Source: info.NewReceiverStats().GetTagStats(info.Tags{}), TracerPayload: tracerPayload, }) diff --git a/pkg/serverless/trace/cold_start_span_creator_test.go b/pkg/serverless/trace/cold_start_span_creator_test.go index beccba3f7d347..b220b1306b2fd 100644 --- a/pkg/serverless/trace/cold_start_span_creator_test.go +++ b/pkg/serverless/trace/cold_start_span_creator_test.go @@ -7,13 +7,11 @@ package trace import ( "context" - "sync" "testing" "time" "github.com/stretchr/testify/assert" - "github.com/DataDog/datadog-agent/pkg/serverless/executioncontext" "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/trace/agent" @@ -31,19 +29,24 @@ func TestColdStartSpanCreatorCreateValid(t *testing.T) { traceAgent := &ServerlessTraceAgent{ ta: agnt, } - testArn := "arn:aws:lambda:us-east-1:123456789012:function:MY-SUPER-function" - testColdStartID := "8286a188-ba32-4475-8077-530cd35c09a9" + coldStartDuration := 50.0 // Given in millis - ec := &executioncontext.ExecutionContext{} - ec.SetColdStartDuration(coldStartDuration) - ec.SetFromInvocation(testArn, testColdStartID) + lambdaSpanChan := make(chan *pb.Span) + initDurationChan := make(chan float64) + stopChan := make(chan struct{}) + coldStartSpanId := random.Random.Uint64() coldStartSpanCreator := &ColdStartSpanCreator{ - executionContext: ec, - traceAgent: traceAgent, - createSpan: &sync.Once{}, + TraceAgent: traceAgent, + LambdaSpanChan: lambdaSpanChan, + InitDurationChan: initDurationChan, + ColdStartSpanId: coldStartSpanId, + StopChan: stopChan, } + coldStartSpanCreator.Run() + defer coldStartSpanCreator.Stop() + now := time.Now().UnixNano() lambdaSpan := &pb.Span{ Service: "aws.lambda", @@ -54,8 +57,10 @@ func TestColdStartSpanCreatorCreateValid(t *testing.T) { ParentID: random.Random.Uint64(), Duration: 500000000, } - coldStartSpanCreator.create(lambdaSpan) - timeout := time.After(2 * time.Second) + lambdaSpanChan <- lambdaSpan + initDurationChan <- coldStartDuration + + timeout := time.After(2 * time.Millisecond) var span *pb.Span select { case ss := <-traceAgent.ta.TraceWriter.In: @@ -80,18 +85,22 @@ func TestColdStartSpanCreatorCreateDuplicate(t *testing.T) { traceAgent := &ServerlessTraceAgent{ ta: agnt, } - testArn := "arn:aws:lambda:us-east-1:123456789012:function:MY-SUPER-function" - testColdStartID := "8286a188-ba32-4475-8077-530cd35c09a9" - ec := &executioncontext.ExecutionContext{} - ec.SetColdStartDuration(50) - ec.SetFromInvocation(testArn, testColdStartID) - + coldStartDuration := 50.0 // Given in millis + lambdaSpanChan := make(chan *pb.Span) + initDurationChan := make(chan float64) + stopChan := make(chan struct{}) + coldStartSpanId := random.Random.Uint64() coldStartSpanCreator := &ColdStartSpanCreator{ - executionContext: ec, - traceAgent: traceAgent, - createSpan: &sync.Once{}, + TraceAgent: traceAgent, + LambdaSpanChan: lambdaSpanChan, + InitDurationChan: initDurationChan, + ColdStartSpanId: coldStartSpanId, + StopChan: stopChan, } + coldStartSpanCreator.Run() + defer coldStartSpanCreator.Stop() + lambdaSpan := &pb.Span{ Service: "aws.lambda", Name: "aws.lambda.cold_start", @@ -101,8 +110,9 @@ func TestColdStartSpanCreatorCreateDuplicate(t *testing.T) { ParentID: random.Random.Uint64(), Duration: 500, } - coldStartSpanCreator.create(lambdaSpan) - timeout := time.After(time.Second) + lambdaSpanChan <- lambdaSpan + initDurationChan <- coldStartDuration + timeout := time.After(time.Millisecond) timedOut := false select { case ss := <-traceAgent.ta.TraceWriter.In: @@ -123,25 +133,34 @@ func TestColdStartSpanCreatorNotColdStart(t *testing.T) { traceAgent := &ServerlessTraceAgent{ ta: agnt, } - ec := &executioncontext.ExecutionContext{} - + lambdaSpanChan := make(chan *pb.Span) + initDurationChan := make(chan float64) + stopChan := make(chan struct{}) + coldStartSpanId := random.Random.Uint64() coldStartSpanCreator := &ColdStartSpanCreator{ - executionContext: ec, - traceAgent: traceAgent, - createSpan: &sync.Once{}, + TraceAgent: traceAgent, + LambdaSpanChan: lambdaSpanChan, + InitDurationChan: initDurationChan, + ColdStartSpanId: coldStartSpanId, + StopChan: stopChan, } + coldStartSpanCreator.Run() + defer coldStartSpanCreator.Stop() + lambdaSpan := &pb.Span{ Service: "aws.lambda", - Name: "aws.lambda.cold_start", + Name: "aws.lambda.my-function", Start: time.Now().Unix(), TraceID: random.Random.Uint64(), SpanID: random.Random.Uint64(), ParentID: random.Random.Uint64(), Duration: 500, } - coldStartSpanCreator.create(lambdaSpan) - timeout := time.After(time.Second) + lambdaSpanChan <- lambdaSpan + // Don't write to initDurationChan, as this is not a cold start + + timeout := time.After(time.Millisecond) timedOut := false select { case ss := <-traceAgent.ta.TraceWriter.In: diff --git a/pkg/serverless/trace/inferredspan/inferred_span.go b/pkg/serverless/trace/inferredspan/inferred_span.go index 43e066f17f59b..1e2008909bb97 100644 --- a/pkg/serverless/trace/inferredspan/inferred_span.go +++ b/pkg/serverless/trace/inferredspan/inferred_span.go @@ -6,6 +6,10 @@ package inferredspan import ( + "crypto/rand" + "math" + "math/big" + "os" "strings" "time" @@ -74,7 +78,7 @@ func FilterFunctionTags(input map[string]string) map[string]string { } // filter out DD_TAGS & DD_EXTRA_TAGS - ddTags := config.GetConfiguredTags(false) + ddTags := config.GetGlobalConfiguredTags(false) for _, tag := range ddTags { tagParts := strings.SplitN(tag, ":", 2) if len(tagParts) != 2 { @@ -133,13 +137,27 @@ func (inferredSpan *InferredSpan) CompleteInferredSpan( }) } +// GenerateSpanId creates a secure random span id in specific scenarios, otherwise return a pseudo random id +func GenerateSpanId() uint64 { + isSnapStart := os.Getenv(tags.InitType) == tags.SnapStartValue + if isSnapStart { + max := new(big.Int).SetUint64(math.MaxUint64) + if randId, err := rand.Int(rand.Reader, max); err != nil { + log.Debugf("Failed to generate a secure random span id: %v", err) + } else { + return randId.Uint64() + } + } + return random.Random.Uint64() +} + // generateInferredSpan declares and initializes a new inferred span // with the SpanID and TraceID func (inferredSpan *InferredSpan) generateInferredSpan(startTime time.Time) { inferredSpan.CurrentInvocationStartTime = startTime inferredSpan.Span = &pb.Span{ - SpanID: random.Random.Uint64(), + SpanID: GenerateSpanId(), } log.Debugf("Generated new Inferred span: %+v", inferredSpan) } diff --git a/pkg/serverless/trace/inferredspan/span_enrichment_test.go b/pkg/serverless/trace/inferredspan/span_enrichment_test.go index 1cf1c1219f306..6e19ebebc6489 100644 --- a/pkg/serverless/trace/inferredspan/span_enrichment_test.go +++ b/pkg/serverless/trace/inferredspan/span_enrichment_test.go @@ -197,7 +197,7 @@ func TestEnrichInferredSpanWithSNSEvent(t *testing.T) { assert.Equal(t, "aws.sns", span.Meta[operationName]) assert.Equal(t, "serverlessTracingTopicPy", span.Meta[resourceNames]) assert.Equal(t, "Hello", span.Meta[subject]) - assert.Equal(t, "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy", span.Meta[topicARN]) + assert.Equal(t, "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy", span.Meta[topicARN]) assert.Equal(t, "serverlessTracingTopicPy", span.Meta[topicName]) assert.Equal(t, "Notification", span.Meta[metadataType]) assert.True(t, inferredSpan.IsAsync) @@ -261,7 +261,7 @@ func TestEnrichInferredSpanWithSQSEvent(t *testing.T) { assert.Equal(t, "aws.sqs", span.Meta[operationName]) assert.Equal(t, "InferredSpansQueueNode", span.Meta[resourceNames]) assert.Equal(t, "InferredSpansQueueNode", span.Meta[queueName]) - assert.Equal(t, "arn:aws:sqs:sa-east-1:601427279990:InferredSpansQueueNode", span.Meta[eventSourceArn]) + assert.Equal(t, "arn:aws:sqs:sa-east-1:425362996713:InferredSpansQueueNode", span.Meta[eventSourceArn]) assert.Equal(t, "AQEBnxFcyzQZhkrLV/TrSpn0VBszuq4a5/u66uyGRdUKuvXMurd6RRV952L+arORbE4MlGqWLUxurzYH9mKvc/A3MYjmGwQvvhp6uK5c7gXxg6tvHVAlsEFmTB0p35dxfGCmtrJbzdPjVtmcucPEpRx7z51tQokgGWuJbqx3Z9MVRD+6dyO3o6Zu6G3oWUgiUZ0dxhNoIIeT6xr/tEsoWhGK9ZUPRJ7e0BM/UZKfkecX1CVgVZ8J/t8fHRklJd34S6pN99SPNBKx+1lOZCelm2MihbQR6zax8bkhwL3glxYP83MxexvfOELA3G/6jx96oQ4mQdJASsKFUzvcs2NUxX+0bBVX9toS7MW/Udv+3CiQwSjjkc18A385QHtNrJDRbH33OUxFCqN5CcUMiGvEFed5EQ==", span.Meta[receiptHandle]) assert.Equal(t, "AROAYYB64AB3LSVUYFP5T:harv-inferred-spans-dev-initSender", span.Meta[senderID]) assert.True(t, inferredSpan.IsAsync) @@ -284,7 +284,7 @@ func TestEnrichInferredSpanWithKinesisEvent(t *testing.T) { assert.Equal(t, "stream/kinesisStream", span.Meta[resourceNames]) assert.Equal(t, "stream/kinesisStream", span.Meta[streamName]) assert.Equal(t, "shardId-000000000002", span.Meta[shardID]) - assert.Equal(t, "arn:aws:kinesis:sa-east-1:601427279990:stream/kinesisStream", span.Meta[eventSourceArn]) + assert.Equal(t, "arn:aws:kinesis:sa-east-1:425362996713:stream/kinesisStream", span.Meta[eventSourceArn]) assert.Equal(t, "shardId-000000000002:49624230154685806402418173680709770494154422022871973922", span.Meta[eventID]) assert.Equal(t, "aws:kinesis:record", span.Meta[eventName]) assert.Equal(t, "1.0", span.Meta[eventVersion]) diff --git a/pkg/serverless/trace/span_modifier.go b/pkg/serverless/trace/span_modifier.go index ba52baa853e14..c94d2f916efbd 100644 --- a/pkg/serverless/trace/span_modifier.go +++ b/pkg/serverless/trace/span_modifier.go @@ -16,8 +16,9 @@ const ( ) type spanModifier struct { - tags map[string]string - coldStartSpanCreator *ColdStartSpanCreator + tags map[string]string + lambdaSpanChan chan<- *pb.Span + coldStartSpanId uint64 } // Process applies extra logic to the given span @@ -27,10 +28,15 @@ func (s *spanModifier) ModifySpan(span *pb.Span) { if s.tags["service"] != "" { span.Service = s.tags["service"] } - if s.coldStartSpanCreator != nil { - s.coldStartSpanCreator.create(span) + if s.lambdaSpanChan != nil && span.Name != "aws.lambda.cold_start" { + s.lambdaSpanChan <- span } } + + if span.Name == "aws.lambda.load" { + span.ParentID = s.coldStartSpanId + } + if inferredspan.CheckIsInferredSpan(span) { log.Debug("Detected a managed service span, filtering out function tags") diff --git a/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy-async.json b/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy-async.json index 46ca9d9a686c9..27873d0926528 100644 --- a/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy-async.json +++ b/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy-async.json @@ -81,7 +81,7 @@ "extendedRequestId": "FaERiG1RGjQFb6g=", "requestTime": "09/Sep/2021:18:08:35 +0000", "path": "/dev/http/get", - "accountId": "601427279990", + "accountId": "425362996713", "protocol": "HTTP/1.1", "stage": "dev", "domainPrefix": "lgxbo6a518", diff --git a/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy.json b/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy.json index 500351a179c97..e829a373214f5 100644 --- a/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy.json +++ b/pkg/serverless/trace/testdata/event_samples/api-gateway-non-proxy.json @@ -80,7 +80,7 @@ "extendedRequestId": "FaERiG1RGjQFb6g=", "requestTime": "09/Sep/2021:18:08:35 +0000", "path": "/dev/http/get", - "accountId": "601427279990", + "accountId": "425362996713", "protocol": "HTTP/1.1", "stage": "dev", "domainPrefix": "lgxbo6a518", diff --git a/pkg/serverless/trace/testdata/event_samples/eventbridge-custom.json b/pkg/serverless/trace/testdata/event_samples/eventbridge-custom.json index 456980f849878..96c11000600ae 100644 --- a/pkg/serverless/trace/testdata/event_samples/eventbridge-custom.json +++ b/pkg/serverless/trace/testdata/event_samples/eventbridge-custom.json @@ -3,7 +3,7 @@ "id": "fd03f394-e769-eff5-08a8-53c228933591", "detail-type": "testdetail", "source": "eventbridge.custom.event.sender", - "account": "601427279990", + "account": "425362996713", "time": "2021-11-04T01:37:45Z", "region": "sa-east-1", "resources": [], diff --git a/pkg/serverless/trace/testdata/event_samples/http-api.json b/pkg/serverless/trace/testdata/event_samples/http-api.json index 602e795bb3a24..061a02522d008 100644 --- a/pkg/serverless/trace/testdata/event_samples/http-api.json +++ b/pkg/serverless/trace/testdata/event_samples/http-api.json @@ -17,7 +17,7 @@ "x-datadog-sampling-priority": "2" }, "requestContext": { - "accountId": "601427279990", + "accountId": "425362996713", "apiId": "x02yirxc7a", "domainName": "x02yirxc7a.execute-api.sa-east-1.amazonaws.com", "domainPrefix": "x02yirxc7a", diff --git a/pkg/serverless/trace/testdata/event_samples/kinesis-batch.json b/pkg/serverless/trace/testdata/event_samples/kinesis-batch.json index e1d0833a9761d..0575cbf3873b3 100644 --- a/pkg/serverless/trace/testdata/event_samples/kinesis-batch.json +++ b/pkg/serverless/trace/testdata/event_samples/kinesis-batch.json @@ -12,9 +12,9 @@ "eventVersion": "1.0", "eventID": "shardId-000000000002:49624230154685806402418173680709770494154422022871973922", "eventName": "aws:kinesis:record", - "invokeIdentityArn": "arn:aws:iam::601427279990:role/inferred-spans-python-dev-sa-east-1-lambdaRole", + "invokeIdentityArn": "arn:aws:iam::425362996713:role/inferred-spans-python-dev-sa-east-1-lambdaRole", "awsRegion": "sa-east-1", - "eventSourceARN": "arn:aws:kinesis:sa-east-1:601427279990:stream/kinesisStream" + "eventSourceARN": "arn:aws:kinesis:sa-east-1:425362996713:stream/kinesisStream" }, { "kinesis": { @@ -28,9 +28,9 @@ "eventVersion": "1.0", "eventID": "shardId-000000000002:49624230154685806402418173680709770494154422022871973922", "eventName": "aws:kinesis:record", - "invokeIdentityArn": "arn:aws:iam::601427279990:role/inferred-spans-python-dev-sa-east-1-lambdaRole", + "invokeIdentityArn": "arn:aws:iam::425362996713:role/inferred-spans-python-dev-sa-east-1-lambdaRole", "awsRegion": "sa-east-1", - "eventSourceARN": "arn:aws:kinesis:sa-east-1:601427279990:stream/kinesisStream" + "eventSourceARN": "arn:aws:kinesis:sa-east-1:425362996713:stream/kinesisStream" } ] } diff --git a/pkg/serverless/trace/testdata/event_samples/kinesis.json b/pkg/serverless/trace/testdata/event_samples/kinesis.json index 7b9f444fb2685..b934ef90e22d8 100644 --- a/pkg/serverless/trace/testdata/event_samples/kinesis.json +++ b/pkg/serverless/trace/testdata/event_samples/kinesis.json @@ -12,9 +12,9 @@ "eventVersion": "1.0", "eventID": "shardId-000000000002:49624230154685806402418173680709770494154422022871973922", "eventName": "aws:kinesis:record", - "invokeIdentityArn": "arn:aws:iam::601427279990:role/inferred-spans-python-dev-sa-east-1-lambdaRole", + "invokeIdentityArn": "arn:aws:iam::425362996713:role/inferred-spans-python-dev-sa-east-1-lambdaRole", "awsRegion": "sa-east-1", - "eventSourceARN": "arn:aws:kinesis:sa-east-1:601427279990:stream/kinesisStream" + "eventSourceARN": "arn:aws:kinesis:sa-east-1:425362996713:stream/kinesisStream" } ] } diff --git a/pkg/serverless/trace/testdata/event_samples/sns-batch.json b/pkg/serverless/trace/testdata/event_samples/sns-batch.json index c84da29776570..6e5d93e788e9a 100644 --- a/pkg/serverless/trace/testdata/event_samples/sns-batch.json +++ b/pkg/serverless/trace/testdata/event_samples/sns-batch.json @@ -3,18 +3,18 @@ { "EventSource": "aws:sns", "EventVersion": "1.0", - "EventSubscriptionArn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", + "EventSubscriptionArn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", "Sns": { "Type": "Notification", "MessageId": "87056a47-f506-5d77-908b-303605d3b197", - "TopicArn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy", + "TopicArn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy", "Subject": null, "Message": "Asynchronously invoking a Lambda function with SNS.", "Timestamp": "2022-01-31T14:13:41.637Z", "SignatureVersion": "1", "Signature": "BmwnJb0Ku2KgQef9QOgaSSTwLyUsbkRq90lzD5Vn4mAcRUOq2ForfMOYbxMB6idljWIWy9t/jK4AIMxPGk/eOGiRcENx3BvAcGcoDayBRFY13+xUGaPn5Lfoht/ZJ7/hmCgFWKRa8ooATZL+AwGAw6Id8qzf0R3M3k2asy5Vxa4ODKiFW9OzWY/zFgsYJhddR3JrQl9YOMRyIobNNHT96o1TwjGsSUTEemrxA6jQtb3QbardEKO+2SuataLEZki7gE2D2sA300WqZecumI339q7la+OIj6VDGDwFoppE2sh8hzJYXAH7oo11giwltE0V3/eLFCVhsE8Y1KD/yDPPsA==", "SigningCertUrl": "https://sns.sa-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem", - "UnsubscribeUrl": "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", + "UnsubscribeUrl": "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", "MessageAttributes": { "_datadog": { "Type": "String", @@ -26,18 +26,18 @@ { "EventSource": "aws:sns", "EventVersion": "1.0", - "EventSubscriptionArn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", + "EventSubscriptionArn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", "Sns": { "Type": "Notification", "MessageId": "87056a47-f506-5d77-908b-303605d3b197", - "TopicArn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy", + "TopicArn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy", "Subject": null, "Message": "Asynchronously invoking a Lambda function with SNS.", "Timestamp": "2022-01-31T14:13:41.637Z", "SignatureVersion": "1", "Signature": "BmwnJb0Ku2KgQef9QOgaSSTwLyUsbkRq90lzD5Vn4mAcRUOq2ForfMOYbxMB6idljWIWy9t/jK4AIMxPGk/eOGiRcENx3BvAcGcoDayBRFY13+xUGaPn5Lfoht/ZJ7/hmCgFWKRa8ooATZL+AwGAw6Id8qzf0R3M3k2asy5Vxa4ODKiFW9OzWY/zFgsYJhddR3JrQl9YOMRyIobNNHT96o1TwjGsSUTEemrxA6jQtb3QbardEKO+2SuataLEZki7gE2D2sA300WqZecumI339q7la+OIj6VDGDwFoppE2sh8hzJYXAH7oo11giwltE0V3/eLFCVhsE8Y1KD/yDPPsA==", "SigningCertUrl": "https://sns.sa-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem", - "UnsubscribeUrl": "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", + "UnsubscribeUrl": "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", "MessageAttributes": { "_datadog": { "Type": "String", diff --git a/pkg/serverless/trace/testdata/event_samples/sns.json b/pkg/serverless/trace/testdata/event_samples/sns.json index b58f6a1ca57e1..87888ca909435 100644 --- a/pkg/serverless/trace/testdata/event_samples/sns.json +++ b/pkg/serverless/trace/testdata/event_samples/sns.json @@ -3,18 +3,18 @@ { "EventSource": "aws:sns", "EventVersion": "1.0", - "EventSubscriptionArn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", + "EventSubscriptionArn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", "Sns": { "Type": "Notification", "MessageId": "87056a47-f506-5d77-908b-303605d3b197", - "TopicArn": "arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy", + "TopicArn": "arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy", "Subject": "Hello", "Message": "Asynchronously invoking a Lambda function with SNS.", "Timestamp": "2022-01-31T14:13:41.637Z", "SignatureVersion": "1", "Signature": "BmwnJb0Ku2KgQef9QOgaSSTwLyUsbkRq90lzD5Vn4mAcRUOq2ForfMOYbxMB6idljWIWy9t/jK4AIMxPGk/eOGiRcENx3BvAcGcoDayBRFY13+xUGaPn5Lfoht/ZJ7/hmCgFWKRa8ooATZL+AwGAw6Id8qzf0R3M3k2asy5Vxa4ODKiFW9OzWY/zFgsYJhddR3JrQl9YOMRyIobNNHT96o1TwjGsSUTEemrxA6jQtb3QbardEKO+2SuataLEZki7gE2D2sA300WqZecumI339q7la+OIj6VDGDwFoppE2sh8hzJYXAH7oo11giwltE0V3/eLFCVhsE8Y1KD/yDPPsA==", "SigningCertUrl": "https://sns.sa-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem", - "UnsubscribeUrl": "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:601427279990:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", + "UnsubscribeUrl": "https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:425362996713:serverlessTracingTopicPy:224b60ba-befc-4830-ad96-f1f0ac94eb04", "MessageAttributes": { "_datadog": { "Type": "String", diff --git a/pkg/serverless/trace/testdata/event_samples/snssqs.json b/pkg/serverless/trace/testdata/event_samples/snssqs.json index 1fd0f1592c353..1e2f645a35e31 100644 --- a/pkg/serverless/trace/testdata/event_samples/snssqs.json +++ b/pkg/serverless/trace/testdata/event_samples/snssqs.json @@ -3,7 +3,7 @@ { "messageId": "64812b68-4d9b-4dca-b3fb-9b18f255ee51", "receiptHandle": "AQEBER6aRkfG8092GvkL7FRwCwbQ7LLDW9Tlk/CembqHe+suS2kfFxXiukomvaIN61QoyQMoRgWuV52SDkiQno2u+5hP64BDbmw+e/KR9ayvIfHJ3M6RfyQLaWNWm3hDFBCKTnBMVIxtdx0N9epZZewyokjKcrNYtmCghFgTCvZzsQkowi5rnoHAVHJ3je1c3bDnQ1KLrZFgajDnootYXDwEPuMq5FIxrf4EzTe0S7S+rnRm+GaQfeBLBVAY6dASL9usV3/AFRqDtaI7GKI+0F2NCgLlqj49VlPRz4ldhkGknYlKTZTluAqALWLJS62/J1GQo53Cs3nneJcmu5ajB2zzmhhRXoXINEkLhCD5ujZfcsw9H4xqW69Or4ECvlqx14bUU2rtMIW0QM2p7pEeXnyocymQv6m1te113eYWTVmaJ4I=", - "body": "{\n \"Type\" : \"Notification\",\n \"MessageId\" : \"0a0ab23e-4861-5447-82b7-e8094ff3e332\",\n \"TopicArn\" : \"arn:aws:sns:sa-east-1:601427279990:js-library-test-dev-demoTopic-15WGUVRCBMPAA\",\n \"Message\" : \"{\\\"hello\\\":\\\"harv\\\",\\\"nice of you to join us\\\":\\\"david\\\",\\\"anotherThing\\\":{\\\"foo\\\":\\\"bar\\\",\\\"blah\\\":null,\\\"harv\\\":123},\\\"vals\\\":[{\\\"thingOne\\\":1},{\\\"thingTwo\\\":2}],\\\"ajTimestamp\\\":1639777617957}\",\n \"Timestamp\" : \"2021-12-17T21:46:58.040Z\",\n \"SignatureVersion\" : \"1\",\n \"Signature\" : \"FR35/7E8C3LHEVk/rC4XxXlXwV/5mNkFNPgDhHSnJ2I6hIoSrTROAm7h5xm1PuBkAeFDvq0zofw91ouk9zZyvhdrMLFIIgrjEyNayRmEffmoEAkzLFUsgtQX7MmTl644r4NuWiM0Oiz7jueRvIcKXcZr7Nc6GJcWV1ymec8oOmuHNMisnPMxI07LIQVYSyAfv6P9r2jEWMVIukRoCzwTnRk4bUUYhPSGHI7OC3AsxxXBbv8snqTrLM/4z2rXCf6jHCKNxWeLlm9/45PphCkEyx5BWS4/71KaoMWUWy8+6CCsy+uF3XTCVmvSEYLyEwTSzOY+vCUjazrRW93498i70g==\",\n \"SigningCertURL\" : \"https://sns.sa-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem\",\n \"UnsubscribeURL\" : \"https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:601427279990:js-library-test-dev-demoTopic-15WGUVRCBMPAA:1290f550-9a8a-4e8f-a900-8f5f96dcddda\",\n \"MessageAttributes\" : {\n \"_datadog\" : {\"Type\":\"String\",\"Value\":\"{\\\"x-datadog-trace-id\\\":\\\"2776434475358637757\\\",\\\"x-datadog-parent-id\\\":\\\"4493917105238181843\\\",\\\"x-datadog-sampled\\\":\\\"1\\\",\\\"x-datadog-sampling-priority\\\":\\\"1\\\"}\"}\n }\n}", + "body": "{\n \"Type\" : \"Notification\",\n \"MessageId\" : \"0a0ab23e-4861-5447-82b7-e8094ff3e332\",\n \"TopicArn\" : \"arn:aws:sns:sa-east-1:425362996713:js-library-test-dev-demoTopic-15WGUVRCBMPAA\",\n \"Message\" : \"{\\\"hello\\\":\\\"harv\\\",\\\"nice of you to join us\\\":\\\"david\\\",\\\"anotherThing\\\":{\\\"foo\\\":\\\"bar\\\",\\\"blah\\\":null,\\\"harv\\\":123},\\\"vals\\\":[{\\\"thingOne\\\":1},{\\\"thingTwo\\\":2}],\\\"ajTimestamp\\\":1639777617957}\",\n \"Timestamp\" : \"2021-12-17T21:46:58.040Z\",\n \"SignatureVersion\" : \"1\",\n \"Signature\" : \"FR35/7E8C3LHEVk/rC4XxXlXwV/5mNkFNPgDhHSnJ2I6hIoSrTROAm7h5xm1PuBkAeFDvq0zofw91ouk9zZyvhdrMLFIIgrjEyNayRmEffmoEAkzLFUsgtQX7MmTl644r4NuWiM0Oiz7jueRvIcKXcZr7Nc6GJcWV1ymec8oOmuHNMisnPMxI07LIQVYSyAfv6P9r2jEWMVIukRoCzwTnRk4bUUYhPSGHI7OC3AsxxXBbv8snqTrLM/4z2rXCf6jHCKNxWeLlm9/45PphCkEyx5BWS4/71KaoMWUWy8+6CCsy+uF3XTCVmvSEYLyEwTSzOY+vCUjazrRW93498i70g==\",\n \"SigningCertURL\" : \"https://sns.sa-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem\",\n \"UnsubscribeURL\" : \"https://sns.sa-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:sa-east-1:425362996713:js-library-test-dev-demoTopic-15WGUVRCBMPAA:1290f550-9a8a-4e8f-a900-8f5f96dcddda\",\n \"MessageAttributes\" : {\n \"_datadog\" : {\"Type\":\"String\",\"Value\":\"{\\\"x-datadog-trace-id\\\":\\\"2776434475358637757\\\",\\\"x-datadog-parent-id\\\":\\\"4493917105238181843\\\",\\\"x-datadog-sampled\\\":\\\"1\\\",\\\"x-datadog-sampling-priority\\\":\\\"1\\\"}\"}\n }\n}", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1639777618130", @@ -13,7 +13,7 @@ "messageAttributes": {}, "md5OfBody": "ee19d8b1377919239ad3fd5dabc33739", "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:sa-east-1:601427279990:aj-js-library-test-dev-demo-queue", + "eventSourceARN": "arn:aws:sqs:sa-east-1:425362996713:aj-js-library-test-dev-demo-queue", "awsRegion": "sa-east-1" } ] diff --git a/pkg/serverless/trace/testdata/event_samples/sqs-batch.json b/pkg/serverless/trace/testdata/event_samples/sqs-batch.json index d3687dcfdb3cf..032bae3ee65ac 100644 --- a/pkg/serverless/trace/testdata/event_samples/sqs-batch.json +++ b/pkg/serverless/trace/testdata/event_samples/sqs-batch.json @@ -21,7 +21,7 @@ "md5OfMessageAttributes": "14b3b4a81d5ddeb96af62963d703c528", "md5OfBody": "24933a8beabe72088d7576cab1a59142", "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:sa-east-1:601427279990:InferredSpansQueueNode", + "eventSourceARN": "arn:aws:sqs:sa-east-1:425362996713:InferredSpansQueueNode", "awsRegion": "sa-east-1" }, { @@ -45,7 +45,7 @@ "md5OfMessageAttributes": "14b3b4a81d5ddeb96af62963d703c528", "md5OfBody": "24933a8beabe72088d7576cab1a59142", "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:sa-east-1:601427279990:InferredSpansQueueNode", + "eventSourceARN": "arn:aws:sqs:sa-east-1:425362996713:InferredSpansQueueNode", "awsRegion": "sa-east-1" } ] diff --git a/pkg/serverless/trace/testdata/event_samples/sqs.json b/pkg/serverless/trace/testdata/event_samples/sqs.json index c182704be8e07..fa7fbc86dc001 100644 --- a/pkg/serverless/trace/testdata/event_samples/sqs.json +++ b/pkg/serverless/trace/testdata/event_samples/sqs.json @@ -21,7 +21,7 @@ "md5OfMessageAttributes": "14b3b4a81d5ddeb96af62963d703c528", "md5OfBody": "24933a8beabe72088d7576cab1a59142", "eventSource": "aws:sqs", - "eventSourceARN": "arn:aws:sqs:sa-east-1:601427279990:InferredSpansQueueNode", + "eventSourceARN": "arn:aws:sqs:sa-east-1:425362996713:InferredSpansQueueNode", "awsRegion": "sa-east-1" } ] diff --git a/pkg/serverless/trace/trace.go b/pkg/serverless/trace/trace.go index 83564eb9feb1c..036397aa8863e 100644 --- a/pkg/serverless/trace/trace.go +++ b/pkg/serverless/trace/trace.go @@ -8,11 +8,9 @@ package trace import ( "context" "strings" - "sync" tracecmdconfig "github.com/DataDog/datadog-agent/cmd/trace-agent/config" ddConfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/serverless/executioncontext" "github.com/DataDog/datadog-agent/pkg/trace/agent" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" @@ -56,7 +54,7 @@ func (l *LoadConfig) Load() (*config.AgentConfig, error) { } // Start starts the agent -func (s *ServerlessTraceAgent) Start(enabled bool, loadConfig Load, executionContext *executioncontext.ExecutionContext) { +func (s *ServerlessTraceAgent) Start(enabled bool, loadConfig Load, lambdaSpanChan chan<- *pb.Span, coldStartSpanId uint64) { if enabled { // Set the serverless config option which will be used to determine if // hostname should be resolved. Skipping hostname resolution saves >1s @@ -71,13 +69,9 @@ func (s *ServerlessTraceAgent) Start(enabled bool, loadConfig Load, executionCon tc.Hostname = "" tc.SynchronousFlushing = true s.ta = agent.NewAgent(context, tc) - s.spanModifier = &spanModifier{} - if executionContext != nil { - s.spanModifier.coldStartSpanCreator = &ColdStartSpanCreator{ - executionContext: executionContext, - traceAgent: s, - createSpan: &sync.Once{}, - } + s.spanModifier = &spanModifier{ + coldStartSpanId: coldStartSpanId, + lambdaSpanChan: lambdaSpanChan, } s.ta.ModifySpan = s.spanModifier.ModifySpan diff --git a/pkg/serverless/trace/trace_test.go b/pkg/serverless/trace/trace_test.go index f64bbe7bcfdd3..6d0ea8ac50b35 100644 --- a/pkg/serverless/trace/trace_test.go +++ b/pkg/serverless/trace/trace_test.go @@ -15,13 +15,15 @@ import ( "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/pkg/serverless/random" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" ) func TestStartEnabledFalse(t *testing.T) { + lambdaSpanChan := make(chan *pb.Span) var agent = &ServerlessTraceAgent{} - agent.Start(false, nil, nil) + agent.Start(false, nil, lambdaSpanChan, random.Random.Uint64()) defer agent.Stop() assert.Nil(t, agent.ta) assert.Nil(t, agent.Get()) @@ -38,7 +40,8 @@ func (l *LoadConfigMocked) Load() (*config.AgentConfig, error) { func TestStartEnabledTrueInvalidConfig(t *testing.T) { var agent = &ServerlessTraceAgent{} - agent.Start(true, &LoadConfigMocked{}, nil) + lambdaSpanChan := make(chan *pb.Span) + agent.Start(true, &LoadConfigMocked{}, lambdaSpanChan, random.Random.Uint64()) defer agent.Stop() assert.Nil(t, agent.ta) assert.Nil(t, agent.Get()) @@ -47,9 +50,10 @@ func TestStartEnabledTrueInvalidConfig(t *testing.T) { func TestStartEnabledTrueValidConfigUnvalidPath(t *testing.T) { var agent = &ServerlessTraceAgent{} + lambdaSpanChan := make(chan *pb.Span) t.Setenv("DD_API_KEY", "x") - agent.Start(true, &LoadConfig{Path: "invalid.yml"}, nil) + agent.Start(true, &LoadConfig{Path: "invalid.yml"}, lambdaSpanChan, random.Random.Uint64()) defer agent.Stop() assert.NotNil(t, agent.ta) assert.NotNil(t, agent.Get()) @@ -58,8 +62,9 @@ func TestStartEnabledTrueValidConfigUnvalidPath(t *testing.T) { func TestStartEnabledTrueValidConfigValidPath(t *testing.T) { var agent = &ServerlessTraceAgent{} + lambdaSpanChan := make(chan *pb.Span) - agent.Start(true, &LoadConfig{Path: "./testdata/valid.yml"}, nil) + agent.Start(true, &LoadConfig{Path: "./testdata/valid.yml"}, lambdaSpanChan, random.Random.Uint64()) defer agent.Stop() assert.NotNil(t, agent.ta) assert.NotNil(t, agent.Get()) @@ -68,8 +73,10 @@ func TestStartEnabledTrueValidConfigValidPath(t *testing.T) { func TestLoadConfigShouldBeFast(t *testing.T) { startTime := time.Now() + lambdaSpanChan := make(chan *pb.Span) + agent := &ServerlessTraceAgent{} - agent.Start(true, &LoadConfig{Path: "./testdata/valid.yml"}, nil) + agent.Start(true, &LoadConfig{Path: "./testdata/valid.yml"}, lambdaSpanChan, random.Random.Uint64()) defer agent.Stop() assert.True(t, time.Since(startTime) < time.Second) } diff --git a/pkg/serverless/trigger/testData/eventbridge-custom.json b/pkg/serverless/trigger/testData/eventbridge-custom.json index 456980f849878..96c11000600ae 100644 --- a/pkg/serverless/trigger/testData/eventbridge-custom.json +++ b/pkg/serverless/trigger/testData/eventbridge-custom.json @@ -3,7 +3,7 @@ "id": "fd03f394-e769-eff5-08a8-53c228933591", "detail-type": "testdetail", "source": "eventbridge.custom.event.sender", - "account": "601427279990", + "account": "425362996713", "time": "2021-11-04T01:37:45Z", "region": "sa-east-1", "resources": [], diff --git a/pkg/snmp/snmpparse/config_snmp.go b/pkg/snmp/snmpparse/config_snmp.go index 2fbd54131594a..921198aa5d3dc 100644 --- a/pkg/snmp/snmpparse/config_snmp.go +++ b/pkg/snmp/snmpparse/config_snmp.go @@ -12,6 +12,8 @@ import ( yaml "gopkg.in/yaml.v2" "github.com/DataDog/datadog-agent/cmd/agent/api/response" + snmplistener "github.com/DataDog/datadog-agent/pkg/snmp" + "github.com/DataDog/datadog-agent/pkg/api/util" "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/config" @@ -59,6 +61,39 @@ func ParseConfigSnmp(c integration.Config) []SNMPConfig { return snmpconfigs } +func parseConfigSnmpMain() ([]SNMPConfig, error) { + snmpconfigs := []SNMPConfig{} + configs := []snmplistener.Config{} + //the UnmarshalKey stores the result in mapstructures while the snmpconfig is in yaml + //so for each result of the Unmarshal key we storre the result in a tmp SNMPConfig{} object + err := config.Datadog.UnmarshalKey("snmp_listener.configs", &configs) + if err != nil { + fmt.Printf("unable to get snmp config from snmp_listener: %v", err) + return nil, err + } + for c := range configs { + snmpconfig := SNMPConfig{} + + snmpconfig.NetAddress = configs[c].Network + snmpconfig.Port = configs[c].Port + snmpconfig.Version = configs[c].Version + snmpconfig.Timeout = configs[c].Timeout + snmpconfig.Retries = configs[c].Retries + snmpconfig.CommunityString = configs[c].Community + snmpconfig.Username = configs[c].User + snmpconfig.AuthProtocol = configs[c].AuthProtocol + snmpconfig.AuthKey = configs[c].AuthKey + snmpconfig.PrivProtocol = configs[c].PrivProtocol + snmpconfig.PrivKey = configs[c].PrivKey + snmpconfig.Context = configs[c].ContextName + + snmpconfigs = append(snmpconfigs, snmpconfig) + + } + + return snmpconfigs, nil + +} func GetConfigCheckSnmp() ([]SNMPConfig, error) { @@ -91,6 +126,8 @@ func GetConfigCheckSnmp() ([]SNMPConfig, error) { snmpconfigs = append(snmpconfigs, ParseConfigSnmp(c)...) } } + snmpconfigMain, _ := parseConfigSnmpMain() + snmpconfigs = append(snmpconfigs, snmpconfigMain...) return snmpconfigs, nil diff --git a/pkg/snmp/snmpparse/config_snmp_test.go b/pkg/snmp/snmpparse/config_snmp_test.go index 3f38c4557b1b7..3e7d12c379fed 100644 --- a/pkg/snmp/snmpparse/config_snmp_test.go +++ b/pkg/snmp/snmpparse/config_snmp_test.go @@ -6,11 +6,13 @@ package snmpparse import ( + "strings" "testing" "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" + "github.com/DataDog/datadog-agent/pkg/config" ) func TestOneInstance(t *testing.T) { @@ -237,3 +239,42 @@ func assertIP(t *testing.T, input string, snmpConfigList []SNMPConfig, expectedO output := GetIPConfig(input, snmpConfigList) assert.Equal(t, expectedOutput, output) } + +func TestParseConfigSnmpMain(t *testing.T) { + config.Datadog.SetConfigType("yaml") + // ReadConfig stores the Yaml in the config.Datadog object + err := config.Datadog.ReadConfig(strings.NewReader(` +snmp_listener: + configs: + - network_address: 127.0.0.1/30 + snmp_version: 1 + community_string: public + - network_address: 127.0.0.2/30 + snmp_version: 2 + community_string: publicX + - network_address: 127.0.0.4/30 + snmp_version: 3 +`)) + assert.NoError(t, err) + + Output, _ := parseConfigSnmpMain() + Exoutput := []SNMPConfig{ + { + Version: "1", + CommunityString: "public", + NetAddress: "127.0.0.1/30", + }, + { + Version: "2", + CommunityString: "publicX", + NetAddress: "127.0.0.2/30", + }, + { + Version: "3", + NetAddress: "127.0.0.4/30", + }, + } + + assert.Equal(t, Exoutput, Output) + +} diff --git a/pkg/status/templates/process-agent.tmpl b/pkg/status/templates/process-agent.tmpl index e6f47e522f697..735a62c2e6238 100644 --- a/pkg/status/templates/process-agent.tmpl +++ b/pkg/status/templates/process-agent.tmpl @@ -20,6 +20,11 @@ Process Agent Enabled Checks: {{ .expvars.enabled_checks }} Allocated Memory: {{ humanize .expvars.memstats.alloc }} bytes Hostname: {{ .core.metadata.meta.hostname }} + {{- if .expvars.system_probe_process_module_enabled }} + System Probe Process Module Status: Running + {{- else}} + System Probe Process Module Status: Not running + {{- end}} ================= Process Endpoints diff --git a/pkg/tagger/remote/tagger.go b/pkg/tagger/remote/tagger.go index d4dc4760a3f06..e50859916a30e 100644 --- a/pkg/tagger/remote/tagger.go +++ b/pkg/tagger/remote/tagger.go @@ -63,6 +63,7 @@ type Tagger struct { type Options struct { Target string TokenFetcher func() (string, error) + Disabled bool } func NodeAgentOptions() (Options, error) { @@ -73,19 +74,22 @@ func NodeAgentOptions() (Options, error) { } func CLCRunnerOptions() (Options, error) { - target, err := clusteragent.GetClusterAgentEndpoint() - if err != nil { - return Options{}, fmt.Errorf("unable to get cluster agent endpoint: %w", err) + opts := Options{ + Disabled: !config.Datadog.GetBool("clc_runner_remote_tagger_enabled"), } - // gRPC targets do not have a protocol. the DCA endpoint is always HTTPS, - // so a simple `TrimPrefix` is enough. - target = strings.TrimPrefix(target, "https://") + if !opts.Disabled { + target, err := clusteragent.GetClusterAgentEndpoint() + if err != nil { + return opts, fmt.Errorf("unable to get cluster agent endpoint: %w", err) + } + // gRPC targets do not have a protocol. the DCA endpoint is always HTTPS, + // so a simple `TrimPrefix` is enough. + opts.Target = strings.TrimPrefix(target, "https://") + opts.TokenFetcher = security.GetClusterAgentAuthToken - return Options{ - Target: target, - TokenFetcher: security.GetClusterAgentAuthToken, - }, nil + } + return opts, nil } // NewTagger returns an allocated tagger. You still have to run Init() diff --git a/pkg/trace/agent/agent.go b/pkg/trace/agent/agent.go index 1060e1dd7d301..355b8660df33f 100644 --- a/pkg/trace/agent/agent.go +++ b/pkg/trace/agent/agent.go @@ -100,7 +100,6 @@ func NewAgent(ctx context.Context, conf *config.AgentConfig) *Agent { RareSampler: sampler.NewRareSampler(conf), NoPrioritySampler: sampler.NewNoPrioritySampler(conf), EventProcessor: newEventProcessor(conf), - TraceWriter: writer.NewTraceWriter(conf), StatsWriter: writer.NewStatsWriter(conf, statsChan), obfuscator: obfuscate.NewObfuscator(oconf), cardObfuscator: newCreditCardsObfuscator(conf.Obfuscation.CreditCards), @@ -111,6 +110,7 @@ func NewAgent(ctx context.Context, conf *config.AgentConfig) *Agent { agnt.Receiver = api.NewHTTPReceiver(conf, dynConf, in, agnt) agnt.OTLPReceiver = api.NewOTLPReceiver(in, conf) agnt.RemoteConfigHandler = remoteconfighandler.New(conf, agnt.PrioritySampler, agnt.RareSampler, agnt.ErrorsSampler) + agnt.TraceWriter = writer.NewTraceWriter(conf, agnt.PrioritySampler, agnt.ErrorsSampler, agnt.RareSampler) return agnt } @@ -413,8 +413,12 @@ func (a *Agent) processStats(in pb.ClientStatsPayload, lang, tracerVersion strin in.Env = a.conf.DefaultEnv } in.Env = traceutil.NormalizeTag(in.Env) - in.TracerVersion = tracerVersion - in.Lang = lang + if in.TracerVersion == "" { + in.TracerVersion = tracerVersion + } + if in.Lang == "" { + in.Lang = lang + } for i, group := range in.Stats { n := 0 for _, b := range group.Stats { diff --git a/pkg/trace/api/api.go b/pkg/trace/api/api.go index 2fa7c30a190ee..265b2fe48a8b2 100644 --- a/pkg/trace/api/api.go +++ b/pkg/trace/api/api.go @@ -98,7 +98,7 @@ func NewHTTPReceiver(conf *config.AgentConfig, dynConf *sampler.DynamicConfig, o statsProcessor: statsProcessor, conf: conf, dynConf: dynConf, - containerIDProvider: NewIDProvider("/proc"), + containerIDProvider: NewIDProvider(conf.ContainerProcRoot), rateLimiterResponse: rateLimiterResponse, @@ -501,6 +501,7 @@ func (r *HTTPReceiver) handleStats(w http.ResponseWriter, req *http.Request) { req.Header.Set("Accept", "application/msgpack") var in pb.ClientStatsPayload if err := msgp.Decode(rd, &in); err != nil { + log.Errorf("Error decoding pb.ClientStatsPayload: %v", err) httpDecodingError(err, []string{"handler:stats", "codec:msgpack", "v:v0.6"}, w) return } diff --git a/pkg/trace/api/debugger.go b/pkg/trace/api/debugger.go index 0c1d6beb76caa..4bad71c197614 100644 --- a/pkg/trace/api/debugger.go +++ b/pkg/trace/api/debugger.go @@ -62,7 +62,7 @@ func debuggerErrorHandler(err error) http.Handler { // newDebuggerProxy returns a new httputil.ReverseProxy proxying and augmenting requests with headers containing the tags. func newDebuggerProxy(conf *config.AgentConfig, target *url.URL, key string, tags string) *httputil.ReverseProxy { logger := log.NewThrottled(5, 10*time.Second) // limit to 5 messages every 10 seconds - cidProvider := NewIDProvider("/proc") + cidProvider := NewIDProvider(conf.ContainerProcRoot) director := func(req *http.Request) { ddtags := tags containerID := cidProvider.GetContainerID(req.Context(), req.Header) diff --git a/pkg/trace/api/info_test.go b/pkg/trace/api/info_test.go index 1ee9cc23f7da3..214ad47c9cde2 100644 --- a/pkg/trace/api/info_test.go +++ b/pkg/trace/api/info_test.go @@ -6,6 +6,8 @@ package api import ( + "encoding/json" + "fmt" "log" "net/http/httptest" "net/url" @@ -18,6 +20,188 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/testutil" ) +// ensureKeys takes 2 maps, expect and result, and ensures that the set of keys in expect and +// result match. For each key (k) in expect, if expect[k] is of type map[string]interface{}, then +// ensureKeys recurses on expect[k], result[k], prefix + "." + k. +// +// This should ensure that whatever keys and maps are defined in expect are exactly mirrored in +// result, but without checking for specific values in result. +func ensureKeys(expect, result map[string]interface{}, prefix string) error { + for k, ev := range expect { + rv, ok := result[k] + if !ok { + path := k + if prefix != "" { + path = prefix + "." + k + } + return fmt.Errorf("Expected key %s, but it is not present in the output.\n", path) + } + + if em, ok := ev.(map[string]interface{}); ok { + rm, ok := rv.(map[string]interface{}) + if !ok { + return fmt.Errorf("Expected key %s to be a map, but it is '%#v'.\n", k, rv) + } + if prefix != "" { + prefix = prefix + "." + k + } else { + prefix = k + } + if err := ensureKeys(em, rm, prefix); err != nil { + return err + } + } + } + for k := range result { + _, ok := expect[k] + if !ok { + path := k + if prefix != "" { + path = prefix + "." + k + } + return fmt.Errorf("Found key %s, but it is not expected in the output. If you've added a new key to the /info endpoint, please add it to the tests.\n", path) + } + } + return nil +} + +func TestEnsureKeys(t *testing.T) { + for _, tt := range []struct { + expect map[string]interface{} + result map[string]interface{} + err bool + }{ + { + expect: map[string]interface{}{ + "one": nil, + "two": nil, + }, + result: map[string]interface{}{ + "one": 1, + "two": "two", + }, + }, + { + expect: map[string]interface{}{ + "one": nil, + "two": nil, + "three": nil, + }, + result: map[string]interface{}{ + "one": 1, + "two": "two", + }, + err: true, + }, + { + expect: map[string]interface{}{ + "one": nil, + "two": nil, + }, + result: map[string]interface{}{ + "one": 1, + "two": "two", + "three": 3, + }, + err: true, + }, + { + expect: map[string]interface{}{ + "one": nil, + "two": nil, + "sub": map[string]interface{}{ + "subone": nil, + "subtwo": nil, + }, + }, + result: map[string]interface{}{ + "one": 1, + "two": "two", + "sub": map[string]interface{}{ + "subone": 1, + "subtwo": 2, + }, + }, + }, + { + expect: map[string]interface{}{ + "one": nil, + "two": nil, + "sub": map[string]interface{}{ + "subone": nil, + "subtwo": nil, + }, + }, + result: map[string]interface{}{ + "one": 1, + "two": map[string]interface{}{ // Map values not described in expect are NOT checked, so this is OK. + "subone": 1, + "subtwo": 2, + }, + "sub": map[string]interface{}{ + "subone": 1, + "subtwo": 2, + }, + }, + }, + { + expect: map[string]interface{}{ + "one": nil, + "two": nil, + "sub": map[string]interface{}{ + "subone": nil, + "subtwo": nil, + "subthree": nil, + }, + }, + result: map[string]interface{}{ + "one": 1, + "two": map[string]interface{}{ // Map values not described in expect are NOT checked, so this is OK. + "subone": 1, + "subtwo": 2, + }, + "sub": map[string]interface{}{ + "subone": 1, + "subtwo": 2, + }, + }, + err: true, + }, + { + expect: map[string]interface{}{ + "one": nil, + "two": nil, + "sub": map[string]interface{}{ + "subone": nil, + "subtwo": nil, + }, + }, + result: map[string]interface{}{ + "one": 1, + "two": map[string]interface{}{ // Map values not described in expect are NOT checked, so this is OK. + "subone": 1, + "subtwo": 2, + }, + "sub": map[string]interface{}{ + "subone": 1, + "subtwo": 2, + "subthree": 3, + }, + }, + err: true, + }, + } { + t.Run("", func(t *testing.T) { + err := ensureKeys(tt.expect, tt.result, "") + if tt.err { + assert.Error(t, err) + } else { + assert.NoError(t, err) + } + }) + } +} + // TestInfoHandler ensures that the keys returned by the /info handler do not // change from one release to another to ensure consistency. Tracing clients // depend on these keys to be the same. The chances of them changing are quite @@ -26,7 +210,6 @@ import ( // * In case a field name gets modified, the `json:""` struct field tag // should be used to ensure the old key is marshalled for this endpoint. func TestInfoHandler(t *testing.T) { - t.Skip("https://github.com/DataDog/datadog-agent/issues/13569") u, err := url.Parse("http://localhost:8888/proxy") if err != nil { log.Fatal(err) @@ -109,146 +292,52 @@ func TestInfoHandler(t *testing.T) { }, } - var testCases = []struct { - name string - expected string - }{ - { - name: "default", - expected: `{ - "version": "0.99.0", - "git_commit": "fab047e10", - "endpoints": [ - "/v0.3/traces", - "/v0.3/services", - "/v0.4/traces", - "/v0.4/services", - "/v0.5/traces", - "/v0.7/traces", - "/profiling/v1/input", - "/telemetry/proxy/", - "/v0.6/stats", - "/v0.1/pipeline_stats", - "/evp_proxy/v1/", - "/evp_proxy/v2/", - "/debugger/v1/input" - "/dogstatsd/v1/proxy" - ], - "feature_flags": [ - "feature_flag" - ], - "client_drop_p0s": true, - "span_meta_structs": true, - "long_running_spans": true, - "config": { - "default_env": "prod", - "target_tps": 11, - "max_eps": 12, - "receiver_port": 8111, - "receiver_socket": "/sock/path", - "connection_limit": 12, - "receiver_timeout": 100, - "max_request_bytes": 123, - "statsd_port": 123, - "max_memory": 1000000, - "max_cpu": 12345, - "analyzed_spans_by_service": { - "X": { - "Y": 2.4 - } - }, - "obfuscation": { - "elastic_search": true, - "mongo": true, - "sql_exec_plan": true, - "sql_exec_plan_normalize": true, - "http": { - "remove_query_string": true, - "remove_path_digits": true - }, - "remove_stack_traces": false, - "redis": true, - "memcached": false - } - } -}`, - }, - { - name: "debug", - expected: `{ - "version": "0.99.0", - "git_commit": "fab047e10", - "endpoints": [ - "/v0.3/traces", - "/v0.3/services", - "/v0.4/traces", - "/v0.4/services", - "/v0.5/traces", - "/v0.7/traces", - "/profiling/v1/input", - "/telemetry/proxy/", - "/v0.6/stats", - "/v0.1/pipeline_stats", - "/evp_proxy/v1/", - "/evp_proxy/v2/", - "/evp_proxy/v3/", - "/debugger/v1/input" - "/dogstatsd/v1/proxy" - ], - "feature_flags": [ - "feature_flag" - ], - "client_drop_p0s": true, - "span_meta_structs": true, - "long_running_spans": true, - "config": { - "default_env": "prod", - "target_tps": 11, - "max_eps": 12, - "receiver_port": 8111, - "receiver_socket": "/sock/path", - "connection_limit": 12, - "receiver_timeout": 100, - "max_request_bytes": 123, - "statsd_port": 123, - "max_memory": 1000000, - "max_cpu": 12345, - "analyzed_spans_by_service": { - "X": { - "Y": 2.4 - } - }, - "obfuscation": { - "elastic_search": true, - "mongo": true, - "sql_exec_plan": true, - "sql_exec_plan_normalize": true, - "http": { - "remove_query_string": true, - "remove_path_digits": true - }, - "remove_stack_traces": false, - "redis": true, - "memcached": false - } - } -}`, + expectedKeys := map[string]interface{}{ + "version": nil, + "git_commit": nil, + "endpoints": nil, + "feature_flags": nil, + "client_drop_p0s": nil, + "span_meta_structs": nil, + "long_running_spans": nil, + "config": map[string]interface{}{ + "default_env": nil, + "target_tps": nil, + "max_eps": nil, + "receiver_port": nil, + "receiver_socket": nil, + "connection_limit": nil, + "receiver_timeout": nil, + "max_request_bytes": nil, + "statsd_port": nil, + "max_memory": nil, + "max_cpu": nil, + "analyzed_spans_by_service": nil, + "obfuscation": map[string]interface{}{ + "elastic_search": nil, + "mongo": nil, + "sql_exec_plan": nil, + "sql_exec_plan_normalize": nil, + "http": map[string]interface{}{ + "remove_query_string": nil, + "remove_path_digits": nil, + }, + "remove_stack_traces": nil, + "redis": nil, + "memcached": nil, + }, }, } - for _, tt := range testCases { - t.Run(tt.name, func(t *testing.T) { - rcv := newTestReceiverFromConfig(conf) - defer testutil.WithFeatures("feature_flag")() - _, h := rcv.makeInfoHandler() - rec := httptest.NewRecorder() - req := httptest.NewRequest("GET", "/info", nil) - h.ServeHTTP(rec, req) - assert.Equal(t, tt.expected, rec.Body.String()) - if rec.Body.String() != tt.expected { - t.Fatalf("Output of /info has changed. Changing the keys "+ - "is not allowed because the client rely on them and "+ - "is considered a breaking change:\n\n%v", rec.Body.String()) - } - }) + + rcv := newTestReceiverFromConfig(conf) + defer testutil.WithFeatures("feature_flag")() + _, h := rcv.makeInfoHandler() + rec := httptest.NewRecorder() + req := httptest.NewRequest("GET", "/info", nil) + h.ServeHTTP(rec, req) + var m map[string]interface{} + if !assert.NoError(t, json.NewDecoder(rec.Body).Decode(&m)) { + return } + assert.NoError(t, ensureKeys(expectedKeys, m, "")) } diff --git a/pkg/trace/api/otlp.go b/pkg/trace/api/otlp.go index f132583941dc7..d655962227359 100644 --- a/pkg/trace/api/otlp.go +++ b/pkg/trace/api/otlp.go @@ -39,6 +39,10 @@ import ( "google.golang.org/grpc/metadata" ) +// keyStatsComputed specifies the resource attribute key which indicates if stats have been +// computed for the resource spans. +const keyStatsComputed = "_dd.stats_computed" + const ( // otlpProtocolHTTP specifies that the incoming connection was made over plain HTTP. otlpProtocolHTTP = "http" @@ -59,7 +63,7 @@ type OTLPReceiver struct { // NewOTLPReceiver returns a new OTLPReceiver which sends any incoming traces down the out channel. func NewOTLPReceiver(out chan<- *Payload, cfg *config.AgentConfig) *OTLPReceiver { - return &OTLPReceiver{out: out, conf: cfg, cidProvider: NewIDProvider("/proc")} + return &OTLPReceiver{out: out, conf: cfg, cidProvider: NewIDProvider(cfg.ContainerProcRoot)} } // Start starts the OTLPReceiver, if any of the servers were configured as active. @@ -299,7 +303,8 @@ func (o *OTLPReceiver) ReceiveResourceSpans(ctx context.Context, rspans ptrace.R metrics.Count("datadog.trace_agent.otlp.traces", int64(len(tracesByID)), tags, 1) traceChunks := make([]*pb.TraceChunk, 0, len(tracesByID)) p := Payload{ - Source: tagstats, + Source: tagstats, + ClientComputedStats: rattr[keyStatsComputed] != "", } for k, spans := range tracesByID { prio := int32(sampler.PriorityAutoKeep) @@ -354,7 +359,7 @@ func (o *OTLPReceiver) ReceiveResourceSpans(ctx context.Context, rspans ptrace.R } select { case o.out <- &p: - // 👍 + // success default: log.Warn("Payload in channel full. Dropped 1 payload.") } diff --git a/pkg/trace/api/otlp_test.go b/pkg/trace/api/otlp_test.go index ec3a60b13c967..ecb1b832de003 100644 --- a/pkg/trace/api/otlp_test.go +++ b/pkg/trace/api/otlp_test.go @@ -340,7 +340,8 @@ func TestOTLPReceiveResourceSpans(t *testing.T) { }, } { t.Run("", func(t *testing.T) { - rcv.ReceiveResourceSpans(context.Background(), testutil.NewOTLPTracesRequest(tt.in).Traces().ResourceSpans().At(0), http.Header{}, "agent_tests") + rspans := testutil.NewOTLPTracesRequest(tt.in).Traces().ResourceSpans().At(0) + rcv.ReceiveResourceSpans(context.Background(), rspans, http.Header{}, "agent_tests") timeout := time.After(500 * time.Millisecond) select { case <-timeout: @@ -350,6 +351,28 @@ func TestOTLPReceiveResourceSpans(t *testing.T) { } }) } + + t.Run("ClientComputedStats", func(t *testing.T) { + rspans := testutil.NewOTLPTracesRequest([]testutil.OTLPResourceSpan{ + { + LibName: "libname", + LibVersion: "1.2", + Attributes: map[string]interface{}{}, + Spans: []*testutil.OTLPSpan{ + {Attributes: map[string]interface{}{string(semconv.AttributeK8SPodUID): "123cid"}}, + }, + }, + }).Traces().ResourceSpans().At(0) + rcv.ReceiveResourceSpans(context.Background(), rspans, http.Header{}, "agent_tests") + timeout := time.After(500 * time.Millisecond) + select { + case <-timeout: + t.Fatal("timed out") + case p := <-out: + // stats are computed this time + require.False(p.ClientComputedStats) + } + }) } func TestOTLPSetAttributes(t *testing.T) { diff --git a/pkg/trace/api/pipeline_stats.go b/pkg/trace/api/pipeline_stats.go index 288ae62bc9419..25f233fad4223 100644 --- a/pkg/trace/api/pipeline_stats.go +++ b/pkg/trace/api/pipeline_stats.go @@ -62,7 +62,7 @@ func pipelineStatsErrorHandler(err error) http.Handler { // newPipelineStatsProxy creates an http.ReverseProxy which forwards requests to the pipeline stats intake. // The tags will be added as a header to all proxied requests. func newPipelineStatsProxy(conf *config.AgentConfig, target *url.URL, key string, tags string) *httputil.ReverseProxy { - cidProvider := NewIDProvider("/proc") + cidProvider := NewIDProvider(conf.ContainerProcRoot) director := func(req *http.Request) { req.Header.Set("Via", fmt.Sprintf("trace-agent %s", conf.AgentVersion)) if _, ok := req.Header["User-Agent"]; !ok { diff --git a/pkg/trace/api/profiles.go b/pkg/trace/api/profiles.go index 967f1c7a9de13..2ddf0967d50ab 100644 --- a/pkg/trace/api/profiles.go +++ b/pkg/trace/api/profiles.go @@ -100,7 +100,7 @@ func errorHandler(err error) http.Handler { // The tags will be added as a header to all proxied requests. // For more details please see multiTransport. func newProfileProxy(conf *config.AgentConfig, targets []*url.URL, keys []string, tags string) *httputil.ReverseProxy { - cidProvider := NewIDProvider("/proc") + cidProvider := NewIDProvider(conf.ContainerProcRoot) director := func(req *http.Request) { req.Header.Set("Via", fmt.Sprintf("trace-agent %s", conf.AgentVersion)) if _, ok := req.Header["User-Agent"]; !ok { diff --git a/pkg/trace/api/version.go b/pkg/trace/api/version.go index cb3268c8dd842..7e5c41558de75 100644 --- a/pkg/trace/api/version.go +++ b/pkg/trace/api/version.go @@ -20,16 +20,51 @@ const ( v03 Version = "v0.3" // v04 - // Traces: msgpack/JSON (Content-Type) slice of traces + returns service sampling ratios + // + // Request: Trace chunks. + // Content-Type: application/msgpack + // Payload: An array of arrays of Span (pkg/trace/pb/span.proto) + // + // Response: Service sampling rates. + // Content-Type: application/json + // Payload: Object mapping span pattern to sample rate. + // + // The response payload is an object whose keys are of the form + // "service:my-service,env:my-env", where "my-service" is the name of the + // affected service, and "my-env" is the name of the relevant deployment + // environment. The value at each key is the sample rate to apply to traces + // beginning with a span that matches the key. + // + // { + // "service:foosvc,env:prod": 0.223443, + // "service:barsvc,env:staging": 0.011249 + // } + // + // There is a special key, "service:,env:", that denotes the sample rate for + // traces that do not match any other key. + // + // { + // "service:foosvc,env:prod": 0.223443, + // "service:barsvc,env:staging": 0.011249, + // "service:,env:": 0.5 + // } + // + // Neither the "service:,env:" key nor any other need be present in the + // response. + // + // {} + // v04 Version = "v0.4" // v05 // - // Content-Type: application/msgpack - // Payload: Traces with strings de-duplicated into a dictionary. - // Response: Service sampling rates. + // Request: Trace chunks with a shared dictionary of strings. + // Content-Type: application/msgpack + // Payload: Traces with strings de-duplicated into a dictionary (see below). // - // The payload is an array containing exactly 2 elements: + // Response: Service sampling rates (see description in v04). + // + // The request payload is an array containing exactly 2 elements: // // 1. An array of all unique strings present in the payload (a dictionary referred to by index). // 2. An array of traces, where each trace is an array of spans. A span is encoded as an array having @@ -76,9 +111,11 @@ const ( // V07 API // - // Content-Type: application/msgpack - // Payload: TracerPayload (pkg/trace/pb/tracer_payload.proto) - // Response: Service sampling rates. + // Request: Tracer Payload. + // Content-Type: application/msgpack + // Payload: TracerPayload (pkg/trace/pb/tracer_payload.proto) + // + // Response: Service sampling rates (see description in v04). // V07 Version = "v0.7" ) diff --git a/pkg/trace/config/config.go b/pkg/trace/config/config.go index f2501172054e3..cd281d21a3949 100644 --- a/pkg/trace/config/config.go +++ b/pkg/trace/config/config.go @@ -414,7 +414,7 @@ type AgentConfig struct { MaxCatalogEntries int // RemoteSamplingClient retrieves sampling updates from the remote config backend - RemoteSamplingClient RemoteClient + RemoteSamplingClient RemoteClient `json:"-"` // ContainerTags ... ContainerTags func(cid string) ([]string, error) `json:"-"` @@ -464,7 +464,7 @@ func New() *AgentConfig { ReceiverHost: "localhost", ReceiverPort: 8126, - MaxRequestBytes: 50 * 1024 * 1024, // 50MB + MaxRequestBytes: 25 * 1024 * 1024, // 25MB PipeBufferSize: 1_000_000, PipeSecurityDescriptor: "D:AI(A;;GA;;;WD)", GUIPort: "5002", diff --git a/pkg/trace/filters/blacklister.go b/pkg/trace/filters/blacklister.go index 9853f3dffbda4..28fd436c6f293 100644 --- a/pkg/trace/filters/blacklister.go +++ b/pkg/trace/filters/blacklister.go @@ -50,7 +50,7 @@ func compileRules(exprs []string) []*regexp.Regexp { for _, entry := range exprs { rule, err := regexp.Compile(entry) if err != nil { - log.Errorf("Invalid resource filter: %q", entry) + log.Errorf("Invalid resource filter: %s: %s", entry, err) continue } list = append(list, rule) diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index da4aab707818d..9b13d31d246c3 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -10,14 +10,15 @@ go 1.18 replace github.com/docker/distribution => github.com/docker/distribution v2.8.1+incompatible require ( - github.com/DataDog/datadog-agent/pkg/obfuscate v0.41.0-rc.3 - github.com/DataDog/datadog-agent/pkg/otlp/model v0.41.0-rc.3 - github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.41.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/cgroups v0.41.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.41.0-rc.3 + github.com/DataDog/datadog-agent/pkg/obfuscate v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/otlp/model v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/cgroups v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.42.0-rc.3 github.com/DataDog/datadog-go/v5 v5.1.1 github.com/DataDog/sketches-go v1.4.1 github.com/Microsoft/go-winio v0.5.2 + github.com/davecgh/go-spew v1.1.1 github.com/gogo/protobuf v1.3.2 github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.2 @@ -27,22 +28,22 @@ require ( github.com/stretchr/testify v1.8.1 github.com/tinylib/msgp v1.1.6 github.com/vmihailenco/msgpack/v4 v4.3.12 - go.opentelemetry.io/collector/pdata v0.66.0 - go.opentelemetry.io/collector/semconv v0.66.0 + go.opentelemetry.io/collector/pdata v1.0.0-rc2 + go.opentelemetry.io/collector/semconv v0.68.0 go.uber.org/atomic v1.10.0 - golang.org/x/sys v0.2.0 + golang.org/x/sys v0.3.0 golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba google.golang.org/grpc v1.51.0 k8s.io/apimachinery v0.23.8 ) require ( - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.41.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.42.0-rc.3 // indirect + github.com/DataDog/go-tuf v0.3.0--fix-localmeta-fork // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/containerd/cgroups v1.0.4 // indirect github.com/coreos/go-systemd/v22 v22.3.2 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/docker/go-units v0.4.0 // indirect @@ -61,13 +62,12 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/secure-systems-lab/go-securesystemslib v0.3.1 // indirect - github.com/theupdateframework/go-tuf v0.3.0 // indirect + github.com/secure-systems-lab/go-securesystemslib v0.4.0 // indirect github.com/tklauser/go-sysconf v0.3.10 // indirect github.com/tklauser/numcpus v0.5.0 // indirect github.com/vmihailenco/tagparser v0.1.2 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.uber.org/multierr v1.8.0 // indirect + go.uber.org/multierr v1.9.0 // indirect golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect golang.org/x/text v0.4.0 // indirect diff --git a/pkg/trace/go.sum b/pkg/trace/go.sum index 8b259689b8a1f..0dfd769172eff 100644 --- a/pkg/trace/go.sum +++ b/pkg/trace/go.sum @@ -3,6 +3,8 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/datadog-go/v5 v5.1.1 h1:JLZ6s2K1pG2h9GkvEvMdEGqMDyVLEAccdX5TltWcLMU= github.com/DataDog/datadog-go/v5 v5.1.1/go.mod h1:KhiYb2Badlv9/rofz+OznKoEF5XKTonWyhx5K83AP8E= +github.com/DataDog/go-tuf v0.3.0--fix-localmeta-fork h1:yBq5PrAtrM4yVeSzQ+bn050+Ysp++RKF1QmtkL4VqvU= +github.com/DataDog/go-tuf v0.3.0--fix-localmeta-fork/go.mod h1:yA5JwkZsHTLuqq3zaRgUQf35DfDkpOZqgtBqHKpwrBs= github.com/DataDog/sketches-go v1.4.1 h1:j5G6as+9FASM2qC36lvpvQAj9qsv/jUs3FtO8CwZNAY= github.com/DataDog/sketches-go v1.4.1/go.mod h1:xJIXldczJyyjnbDop7ZZcLxJdV3+7Kra7H1KMgpgkLk= github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= @@ -186,8 +188,9 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/secure-systems-lab/go-securesystemslib v0.3.1 h1:LJuyMziazadwmQRRu1M7GMUo5S1oH1+YxU9FjuSFU8k= github.com/secure-systems-lab/go-securesystemslib v0.3.1/go.mod h1:o8hhjkbNl2gOamKUA/eNW3xUrntHT9L4W89W1nfj43U= +github.com/secure-systems-lab/go-securesystemslib v0.4.0 h1:b23VGrQhTA8cN2CbBw7/FulN9fTtqYUdS5+Oxzt+DUE= +github.com/secure-systems-lab/go-securesystemslib v0.4.0/go.mod h1:FGBZgq2tXWICsxWQW1msNf49F0Pf2Op5Htayx335Qbs= github.com/shirou/gopsutil/v3 v3.22.9 h1:yibtJhIVEMcdw+tCTbOPiF1VcsuDeTE4utJ8Dm4c5eA= github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -209,8 +212,6 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/theupdateframework/go-tuf v0.3.0 h1:od2sc5+BSkKZhmUG2o2rmruy0BGSmhrbDhCnpxh87X8= -github.com/theupdateframework/go-tuf v0.3.0/go.mod h1:E5XP0wXitrFUHe4b8cUcAAdxBW4LbfnqF4WXXGLgWNo= github.com/tinylib/msgp v1.1.6 h1:i+SbKraHhnrf9M5MYmvQhFnbLhAXSDWF8WWsuyRdocw= github.com/tinylib/msgp v1.1.6/go.mod h1:75BAfg2hauQhs3qedfdDZmWAPcFMAvJE5b9rGOMufyw= github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= @@ -228,16 +229,15 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.opentelemetry.io/collector/pdata v0.66.0 h1:UdE5U6MsDNzuiWaXdjGx2lC3ElVqWmN/hiUE8vyvSuM= -go.opentelemetry.io/collector/pdata v0.66.0/go.mod h1:pqyaznLzk21m+1KL6fwOsRryRELL+zNM0qiVSn0MbVc= -go.opentelemetry.io/collector/semconv v0.66.0 h1:gz4fYzOVOt1EQCcOL6pbSmTRj93pZErjHD+H100pH+4= -go.opentelemetry.io/collector/semconv v0.66.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= +go.opentelemetry.io/collector/pdata v1.0.0-rc2 h1:sNWuA5wlrT578sv+DhADQ3DCRFG+5+H0D2xCHtQmnis= +go.opentelemetry.io/collector/pdata v1.0.0-rc2/go.mod h1:3gknzI1BqPVbEprOIbtaPQgPAYvjRf8kdkpGMJjv14E= +go.opentelemetry.io/collector/semconv v0.68.0 h1:DUDowH6l4OFlecQg8zyffTmUrhu3N9qwr3wtS9Oy6pE= +go.opentelemetry.io/collector/semconv v0.68.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -311,8 +311,8 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/pkg/trace/pb/agent_payload.pb.go b/pkg/trace/pb/agent_payload.pb.go index 054af530a1fa5..69ca272a23e94 100644 --- a/pkg/trace/pb/agent_payload.pb.go +++ b/pkg/trace/pb/agent_payload.pb.go @@ -1,24 +1,27 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: agent_payload.proto package pb -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import io "io" +import ( + encoding_binary "encoding/binary" + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + // AgentPayload represents payload the agent sends to the intake. type AgentPayload struct { // hostName specifies hostname of where the agent is running. @@ -26,21 +29,65 @@ type AgentPayload struct { // env specifies `env` set in agent configuration. Env string `protobuf:"bytes,2,opt,name=env,proto3" json:"env,omitempty"` // tracerPayloads specifies list of the payloads received from tracers. - TracerPayloads []*TracerPayload `protobuf:"bytes,5,rep,name=tracerPayloads" json:"tracerPayloads,omitempty"` + TracerPayloads []*TracerPayload `protobuf:"bytes,5,rep,name=tracerPayloads,proto3" json:"tracerPayloads,omitempty"` // tags specifies tags common in all `tracerPayloads`. - Tags map[string]string `protobuf:"bytes,6,rep,name=tags" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Tags map[string]string `protobuf:"bytes,6,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // agentVersion specifies version of the agent. AgentVersion string `protobuf:"bytes,7,opt,name=agentVersion,proto3" json:"agentVersion,omitempty"` // targetTPS holds `TargetTPS` value in AgentConfig. TargetTPS float64 `protobuf:"fixed64,8,opt,name=targetTPS,proto3" json:"targetTPS,omitempty"` // errorTPS holds `ErrorTPS` value in AgentConfig. ErrorTPS float64 `protobuf:"fixed64,9,opt,name=errorTPS,proto3" json:"errorTPS,omitempty"` + // rareSamplerEnabled holds `RareSamplerEnabled` value in AgentConfig + RareSamplerEnabled bool `protobuf:"varint,10,opt,name=rareSamplerEnabled,proto3" json:"rareSamplerEnabled,omitempty"` } -func (m *AgentPayload) Reset() { *m = AgentPayload{} } -func (m *AgentPayload) String() string { return proto.CompactTextString(m) } -func (*AgentPayload) ProtoMessage() {} -func (*AgentPayload) Descriptor() ([]byte, []int) { return fileDescriptorAgentPayload, []int{0} } +func (m *AgentPayload) Reset() { *m = AgentPayload{} } +func (m *AgentPayload) String() string { return proto.CompactTextString(m) } +func (*AgentPayload) ProtoMessage() {} +func (*AgentPayload) Descriptor() ([]byte, []int) { + return fileDescriptor_bddccf659a49dc88, []int{0} +} +func (m *AgentPayload) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AgentPayload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AgentPayload.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AgentPayload) XXX_Merge(src proto.Message) { + xxx_messageInfo_AgentPayload.Merge(m, src) +} +func (m *AgentPayload) XXX_Size() int { + return m.Size() +} +func (m *AgentPayload) XXX_DiscardUnknown() { + xxx_messageInfo_AgentPayload.DiscardUnknown(m) +} + +var xxx_messageInfo_AgentPayload proto.InternalMessageInfo + +func (m *AgentPayload) GetHostName() string { + if m != nil { + return m.HostName + } + return "" +} + +func (m *AgentPayload) GetEnv() string { + if m != nil { + return m.Env + } + return "" +} func (m *AgentPayload) GetTracerPayloads() []*TracerPayload { if m != nil { @@ -56,42 +103,98 @@ func (m *AgentPayload) GetTags() map[string]string { return nil } +func (m *AgentPayload) GetAgentVersion() string { + if m != nil { + return m.AgentVersion + } + return "" +} + +func (m *AgentPayload) GetTargetTPS() float64 { + if m != nil { + return m.TargetTPS + } + return 0 +} + +func (m *AgentPayload) GetErrorTPS() float64 { + if m != nil { + return m.ErrorTPS + } + return 0 +} + +func (m *AgentPayload) GetRareSamplerEnabled() bool { + if m != nil { + return m.RareSamplerEnabled + } + return false +} + func init() { proto.RegisterType((*AgentPayload)(nil), "pb.AgentPayload") + proto.RegisterMapType((map[string]string)(nil), "pb.AgentPayload.TagsEntry") } -func (m *AgentPayload) Marshal() (data []byte, err error) { + +func init() { proto.RegisterFile("agent_payload.proto", fileDescriptor_bddccf659a49dc88) } + +var fileDescriptor_bddccf659a49dc88 = []byte{ + // 306 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x51, 0xbd, 0x4e, 0xf3, 0x40, + 0x10, 0xcc, 0x39, 0x5f, 0xf2, 0xc5, 0x4b, 0x84, 0xe0, 0x48, 0x71, 0xb2, 0x90, 0x65, 0xa5, 0x72, + 0xe5, 0x02, 0x0a, 0x7e, 0x3a, 0x90, 0xd2, 0xa2, 0xc8, 0x89, 0x68, 0xd1, 0x9a, 0xac, 0x0c, 0xc2, + 0xf1, 0x59, 0xeb, 0x23, 0x52, 0xde, 0x82, 0xc7, 0xa2, 0x4c, 0x49, 0x89, 0x92, 0x9e, 0x67, 0x40, + 0x77, 0x89, 0x42, 0x82, 0xe8, 0x76, 0x66, 0x76, 0x4e, 0xb3, 0x73, 0x70, 0x82, 0x39, 0x95, 0xe6, + 0xa1, 0xc2, 0x79, 0xa1, 0x71, 0x92, 0x54, 0xac, 0x8d, 0x96, 0x5e, 0x95, 0x05, 0x3d, 0xc3, 0xf8, + 0x48, 0xbc, 0xaf, 0xf4, 0xbf, 0x3c, 0xe8, 0xde, 0x58, 0xc7, 0x70, 0x4d, 0xcb, 0x00, 0x3a, 0x4f, + 0xba, 0x36, 0x77, 0x38, 0x25, 0x25, 0x22, 0x11, 0xfb, 0xe9, 0x16, 0xcb, 0x23, 0x68, 0x52, 0x39, + 0x53, 0x9e, 0xa3, 0xed, 0x28, 0xaf, 0xe0, 0x70, 0xfd, 0xec, 0xc6, 0x5e, 0xab, 0x56, 0xd4, 0x8c, + 0x0f, 0xce, 0x8e, 0x93, 0x2a, 0x4b, 0xc6, 0xbb, 0x4a, 0xfa, 0x6b, 0x51, 0x26, 0xf0, 0xcf, 0x60, + 0x5e, 0xab, 0xb6, 0x33, 0x04, 0xd6, 0xb0, 0x1b, 0x24, 0x19, 0x63, 0x5e, 0x0f, 0x4a, 0xc3, 0xf3, + 0xd4, 0xed, 0xc9, 0x3e, 0x74, 0xdd, 0x69, 0xf7, 0xc4, 0xf5, 0xb3, 0x2e, 0xd5, 0x7f, 0x97, 0x62, + 0x8f, 0x93, 0xa7, 0xe0, 0x1b, 0xe4, 0x9c, 0xcc, 0x78, 0x38, 0x52, 0x9d, 0x48, 0xc4, 0x22, 0xfd, + 0x21, 0xec, 0x69, 0xc4, 0xac, 0xd9, 0x8a, 0xbe, 0x13, 0xb7, 0x58, 0x26, 0x20, 0x19, 0x99, 0x46, + 0x38, 0xad, 0x0a, 0xe2, 0x41, 0x89, 0x59, 0x41, 0x13, 0x05, 0x91, 0x88, 0x3b, 0xe9, 0x1f, 0x4a, + 0x70, 0x01, 0xfe, 0x36, 0xa0, 0xed, 0xe5, 0x85, 0xe6, 0x9b, 0xba, 0xec, 0x28, 0x7b, 0xd0, 0x9a, + 0x61, 0xf1, 0x4a, 0x9b, 0xae, 0xd6, 0xe0, 0xda, 0xbb, 0x14, 0xb7, 0xea, 0x7d, 0x19, 0x8a, 0xc5, + 0x32, 0x14, 0x9f, 0xcb, 0x50, 0xbc, 0xad, 0xc2, 0xc6, 0x62, 0x15, 0x36, 0x3e, 0x56, 0x61, 0x23, + 0x6b, 0xbb, 0x1f, 0x39, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xa8, 0xf9, 0xd4, 0x6f, 0xc2, 0x01, + 0x00, 0x00, +} + +func (m *AgentPayload) Marshal() (dAtA []byte, err error) { size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) if err != nil { return nil, err } - return data[:n], nil + return dAtA[:n], nil } -func (m *AgentPayload) MarshalTo(data []byte) (int, error) { +func (m *AgentPayload) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int _ = l if len(m.HostName) > 0 { - data[i] = 0xa + dAtA[i] = 0xa i++ - i = encodeVarintAgentPayload(data, i, uint64(len(m.HostName))) - i += copy(data[i:], m.HostName) + i = encodeVarintAgentPayload(dAtA, i, uint64(len(m.HostName))) + i += copy(dAtA[i:], m.HostName) } if len(m.Env) > 0 { - data[i] = 0x12 + dAtA[i] = 0x12 i++ - i = encodeVarintAgentPayload(data, i, uint64(len(m.Env))) - i += copy(data[i:], m.Env) + i = encodeVarintAgentPayload(dAtA, i, uint64(len(m.Env))) + i += copy(dAtA[i:], m.Env) } if len(m.TracerPayloads) > 0 { for _, msg := range m.TracerPayloads { - data[i] = 0x2a + dAtA[i] = 0x2a i++ - i = encodeVarintAgentPayload(data, i, uint64(msg.Size())) - n, err := msg.MarshalTo(data[i:]) + i = encodeVarintAgentPayload(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) if err != nil { return 0, err } @@ -99,69 +202,66 @@ func (m *AgentPayload) MarshalTo(data []byte) (int, error) { } } if len(m.Tags) > 0 { - for k := range m.Tags { - data[i] = 0x32 + for k, _ := range m.Tags { + dAtA[i] = 0x32 i++ v := m.Tags[k] mapSize := 1 + len(k) + sovAgentPayload(uint64(len(k))) + 1 + len(v) + sovAgentPayload(uint64(len(v))) - i = encodeVarintAgentPayload(data, i, uint64(mapSize)) - data[i] = 0xa + i = encodeVarintAgentPayload(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa i++ - i = encodeVarintAgentPayload(data, i, uint64(len(k))) - i += copy(data[i:], k) - data[i] = 0x12 + i = encodeVarintAgentPayload(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 i++ - i = encodeVarintAgentPayload(data, i, uint64(len(v))) - i += copy(data[i:], v) + i = encodeVarintAgentPayload(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) } } if len(m.AgentVersion) > 0 { - data[i] = 0x3a + dAtA[i] = 0x3a i++ - i = encodeVarintAgentPayload(data, i, uint64(len(m.AgentVersion))) - i += copy(data[i:], m.AgentVersion) + i = encodeVarintAgentPayload(dAtA, i, uint64(len(m.AgentVersion))) + i += copy(dAtA[i:], m.AgentVersion) } if m.TargetTPS != 0 { - data[i] = 0x41 + dAtA[i] = 0x41 i++ - i = encodeFixed64AgentPayload(data, i, uint64(math.Float64bits(float64(m.TargetTPS)))) + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.TargetTPS)))) + i += 8 } if m.ErrorTPS != 0 { - data[i] = 0x49 + dAtA[i] = 0x49 + i++ + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(m.ErrorTPS)))) + i += 8 + } + if m.RareSamplerEnabled { + dAtA[i] = 0x50 + i++ + if m.RareSamplerEnabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } i++ - i = encodeFixed64AgentPayload(data, i, uint64(math.Float64bits(float64(m.ErrorTPS)))) } return i, nil } -func encodeFixed64AgentPayload(data []byte, offset int, v uint64) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - data[offset+4] = uint8(v >> 32) - data[offset+5] = uint8(v >> 40) - data[offset+6] = uint8(v >> 48) - data[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32AgentPayload(data []byte, offset int, v uint32) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintAgentPayload(data []byte, offset int, v uint64) int { +func encodeVarintAgentPayload(dAtA []byte, offset int, v uint64) int { for v >= 1<<7 { - data[offset] = uint8(v&0x7f | 0x80) + dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } - data[offset] = uint8(v) + dAtA[offset] = uint8(v) return offset + 1 } func (m *AgentPayload) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.HostName) @@ -196,6 +296,9 @@ func (m *AgentPayload) Size() (n int) { if m.ErrorTPS != 0 { n += 9 } + if m.RareSamplerEnabled { + n += 2 + } return n } @@ -212,8 +315,8 @@ func sovAgentPayload(x uint64) (n int) { func sozAgentPayload(x uint64) (n int) { return sovAgentPayload(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *AgentPayload) Unmarshal(data []byte) error { - l := len(data) +func (m *AgentPayload) Unmarshal(dAtA []byte) error { + l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx @@ -225,9 +328,9 @@ func (m *AgentPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -253,9 +356,9 @@ func (m *AgentPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -265,10 +368,13 @@ func (m *AgentPayload) Unmarshal(data []byte) error { return ErrInvalidLengthAgentPayload } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAgentPayload + } if postIndex > l { return io.ErrUnexpectedEOF } - m.HostName = string(data[iNdEx:postIndex]) + m.HostName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { @@ -282,9 +388,9 @@ func (m *AgentPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -294,10 +400,13 @@ func (m *AgentPayload) Unmarshal(data []byte) error { return ErrInvalidLengthAgentPayload } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAgentPayload + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Env = string(data[iNdEx:postIndex]) + m.Env = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 5: if wireType != 2 { @@ -311,9 +420,9 @@ func (m *AgentPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -322,11 +431,14 @@ func (m *AgentPayload) Unmarshal(data []byte) error { return ErrInvalidLengthAgentPayload } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthAgentPayload + } if postIndex > l { return io.ErrUnexpectedEOF } m.TracerPayloads = append(m.TracerPayloads, &TracerPayload{}) - if err := m.TracerPayloads[len(m.TracerPayloads)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + if err := m.TracerPayloads[len(m.TracerPayloads)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -342,9 +454,9 @@ func (m *AgentPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -353,54 +465,20 @@ func (m *AgentPayload) Unmarshal(data []byte) error { return ErrInvalidLengthAgentPayload } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAgentPayload - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAgentPayload - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthAgentPayload } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(data[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Tags == nil { m.Tags = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowAgentPayload @@ -408,43 +486,88 @@ func (m *AgentPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAgentPayload + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAgentPayload + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthAgentPayload + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthAgentPayload + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := data[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAgentPayload + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthAgentPayload + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthAgentPayload + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipAgentPayload(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthAgentPayload + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthAgentPayload - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(data[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Tags[mapkey] = mapvalue - } else { - var mapvalue string - m.Tags[mapkey] = mapvalue } + m.Tags[mapkey] = mapvalue iNdEx = postIndex case 7: if wireType != 2 { @@ -458,9 +581,9 @@ func (m *AgentPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -470,10 +593,13 @@ func (m *AgentPayload) Unmarshal(data []byte) error { return ErrInvalidLengthAgentPayload } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAgentPayload + } if postIndex > l { return io.ErrUnexpectedEOF } - m.AgentVersion = string(data[iNdEx:postIndex]) + m.AgentVersion = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 8: if wireType != 1 { @@ -483,15 +609,8 @@ func (m *AgentPayload) Unmarshal(data []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - v = uint64(data[iNdEx-8]) - v |= uint64(data[iNdEx-7]) << 8 - v |= uint64(data[iNdEx-6]) << 16 - v |= uint64(data[iNdEx-5]) << 24 - v |= uint64(data[iNdEx-4]) << 32 - v |= uint64(data[iNdEx-3]) << 40 - v |= uint64(data[iNdEx-2]) << 48 - v |= uint64(data[iNdEx-1]) << 56 m.TargetTPS = float64(math.Float64frombits(v)) case 9: if wireType != 1 { @@ -501,25 +620,41 @@ func (m *AgentPayload) Unmarshal(data []byte) error { if (iNdEx + 8) > l { return io.ErrUnexpectedEOF } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) iNdEx += 8 - v = uint64(data[iNdEx-8]) - v |= uint64(data[iNdEx-7]) << 8 - v |= uint64(data[iNdEx-6]) << 16 - v |= uint64(data[iNdEx-5]) << 24 - v |= uint64(data[iNdEx-4]) << 32 - v |= uint64(data[iNdEx-3]) << 40 - v |= uint64(data[iNdEx-2]) << 48 - v |= uint64(data[iNdEx-1]) << 56 m.ErrorTPS = float64(math.Float64frombits(v)) + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RareSamplerEnabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAgentPayload + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RareSamplerEnabled = bool(v != 0) default: iNdEx = preIndex - skippy, err := skipAgentPayload(data[iNdEx:]) + skippy, err := skipAgentPayload(dAtA[iNdEx:]) if err != nil { return err } if skippy < 0 { return ErrInvalidLengthAgentPayload } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthAgentPayload + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -532,8 +667,8 @@ func (m *AgentPayload) Unmarshal(data []byte) error { } return nil } -func skipAgentPayload(data []byte) (n int, err error) { - l := len(data) +func skipAgentPayload(dAtA []byte) (n int, err error) { + l := len(dAtA) iNdEx := 0 for iNdEx < l { var wire uint64 @@ -544,7 +679,7 @@ func skipAgentPayload(data []byte) (n int, err error) { if iNdEx >= l { return 0, io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { @@ -562,7 +697,7 @@ func skipAgentPayload(data []byte) (n int, err error) { return 0, io.ErrUnexpectedEOF } iNdEx++ - if data[iNdEx-1] < 0x80 { + if dAtA[iNdEx-1] < 0x80 { break } } @@ -579,17 +714,20 @@ func skipAgentPayload(data []byte) (n int, err error) { if iNdEx >= l { return 0, io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ length |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthAgentPayload } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthAgentPayload + } return iNdEx, nil case 3: for { @@ -602,7 +740,7 @@ func skipAgentPayload(data []byte) (n int, err error) { if iNdEx >= l { return 0, io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ innerWire |= (uint64(b) & 0x7F) << shift if b < 0x80 { @@ -613,11 +751,14 @@ func skipAgentPayload(data []byte) (n int, err error) { if innerWireType == 4 { break } - next, err := skipAgentPayload(data[start:]) + next, err := skipAgentPayload(dAtA[start:]) if err != nil { return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthAgentPayload + } } return iNdEx, nil case 4: @@ -636,27 +777,3 @@ var ( ErrInvalidLengthAgentPayload = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowAgentPayload = fmt.Errorf("proto: integer overflow") ) - -func init() { proto.RegisterFile("agent_payload.proto", fileDescriptorAgentPayload) } - -var fileDescriptorAgentPayload = []byte{ - // 273 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4e, 0x4c, 0x4f, 0xcd, - 0x2b, 0x89, 0x2f, 0x48, 0xac, 0xcc, 0xc9, 0x4f, 0x4c, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, - 0x62, 0x2a, 0x48, 0x92, 0x12, 0x29, 0x29, 0x4a, 0x4c, 0x4e, 0x2d, 0x42, 0x95, 0x51, 0xda, 0xc7, - 0xc4, 0xc5, 0xe3, 0x08, 0xd2, 0x11, 0x00, 0x11, 0x16, 0x92, 0xe2, 0xe2, 0xc8, 0xc8, 0x2f, 0x2e, - 0xf1, 0x4b, 0xcc, 0x4d, 0x95, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0c, 0x82, 0xf3, 0x85, 0x04, 0xb8, - 0x98, 0x53, 0xf3, 0xca, 0x24, 0x98, 0xc0, 0xc2, 0x20, 0xa6, 0x90, 0x25, 0x17, 0x1f, 0xc4, 0x58, - 0xa8, 0xf6, 0x62, 0x09, 0x56, 0x05, 0x66, 0x0d, 0x6e, 0x23, 0x41, 0xbd, 0x82, 0x24, 0xbd, 0x10, - 0x64, 0x99, 0x20, 0x34, 0x85, 0x42, 0x7a, 0x5c, 0x2c, 0x25, 0x89, 0xe9, 0xc5, 0x12, 0x6c, 0x60, - 0x0d, 0x52, 0x20, 0x0d, 0xc8, 0x0e, 0xd1, 0x0b, 0x49, 0x4c, 0x2f, 0x76, 0xcd, 0x2b, 0x29, 0xaa, - 0x0c, 0x02, 0xab, 0x13, 0x52, 0xe2, 0xe2, 0x01, 0x7b, 0x2d, 0x2c, 0xb5, 0xa8, 0x38, 0x33, 0x3f, - 0x4f, 0x82, 0x1d, 0xec, 0x0a, 0x14, 0x31, 0x21, 0x19, 0x2e, 0xce, 0x92, 0xc4, 0xa2, 0xf4, 0xd4, - 0x92, 0x90, 0x80, 0x60, 0x09, 0x0e, 0x05, 0x46, 0x0d, 0xc6, 0x20, 0x84, 0x00, 0xc8, 0x6b, 0xa9, - 0x45, 0x45, 0xf9, 0x45, 0x20, 0x49, 0x4e, 0xb0, 0x24, 0x9c, 0x2f, 0x65, 0xce, 0xc5, 0x09, 0xb7, - 0x10, 0xe4, 0xcf, 0xec, 0xd4, 0x4a, 0xa8, 0xf7, 0x41, 0x4c, 0x21, 0x11, 0x2e, 0xd6, 0xb2, 0xc4, - 0x9c, 0xd2, 0x54, 0xa8, 0xdf, 0x21, 0x1c, 0x2b, 0x26, 0x0b, 0x46, 0x27, 0x81, 0x13, 0x8f, 0xe4, - 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x24, 0x36, - 0x70, 0xc8, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x26, 0x97, 0x25, 0x28, 0x8a, 0x01, 0x00, - 0x00, -} diff --git a/pkg/trace/pb/agent_payload.proto b/pkg/trace/pb/agent_payload.proto index b4ac0b5290681..c99c4421f44e3 100644 --- a/pkg/trace/pb/agent_payload.proto +++ b/pkg/trace/pb/agent_payload.proto @@ -22,4 +22,6 @@ message AgentPayload { double targetTPS = 8; // errorTPS holds `ErrorTPS` value in AgentConfig. double errorTPS = 9; + // rareSamplerEnabled holds `RareSamplerEnabled` value in AgentConfig + bool rareSamplerEnabled = 10; } diff --git a/pkg/trace/pb/span.pb.go b/pkg/trace/pb/span.pb.go index be017a8b2ec8a..6e844c33d41eb 100644 --- a/pkg/trace/pb/span.pb.go +++ b/pkg/trace/pb/span.pb.go @@ -1,33 +1,16 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: span.proto -/* - Package pb is a generated protocol buffer package. - - It is generated from these files: - span.proto - tracer_payload.proto - agent_payload.proto - - It has these top-level messages: - Span - TraceChunk - TracerPayload - AgentPayload -*/ package pb -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "github.com/gogo/protobuf/gogoproto" - -import io "io" +import ( + encoding_binary "encoding/binary" + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -41,25 +24,129 @@ var _ = math.Inf const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type Span struct { - Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service" msg:"service"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name" msg:"name"` - Resource string `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource" msg:"resource"` - TraceID uint64 `protobuf:"varint,4,opt,name=traceID,proto3" json:"trace_id" msg:"trace_id"` - SpanID uint64 `protobuf:"varint,5,opt,name=spanID,proto3" json:"span_id" msg:"span_id"` - ParentID uint64 `protobuf:"varint,6,opt,name=parentID,proto3" json:"parent_id" msg:"parent_id"` - Start int64 `protobuf:"varint,7,opt,name=start,proto3" json:"start" msg:"start"` - Duration int64 `protobuf:"varint,8,opt,name=duration,proto3" json:"duration" msg:"duration"` - Error int32 `protobuf:"varint,9,opt,name=error,proto3" json:"error" msg:"error"` - Meta map[string]string `protobuf:"bytes,10,rep,name=meta" json:"meta" msg:"meta" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Metrics map[string]float64 `protobuf:"bytes,11,rep,name=metrics" json:"metrics" msg:"metrics" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` - Type string `protobuf:"bytes,12,opt,name=type,proto3" json:"type" msg:"type"` - MetaStruct map[string][]byte `protobuf:"bytes,13,rep,name=meta_struct,json=metaStruct" json:"meta_struct,omitempty" msg:"meta_struct" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // service is the name of the service with which this span is associated. + Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service" msg:"service"` + // name is the operation name of this span. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name" msg:"name"` + // resource is the resource name of this span, also sometimes called the endpoint (for web spans). + Resource string `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource" msg:"resource"` + // traceID is the ID of the trace to which this span belongs. + TraceID uint64 `protobuf:"varint,4,opt,name=traceID,proto3" json:"trace_id" msg:"trace_id"` + // spanID is the ID of this span. + SpanID uint64 `protobuf:"varint,5,opt,name=spanID,proto3" json:"span_id" msg:"span_id"` + // parentID is the ID of this span's parent, or zero if this span has no parent. + ParentID uint64 `protobuf:"varint,6,opt,name=parentID,proto3" json:"parent_id" msg:"parent_id"` + // start is the number of nanoseconds between the Unix epoch and the beginning of this span. + Start int64 `protobuf:"varint,7,opt,name=start,proto3" json:"start" msg:"start"` + // duration is the time length of this span in nanoseconds. + Duration int64 `protobuf:"varint,8,opt,name=duration,proto3" json:"duration" msg:"duration"` + // error is 1 if there is an error associated with this span, or 0 if there is not. + Error int32 `protobuf:"varint,9,opt,name=error,proto3" json:"error" msg:"error"` + // meta is a mapping from tag name to tag value for string-valued tags. + Meta map[string]string `protobuf:"bytes,10,rep,name=meta,proto3" json:"meta" msg:"meta" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // metrics is a mapping from tag name to tag value for numeric-valued tags. + Metrics map[string]float64 `protobuf:"bytes,11,rep,name=metrics,proto3" json:"metrics" msg:"metrics" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` + // type is the type of the service with which this span is associated. Example values: web, db, lambda. + Type string `protobuf:"bytes,12,opt,name=type,proto3" json:"type" msg:"type"` + // meta_struct is a registry of structured "other" data used by, e.g., AppSec. + MetaStruct map[string][]byte `protobuf:"bytes,13,rep,name=meta_struct,json=metaStruct,proto3" json:"meta_struct,omitempty" msg:"meta_struct" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (m *Span) Reset() { *m = Span{} } +func (m *Span) String() string { return proto.CompactTextString(m) } +func (*Span) ProtoMessage() {} +func (*Span) Descriptor() ([]byte, []int) { + return fileDescriptor_fc5f2b88b579999f, []int{0} +} +func (m *Span) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Span) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Span.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Span) XXX_Merge(src proto.Message) { + xxx_messageInfo_Span.Merge(m, src) +} +func (m *Span) XXX_Size() int { + return m.Size() +} +func (m *Span) XXX_DiscardUnknown() { + xxx_messageInfo_Span.DiscardUnknown(m) +} + +var xxx_messageInfo_Span proto.InternalMessageInfo + +func (m *Span) GetService() string { + if m != nil { + return m.Service + } + return "" +} + +func (m *Span) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Span) GetResource() string { + if m != nil { + return m.Resource + } + return "" } -func (m *Span) Reset() { *m = Span{} } -func (m *Span) String() string { return proto.CompactTextString(m) } -func (*Span) ProtoMessage() {} -func (*Span) Descriptor() ([]byte, []int) { return fileDescriptorSpan, []int{0} } +func (m *Span) GetTraceID() uint64 { + if m != nil { + return m.TraceID + } + return 0 +} + +func (m *Span) GetSpanID() uint64 { + if m != nil { + return m.SpanID + } + return 0 +} + +func (m *Span) GetParentID() uint64 { + if m != nil { + return m.ParentID + } + return 0 +} + +func (m *Span) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *Span) GetDuration() int64 { + if m != nil { + return m.Duration + } + return 0 +} + +func (m *Span) GetError() int32 { + if m != nil { + return m.Error + } + return 0 +} func (m *Span) GetMeta() map[string]string { if m != nil { @@ -75,6 +162,13 @@ func (m *Span) GetMetrics() map[string]float64 { return nil } +func (m *Span) GetType() string { + if m != nil { + return m.Type + } + return "" +} + func (m *Span) GetMetaStruct() map[string][]byte { if m != nil { return m.MetaStruct @@ -84,112 +178,158 @@ func (m *Span) GetMetaStruct() map[string][]byte { func init() { proto.RegisterType((*Span)(nil), "pb.Span") + proto.RegisterMapType((map[string]string)(nil), "pb.Span.MetaEntry") + proto.RegisterMapType((map[string][]byte)(nil), "pb.Span.MetaStructEntry") + proto.RegisterMapType((map[string]float64)(nil), "pb.Span.MetricsEntry") } -func (m *Span) Marshal() (data []byte, err error) { + +func init() { proto.RegisterFile("span.proto", fileDescriptor_fc5f2b88b579999f) } + +var fileDescriptor_fc5f2b88b579999f = []byte{ + // 552 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0xc7, 0xe3, 0x7c, 0x67, 0x93, 0x52, 0x58, 0x51, 0xb4, 0x8a, 0x90, 0x6d, 0xed, 0x29, 0x42, + 0xe0, 0x4a, 0x80, 0xa0, 0x8a, 0x80, 0x43, 0x14, 0x0e, 0x39, 0xf4, 0xb2, 0x7d, 0x80, 0xca, 0x71, + 0x97, 0x60, 0x81, 0x3f, 0xb4, 0x5e, 0x57, 0xca, 0x5b, 0xf0, 0x58, 0x88, 0x53, 0x8f, 0x9c, 0x56, + 0x28, 0xb9, 0xf9, 0x98, 0x27, 0x40, 0x3b, 0x6b, 0x2f, 0xa1, 0x97, 0xde, 0xfc, 0xff, 0xcf, 0xfc, + 0x66, 0x3c, 0xe3, 0x31, 0x42, 0x45, 0x1e, 0xa6, 0x41, 0x2e, 0x32, 0x99, 0xe1, 0x76, 0xbe, 0x9e, + 0xbe, 0xda, 0xc4, 0xf2, 0x6b, 0xb9, 0x0e, 0xa2, 0x2c, 0x39, 0xdf, 0x64, 0x9b, 0xec, 0x1c, 0x42, + 0xeb, 0xf2, 0x0b, 0x28, 0x10, 0xf0, 0x64, 0x10, 0xfa, 0x6b, 0x80, 0xba, 0x57, 0x79, 0x98, 0xe2, + 0x77, 0x68, 0x50, 0x70, 0x71, 0x1b, 0x47, 0x9c, 0x38, 0xbe, 0x33, 0x1b, 0x2d, 0x9e, 0x57, 0xca, + 0x6b, 0xac, 0x83, 0xf2, 0x4e, 0x92, 0x62, 0x33, 0xa7, 0xb5, 0xa6, 0xac, 0x89, 0xe0, 0x17, 0xa8, + 0x9b, 0x86, 0x09, 0x27, 0x6d, 0x80, 0x9e, 0x55, 0xca, 0x03, 0x7d, 0x50, 0x1e, 0x02, 0x42, 0x0b, + 0xca, 0xc0, 0xc3, 0x73, 0x34, 0x14, 0xbc, 0xc8, 0x4a, 0x11, 0x71, 0xd2, 0x81, 0x7c, 0xb7, 0x52, + 0x9e, 0xf5, 0x0e, 0xca, 0x7b, 0x04, 0x4c, 0x63, 0x50, 0x66, 0x63, 0xf8, 0x02, 0x0d, 0xa4, 0x08, + 0x23, 0xbe, 0x5a, 0x92, 0xae, 0xef, 0xcc, 0xba, 0x06, 0x05, 0xeb, 0x3a, 0xbe, 0xb1, 0x68, 0x63, + 0x50, 0xd6, 0xa4, 0xe3, 0xb7, 0xa8, 0xaf, 0x77, 0xb4, 0x5a, 0x92, 0x1e, 0x80, 0x66, 0xb0, 0x3c, + 0x4c, 0x0d, 0x57, 0x0f, 0x66, 0x34, 0x65, 0x75, 0x2e, 0xfe, 0x80, 0x86, 0x79, 0x28, 0x78, 0x2a, + 0x57, 0x4b, 0xd2, 0x07, 0xce, 0xaf, 0x94, 0x37, 0x32, 0x9e, 0x21, 0x4f, 0x81, 0xb4, 0x0e, 0x65, + 0x96, 0xc0, 0x01, 0xea, 0x15, 0x32, 0x14, 0x92, 0x0c, 0x7c, 0x67, 0xd6, 0x59, 0x90, 0x4a, 0x79, + 0xc6, 0x38, 0x28, 0x6f, 0x6c, 0x1a, 0x6a, 0x45, 0x99, 0x71, 0xf5, 0x66, 0x6e, 0x4a, 0x11, 0xca, + 0x38, 0x4b, 0xc9, 0x10, 0x10, 0x18, 0xaf, 0xf1, 0xec, 0x78, 0x8d, 0x41, 0x99, 0x8d, 0xe9, 0x5e, + 0x5c, 0x88, 0x4c, 0x90, 0x91, 0xef, 0xcc, 0x7a, 0xa6, 0x17, 0x18, 0xb6, 0x17, 0x28, 0xca, 0x8c, + 0x8b, 0x3f, 0xa1, 0x6e, 0xc2, 0x65, 0x48, 0x90, 0xdf, 0x99, 0x8d, 0x5f, 0xe3, 0x20, 0x5f, 0x07, + 0xfa, 0x02, 0x82, 0x4b, 0x2e, 0xc3, 0xcf, 0xa9, 0x14, 0x5b, 0xf3, 0x15, 0x75, 0x8e, 0xfd, 0x8a, + 0x5a, 0x50, 0x06, 0x1e, 0xbe, 0x44, 0x83, 0x84, 0x4b, 0x11, 0x47, 0x05, 0x19, 0x43, 0x89, 0xb3, + 0xe3, 0x12, 0xda, 0x37, 0x55, 0x60, 0xcf, 0x75, 0xa6, 0xdd, 0x73, 0xad, 0x29, 0x6b, 0x22, 0xfa, + 0x80, 0xe4, 0x36, 0xe7, 0x64, 0xf2, 0xef, 0x80, 0xb4, 0xb6, 0xad, 0xb5, 0xa0, 0x0c, 0x3c, 0x1c, + 0xa3, 0xb1, 0x7e, 0x85, 0xeb, 0x42, 0x8a, 0x32, 0x92, 0xe4, 0x04, 0xda, 0x93, 0xff, 0x26, 0xb8, + 0x82, 0x90, 0x79, 0x83, 0xa0, 0x52, 0xde, 0xd9, 0x11, 0xf0, 0x32, 0x4b, 0x62, 0xc9, 0x93, 0x5c, + 0x6e, 0x0f, 0xca, 0x7b, 0x62, 0x07, 0xab, 0xa3, 0x94, 0xa1, 0xc4, 0x16, 0x98, 0xbe, 0x47, 0x23, + 0xbb, 0x10, 0xfc, 0x18, 0x75, 0xbe, 0xf1, 0xad, 0xf9, 0x31, 0x98, 0x7e, 0xc4, 0x4f, 0x51, 0xef, + 0x36, 0xfc, 0x5e, 0xd6, 0x77, 0xcf, 0x8c, 0x98, 0xb7, 0x2f, 0x9c, 0xe9, 0x1c, 0x4d, 0x8e, 0xd7, + 0xf0, 0x10, 0xeb, 0x1c, 0xb3, 0x1f, 0xd1, 0xe9, 0xbd, 0x19, 0x1e, 0xc2, 0x27, 0x47, 0xf8, 0x82, + 0xfc, 0xdc, 0xb9, 0xce, 0xdd, 0xce, 0x75, 0xfe, 0xec, 0x5c, 0xe7, 0xc7, 0xde, 0x6d, 0xdd, 0xed, + 0xdd, 0xd6, 0xef, 0xbd, 0xdb, 0x5a, 0xf7, 0xe1, 0x6f, 0x7f, 0xf3, 0x37, 0x00, 0x00, 0xff, 0xff, + 0xd0, 0x61, 0xcf, 0x3b, 0x2e, 0x04, 0x00, 0x00, +} + +func (m *Span) Marshal() (dAtA []byte, err error) { size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) if err != nil { return nil, err } - return data[:n], nil + return dAtA[:n], nil } -func (m *Span) MarshalTo(data []byte) (int, error) { +func (m *Span) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int _ = l if len(m.Service) > 0 { - data[i] = 0xa + dAtA[i] = 0xa i++ - i = encodeVarintSpan(data, i, uint64(len(m.Service))) - i += copy(data[i:], m.Service) + i = encodeVarintSpan(dAtA, i, uint64(len(m.Service))) + i += copy(dAtA[i:], m.Service) } if len(m.Name) > 0 { - data[i] = 0x12 + dAtA[i] = 0x12 i++ - i = encodeVarintSpan(data, i, uint64(len(m.Name))) - i += copy(data[i:], m.Name) + i = encodeVarintSpan(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) } if len(m.Resource) > 0 { - data[i] = 0x1a + dAtA[i] = 0x1a i++ - i = encodeVarintSpan(data, i, uint64(len(m.Resource))) - i += copy(data[i:], m.Resource) + i = encodeVarintSpan(dAtA, i, uint64(len(m.Resource))) + i += copy(dAtA[i:], m.Resource) } if m.TraceID != 0 { - data[i] = 0x20 + dAtA[i] = 0x20 i++ - i = encodeVarintSpan(data, i, uint64(m.TraceID)) + i = encodeVarintSpan(dAtA, i, uint64(m.TraceID)) } if m.SpanID != 0 { - data[i] = 0x28 + dAtA[i] = 0x28 i++ - i = encodeVarintSpan(data, i, uint64(m.SpanID)) + i = encodeVarintSpan(dAtA, i, uint64(m.SpanID)) } if m.ParentID != 0 { - data[i] = 0x30 + dAtA[i] = 0x30 i++ - i = encodeVarintSpan(data, i, uint64(m.ParentID)) + i = encodeVarintSpan(dAtA, i, uint64(m.ParentID)) } if m.Start != 0 { - data[i] = 0x38 + dAtA[i] = 0x38 i++ - i = encodeVarintSpan(data, i, uint64(m.Start)) + i = encodeVarintSpan(dAtA, i, uint64(m.Start)) } if m.Duration != 0 { - data[i] = 0x40 + dAtA[i] = 0x40 i++ - i = encodeVarintSpan(data, i, uint64(m.Duration)) + i = encodeVarintSpan(dAtA, i, uint64(m.Duration)) } if m.Error != 0 { - data[i] = 0x48 + dAtA[i] = 0x48 i++ - i = encodeVarintSpan(data, i, uint64(m.Error)) + i = encodeVarintSpan(dAtA, i, uint64(m.Error)) } if len(m.Meta) > 0 { - for k := range m.Meta { - data[i] = 0x52 + for k, _ := range m.Meta { + dAtA[i] = 0x52 i++ v := m.Meta[k] mapSize := 1 + len(k) + sovSpan(uint64(len(k))) + 1 + len(v) + sovSpan(uint64(len(v))) - i = encodeVarintSpan(data, i, uint64(mapSize)) - data[i] = 0xa + i = encodeVarintSpan(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa i++ - i = encodeVarintSpan(data, i, uint64(len(k))) - i += copy(data[i:], k) - data[i] = 0x12 + i = encodeVarintSpan(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 i++ - i = encodeVarintSpan(data, i, uint64(len(v))) - i += copy(data[i:], v) + i = encodeVarintSpan(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) } } if len(m.Metrics) > 0 { - for k := range m.Metrics { - data[i] = 0x5a + for k, _ := range m.Metrics { + dAtA[i] = 0x5a i++ v := m.Metrics[k] mapSize := 1 + len(k) + sovSpan(uint64(len(k))) + 1 + 8 - i = encodeVarintSpan(data, i, uint64(mapSize)) - data[i] = 0xa + i = encodeVarintSpan(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa i++ - i = encodeVarintSpan(data, i, uint64(len(k))) - i += copy(data[i:], k) - data[i] = 0x11 + i = encodeVarintSpan(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x11 i++ - i = encodeFixed64Span(data, i, uint64(math.Float64bits(float64(v)))) + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(math.Float64bits(float64(v)))) + i += 8 } } if len(m.Type) > 0 { - data[i] = 0x62 + dAtA[i] = 0x62 i++ - i = encodeVarintSpan(data, i, uint64(len(m.Type))) - i += copy(data[i:], m.Type) + i = encodeVarintSpan(dAtA, i, uint64(len(m.Type))) + i += copy(dAtA[i:], m.Type) } if len(m.MetaStruct) > 0 { - for k := range m.MetaStruct { - data[i] = 0x6a + for k, _ := range m.MetaStruct { + dAtA[i] = 0x6a i++ v := m.MetaStruct[k] byteSize := 0 @@ -197,50 +337,35 @@ func (m *Span) MarshalTo(data []byte) (int, error) { byteSize = 1 + len(v) + sovSpan(uint64(len(v))) } mapSize := 1 + len(k) + sovSpan(uint64(len(k))) + byteSize - i = encodeVarintSpan(data, i, uint64(mapSize)) - data[i] = 0xa + i = encodeVarintSpan(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa i++ - i = encodeVarintSpan(data, i, uint64(len(k))) - i += copy(data[i:], k) + i = encodeVarintSpan(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) if len(v) > 0 { - data[i] = 0x12 + dAtA[i] = 0x12 i++ - i = encodeVarintSpan(data, i, uint64(len(v))) - i += copy(data[i:], v) + i = encodeVarintSpan(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) } } } return i, nil } -func encodeFixed64Span(data []byte, offset int, v uint64) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - data[offset+4] = uint8(v >> 32) - data[offset+5] = uint8(v >> 40) - data[offset+6] = uint8(v >> 48) - data[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32Span(data []byte, offset int, v uint32) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintSpan(data []byte, offset int, v uint64) int { +func encodeVarintSpan(dAtA []byte, offset int, v uint64) int { for v >= 1<<7 { - data[offset] = uint8(v&0x7f | 0x80) + dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } - data[offset] = uint8(v) + dAtA[offset] = uint8(v) return offset + 1 } func (m *Span) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.Service) @@ -321,8 +446,8 @@ func sovSpan(x uint64) (n int) { func sozSpan(x uint64) (n int) { return sovSpan(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *Span) Unmarshal(data []byte) error { - l := len(data) +func (m *Span) Unmarshal(dAtA []byte) error { + l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx @@ -334,9 +459,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -362,9 +487,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -374,10 +499,13 @@ func (m *Span) Unmarshal(data []byte) error { return ErrInvalidLengthSpan } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthSpan + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Service = string(data[iNdEx:postIndex]) + m.Service = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { @@ -391,9 +519,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -403,10 +531,13 @@ func (m *Span) Unmarshal(data []byte) error { return ErrInvalidLengthSpan } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthSpan + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(data[iNdEx:postIndex]) + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { @@ -420,9 +551,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -432,10 +563,13 @@ func (m *Span) Unmarshal(data []byte) error { return ErrInvalidLengthSpan } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthSpan + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Resource = string(data[iNdEx:postIndex]) + m.Resource = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 4: if wireType != 0 { @@ -449,9 +583,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - m.TraceID |= (uint64(b) & 0x7F) << shift + m.TraceID |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -468,9 +602,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - m.SpanID |= (uint64(b) & 0x7F) << shift + m.SpanID |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -487,9 +621,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - m.ParentID |= (uint64(b) & 0x7F) << shift + m.ParentID |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -506,9 +640,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - m.Start |= (int64(b) & 0x7F) << shift + m.Start |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -525,9 +659,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - m.Duration |= (int64(b) & 0x7F) << shift + m.Duration |= int64(b&0x7F) << shift if b < 0x80 { break } @@ -544,9 +678,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - m.Error |= (int32(b) & 0x7F) << shift + m.Error |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -563,9 +697,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -574,54 +708,20 @@ func (m *Span) Unmarshal(data []byte) error { return ErrInvalidLengthSpan } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpan - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpan - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthSpan } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(data[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Meta == nil { m.Meta = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSpan @@ -629,43 +729,88 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpan + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSpan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthSpan + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthSpan + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := data[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSpan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthSpan + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthSpan + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipSpan(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthSpan + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthSpan - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(data[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Meta[mapkey] = mapvalue - } else { - var mapvalue string - m.Meta[mapkey] = mapvalue } + m.Meta[mapkey] = mapvalue iNdEx = postIndex case 11: if wireType != 2 { @@ -679,9 +824,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -690,54 +835,20 @@ func (m *Span) Unmarshal(data []byte) error { return ErrInvalidLengthSpan } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpan - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpan - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthSpan } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(data[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Metrics == nil { m.Metrics = make(map[string]float64) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue float64 + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSpan @@ -745,32 +856,67 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapvaluetemp uint64 - if (iNdEx + 8) > l { - return io.ErrUnexpectedEOF + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSpan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthSpan + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthSpan + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapvaluetemp uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + mapvaluetemp = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + mapvalue = math.Float64frombits(mapvaluetemp) + } else { + iNdEx = entryPreIndex + skippy, err := skipSpan(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthSpan + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - iNdEx += 8 - mapvaluetemp = uint64(data[iNdEx-8]) - mapvaluetemp |= uint64(data[iNdEx-7]) << 8 - mapvaluetemp |= uint64(data[iNdEx-6]) << 16 - mapvaluetemp |= uint64(data[iNdEx-5]) << 24 - mapvaluetemp |= uint64(data[iNdEx-4]) << 32 - mapvaluetemp |= uint64(data[iNdEx-3]) << 40 - mapvaluetemp |= uint64(data[iNdEx-2]) << 48 - mapvaluetemp |= uint64(data[iNdEx-1]) << 56 - mapvalue := math.Float64frombits(mapvaluetemp) - m.Metrics[mapkey] = mapvalue - } else { - var mapvalue float64 - m.Metrics[mapkey] = mapvalue } + m.Metrics[mapkey] = mapvalue iNdEx = postIndex case 12: if wireType != 2 { @@ -784,9 +930,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -796,10 +942,13 @@ func (m *Span) Unmarshal(data []byte) error { return ErrInvalidLengthSpan } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthSpan + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Type = string(data[iNdEx:postIndex]) + m.Type = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 13: if wireType != 2 { @@ -813,9 +962,9 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -824,54 +973,20 @@ func (m *Span) Unmarshal(data []byte) error { return ErrInvalidLengthSpan } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpan - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpan - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthSpan } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(data[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.MetaStruct == nil { m.MetaStruct = make(map[string][]byte) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + mapvalue := []byte{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSpan @@ -879,54 +994,102 @@ func (m *Span) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var mapbyteLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowSpan + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSpan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthSpan + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthSpan + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := data[iNdEx] - iNdEx++ - mapbyteLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapbyteLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSpan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapbyteLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intMapbyteLen := int(mapbyteLen) + if intMapbyteLen < 0 { + return ErrInvalidLengthSpan + } + postbytesIndex := iNdEx + intMapbyteLen + if postbytesIndex < 0 { + return ErrInvalidLengthSpan + } + if postbytesIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = make([]byte, mapbyteLen) + copy(mapvalue, dAtA[iNdEx:postbytesIndex]) + iNdEx = postbytesIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipSpan(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthSpan + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intMapbyteLen := int(mapbyteLen) - if intMapbyteLen < 0 { - return ErrInvalidLengthSpan - } - postbytesIndex := iNdEx + intMapbyteLen - if postbytesIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue := make([]byte, mapbyteLen) - copy(mapvalue, data[iNdEx:postbytesIndex]) - iNdEx = postbytesIndex - m.MetaStruct[mapkey] = mapvalue - } else { - var mapvalue []byte - m.MetaStruct[mapkey] = mapvalue } + m.MetaStruct[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex - skippy, err := skipSpan(data[iNdEx:]) + skippy, err := skipSpan(dAtA[iNdEx:]) if err != nil { return err } if skippy < 0 { return ErrInvalidLengthSpan } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthSpan + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -939,8 +1102,8 @@ func (m *Span) Unmarshal(data []byte) error { } return nil } -func skipSpan(data []byte) (n int, err error) { - l := len(data) +func skipSpan(dAtA []byte) (n int, err error) { + l := len(dAtA) iNdEx := 0 for iNdEx < l { var wire uint64 @@ -951,7 +1114,7 @@ func skipSpan(data []byte) (n int, err error) { if iNdEx >= l { return 0, io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { @@ -969,7 +1132,7 @@ func skipSpan(data []byte) (n int, err error) { return 0, io.ErrUnexpectedEOF } iNdEx++ - if data[iNdEx-1] < 0x80 { + if dAtA[iNdEx-1] < 0x80 { break } } @@ -986,17 +1149,20 @@ func skipSpan(data []byte) (n int, err error) { if iNdEx >= l { return 0, io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ length |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthSpan } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthSpan + } return iNdEx, nil case 3: for { @@ -1009,7 +1175,7 @@ func skipSpan(data []byte) (n int, err error) { if iNdEx >= l { return 0, io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ innerWire |= (uint64(b) & 0x7F) << shift if b < 0x80 { @@ -1020,11 +1186,14 @@ func skipSpan(data []byte) (n int, err error) { if innerWireType == 4 { break } - next, err := skipSpan(data[start:]) + next, err := skipSpan(dAtA[start:]) if err != nil { return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthSpan + } } return iNdEx, nil case 4: @@ -1043,44 +1212,3 @@ var ( ErrInvalidLengthSpan = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowSpan = fmt.Errorf("proto: integer overflow") ) - -func init() { proto.RegisterFile("span.proto", fileDescriptorSpan) } - -var fileDescriptorSpan = []byte{ - // 545 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x93, 0xcf, 0x6e, 0xd3, 0x40, - 0x10, 0xc6, 0x71, 0x93, 0x34, 0xc9, 0x26, 0xa5, 0x65, 0x45, 0xd1, 0x2a, 0x42, 0x59, 0x6b, 0x4f, - 0x11, 0x02, 0x57, 0x02, 0x04, 0x55, 0x04, 0x1c, 0xa2, 0x70, 0xc8, 0xa1, 0x97, 0xed, 0x03, 0x54, - 0x1b, 0x77, 0x09, 0x16, 0xf8, 0x8f, 0xd6, 0xeb, 0x4a, 0x79, 0x0b, 0x1e, 0x0b, 0x71, 0xe2, 0x09, - 0x56, 0x28, 0xdc, 0x7c, 0xcc, 0x13, 0xa0, 0x9d, 0xb5, 0x97, 0xc0, 0xa5, 0x37, 0x7f, 0xdf, 0xcc, - 0x6f, 0xc6, 0x33, 0x1e, 0x23, 0x54, 0x16, 0x22, 0x8b, 0x0a, 0x95, 0xeb, 0x1c, 0x1f, 0x15, 0xeb, - 0xc9, 0x8b, 0x4d, 0xa2, 0x3f, 0x57, 0xeb, 0x28, 0xce, 0xd3, 0x8b, 0x4d, 0xbe, 0xc9, 0x2f, 0x20, - 0xb4, 0xae, 0x3e, 0x81, 0x02, 0x01, 0x4f, 0x0e, 0x61, 0x3f, 0xfa, 0xa8, 0x7b, 0x5d, 0x88, 0x0c, - 0xbf, 0x41, 0xfd, 0x52, 0xaa, 0xbb, 0x24, 0x96, 0x24, 0x08, 0x83, 0xd9, 0x70, 0xf1, 0xb4, 0x36, - 0xb4, 0xb5, 0xf6, 0x86, 0x9e, 0xa4, 0xe5, 0x66, 0xce, 0x1a, 0xcd, 0x78, 0x1b, 0xc1, 0xcf, 0x50, - 0x37, 0x13, 0xa9, 0x24, 0x47, 0x00, 0x3d, 0xa9, 0x0d, 0x05, 0xbd, 0x37, 0x14, 0x01, 0x61, 0x05, - 0xe3, 0xe0, 0xe1, 0x39, 0x1a, 0x28, 0x59, 0xe6, 0x95, 0x8a, 0x25, 0xe9, 0x40, 0xfe, 0xb4, 0x36, - 0xd4, 0x7b, 0x7b, 0x43, 0x1f, 0x02, 0xd3, 0x1a, 0x8c, 0xfb, 0x18, 0xbe, 0x44, 0x7d, 0xad, 0x44, - 0x2c, 0x57, 0x4b, 0xd2, 0x0d, 0x83, 0x59, 0xd7, 0xa1, 0x60, 0xdd, 0x24, 0xb7, 0x1e, 0x6d, 0x0d, - 0xc6, 0xdb, 0x74, 0xfc, 0x1a, 0x1d, 0xdb, 0x1d, 0xad, 0x96, 0xa4, 0x07, 0xa0, 0x1b, 0xac, 0x10, - 0x99, 0xe3, 0x9a, 0xc1, 0x9c, 0x66, 0xbc, 0xc9, 0xc5, 0xef, 0xd0, 0xa0, 0x10, 0x4a, 0x66, 0x7a, - 0xb5, 0x24, 0xc7, 0xc0, 0x85, 0xb5, 0xa1, 0x43, 0xe7, 0x39, 0xf2, 0x14, 0x48, 0xef, 0x30, 0xee, - 0x09, 0x1c, 0xa1, 0x5e, 0xa9, 0x85, 0xd2, 0xa4, 0x1f, 0x06, 0xb3, 0xce, 0x82, 0xd4, 0x86, 0x3a, - 0x63, 0x6f, 0xe8, 0xc8, 0x35, 0xb4, 0x8a, 0x71, 0xe7, 0xda, 0xcd, 0xdc, 0x56, 0x4a, 0xe8, 0x24, - 0xcf, 0xc8, 0x00, 0x10, 0x18, 0xaf, 0xf5, 0xfc, 0x78, 0xad, 0xc1, 0xb8, 0x8f, 0xd9, 0x5e, 0x52, - 0xa9, 0x5c, 0x91, 0x61, 0x18, 0xcc, 0x7a, 0xae, 0x17, 0x18, 0xbe, 0x17, 0x28, 0xc6, 0x9d, 0x8b, - 0x3f, 0xa0, 0x6e, 0x2a, 0xb5, 0x20, 0x28, 0xec, 0xcc, 0x46, 0x2f, 0x71, 0x54, 0xac, 0x23, 0x7b, - 0x01, 0xd1, 0x95, 0xd4, 0xe2, 0x63, 0xa6, 0xd5, 0xd6, 0x7d, 0x45, 0x9b, 0xe3, 0xbf, 0xa2, 0x15, - 0x8c, 0x83, 0x87, 0xaf, 0x50, 0x3f, 0x95, 0x5a, 0x25, 0x71, 0x49, 0x46, 0x50, 0xe2, 0xfc, 0xb0, - 0x84, 0xf5, 0x5d, 0x15, 0xd8, 0x73, 0x93, 0xe9, 0xf7, 0xdc, 0x68, 0xc6, 0xdb, 0x88, 0x3d, 0x20, - 0xbd, 0x2d, 0x24, 0x19, 0xff, 0x3d, 0x20, 0xab, 0x7d, 0x6b, 0x2b, 0x18, 0x07, 0x0f, 0x27, 0x68, - 0x64, 0x5f, 0xe1, 0xa6, 0xd4, 0xaa, 0x8a, 0x35, 0x39, 0x81, 0xf6, 0xe4, 0x9f, 0x09, 0xae, 0x21, - 0xe4, 0xde, 0x20, 0xaa, 0x0d, 0x3d, 0x3f, 0x00, 0x9e, 0xe7, 0x69, 0xa2, 0x65, 0x5a, 0xe8, 0xed, - 0xde, 0xd0, 0x47, 0x7e, 0xb0, 0x26, 0xca, 0x38, 0x4a, 0x7d, 0x81, 0xc9, 0x5b, 0x34, 0xf4, 0x0b, - 0xc1, 0x67, 0xa8, 0xf3, 0x45, 0x6e, 0xdd, 0x8f, 0xc1, 0xed, 0x23, 0x7e, 0x8c, 0x7a, 0x77, 0xe2, - 0x6b, 0xd5, 0xdc, 0x3d, 0x77, 0x62, 0x7e, 0x74, 0x19, 0x4c, 0xe6, 0x68, 0x7c, 0xb8, 0x86, 0xfb, - 0xd8, 0xe0, 0x90, 0x7d, 0x8f, 0x4e, 0xff, 0x9b, 0xe1, 0x3e, 0x7c, 0x7c, 0x80, 0x2f, 0xce, 0xbe, - 0xef, 0xa6, 0xc1, 0xcf, 0xdd, 0x34, 0xf8, 0xb5, 0x9b, 0x06, 0xdf, 0x7e, 0x4f, 0x1f, 0xac, 0x8f, - 0xe1, 0x2f, 0x7f, 0xf5, 0x27, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xcb, 0x28, 0xaf, 0x26, 0x04, 0x00, - 0x00, -} diff --git a/pkg/trace/pb/tracer_payload.pb.go b/pkg/trace/pb/tracer_payload.pb.go index 92133a53a49cd..2c70e730f16e8 100644 --- a/pkg/trace/pb/tracer_payload.pb.go +++ b/pkg/trace/pb/tracer_payload.pb.go @@ -1,43 +1,87 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: tracer_payload.proto package pb -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "github.com/gogo/protobuf/gogoproto" - -import io "io" +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -// TraceChunk represents a list of spans with the same trace id. +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +// TraceChunk represents a list of spans with the same trace ID. In other words, a chunk of a trace. type TraceChunk struct { // priority specifies sampling priority of the trace. Priority int32 `protobuf:"varint,1,opt,name=priority,proto3" json:"priority" msg:"priority"` // origin specifies origin product ("lambda", "rum", etc.) of the trace. Origin string `protobuf:"bytes,2,opt,name=origin,proto3" json:"origin" msg:"origin"` // spans specifies list of containing spans. - Spans []*Span `protobuf:"bytes,3,rep,name=spans" json:"spans" msg:"spans"` + Spans []*Span `protobuf:"bytes,3,rep,name=spans,proto3" json:"spans" msg:"spans"` // tags specifies tags common in all `spans`. - Tags map[string]string `protobuf:"bytes,4,rep,name=tags" json:"tags" msg:"tags" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Tags map[string]string `protobuf:"bytes,4,rep,name=tags,proto3" json:"tags" msg:"tags" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // droppedTrace specifies whether the trace was dropped by samplers or not. DroppedTrace bool `protobuf:"varint,5,opt,name=droppedTrace,proto3" json:"dropped_trace" msg:"dropped_trace"` } -func (m *TraceChunk) Reset() { *m = TraceChunk{} } -func (m *TraceChunk) String() string { return proto.CompactTextString(m) } -func (*TraceChunk) ProtoMessage() {} -func (*TraceChunk) Descriptor() ([]byte, []int) { return fileDescriptorTracerPayload, []int{0} } +func (m *TraceChunk) Reset() { *m = TraceChunk{} } +func (m *TraceChunk) String() string { return proto.CompactTextString(m) } +func (*TraceChunk) ProtoMessage() {} +func (*TraceChunk) Descriptor() ([]byte, []int) { + return fileDescriptor_f02adc68a2cbcd51, []int{0} +} +func (m *TraceChunk) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceChunk) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceChunk.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceChunk) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceChunk.Merge(m, src) +} +func (m *TraceChunk) XXX_Size() int { + return m.Size() +} +func (m *TraceChunk) XXX_DiscardUnknown() { + xxx_messageInfo_TraceChunk.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceChunk proto.InternalMessageInfo + +func (m *TraceChunk) GetPriority() int32 { + if m != nil { + return m.Priority + } + return 0 +} + +func (m *TraceChunk) GetOrigin() string { + if m != nil { + return m.Origin + } + return "" +} func (m *TraceChunk) GetSpans() []*Span { if m != nil { @@ -53,6 +97,13 @@ func (m *TraceChunk) GetTags() map[string]string { return nil } +func (m *TraceChunk) GetDroppedTrace() bool { + if m != nil { + return m.DroppedTrace + } + return false +} + // TracerPayload represents a payload the trace agent receives from tracers. type TracerPayload struct { // containerID specifies the ID of the container where the tracer is running on. @@ -66,9 +117,9 @@ type TracerPayload struct { // runtimeID specifies V4 UUID representation of a tracer session. RuntimeID string `protobuf:"bytes,5,opt,name=runtimeID,proto3" json:"runtime_id" msg:"runtime_id"` // chunks specifies list of containing trace chunks. - Chunks []*TraceChunk `protobuf:"bytes,6,rep,name=chunks" json:"chunks" msg:"chunks"` + Chunks []*TraceChunk `protobuf:"bytes,6,rep,name=chunks,proto3" json:"chunks" msg:"chunks"` // tags specifies tags common in all `chunks`. - Tags map[string]string `protobuf:"bytes,7,rep,name=tags" json:"tags" msg:"tags" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Tags map[string]string `protobuf:"bytes,7,rep,name=tags,proto3" json:"tags" msg:"tags" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // env specifies `env` tag that set with the tracer. Env string `protobuf:"bytes,8,opt,name=env,proto3" json:"env" msg:"env"` // hostname specifies hostname of where the tracer is running. @@ -77,10 +128,73 @@ type TracerPayload struct { AppVersion string `protobuf:"bytes,10,opt,name=appVersion,proto3" json:"app_version" msg:"app_version"` } -func (m *TracerPayload) Reset() { *m = TracerPayload{} } -func (m *TracerPayload) String() string { return proto.CompactTextString(m) } -func (*TracerPayload) ProtoMessage() {} -func (*TracerPayload) Descriptor() ([]byte, []int) { return fileDescriptorTracerPayload, []int{1} } +func (m *TracerPayload) Reset() { *m = TracerPayload{} } +func (m *TracerPayload) String() string { return proto.CompactTextString(m) } +func (*TracerPayload) ProtoMessage() {} +func (*TracerPayload) Descriptor() ([]byte, []int) { + return fileDescriptor_f02adc68a2cbcd51, []int{1} +} +func (m *TracerPayload) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TracerPayload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TracerPayload.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TracerPayload) XXX_Merge(src proto.Message) { + xxx_messageInfo_TracerPayload.Merge(m, src) +} +func (m *TracerPayload) XXX_Size() int { + return m.Size() +} +func (m *TracerPayload) XXX_DiscardUnknown() { + xxx_messageInfo_TracerPayload.DiscardUnknown(m) +} + +var xxx_messageInfo_TracerPayload proto.InternalMessageInfo + +func (m *TracerPayload) GetContainerID() string { + if m != nil { + return m.ContainerID + } + return "" +} + +func (m *TracerPayload) GetLanguageName() string { + if m != nil { + return m.LanguageName + } + return "" +} + +func (m *TracerPayload) GetLanguageVersion() string { + if m != nil { + return m.LanguageVersion + } + return "" +} + +func (m *TracerPayload) GetTracerVersion() string { + if m != nil { + return m.TracerVersion + } + return "" +} + +func (m *TracerPayload) GetRuntimeID() string { + if m != nil { + return m.RuntimeID + } + return "" +} func (m *TracerPayload) GetChunks() []*TraceChunk { if m != nil { @@ -96,42 +210,112 @@ func (m *TracerPayload) GetTags() map[string]string { return nil } +func (m *TracerPayload) GetEnv() string { + if m != nil { + return m.Env + } + return "" +} + +func (m *TracerPayload) GetHostname() string { + if m != nil { + return m.Hostname + } + return "" +} + +func (m *TracerPayload) GetAppVersion() string { + if m != nil { + return m.AppVersion + } + return "" +} + func init() { proto.RegisterType((*TraceChunk)(nil), "pb.TraceChunk") + proto.RegisterMapType((map[string]string)(nil), "pb.TraceChunk.TagsEntry") proto.RegisterType((*TracerPayload)(nil), "pb.TracerPayload") + proto.RegisterMapType((map[string]string)(nil), "pb.TracerPayload.TagsEntry") +} + +func init() { proto.RegisterFile("tracer_payload.proto", fileDescriptor_f02adc68a2cbcd51) } + +var fileDescriptor_f02adc68a2cbcd51 = []byte{ + // 638 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x4f, 0x6b, 0xdb, 0x3e, + 0x18, 0xc7, 0xeb, 0xa6, 0xc9, 0x2f, 0x56, 0xda, 0xfe, 0x3a, 0x2d, 0x14, 0x93, 0x81, 0x15, 0xc4, + 0x28, 0x61, 0xb0, 0x14, 0xba, 0xc3, 0x4a, 0x4f, 0xc3, 0xcb, 0xd8, 0x0a, 0x63, 0x14, 0xad, 0x8c, + 0xdd, 0x82, 0x92, 0x78, 0xae, 0x69, 0x23, 0x0b, 0xd9, 0x0e, 0xf4, 0x3c, 0x76, 0xdf, 0xcb, 0xda, + 0xb1, 0xc7, 0x9d, 0xc4, 0x68, 0x6f, 0x3e, 0xfa, 0x15, 0x0c, 0x3f, 0xb2, 0x9d, 0x78, 0xa7, 0xb1, + 0x9b, 0x9e, 0xcf, 0xa3, 0xef, 0x37, 0x7e, 0xfe, 0x28, 0xa8, 0x9f, 0x28, 0x3e, 0xf7, 0xd5, 0x54, + 0xf2, 0xdb, 0x9b, 0x88, 0x2f, 0xc6, 0x52, 0x45, 0x49, 0x84, 0xb7, 0xe5, 0x6c, 0xf0, 0x3c, 0x08, + 0x93, 0xab, 0x74, 0x36, 0x9e, 0x47, 0xcb, 0xe3, 0x20, 0x0a, 0xa2, 0x63, 0x48, 0xcd, 0xd2, 0x2f, + 0x10, 0x41, 0x00, 0x27, 0x23, 0x19, 0xa0, 0x58, 0x72, 0x61, 0xce, 0xf4, 0x6b, 0x0b, 0xa1, 0xcb, + 0xc2, 0xf7, 0xf5, 0x55, 0x2a, 0xae, 0xf1, 0x19, 0xea, 0x4a, 0x15, 0x46, 0x2a, 0x4c, 0x6e, 0x1d, + 0x6b, 0x68, 0x8d, 0xda, 0x9e, 0x9b, 0x69, 0x52, 0xb3, 0x5c, 0x93, 0xfd, 0x65, 0x1c, 0x9c, 0xd1, + 0x0a, 0x50, 0x56, 0xe7, 0xf0, 0x09, 0xea, 0x44, 0x2a, 0x0c, 0x42, 0xe1, 0x6c, 0x0f, 0xad, 0x91, + 0xed, 0x0d, 0x32, 0x4d, 0x4a, 0x92, 0x6b, 0xb2, 0x0b, 0x3a, 0x13, 0x52, 0x56, 0x72, 0x7c, 0x8a, + 0xda, 0xc5, 0xc7, 0xc4, 0x4e, 0x6b, 0xd8, 0x1a, 0xf5, 0x4e, 0xba, 0x63, 0x39, 0x1b, 0x7f, 0x94, + 0x5c, 0x78, 0x4e, 0xa6, 0x89, 0x49, 0xe5, 0x9a, 0xf4, 0x40, 0x0b, 0x11, 0x65, 0x86, 0xe2, 0x09, + 0xda, 0x49, 0x78, 0x10, 0x3b, 0x3b, 0x20, 0x74, 0x0a, 0xe1, 0xba, 0x8e, 0xf1, 0x25, 0x0f, 0xe2, + 0x37, 0x22, 0x51, 0xb7, 0xde, 0x61, 0xa6, 0x09, 0xdc, 0xcc, 0x35, 0x41, 0xe0, 0x53, 0x04, 0x94, + 0x01, 0xc3, 0xef, 0xd1, 0xee, 0x42, 0x45, 0x52, 0xfa, 0x0b, 0x10, 0x3b, 0xed, 0xa1, 0x35, 0xea, + 0x7a, 0xa3, 0x4c, 0x93, 0xbd, 0x92, 0x4f, 0xa1, 0xeb, 0xb9, 0x26, 0x8f, 0x41, 0xdc, 0xa0, 0x94, + 0x35, 0xd4, 0x83, 0x97, 0xc8, 0xae, 0x7f, 0x18, 0x1f, 0xa0, 0xd6, 0xb5, 0x6f, 0xba, 0x68, 0xb3, + 0xe2, 0x88, 0xfb, 0xa8, 0xbd, 0xe2, 0x37, 0xa9, 0x6f, 0xfa, 0xc3, 0x4c, 0x70, 0xb6, 0x7d, 0x6a, + 0xd1, 0x6f, 0x1d, 0xb4, 0x07, 0x16, 0xea, 0xc2, 0x0c, 0x17, 0xbf, 0x43, 0xbd, 0x79, 0x24, 0x12, + 0x1e, 0x0a, 0x5f, 0x9d, 0x4f, 0x8c, 0x8b, 0x77, 0x94, 0x69, 0xb2, 0x5b, 0xe3, 0x69, 0xb8, 0xc8, + 0x35, 0xc1, 0xf0, 0x59, 0x9b, 0x90, 0xb2, 0x4d, 0x69, 0x51, 0xe2, 0x0d, 0x17, 0x41, 0xca, 0x03, + 0xff, 0x03, 0x5f, 0x96, 0x3f, 0x6e, 0x4a, 0xac, 0xf8, 0x54, 0xf0, 0xe5, 0xba, 0xc4, 0x06, 0xa5, + 0xac, 0xa1, 0xc6, 0x9f, 0xd1, 0xff, 0x55, 0xfc, 0xc9, 0x57, 0x71, 0x18, 0x09, 0xa7, 0x05, 0x86, + 0xe3, 0x4c, 0x93, 0x83, 0x5a, 0xba, 0x32, 0xb9, 0x5c, 0x93, 0xc3, 0xa6, 0x67, 0x99, 0xa0, 0xec, + 0x4f, 0x1b, 0x7c, 0x81, 0xf6, 0xcc, 0x82, 0x57, 0xbe, 0x3b, 0xe0, 0xfb, 0x2c, 0xd3, 0x64, 0xbf, + 0xdc, 0xfc, 0xb5, 0x6b, 0xdf, 0x4c, 0xb2, 0x81, 0x29, 0x6b, 0x1a, 0xe0, 0x57, 0xc8, 0x56, 0xa9, + 0x48, 0xc2, 0xa5, 0x7f, 0x3e, 0x81, 0xc9, 0xda, 0x1e, 0xcd, 0x34, 0x41, 0x25, 0x34, 0xfd, 0x3b, + 0x00, 0xa7, 0x35, 0xa2, 0x6c, 0x2d, 0xc2, 0x1e, 0xea, 0xcc, 0x8b, 0x7d, 0x8a, 0x9d, 0x0e, 0xac, + 0xd9, 0x7e, 0x73, 0xcd, 0xcc, 0x8a, 0x9b, 0x1b, 0xf5, 0x8a, 0x9b, 0x90, 0xb2, 0x92, 0xe3, 0xb7, + 0xe5, 0xa2, 0xfe, 0x07, 0x0e, 0x4f, 0x6a, 0x87, 0x6a, 0xd4, 0x7f, 0xbd, 0xab, 0x47, 0xa8, 0xe5, + 0x8b, 0x95, 0xd3, 0x85, 0x42, 0xfa, 0x99, 0x26, 0x45, 0x98, 0x6b, 0x62, 0xc3, 0x4d, 0x5f, 0xac, + 0x28, 0x2b, 0x48, 0xf1, 0x86, 0xaf, 0xa2, 0x38, 0x29, 0xa6, 0xe7, 0xd8, 0x70, 0x19, 0xde, 0x70, + 0xc5, 0xea, 0x37, 0x5c, 0x01, 0xca, 0xea, 0x1c, 0x9e, 0x20, 0xc4, 0xa5, 0xac, 0x26, 0x80, 0x40, + 0xfd, 0x34, 0xd3, 0xa4, 0xc7, 0xa5, 0xdc, 0x68, 0xff, 0x23, 0x30, 0xd8, 0x60, 0x94, 0x6d, 0xe8, + 0xfe, 0xf9, 0x1d, 0x78, 0xce, 0x8f, 0x7b, 0xd7, 0xba, 0xbb, 0x77, 0xad, 0x5f, 0xf7, 0xae, 0xf5, + 0xfd, 0xc1, 0xdd, 0xba, 0x7b, 0x70, 0xb7, 0x7e, 0x3e, 0xb8, 0x5b, 0xb3, 0x0e, 0xfc, 0x5d, 0xbd, + 0xf8, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x17, 0x87, 0x13, 0xf6, 0x05, 0x05, 0x00, 0x00, } -func (m *TraceChunk) Marshal() (data []byte, err error) { + +func (m *TraceChunk) Marshal() (dAtA []byte, err error) { size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) if err != nil { return nil, err } - return data[:n], nil + return dAtA[:n], nil } -func (m *TraceChunk) MarshalTo(data []byte) (int, error) { +func (m *TraceChunk) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int _ = l if m.Priority != 0 { - data[i] = 0x8 + dAtA[i] = 0x8 i++ - i = encodeVarintTracerPayload(data, i, uint64(m.Priority)) + i = encodeVarintTracerPayload(dAtA, i, uint64(m.Priority)) } if len(m.Origin) > 0 { - data[i] = 0x12 + dAtA[i] = 0x12 i++ - i = encodeVarintTracerPayload(data, i, uint64(len(m.Origin))) - i += copy(data[i:], m.Origin) + i = encodeVarintTracerPayload(dAtA, i, uint64(len(m.Origin))) + i += copy(dAtA[i:], m.Origin) } if len(m.Spans) > 0 { for _, msg := range m.Spans { - data[i] = 0x1a + dAtA[i] = 0x1a i++ - i = encodeVarintTracerPayload(data, i, uint64(msg.Size())) - n, err := msg.MarshalTo(data[i:]) + i = encodeVarintTracerPayload(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) if err != nil { return 0, err } @@ -139,86 +323,86 @@ func (m *TraceChunk) MarshalTo(data []byte) (int, error) { } } if len(m.Tags) > 0 { - for k := range m.Tags { - data[i] = 0x22 + for k, _ := range m.Tags { + dAtA[i] = 0x22 i++ v := m.Tags[k] mapSize := 1 + len(k) + sovTracerPayload(uint64(len(k))) + 1 + len(v) + sovTracerPayload(uint64(len(v))) - i = encodeVarintTracerPayload(data, i, uint64(mapSize)) - data[i] = 0xa + i = encodeVarintTracerPayload(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa i++ - i = encodeVarintTracerPayload(data, i, uint64(len(k))) - i += copy(data[i:], k) - data[i] = 0x12 + i = encodeVarintTracerPayload(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 i++ - i = encodeVarintTracerPayload(data, i, uint64(len(v))) - i += copy(data[i:], v) + i = encodeVarintTracerPayload(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) } } if m.DroppedTrace { - data[i] = 0x28 + dAtA[i] = 0x28 i++ if m.DroppedTrace { - data[i] = 1 + dAtA[i] = 1 } else { - data[i] = 0 + dAtA[i] = 0 } i++ } return i, nil } -func (m *TracerPayload) Marshal() (data []byte, err error) { +func (m *TracerPayload) Marshal() (dAtA []byte, err error) { size := m.Size() - data = make([]byte, size) - n, err := m.MarshalTo(data) + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) if err != nil { return nil, err } - return data[:n], nil + return dAtA[:n], nil } -func (m *TracerPayload) MarshalTo(data []byte) (int, error) { +func (m *TracerPayload) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int _ = l if len(m.ContainerID) > 0 { - data[i] = 0xa + dAtA[i] = 0xa i++ - i = encodeVarintTracerPayload(data, i, uint64(len(m.ContainerID))) - i += copy(data[i:], m.ContainerID) + i = encodeVarintTracerPayload(dAtA, i, uint64(len(m.ContainerID))) + i += copy(dAtA[i:], m.ContainerID) } if len(m.LanguageName) > 0 { - data[i] = 0x12 + dAtA[i] = 0x12 i++ - i = encodeVarintTracerPayload(data, i, uint64(len(m.LanguageName))) - i += copy(data[i:], m.LanguageName) + i = encodeVarintTracerPayload(dAtA, i, uint64(len(m.LanguageName))) + i += copy(dAtA[i:], m.LanguageName) } if len(m.LanguageVersion) > 0 { - data[i] = 0x1a + dAtA[i] = 0x1a i++ - i = encodeVarintTracerPayload(data, i, uint64(len(m.LanguageVersion))) - i += copy(data[i:], m.LanguageVersion) + i = encodeVarintTracerPayload(dAtA, i, uint64(len(m.LanguageVersion))) + i += copy(dAtA[i:], m.LanguageVersion) } if len(m.TracerVersion) > 0 { - data[i] = 0x22 + dAtA[i] = 0x22 i++ - i = encodeVarintTracerPayload(data, i, uint64(len(m.TracerVersion))) - i += copy(data[i:], m.TracerVersion) + i = encodeVarintTracerPayload(dAtA, i, uint64(len(m.TracerVersion))) + i += copy(dAtA[i:], m.TracerVersion) } if len(m.RuntimeID) > 0 { - data[i] = 0x2a + dAtA[i] = 0x2a i++ - i = encodeVarintTracerPayload(data, i, uint64(len(m.RuntimeID))) - i += copy(data[i:], m.RuntimeID) + i = encodeVarintTracerPayload(dAtA, i, uint64(len(m.RuntimeID))) + i += copy(dAtA[i:], m.RuntimeID) } if len(m.Chunks) > 0 { for _, msg := range m.Chunks { - data[i] = 0x32 + dAtA[i] = 0x32 i++ - i = encodeVarintTracerPayload(data, i, uint64(msg.Size())) - n, err := msg.MarshalTo(data[i:]) + i = encodeVarintTracerPayload(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) if err != nil { return 0, err } @@ -226,71 +410,56 @@ func (m *TracerPayload) MarshalTo(data []byte) (int, error) { } } if len(m.Tags) > 0 { - for k := range m.Tags { - data[i] = 0x3a + for k, _ := range m.Tags { + dAtA[i] = 0x3a i++ v := m.Tags[k] mapSize := 1 + len(k) + sovTracerPayload(uint64(len(k))) + 1 + len(v) + sovTracerPayload(uint64(len(v))) - i = encodeVarintTracerPayload(data, i, uint64(mapSize)) - data[i] = 0xa + i = encodeVarintTracerPayload(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa i++ - i = encodeVarintTracerPayload(data, i, uint64(len(k))) - i += copy(data[i:], k) - data[i] = 0x12 + i = encodeVarintTracerPayload(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 i++ - i = encodeVarintTracerPayload(data, i, uint64(len(v))) - i += copy(data[i:], v) + i = encodeVarintTracerPayload(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) } } if len(m.Env) > 0 { - data[i] = 0x42 + dAtA[i] = 0x42 i++ - i = encodeVarintTracerPayload(data, i, uint64(len(m.Env))) - i += copy(data[i:], m.Env) + i = encodeVarintTracerPayload(dAtA, i, uint64(len(m.Env))) + i += copy(dAtA[i:], m.Env) } if len(m.Hostname) > 0 { - data[i] = 0x4a + dAtA[i] = 0x4a i++ - i = encodeVarintTracerPayload(data, i, uint64(len(m.Hostname))) - i += copy(data[i:], m.Hostname) + i = encodeVarintTracerPayload(dAtA, i, uint64(len(m.Hostname))) + i += copy(dAtA[i:], m.Hostname) } if len(m.AppVersion) > 0 { - data[i] = 0x52 + dAtA[i] = 0x52 i++ - i = encodeVarintTracerPayload(data, i, uint64(len(m.AppVersion))) - i += copy(data[i:], m.AppVersion) + i = encodeVarintTracerPayload(dAtA, i, uint64(len(m.AppVersion))) + i += copy(dAtA[i:], m.AppVersion) } return i, nil } -func encodeFixed64TracerPayload(data []byte, offset int, v uint64) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - data[offset+4] = uint8(v >> 32) - data[offset+5] = uint8(v >> 40) - data[offset+6] = uint8(v >> 48) - data[offset+7] = uint8(v >> 56) - return offset + 8 -} -func encodeFixed32TracerPayload(data []byte, offset int, v uint32) int { - data[offset] = uint8(v) - data[offset+1] = uint8(v >> 8) - data[offset+2] = uint8(v >> 16) - data[offset+3] = uint8(v >> 24) - return offset + 4 -} -func encodeVarintTracerPayload(data []byte, offset int, v uint64) int { +func encodeVarintTracerPayload(dAtA []byte, offset int, v uint64) int { for v >= 1<<7 { - data[offset] = uint8(v&0x7f | 0x80) + dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } - data[offset] = uint8(v) + dAtA[offset] = uint8(v) return offset + 1 } func (m *TraceChunk) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l if m.Priority != 0 { @@ -321,6 +490,9 @@ func (m *TraceChunk) Size() (n int) { } func (m *TracerPayload) Size() (n int) { + if m == nil { + return 0 + } var l int _ = l l = len(m.ContainerID) @@ -385,8 +557,8 @@ func sovTracerPayload(x uint64) (n int) { func sozTracerPayload(x uint64) (n int) { return sovTracerPayload(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *TraceChunk) Unmarshal(data []byte) error { - l := len(data) +func (m *TraceChunk) Unmarshal(dAtA []byte) error { + l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx @@ -398,9 +570,9 @@ func (m *TraceChunk) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -426,9 +598,9 @@ func (m *TraceChunk) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - m.Priority |= (int32(b) & 0x7F) << shift + m.Priority |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -445,9 +617,9 @@ func (m *TraceChunk) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -457,10 +629,13 @@ func (m *TraceChunk) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTracerPayload + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Origin = string(data[iNdEx:postIndex]) + m.Origin = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { @@ -474,9 +649,9 @@ func (m *TraceChunk) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -485,11 +660,14 @@ func (m *TraceChunk) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTracerPayload + } if postIndex > l { return io.ErrUnexpectedEOF } m.Spans = append(m.Spans, &Span{}) - if err := m.Spans[len(m.Spans)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + if err := m.Spans[len(m.Spans)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -505,9 +683,9 @@ func (m *TraceChunk) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -516,54 +694,20 @@ func (m *TraceChunk) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTracerPayload - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTracerPayload - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthTracerPayload } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(data[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Tags == nil { m.Tags = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTracerPayload @@ -571,43 +715,88 @@ func (m *TraceChunk) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTracerPayload + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTracerPayload + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthTracerPayload + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthTracerPayload + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := data[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTracerPayload + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthTracerPayload + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthTracerPayload + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipTracerPayload(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTracerPayload + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTracerPayload - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(data[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Tags[mapkey] = mapvalue - } else { - var mapvalue string - m.Tags[mapkey] = mapvalue } + m.Tags[mapkey] = mapvalue iNdEx = postIndex case 5: if wireType != 0 { @@ -621,9 +810,9 @@ func (m *TraceChunk) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - v |= (int(b) & 0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } @@ -631,13 +820,16 @@ func (m *TraceChunk) Unmarshal(data []byte) error { m.DroppedTrace = bool(v != 0) default: iNdEx = preIndex - skippy, err := skipTracerPayload(data[iNdEx:]) + skippy, err := skipTracerPayload(dAtA[iNdEx:]) if err != nil { return err } if skippy < 0 { return ErrInvalidLengthTracerPayload } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTracerPayload + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -650,8 +842,8 @@ func (m *TraceChunk) Unmarshal(data []byte) error { } return nil } -func (m *TracerPayload) Unmarshal(data []byte) error { - l := len(data) +func (m *TracerPayload) Unmarshal(dAtA []byte) error { + l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx @@ -663,9 +855,9 @@ func (m *TracerPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -691,9 +883,9 @@ func (m *TracerPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -703,10 +895,13 @@ func (m *TracerPayload) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTracerPayload + } if postIndex > l { return io.ErrUnexpectedEOF } - m.ContainerID = string(data[iNdEx:postIndex]) + m.ContainerID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { @@ -720,9 +915,9 @@ func (m *TracerPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -732,10 +927,13 @@ func (m *TracerPayload) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTracerPayload + } if postIndex > l { return io.ErrUnexpectedEOF } - m.LanguageName = string(data[iNdEx:postIndex]) + m.LanguageName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { @@ -749,9 +947,9 @@ func (m *TracerPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -761,10 +959,13 @@ func (m *TracerPayload) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTracerPayload + } if postIndex > l { return io.ErrUnexpectedEOF } - m.LanguageVersion = string(data[iNdEx:postIndex]) + m.LanguageVersion = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 4: if wireType != 2 { @@ -778,9 +979,9 @@ func (m *TracerPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -790,10 +991,13 @@ func (m *TracerPayload) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTracerPayload + } if postIndex > l { return io.ErrUnexpectedEOF } - m.TracerVersion = string(data[iNdEx:postIndex]) + m.TracerVersion = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 5: if wireType != 2 { @@ -807,9 +1011,9 @@ func (m *TracerPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -819,10 +1023,13 @@ func (m *TracerPayload) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTracerPayload + } if postIndex > l { return io.ErrUnexpectedEOF } - m.RuntimeID = string(data[iNdEx:postIndex]) + m.RuntimeID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 6: if wireType != 2 { @@ -836,9 +1043,9 @@ func (m *TracerPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -847,11 +1054,14 @@ func (m *TracerPayload) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTracerPayload + } if postIndex > l { return io.ErrUnexpectedEOF } m.Chunks = append(m.Chunks, &TraceChunk{}) - if err := m.Chunks[len(m.Chunks)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + if err := m.Chunks[len(m.Chunks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -867,9 +1077,9 @@ func (m *TracerPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -878,54 +1088,20 @@ func (m *TracerPayload) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - var keykey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTracerPayload - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - keykey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTracerPayload - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLenmapkey |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { + if postIndex < 0 { return ErrInvalidLengthTracerPayload } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey > l { + if postIndex > l { return io.ErrUnexpectedEOF } - mapkey := string(data[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey if m.Tags == nil { m.Tags = make(map[string]string) } - if iNdEx < postIndex { - var valuekey uint64 + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTracerPayload @@ -933,43 +1109,88 @@ func (m *TracerPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - valuekey |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTracerPayload + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTracerPayload + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if iNdEx >= l { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthTracerPayload + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthTracerPayload + } + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - b := data[iNdEx] - iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTracerPayload + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthTracerPayload + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthTracerPayload + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipTracerPayload(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTracerPayload + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthTracerPayload - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue := string(data[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Tags[mapkey] = mapvalue - } else { - var mapvalue string - m.Tags[mapkey] = mapvalue } + m.Tags[mapkey] = mapvalue iNdEx = postIndex case 8: if wireType != 2 { @@ -983,9 +1204,9 @@ func (m *TracerPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -995,10 +1216,13 @@ func (m *TracerPayload) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTracerPayload + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Env = string(data[iNdEx:postIndex]) + m.Env = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 9: if wireType != 2 { @@ -1012,9 +1236,9 @@ func (m *TracerPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1024,10 +1248,13 @@ func (m *TracerPayload) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTracerPayload + } if postIndex > l { return io.ErrUnexpectedEOF } - m.Hostname = string(data[iNdEx:postIndex]) + m.Hostname = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 10: if wireType != 2 { @@ -1041,9 +1268,9 @@ func (m *TracerPayload) Unmarshal(data []byte) error { if iNdEx >= l { return io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1053,20 +1280,26 @@ func (m *TracerPayload) Unmarshal(data []byte) error { return ErrInvalidLengthTracerPayload } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTracerPayload + } if postIndex > l { return io.ErrUnexpectedEOF } - m.AppVersion = string(data[iNdEx:postIndex]) + m.AppVersion = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex - skippy, err := skipTracerPayload(data[iNdEx:]) + skippy, err := skipTracerPayload(dAtA[iNdEx:]) if err != nil { return err } if skippy < 0 { return ErrInvalidLengthTracerPayload } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTracerPayload + } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } @@ -1079,8 +1312,8 @@ func (m *TracerPayload) Unmarshal(data []byte) error { } return nil } -func skipTracerPayload(data []byte) (n int, err error) { - l := len(data) +func skipTracerPayload(dAtA []byte) (n int, err error) { + l := len(dAtA) iNdEx := 0 for iNdEx < l { var wire uint64 @@ -1091,7 +1324,7 @@ func skipTracerPayload(data []byte) (n int, err error) { if iNdEx >= l { return 0, io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { @@ -1109,7 +1342,7 @@ func skipTracerPayload(data []byte) (n int, err error) { return 0, io.ErrUnexpectedEOF } iNdEx++ - if data[iNdEx-1] < 0x80 { + if dAtA[iNdEx-1] < 0x80 { break } } @@ -1126,17 +1359,20 @@ func skipTracerPayload(data []byte) (n int, err error) { if iNdEx >= l { return 0, io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ length |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthTracerPayload } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthTracerPayload + } return iNdEx, nil case 3: for { @@ -1149,7 +1385,7 @@ func skipTracerPayload(data []byte) (n int, err error) { if iNdEx >= l { return 0, io.ErrUnexpectedEOF } - b := data[iNdEx] + b := dAtA[iNdEx] iNdEx++ innerWire |= (uint64(b) & 0x7F) << shift if b < 0x80 { @@ -1160,11 +1396,14 @@ func skipTracerPayload(data []byte) (n int, err error) { if innerWireType == 4 { break } - next, err := skipTracerPayload(data[start:]) + next, err := skipTracerPayload(dAtA[start:]) if err != nil { return 0, err } iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthTracerPayload + } } return iNdEx, nil case 4: @@ -1183,49 +1422,3 @@ var ( ErrInvalidLengthTracerPayload = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowTracerPayload = fmt.Errorf("proto: integer overflow") ) - -func init() { proto.RegisterFile("tracer_payload.proto", fileDescriptorTracerPayload) } - -var fileDescriptorTracerPayload = []byte{ - // 630 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x4f, 0x6b, 0xdb, 0x4c, - 0x10, 0xc6, 0x5f, 0xc5, 0xb1, 0x5f, 0x6b, 0x9c, 0xa4, 0xee, 0xd6, 0x04, 0xe1, 0x82, 0xd7, 0x2c, - 0x25, 0x98, 0x42, 0x1d, 0x48, 0x0f, 0x0d, 0x39, 0x15, 0xd5, 0xa5, 0x0d, 0x94, 0x12, 0xb6, 0xa1, - 0xf4, 0x66, 0xd6, 0xb6, 0xaa, 0x88, 0xc4, 0xab, 0x45, 0x92, 0x0d, 0x39, 0x97, 0xde, 0xfb, 0xb1, - 0x7a, 0xec, 0x27, 0x58, 0x8a, 0x7b, 0xd3, 0x51, 0x9f, 0xa0, 0x68, 0x56, 0x92, 0xad, 0x9e, 0x4a, - 0x6f, 0x3b, 0xbf, 0xd9, 0xe7, 0xb1, 0xe6, 0xcf, 0x1a, 0x7a, 0x49, 0x24, 0xe6, 0x5e, 0x34, 0x55, - 0xe2, 0xfe, 0x2e, 0x14, 0x8b, 0xb1, 0x8a, 0xc2, 0x24, 0x24, 0x7b, 0x6a, 0xd6, 0x7f, 0xe6, 0x07, - 0xc9, 0xcd, 0x6a, 0x36, 0x9e, 0x87, 0xcb, 0x53, 0x3f, 0xf4, 0xc3, 0x53, 0x4c, 0xcd, 0x56, 0x9f, - 0x31, 0xc2, 0x00, 0x4f, 0x46, 0xd2, 0x87, 0x58, 0x09, 0x69, 0xce, 0xec, 0x4b, 0x03, 0xe0, 0x3a, - 0xf7, 0x7d, 0x75, 0xb3, 0x92, 0xb7, 0xe4, 0x02, 0xda, 0x2a, 0x0a, 0xc2, 0x28, 0x48, 0xee, 0x1d, - 0x6b, 0x68, 0x8d, 0x9a, 0xee, 0x20, 0xd5, 0xb4, 0x62, 0x99, 0xa6, 0x47, 0xcb, 0xd8, 0xbf, 0x60, - 0x25, 0x60, 0xbc, 0xca, 0x91, 0x33, 0x68, 0x85, 0x51, 0xe0, 0x07, 0xd2, 0xd9, 0x1b, 0x5a, 0x23, - 0xdb, 0xed, 0xa7, 0x9a, 0x16, 0x24, 0xd3, 0xf4, 0x00, 0x75, 0x26, 0x64, 0xbc, 0xe0, 0xe4, 0x1c, - 0x9a, 0xf9, 0xc7, 0xc4, 0x4e, 0x63, 0xd8, 0x18, 0x75, 0xce, 0xda, 0x63, 0x35, 0x1b, 0x7f, 0x50, - 0x42, 0xba, 0x4e, 0xaa, 0xa9, 0x49, 0x65, 0x9a, 0x76, 0x50, 0x8b, 0x11, 0xe3, 0x86, 0x92, 0x09, - 0xec, 0x27, 0xc2, 0x8f, 0x9d, 0x7d, 0x14, 0x3a, 0xb9, 0x70, 0x5b, 0xc7, 0xf8, 0x5a, 0xf8, 0xf1, - 0x6b, 0x99, 0x44, 0xf7, 0xee, 0x71, 0xaa, 0x29, 0xde, 0xcc, 0x34, 0x05, 0xf4, 0xc9, 0x03, 0xc6, - 0x91, 0x91, 0x77, 0x70, 0xb0, 0x88, 0x42, 0xa5, 0xbc, 0x05, 0x8a, 0x9d, 0xe6, 0xd0, 0x1a, 0xb5, - 0xdd, 0x51, 0xaa, 0xe9, 0x61, 0xc1, 0xa7, 0xd8, 0xf5, 0x4c, 0xd3, 0x47, 0x28, 0xae, 0x51, 0xc6, - 0x6b, 0xea, 0xfe, 0x0b, 0xb0, 0xab, 0x1f, 0x26, 0x5d, 0x68, 0xdc, 0x7a, 0xa6, 0x8b, 0x36, 0xcf, - 0x8f, 0xa4, 0x07, 0xcd, 0xb5, 0xb8, 0x5b, 0x79, 0xa6, 0x3f, 0xdc, 0x04, 0x17, 0x7b, 0xe7, 0x16, - 0xfb, 0xda, 0x82, 0x43, 0xb4, 0x88, 0xae, 0xcc, 0x70, 0xc9, 0x5b, 0xe8, 0xcc, 0x43, 0x99, 0x88, - 0x40, 0x7a, 0xd1, 0xe5, 0xc4, 0xb8, 0xb8, 0x27, 0xa9, 0xa6, 0x07, 0x15, 0x9e, 0x06, 0x8b, 0x4c, - 0x53, 0x82, 0x9f, 0xb5, 0x0b, 0x19, 0xdf, 0x95, 0xe6, 0x25, 0xde, 0x09, 0xe9, 0xaf, 0x84, 0xef, - 0xbd, 0x17, 0xcb, 0xe2, 0xc7, 0x4d, 0x89, 0x25, 0x9f, 0x4a, 0xb1, 0xdc, 0x96, 0x58, 0xa3, 0x8c, - 0xd7, 0xd4, 0xe4, 0x13, 0x3c, 0x28, 0xe3, 0x8f, 0x5e, 0x14, 0x07, 0xa1, 0x74, 0x1a, 0x68, 0x38, - 0x4e, 0x35, 0xed, 0x56, 0xd2, 0xb5, 0xc9, 0x65, 0x9a, 0x1e, 0xd7, 0x3d, 0x8b, 0x04, 0xe3, 0x7f, - 0xda, 0x90, 0x2b, 0x38, 0x34, 0x0b, 0x5e, 0xfa, 0xee, 0xa3, 0xef, 0xd3, 0x54, 0xd3, 0xa3, 0x62, - 0xf3, 0xb7, 0xae, 0x3d, 0x33, 0xc9, 0x1a, 0x66, 0xbc, 0x6e, 0x40, 0x5e, 0x82, 0x1d, 0xad, 0x64, - 0x12, 0x2c, 0xbd, 0xcb, 0x09, 0x4e, 0xd6, 0x76, 0x59, 0xaa, 0x29, 0x14, 0xd0, 0xf4, 0xaf, 0x8b, - 0x4e, 0x5b, 0xc4, 0xf8, 0x56, 0x44, 0x5c, 0x68, 0xcd, 0xf3, 0x7d, 0x8a, 0x9d, 0x16, 0xae, 0xd9, - 0x51, 0x7d, 0xcd, 0xcc, 0x8a, 0x9b, 0x1b, 0xd5, 0x8a, 0x9b, 0x90, 0xf1, 0x82, 0x93, 0x37, 0xc5, - 0xa2, 0xfe, 0x8f, 0x0e, 0x8f, 0x2b, 0x87, 0x72, 0xd4, 0x7f, 0xbd, 0xab, 0x27, 0xd0, 0xf0, 0xe4, - 0xda, 0x69, 0x63, 0x21, 0xbd, 0x54, 0xd3, 0x3c, 0xcc, 0x34, 0xb5, 0xf1, 0xa6, 0x27, 0xd7, 0x8c, - 0xe7, 0x24, 0x7f, 0xc3, 0x37, 0x61, 0x9c, 0xe4, 0xd3, 0x73, 0x6c, 0xbc, 0x8c, 0x6f, 0xb8, 0x64, - 0xd5, 0x1b, 0x2e, 0x01, 0xe3, 0x55, 0x8e, 0x4c, 0x00, 0x84, 0x52, 0xe5, 0x04, 0x00, 0xd5, 0x4f, - 0x52, 0x4d, 0x3b, 0x42, 0xa9, 0x9d, 0xf6, 0x3f, 0x44, 0x83, 0x1d, 0xc6, 0xf8, 0x8e, 0xee, 0x9f, - 0xdf, 0x81, 0xdb, 0xfd, 0xbe, 0x19, 0x58, 0x3f, 0x36, 0x03, 0xeb, 0xe7, 0x66, 0x60, 0x7d, 0xfb, - 0x35, 0xf8, 0x6f, 0xd6, 0xc2, 0xbf, 0xa9, 0xe7, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xfa, 0x46, - 0xa3, 0x77, 0xfd, 0x04, 0x00, 0x00, -} diff --git a/pkg/trace/remoteconfighandler/remote_config_handler.go b/pkg/trace/remoteconfighandler/remote_config_handler.go index 9825859d2e902..e1a7ace0f0c62 100644 --- a/pkg/trace/remoteconfighandler/remote_config_handler.go +++ b/pkg/trace/remoteconfighandler/remote_config_handler.go @@ -11,6 +11,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/remoteconfig/state/products/apmsampling" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/log" + "github.com/davecgh/go-spew/spew" ) type prioritySampler interface { @@ -77,7 +78,7 @@ func (h *RemoteConfigHandler) onUpdate(update map[string]state.APMSamplingConfig } } - log.Debugf("updating samplers with remote configuration: %v", samplerconfigPayload) + log.Debugf("updating samplers with remote configuration: %v", spew.Sdump(samplerconfigPayload)) h.updateSamplers(samplerconfigPayload) } diff --git a/pkg/trace/sampler/prioritysampler.go b/pkg/trace/sampler/prioritysampler.go index a49802c58cb35..905a45c45ce40 100644 --- a/pkg/trace/sampler/prioritysampler.go +++ b/pkg/trace/sampler/prioritysampler.go @@ -26,7 +26,9 @@ import ( ) const ( - agentRateKey = "_dd.agent_psr" + deprecatedRateKey = "_sampling_priority_rate_v1" + agentRateKey = "_dd.agent_psr" + ruleRateKey = "_dd.rule_psr" ) // PrioritySampler computes priority rates per tracerEnv, service to apply in a feedback loop with trace-agent clients. @@ -77,6 +79,10 @@ func (s *PrioritySampler) UpdateTargetTPS(targetTPS float64) { s.sampler.updateTargetTPS(targetTPS) } +func (s *PrioritySampler) GetTargetTPS() float64 { + return s.sampler.targetTPS.Load() +} + // update sampling rates func (s *PrioritySampler) updateRates() { s.rateByService.SetAll(s.ratesByService()) @@ -116,11 +122,37 @@ func (s *PrioritySampler) Sample(now time.Time, trace *pb.TraceChunk, root *pb.S s.countSignature(now, root, signature, clientDroppedP0sWeight) if sampled { + s.applyRate(root, signature) s.sampler.countSample() } return sampled } +func (s *PrioritySampler) applyRate(root *pb.Span, signature Signature) float64 { + if root.ParentID != 0 { + return 1.0 + } + // recent tracers annotate roots with applied priority rate + // agentRateKey is set when the agent computed rate is applied + if rate, ok := getMetric(root, agentRateKey); ok { + return rate + } + // ruleRateKey is set when a tracer rule rate is applied + if rate, ok := getMetric(root, ruleRateKey); ok { + return rate + } + // slow path used by older tracer versions + // dd-trace-go used to set the rate in deprecatedRateKey + if rate, ok := getMetric(root, deprecatedRateKey); ok { + return rate + } + rate := s.sampler.getSignatureSampleRate(signature) + + setMetric(root, deprecatedRateKey, rate) + + return rate +} + // countSignature counts all chunks received with local chunk root signature. func (s *PrioritySampler) countSignature(now time.Time, root *pb.Span, signature Signature, clientDroppedP0Weight float64) { rootWeight := weightRoot(root) diff --git a/pkg/trace/sampler/rare_sampler.go b/pkg/trace/sampler/rare_sampler.go index 107e1e8f866cc..3b898df360cf9 100644 --- a/pkg/trace/sampler/rare_sampler.go +++ b/pkg/trace/sampler/rare_sampler.go @@ -98,6 +98,10 @@ func (e *RareSampler) SetEnabled(enabled bool) { e.enabled.Store(enabled) } +func (e *RareSampler) IsEnabled() bool { + return e.enabled.Load() +} + func (e *RareSampler) handlePriorityTrace(now time.Time, env string, t *pb.TraceChunk, ttl time.Duration) { expire := now.Add(ttl) for _, s := range t.Spans { diff --git a/pkg/trace/sampler/scoresampler.go b/pkg/trace/sampler/scoresampler.go index 7c99156d2edf5..29809acac82f5 100644 --- a/pkg/trace/sampler/scoresampler.go +++ b/pkg/trace/sampler/scoresampler.go @@ -73,8 +73,12 @@ func (s *ScoreSampler) Sample(now time.Time, trace pb.Trace, root *pb.Span, env return s.applySampleRate(root, rate) } -func (e *ErrorsSampler) UpdateTargetTPS(targetTPS float64) { - e.ScoreSampler.Sampler.updateTargetTPS(targetTPS) +func (s *ScoreSampler) UpdateTargetTPS(targetTPS float64) { + s.Sampler.updateTargetTPS(targetTPS) +} + +func (s *ScoreSampler) GetTargetTPS() float64 { + return s.Sampler.targetTPS.Load() } func (s *ScoreSampler) applySampleRate(root *pb.Span, rate float64) bool { diff --git a/pkg/trace/traceutil/normalize.go b/pkg/trace/traceutil/normalize.go index 2742cc0edab0e..7859d4f6df1ef 100644 --- a/pkg/trace/traceutil/normalize.go +++ b/pkg/trace/traceutil/normalize.go @@ -97,6 +97,11 @@ const maxTagLength = 200 // NormalizeTag applies some normalization to ensure the tags match the backend requirements. func NormalizeTag(v string) string { + // Fast path: Check if the tag is valid and only contains ASCII characters, + // if yes return it as-is right away. For most use-cases this reduces CPU usage. + if isNormalizedASCIITag(v) { + return v + } // the algorithm works by creating a set of cuts marking start and end offsets in v // that have to be replaced with underscore (_) if len(v) == 0 { @@ -273,3 +278,40 @@ func normMetricNameParse(name string) (string, bool) { return string(res), true } + +func isNormalizedASCIITag(tag string) bool { + if len(tag) == 0 { + return true + } + if len(tag) > maxTagLength { + return false + } + if !isValidASCIIStartChar(tag[0]) { + return false + } + for i := 1; i < len(tag); i++ { + b := tag[i] + // TODO: Attempt to optimize this check using SIMD/vectorization. + if isValidASCIITagChar(b) { + continue + } + if b == '_' { + // an underscore is only okay if followed by a valid non-underscore character + i++ + if i == len(tag) || !isValidASCIITagChar(tag[i]) { + return false + } + } else { + return false + } + } + return true +} + +func isValidASCIIStartChar(c byte) bool { + return ('a' <= c && c <= 'z') || c == ':' +} + +func isValidASCIITagChar(c byte) bool { + return isValidASCIIStartChar(c) || ('0' <= c && c <= '9') || c == '.' || c == '/' || c == '-' +} diff --git a/pkg/trace/writer/trace.go b/pkg/trace/writer/trace.go index 1bdd09161be43..bf5205803f156 100644 --- a/pkg/trace/writer/trace.go +++ b/pkg/trace/writer/trace.go @@ -30,6 +30,14 @@ const pathTraces = "/api/v0.2/traces" // a flush is triggered; replaced in tests. var MaxPayloadSize = 3200000 // 3.2MB is the maximum allowed by the Datadog API +type samplerTPSReader interface { + GetTargetTPS() float64 +} + +type samplerEnabledReader interface { + IsEnabled() bool +} + // SampledChunks represents the result of a trace sampling operation. type SampledChunks struct { // TracerPayload contains all the chunks that were sampled as part of processing a payload. @@ -48,10 +56,12 @@ type TraceWriter struct { // Channel should only be received from when testing. In chan *SampledChunks + prioritySampler samplerTPSReader + errorsSampler samplerTPSReader + rareSampler samplerEnabledReader + hostname string env string - targetTPS float64 - errorTPS float64 senders []*sender stop chan struct{} stats *info.TraceWriterInfo @@ -71,20 +81,21 @@ type TraceWriter struct { // NewTraceWriter returns a new TraceWriter. It is created for the given agent configuration and // will accept incoming spans via the in channel. -func NewTraceWriter(cfg *config.AgentConfig) *TraceWriter { +func NewTraceWriter(cfg *config.AgentConfig, prioritySampler samplerTPSReader, errorsSampler samplerTPSReader, rareSampler samplerEnabledReader) *TraceWriter { tw := &TraceWriter{ - In: make(chan *SampledChunks, 1000), - hostname: cfg.Hostname, - env: cfg.DefaultEnv, - targetTPS: cfg.TargetTPS, - errorTPS: cfg.ErrorTPS, - stats: &info.TraceWriterInfo{}, - stop: make(chan struct{}), - flushChan: make(chan chan struct{}), - syncMode: cfg.SynchronousFlushing, - tick: 5 * time.Second, - agentVersion: cfg.AgentVersion, - easylog: log.NewThrottled(5, 10*time.Second), // no more than 5 messages every 10 seconds + In: make(chan *SampledChunks, 1000), + prioritySampler: prioritySampler, + errorsSampler: errorsSampler, + rareSampler: rareSampler, + hostname: cfg.Hostname, + env: cfg.DefaultEnv, + stats: &info.TraceWriterInfo{}, + stop: make(chan struct{}), + flushChan: make(chan chan struct{}), + syncMode: cfg.SynchronousFlushing, + tick: 5 * time.Second, + agentVersion: cfg.AgentVersion, + easylog: log.NewThrottled(5, 10*time.Second), // no more than 5 messages every 10 seconds } climit := cfg.TraceWriter.ConnectionLimit if climit == 0 { @@ -227,13 +238,15 @@ func (w *TraceWriter) flush() { log.Debugf("Serializing %d tracer payloads.", len(w.tracerPayloads)) p := pb.AgentPayload{ - AgentVersion: w.agentVersion, - HostName: w.hostname, - Env: w.env, - TargetTPS: w.targetTPS, - ErrorTPS: w.errorTPS, - TracerPayloads: w.tracerPayloads, + AgentVersion: w.agentVersion, + HostName: w.hostname, + Env: w.env, + TargetTPS: w.prioritySampler.GetTargetTPS(), + ErrorTPS: w.errorsSampler.GetTargetTPS(), + RareSamplerEnabled: w.rareSampler.IsEnabled(), + TracerPayloads: w.tracerPayloads, } + log.Debugf("Reported agent rates: target_tps=%v errors_tps=%v rare_sampling=%v", p.TargetTPS, p.ErrorTPS, p.RareSamplerEnabled) b, err := proto.Marshal(&p) if err != nil { log.Errorf("Failed to serialize payload, data dropped: %v", err) diff --git a/pkg/trace/writer/trace_test.go b/pkg/trace/writer/trace_test.go index ff462a7a2581d..710e2fe2b7512 100644 --- a/pkg/trace/writer/trace_test.go +++ b/pkg/trace/writer/trace_test.go @@ -8,6 +8,7 @@ package writer import ( "compress/gzip" "io" + "io/ioutil" "reflect" "runtime" "sync" @@ -21,6 +22,22 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/testutil" ) +// mock sampler +type MockSampler struct { + TargetTPS float64 + Enabled bool +} + +func (s MockSampler) IsEnabled() bool { + return s.Enabled +} + +func (s MockSampler) GetTargetTPS() float64 { + return s.TargetTPS +} + +var mockSampler = MockSampler{TargetTPS: 5, Enabled: true} + func TestTraceWriter(t *testing.T) { srv := newTestServer() cfg := &config.AgentConfig{ @@ -42,7 +59,7 @@ func TestTraceWriter(t *testing.T) { // Use a flush threshold that allows the first two entries to not overflow, // but overflow on the third. defer useFlushThreshold(testSpans[0].Size + testSpans[1].Size + 10)() - tw := NewTraceWriter(cfg) + tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) tw.In = make(chan *SampledChunks) go tw.Run() for _, ss := range testSpans { @@ -83,7 +100,7 @@ func TestTraceWriterMultipleEndpointsConcurrent(t *testing.T) { randomSampledSpans(10, 0), randomSampledSpans(40, 5), } - tw := NewTraceWriter(cfg) + tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) tw.In = make(chan *SampledChunks, 100) go tw.Run() @@ -176,7 +193,7 @@ func TestTraceWriterFlushSync(t *testing.T) { randomSampledSpans(10, 0), randomSampledSpans(40, 5), } - tw := NewTraceWriter(cfg) + tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) go tw.Run() for _, ss := range testSpans { tw.In <- ss @@ -204,7 +221,7 @@ func TestResetBuffer(t *testing.T) { SynchronousFlushing: true, } - w := NewTraceWriter(cfg) + w := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) runtime.GC() var m runtime.MemStats @@ -245,7 +262,7 @@ func TestTraceWriterSyncStop(t *testing.T) { randomSampledSpans(10, 0), randomSampledSpans(40, 5), } - tw := NewTraceWriter(cfg) + tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) go tw.Run() for _, ss := range testSpans { tw.In <- ss @@ -273,12 +290,91 @@ func TestTraceWriterSyncNoop(t *testing.T) { SynchronousFlushing: false, } t.Run("ok", func(t *testing.T) { - tw := NewTraceWriter(cfg) + tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) err := tw.FlushSync() assert.NotNil(t, err) }) } +func TestTraceWriterAgentPayload(t *testing.T) { + srv := newTestServer() + defer srv.Close() + cfg := &config.AgentConfig{ + Hostname: testHostname, + DefaultEnv: testEnv, + Endpoints: []*config.Endpoint{{ + APIKey: "123", + Host: srv.URL, + }}, + TraceWriter: &config.WriterConfig{ConnectionLimit: 200, QueueSize: 40}, + SynchronousFlushing: true, + } + + // helper function to send a chunk to the writer and force a synchronous flush + sendRandomSpanAndFlush := func(t *testing.T, tw *TraceWriter) { + tw.In <- randomSampledSpans(20, 8) + err := tw.FlushSync() + assert.Nil(t, err) + } + // helper function to parse the received payload and inspect the TPS that were filled by the writer + assertExpectedTps := func(t *testing.T, priorityTps float64, errorTps float64, rareEnabled bool) { + assert.Len(t, srv.payloads, 1) + ap, err := deserializePayload(*srv.payloads[0]) + assert.Nil(t, err) + assert.Equal(t, priorityTps, ap.TargetTPS) + assert.Equal(t, errorTps, ap.ErrorTPS) + assert.Equal(t, rareEnabled, ap.RareSamplerEnabled) + srv.payloads = nil + } + + t.Run("static TPS config", func(t *testing.T) { + tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) + go tw.Run() + defer tw.Stop() + sendRandomSpanAndFlush(t, tw) + assertExpectedTps(t, 5, 5, true) + }) + + t.Run("dynamic TPS config", func(t *testing.T) { + prioritySampler := &MockSampler{TargetTPS: 5} + errorSampler := &MockSampler{TargetTPS: 6} + rareSampler := &MockSampler{Enabled: false} + + tw := NewTraceWriter(cfg, prioritySampler, errorSampler, rareSampler) + go tw.Run() + defer tw.Stop() + sendRandomSpanAndFlush(t, tw) + assertExpectedTps(t, 5, 6, false) + + // simulate a remote config update + prioritySampler.TargetTPS = 42 + errorSampler.TargetTPS = 15 + rareSampler.Enabled = true + + sendRandomSpanAndFlush(t, tw) + assertExpectedTps(t, 42, 15, true) + }) +} + +// deserializePayload decompresses a payload and deserializes it into a pb.AgentPayload. +func deserializePayload(p payload) (*pb.AgentPayload, error) { + gzipr, err := gzip.NewReader(p.body) + if err != nil { + return nil, err + } + defer gzipr.Close() + uncompressedBytes, err := ioutil.ReadAll(gzipr) + if err != nil { + return nil, err + } + var agentPayload pb.AgentPayload + err = proto.Unmarshal(uncompressedBytes, &agentPayload) + if err != nil { + return nil, err + } + return &agentPayload, nil +} + // BenchmarkMapDelete-8 35125977 28.85 ns/op 0 B/op 0 allocs/op // BenchmarkMapDelete-8 100000000 14.36 ns/op 0 B/op 0 allocs/op func BenchmarkMapDelete(b *testing.B) { diff --git a/pkg/util/cgroups/go.mod b/pkg/util/cgroups/go.mod index 6f6e93422b69c..5ea2f41b9ea81 100644 --- a/pkg/util/cgroups/go.mod +++ b/pkg/util/cgroups/go.mod @@ -8,7 +8,7 @@ replace ( ) require ( - github.com/DataDog/datadog-agent/pkg/util/log v0.41.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.42.0-rc.3 github.com/containerd/cgroups v1.0.4 github.com/google/go-cmp v0.5.8 github.com/karrick/godirwalk v1.17.0 @@ -16,7 +16,7 @@ require ( ) require ( - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.41.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.42.0-rc.3 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/coreos/go-systemd/v22 v22.3.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/pkg/util/containerd/containerd_util.go b/pkg/util/containerd/containerd_util.go index 2c0058e9ac5e8..d9e9e4ecb8946 100644 --- a/pkg/util/containerd/containerd_util.go +++ b/pkg/util/containerd/containerd_util.go @@ -46,7 +46,8 @@ type ContainerdItf interface { Labels(namespace string, ctn containerd.Container) (map[string]string, error) LabelsWithContext(ctx context.Context, namespace string, ctn containerd.Container) (map[string]string, error) ListImages(namespace string) ([]containerd.Image, error) - Image(namespace string, ctn containerd.Container) (containerd.Image, error) + Image(namespace string, name string) (containerd.Image, error) + ImageOfContainer(namespace string, ctn containerd.Container) (containerd.Image, error) ImageSize(namespace string, ctn containerd.Container) (int64, error) Spec(namespace string, ctn containerd.Container) (*oci.Spec, error) SpecWithContext(ctx context.Context, namespace string, ctn containerd.Container) (*oci.Spec, error) @@ -231,7 +232,16 @@ func (c *ContainerdUtil) ListImages(namespace string) ([]containerd.Image, error } // Image interfaces with the containerd api to get an image -func (c *ContainerdUtil) Image(namespace string, ctn containerd.Container) (containerd.Image, error) { +func (c *ContainerdUtil) Image(namespace string, name string) (containerd.Image, error) { + ctx, cancel := context.WithTimeout(context.Background(), c.queryTimeout) + defer cancel() + ctxNamespace := namespaces.WithNamespace(ctx, namespace) + + return c.cl.GetImage(ctxNamespace, name) +} + +// ImageOfContainer interfaces with the containerd api to get an image +func (c *ContainerdUtil) ImageOfContainer(namespace string, ctn containerd.Container) (containerd.Image, error) { ctx, cancel := context.WithTimeout(context.Background(), c.queryTimeout) defer cancel() ctxNamespace := namespaces.WithNamespace(ctx, namespace) diff --git a/pkg/util/containerd/containerd_util_test.go b/pkg/util/containerd/containerd_util_test.go index 59dead49ecbca..215157621fa78 100644 --- a/pkg/util/containerd/containerd_util_test.go +++ b/pkg/util/containerd/containerd_util_test.go @@ -147,7 +147,7 @@ func TestInfo(t *testing.T) { require.Equal(t, "foo", c.Image) } -func TestImage(t *testing.T) { +func TestImageOfContainer(t *testing.T) { mockUtil := ContainerdUtil{} image := &mockImage{ @@ -160,7 +160,7 @@ func TestImage(t *testing.T) { }, } - resultImage, err := mockUtil.Image(TestNamespace, container) + resultImage, err := mockUtil.ImageOfContainer(TestNamespace, container) require.NoError(t, err) require.Equal(t, resultImage, image) } diff --git a/pkg/util/containerd/fake/containerd_util.go b/pkg/util/containerd/fake/containerd_util.go index a9e0bdc6ee4c0..dad1e76151b66 100644 --- a/pkg/util/containerd/fake/containerd_util.go +++ b/pkg/util/containerd/fake/containerd_util.go @@ -31,7 +31,8 @@ type MockedContainerdClient struct { MockEnvVars func(namespace string, ctn containerd.Container) (map[string]string, error) MockMetadata func() (containerd.Version, error) MockListImages func(namespace string) ([]containerd.Image, error) - MockImage func(namespace string, ctn containerd.Container) (containerd.Image, error) + MockImage func(namespace string, name string) (containerd.Image, error) + MockImageOfContainer func(namespace string, ctn containerd.Container) (containerd.Image, error) MockImageSize func(namespace string, ctn containerd.Container) (int64, error) MockTaskMetrics func(namespace string, ctn containerd.Container) (*types.Metric, error) MockTaskPids func(namespace string, ctn containerd.Container) ([]containerd.ProcessInfo, error) @@ -63,8 +64,13 @@ func (client *MockedContainerdClient) ListImages(namespace string) ([]containerd } // Image is a mock method -func (client *MockedContainerdClient) Image(namespace string, ctn containerd.Container) (containerd.Image, error) { - return client.MockImage(namespace, ctn) +func (client *MockedContainerdClient) Image(namespace string, name string) (containerd.Image, error) { + return client.MockImage(namespace, name) +} + +// ImageOfContainer is a mock method +func (client *MockedContainerdClient) ImageOfContainer(namespace string, ctn containerd.Container) (containerd.Image, error) { + return client.MockImageOfContainer(namespace, ctn) } // ImageSize is a mock method diff --git a/pkg/util/fargate/detection.go b/pkg/util/fargate/detection.go index 0c3f2dcb3c1fc..3c9de1b4b5618 100644 --- a/pkg/util/fargate/detection.go +++ b/pkg/util/fargate/detection.go @@ -6,34 +6,27 @@ package fargate import ( - "context" "errors" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/ecs" ) // IsFargateInstance returns whether the Agent is running in Fargate. -func IsFargateInstance(ctx context.Context) bool { - return ecs.IsFargateInstance(ctx) || IsEKSFargateInstance() +func IsFargateInstance() bool { + return config.IsFeaturePresent(config.ECSFargate) || config.IsFeaturePresent(config.EKSFargate) } // GetOrchestrator returns whether the Agent is running on ECS or EKS. -func GetOrchestrator(ctx context.Context) OrchestratorName { - if IsEKSFargateInstance() { +func GetOrchestrator() OrchestratorName { + if config.IsFeaturePresent(config.EKSFargate) { return EKS } - if ecs.IsFargateInstance(ctx) { + if config.IsFeaturePresent(config.ECSFargate) { return ECS } return Unknown } -// IsEKSFargateInstance returns whether the Agent is running in EKS Fargate. -func IsEKSFargateInstance() bool { - return config.Datadog.GetBool("eks_fargate") -} - // GetEKSFargateNodename returns the node name in EKS Fargate func GetEKSFargateNodename() (string, error) { if nodename := config.Datadog.GetString("kubernetes_kubelet_nodename"); nodename != "" { diff --git a/pkg/util/fargate/hostname_process.go b/pkg/util/fargate/hostname_process.go index 96bd24cfbf636..8644257cf4aa0 100644 --- a/pkg/util/fargate/hostname_process.go +++ b/pkg/util/fargate/hostname_process.go @@ -22,7 +22,7 @@ import ( // - ECS: fargate_task: // - EKS: value of kubernetes_kubelet_nodename func GetFargateHost(ctx context.Context) (string, error) { - return getFargateHost(ctx, GetOrchestrator(ctx), getECSHost, getEKSHost) + return getFargateHost(ctx, GetOrchestrator(), getECSHost, getEKSHost) } // getFargateHost is separated from GetFargateHost for testing purpose diff --git a/pkg/util/hostname/common.go b/pkg/util/hostname/common.go index 81f466be66cc7..b9f785fe99b41 100644 --- a/pkg/util/hostname/common.go +++ b/pkg/util/hostname/common.go @@ -71,9 +71,9 @@ func fromHostnameFile(ctx context.Context, _ string) (string, error) { return hostname, nil } -func fromFargate(ctx context.Context, _ string) (string, error) { +func fromFargate(_ context.Context, _ string) (string, error) { // If we're running on fargate we strip the hostname - if isFargateInstance(ctx) { + if isFargateInstance() { return "", nil } return "", fmt.Errorf("agent is not runnning on Fargate") diff --git a/pkg/util/hostname/common_test.go b/pkg/util/hostname/common_test.go index 496bd835b3f76..0df1dfa175131 100644 --- a/pkg/util/hostname/common_test.go +++ b/pkg/util/hostname/common_test.go @@ -90,12 +90,12 @@ func TestFromHostnameFileInvalid(t *testing.T) { func TestFromFargate(t *testing.T) { defer func() { isFargateInstance = fargate.IsFargateInstance }() - isFargateInstance = func(context.Context) bool { return true } + isFargateInstance = func() bool { return true } hostname, err := fromFargate(context.TODO(), "") require.NoError(t, err) assert.Equal(t, "", hostname) - isFargateInstance = func(context.Context) bool { return false } + isFargateInstance = func() bool { return false } _, err = fromFargate(context.TODO(), "") assert.Error(t, err) } diff --git a/pkg/util/hostname/providers_test.go b/pkg/util/hostname/providers_test.go index 15aaa4300346a..74e44716d3019 100644 --- a/pkg/util/hostname/providers_test.go +++ b/pkg/util/hostname/providers_test.go @@ -71,9 +71,9 @@ func setupHostnameTest(t *testing.T, tc testCase) { setupHostnameFile(t, "hostname-from-file") } if tc.fargate { - isFargateInstance = func(context.Context) bool { return true } + isFargateInstance = func() bool { return true } } else { - isFargateInstance = func(context.Context) bool { return false } + isFargateInstance = func() bool { return false } } if tc.GCE { diff --git a/pkg/util/hostname/validate/normalize.go b/pkg/util/hostname/validate/normalize.go index ee9d9b6e86f34..5ed6240ea7659 100644 --- a/pkg/util/hostname/validate/normalize.go +++ b/pkg/util/hostname/validate/normalize.go @@ -8,6 +8,17 @@ package validate import ( "bytes" "fmt" + "regexp" +) + +var ( + // Filter to clean the directory name from invalid file name characters + directoryNameFilter = regexp.MustCompile(`[^a-zA-Z0-9_-]+`) +) + +const ( + // Maximum size for a directory name + directoryToHostnameMaxSize = 32 ) // NormalizeHost applies a liberal policy on host names. @@ -37,3 +48,12 @@ func NormalizeHost(host string) (string, error) { return buf.String(), nil } + +// CleanHostnameDir returns a hostname normalized to be uses as a directory name. +func CleanHostnameDir(hostname string) string { + hostname = directoryNameFilter.ReplaceAllString(hostname, "_") + if len(hostname) > directoryToHostnameMaxSize { + return hostname[:directoryToHostnameMaxSize] + } + return hostname +} diff --git a/pkg/util/kernel/find_headers.go b/pkg/util/kernel/find_headers.go index e5d6232035711..24d9017497b00 100644 --- a/pkg/util/kernel/find_headers.go +++ b/pkg/util/kernel/find_headers.go @@ -31,7 +31,6 @@ import ( "github.com/DataDog/datadog-go/v5/statsd" "github.com/DataDog/nikos/types" - "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" @@ -82,16 +81,26 @@ type headerProvider struct { kernelHeaders []string } -func initProvider(config *ebpf.Config) { +type KernelHeaderOptions struct { + DownloadEnabled bool + Dirs []string + DownloadDir string + + AptConfigDir string + YumReposDir string + ZypperReposDir string +} + +func initProvider(opts KernelHeaderOptions) { HeaderProvider = &headerProvider{ - downloadEnabled: config.EnableKernelHeaderDownload, - headerDirs: config.KernelHeadersDirs, - headerDownloadDir: config.KernelHeadersDownloadDir, + downloadEnabled: opts.DownloadEnabled, + headerDirs: opts.Dirs, + headerDownloadDir: opts.DownloadDir, downloader: headerDownloader{ - aptConfigDir: config.AptConfigDir, - yumReposDir: config.YumReposDir, - zypperReposDir: config.ZypperReposDir, + aptConfigDir: opts.AptConfigDir, + yumReposDir: opts.YumReposDir, + zypperReposDir: opts.ZypperReposDir, }, result: notAttempted, @@ -107,12 +116,12 @@ func initProvider(config *ebpf.Config) { // Any subsequent calls to GetKernelHeaders will return the result of the first call. This is because // kernel header downloading can be a resource intensive process, so we don't want to retry it an unlimited // number of times. -func GetKernelHeaders(config *ebpf.Config, client statsd.ClientInterface) []string { +func GetKernelHeaders(opts KernelHeaderOptions, client statsd.ClientInterface) []string { providerMu.Lock() defer providerMu.Unlock() if HeaderProvider == nil { - initProvider(config) + initProvider(opts) } if HeaderProvider.result != notAttempted { diff --git a/pkg/util/kernel/find_headers_test.go b/pkg/util/kernel/find_headers_test.go index 3a43aa8aa4674..61444c46710ec 100644 --- a/pkg/util/kernel/find_headers_test.go +++ b/pkg/util/kernel/find_headers_test.go @@ -14,8 +14,6 @@ import ( "testing" "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/ebpf" ) func TestGetKernelHeaders(t *testing.T) { @@ -23,8 +21,8 @@ func TestGetKernelHeaders(t *testing.T) { t.Skip("set INTEGRATION environment variable to run") } - cfg := testConfig() - dirs := GetKernelHeaders(cfg, nil) + opts := KernelHeaderOptions{} + dirs := GetKernelHeaders(opts, nil) assert.NotZero(t, len(dirs), "expected to find header directories") t.Log(dirs) @@ -56,14 +54,3 @@ func TestParseHeaderVersion(t *testing.T) { } } } - -func testConfig() *ebpf.Config { - return &ebpf.Config{ - EnableKernelHeaderDownload: false, - KernelHeadersDirs: nil, - KernelHeadersDownloadDir: "", - AptConfigDir: "", - YumReposDir: "", - ZypperReposDir: "", - } -} diff --git a/pkg/util/kernel/fs.go b/pkg/util/kernel/fs.go index 03a777cf8ff2d..8106a4dad7a46 100644 --- a/pkg/util/kernel/fs.go +++ b/pkg/util/kernel/fs.go @@ -9,7 +9,6 @@ package kernel import ( - "context" "fmt" "os" "path/filepath" @@ -88,7 +87,7 @@ func IsDebugFSMounted() (bool, error) { } // on fargate, kprobe_events is mounted as ro - if !fargate.IsFargateInstance(context.Background()) { + if !fargate.IsFargateInstance() { options := strings.Split(mi.Options, ",") for _, option := range options { if option == "ro" { diff --git a/pkg/util/kubernetes/apiserver/apiserver.go b/pkg/util/kubernetes/apiserver/apiserver.go index 1f328f1573918..9c04d452611cf 100644 --- a/pkg/util/kubernetes/apiserver/apiserver.go +++ b/pkg/util/kubernetes/apiserver/apiserver.go @@ -16,10 +16,13 @@ import ( "time" v1 "k8s.io/api/core/v1" + "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" + "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" vpa "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned" + vpai "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions" "k8s.io/client-go/discovery" "k8s.io/client-go/dynamic" "k8s.io/client-go/dynamic/dynamicinformer" @@ -77,8 +80,11 @@ type APIClient struct { // DDClient gives access to all datadoghq/ custom types DDClient dynamic.Interface - // DDInformerFactory gives access to informers for all datadoghq/ custom types - DDInformerFactory dynamicinformer.DynamicSharedInformerFactory + // DynamicInformerFactory gives access to dynamic informers in example for all datadoghq/ custom types + DynamicInformerFactory dynamicinformer.DynamicSharedInformerFactory + + // CRDInformerFactory gives access to informers for all crds + CRDInformerFactory externalversions.SharedInformerFactory // initRetry used to setup the APIClient initRetry retry.Retrier @@ -95,6 +101,9 @@ type APIClient struct { // VPAClient holds kubernetes VerticalPodAutoscalers client VPAClient vpa.Interface + // VPAInformerFactory + VPAInformerFactory vpai.SharedInformerFactory + // timeoutSeconds defines the kubernetes client timeout timeoutSeconds int64 } @@ -207,6 +216,15 @@ func getKubeDynamicClient(timeout time.Duration) (dynamic.Interface, error) { return dynamic.NewForConfig(clientConfig) } +func getCRDClient(timeout time.Duration) (*clientset.Clientset, error) { + clientConfig, err := getClientConfig(timeout) + if err != nil { + return nil, err + } + + return clientset.NewForConfig(clientConfig) +} + func getKubeDiscoveryClient(timeout time.Duration) (discovery.DiscoveryInterface, error) { clientConfig, err := getClientConfig(timeout) if err != nil { @@ -225,6 +243,13 @@ func getKubeVPAClient(timeout time.Duration) (vpa.Interface, error) { return vpa.NewForConfig(clientConfig) } +// VPAInformerFactory vpai.SharedInformerFactory +func getVPAInformerFactory(client vpa.Interface) (vpai.SharedInformerFactory, error) { + // default to 300s + resyncPeriodSeconds := time.Duration(config.Datadog.GetInt64("kubernetes_informers_resync_period")) + return vpai.NewSharedInformerFactory(client, resyncPeriodSeconds*time.Second), nil +} + func getWPAInformerFactory() (dynamicinformer.DynamicSharedInformerFactory, error) { // default to 300s resyncPeriodSeconds := time.Duration(config.Datadog.GetInt64("kubernetes_informers_resync_period")) @@ -266,6 +291,16 @@ func getInformerFactory() (informers.SharedInformerFactory, error) { return informers.NewSharedInformerFactory(client, resyncPeriodSeconds*time.Second), nil } +func getCRDInformerFactory() (externalversions.SharedInformerFactory, error) { + resyncPeriodSeconds := time.Duration(config.Datadog.GetInt64("kubernetes_informers_resync_period")) + client, err := getCRDClient(0) // No timeout for the Informers, to allow long watch. + if err != nil { + log.Errorf("Could not get apiserver client: %v", err) + return nil, err + } + return externalversions.NewSharedInformerFactory(client, resyncPeriodSeconds*time.Second), nil +} + func getInformerFactoryWithOption(options ...informers.SharedInformerOption) (informers.SharedInformerFactory, error) { resyncPeriodSeconds := time.Duration(config.Datadog.GetInt64("kubernetes_informers_resync_period")) client, err := GetKubeClient(0) // No timeout for the Informers, to allow long watch. @@ -324,6 +359,21 @@ func (c *APIClient) connect() error { log.Infof("Could not get informer factory: %v", err) return err } + if c.CRDInformerFactory, err = getCRDInformerFactory(); err != nil { + _ = log.Errorf("Error getting crd informer Client: %s", err.Error()) + return err + } + if c.DynamicInformerFactory, err = getDDInformerFactory(); err != nil { + _ = log.Errorf("Error getting datadoghq informer Client: %s", err.Error()) + return err + } + + c.VPAInformerFactory, err = getVPAInformerFactory(c.VPAClient) + if err != nil { + log.Infof("Could not get a vpa informer factory: %v", err) + return err + } + } if config.Datadog.GetBool("admission_controller.enabled") { @@ -364,7 +414,7 @@ func (c *APIClient) connect() error { } } if config.Datadog.GetBool("external_metrics_provider.use_datadogmetric_crd") { - if c.DDInformerFactory, err = getDDInformerFactory(); err != nil { + if c.DynamicInformerFactory, err = getDDInformerFactory(); err != nil { log.Errorf("Error getting datadoghq Client: %s", err.Error()) return err } diff --git a/pkg/util/kubernetes/apiserver/apiserver_kubelet.go b/pkg/util/kubernetes/apiserver/apiserver_kubelet.go index 714562873df32..5ac14579c6af5 100644 --- a/pkg/util/kubernetes/apiserver/apiserver_kubelet.go +++ b/pkg/util/kubernetes/apiserver/apiserver_kubelet.go @@ -23,7 +23,7 @@ import ( // node to the cache // Only called when the node agent computes the metadata mapper locally and does not rely on the DCA. func (c *APIClient) NodeMetadataMapping(nodeName string, pods []*kubelet.Pod) error { - endpointList, err := c.Cl.CoreV1().Endpoints("").List(context.TODO(), metav1.ListOptions{TimeoutSeconds: &c.timeoutSeconds}) + endpointList, err := c.Cl.CoreV1().Endpoints("").List(context.TODO(), metav1.ListOptions{TimeoutSeconds: &c.timeoutSeconds, ResourceVersion: "0"}) if err != nil { log.Errorf("Could not collect endpoints from the API Server: %q", err.Error()) return err diff --git a/pkg/util/log/go.mod b/pkg/util/log/go.mod index c7c5095d5cf8f..29c4792fa5a48 100644 --- a/pkg/util/log/go.mod +++ b/pkg/util/log/go.mod @@ -5,7 +5,7 @@ go 1.18 replace github.com/DataDog/datadog-agent/pkg/util/scrubber => ../scrubber require ( - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.41.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.42.0-rc.3 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 github.com/stretchr/testify v1.8.1 go.uber.org/zap v1.22.0 diff --git a/pkg/util/profiling/profiling.go b/pkg/util/profiling/profiling.go index a5fa0617755c3..95e9920c83cf6 100644 --- a/pkg/util/profiling/profiling.go +++ b/pkg/util/profiling/profiling.go @@ -48,6 +48,7 @@ func Start(settings Settings) error { profiler.WithPeriod(settings.Period), profiler.WithProfileTypes(types...), profiler.CPUDuration(settings.CPUDuration), + profiler.WithDeltaProfiles(settings.WithDeltaProfiles), profiler.WithTags(settings.Tags...), } diff --git a/pkg/util/profiling/profiling_test.go b/pkg/util/profiling/profiling_test.go index 5d26236bf5599..1e552f5e5fa4c 100644 --- a/pkg/util/profiling/profiling_test.go +++ b/pkg/util/profiling/profiling_test.go @@ -22,6 +22,7 @@ func TestProfiling(t *testing.T) { MutexProfileFraction: 0, BlockProfileRate: 0, WithGoroutineProfile: false, + WithDeltaProfiles: false, Tags: []string{"1.0.0"}, } err := Start(settings) diff --git a/pkg/util/profiling/settings.go b/pkg/util/profiling/settings.go index 806fcff8dfe5e..679e3eff9580d 100644 --- a/pkg/util/profiling/settings.go +++ b/pkg/util/profiling/settings.go @@ -33,12 +33,14 @@ type Settings struct { BlockProfileRate int // WithGoroutineProfile additionally reports stack traces of all current goroutines WithGoroutineProfile bool + // WithDeltaProfiles specifies if delta profiles are enabled + WithDeltaProfiles bool // Tags are the additional tags to attach to profiles. Tags []string } func (settings *Settings) String() string { - return fmt.Sprintf("[Target:%q][Env:%q][Period:%s][CPU:%s][Mutex:%d][Block:%d][Routines:%v]", + return fmt.Sprintf("[Target:%q][Env:%q][Period:%s][CPU:%s][Mutex:%d][Block:%d][Routines:%v][DeltaProfiles:%v]", settings.ProfilingURL, settings.Env, settings.Period, @@ -46,6 +48,7 @@ func (settings *Settings) String() string { settings.MutexProfileFraction, settings.BlockProfileRate, settings.WithGoroutineProfile, + settings.WithDeltaProfiles, ) } diff --git a/pkg/util/scrubber/default.go b/pkg/util/scrubber/default.go index cf9e920d46827..e8bfc415b78c7 100644 --- a/pkg/util/scrubber/default.go +++ b/pkg/util/scrubber/default.go @@ -63,6 +63,10 @@ func AddDefaultReplacers(scrubber *Scrubber) { Regex: regexp.MustCompile(`\b[a-fA-F0-9]{35}([a-fA-F0-9]{5})\b`), Repl: []byte(`***********************************$1`), } + rcAppKeyReplacer := Replacer{ + Regex: regexp.MustCompile(`\bDDRCM_[A-Z0-9]+([A-Z0-9]{5})\b`), + Repl: []byte(`***********************************$1`), + } // URI Generic Syntax // https://tools.ietf.org/html/rfc3986 uriPasswordReplacer := Replacer{ @@ -101,6 +105,7 @@ func AddDefaultReplacers(scrubber *Scrubber) { scrubber.AddReplacer(SingleLine, apiKeyReplacer) scrubber.AddReplacer(SingleLine, appKeyReplacerYAML) scrubber.AddReplacer(SingleLine, appKeyReplacer) + scrubber.AddReplacer(SingleLine, rcAppKeyReplacer) scrubber.AddReplacer(SingleLine, uriPasswordReplacer) scrubber.AddReplacer(SingleLine, passwordReplacer) scrubber.AddReplacer(SingleLine, tokenReplacer) @@ -134,9 +139,10 @@ func matchCert() *regexp.Regexp { // matchYAMLKeyWithListValue matches YAML keys with array values. // caveat: doesn't work if the array contain nested arrays. Example: -// key: [ -// [a, b, c], -// def] +// +// key: [ +// [a, b, c], +// def] func matchYAMLKeyWithListValue(key string) *regexp.Regexp { /* Example 1: diff --git a/pkg/util/scrubber/default_test.go b/pkg/util/scrubber/default_test.go index 1f1d91fabc1c0..76e4da62cbb25 100644 --- a/pkg/util/scrubber/default_test.go +++ b/pkg/util/scrubber/default_test.go @@ -127,6 +127,12 @@ func TestConfigAppKey(t *testing.T) { ` app_key: '***********************************abbbb' `) } +func TestConfigRCAppKey(t *testing.T) { + assertClean(t, + `key: "DDRCM_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCDE"`, + `key: "***********************************ABCDE"`) +} + func TestConfigStripURLPassword(t *testing.T) { assertClean(t, `random_url_key: http://user:password@host:port`, diff --git a/pkg/util/static_tags.go b/pkg/util/static_tags.go index a88e8296ea810..4612ad64df23d 100644 --- a/pkg/util/static_tags.go +++ b/pkg/util/static_tags.go @@ -24,17 +24,17 @@ func GetStaticTagsSlice(ctx context.Context) []string { // fargate (ECS or EKS) does not have host tags, so we need to // add static tags to each container manually - if !fargate.IsFargateInstance(ctx) { + if !fargate.IsFargateInstance() { return nil } tags := []string{} // DD_TAGS / DD_EXTRA_TAGS - tags = append(tags, config.GetConfiguredTags(false)...) + tags = append(tags, config.GetGlobalConfiguredTags(false)...) // EKS Fargate specific tags - if fargate.IsEKSFargateInstance() { + if config.IsFeaturePresent(config.EKSFargate) { // eks_fargate_node node, err := fargate.GetEKSFargateNodename() if err != nil { diff --git a/pkg/util/static_tags_test.go b/pkg/util/static_tags_test.go index a460ea64997b3..030270c2347e7 100644 --- a/pkg/util/static_tags_test.go +++ b/pkg/util/static_tags_test.go @@ -16,11 +16,12 @@ import ( func TestStaticTags(t *testing.T) { mockConfig := config.Mock(t) - mockConfig.Set("eks_fargate", true) // pretend this is a hostless environment mockConfig.Set("kubernetes_kubelet_nodename", "eksnode") - defer mockConfig.Set("eks_fargate", false) defer mockConfig.Set("kubernetes_kubelet_nodename", "") + config.SetDetectedFeatures(config.FeatureMap{config.EKSFargate: struct{}{}}) + defer config.SetDetectedFeatures(nil) + t.Run("just tags", func(t *testing.T) { mockConfig.Set("tags", []string{"some:tag", "another:tag", "nocolon"}) defer mockConfig.Set("tags", []string{}) @@ -58,11 +59,12 @@ func TestStaticTags(t *testing.T) { func TestStaticTagsSlice(t *testing.T) { mockConfig := config.Mock(t) - mockConfig.Set("eks_fargate", true) // pretend this is a hostless environment mockConfig.Set("kubernetes_kubelet_nodename", "eksnode") - defer mockConfig.Set("eks_fargate", false) defer mockConfig.Set("kubernetes_kubelet_nodename", "") + config.SetDetectedFeatures(config.FeatureMap{config.EKSFargate: struct{}{}}) + defer config.SetDetectedFeatures(nil) + t.Run("just tags", func(t *testing.T) { mockConfig.Set("tags", []string{"some:tag", "another:tag", "nocolon"}) defer mockConfig.Set("tags", []string{}) diff --git a/pkg/util/use_bare_configs.go b/pkg/util/use_bare_configs.go deleted file mode 100644 index 86dfc4341fe0a..0000000000000 --- a/pkg/util/use_bare_configs.go +++ /dev/null @@ -1,15 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package util - -import "github.com/DataDog/datadog-agent/pkg/config" - -// CcaInAD returns the value of the logs_config.cca_in_ad -// feature flag. This is temporary, as this functionality will eventually be -// the only option. -func CcaInAD() bool { - return config.Datadog.GetBool("logs_config.cca_in_ad") -} diff --git a/pkg/util/winutil/pdhutil/pdh.go b/pkg/util/winutil/pdhutil/pdh.go index 60d1632620267..0f6f045ebbba3 100644 --- a/pkg/util/winutil/pdhutil/pdh.go +++ b/pkg/util/winutil/pdhutil/pdh.go @@ -226,13 +226,13 @@ func PdhAddEnglishCounter(hQuery PDH_HQUERY, szFullCounterPath string, dwUserDat return uint32(ret) } -/* PdhCollectQueryData +/* pdhCollectQueryData Collects the current raw data value for all counters in the specified query and updates the status code of each counter. Parameters hQuery [in, out] Handle of the query for which you want to collect data. The PdhOpenQuery function returns this handle. */ -func PdhCollectQueryData(hQuery PDH_HQUERY) uint32 { +func pdhCollectQueryData(hQuery PDH_HQUERY) uint32 { ret, _, _ := procPdhCollectQueryData.Call(uintptr(hQuery)) return uint32(ret) diff --git a/pkg/util/winutil/pdhutil/pdhcounter.go b/pkg/util/winutil/pdhutil/pdhcounter.go index 301889d74fb87..8f5726db1719e 100644 --- a/pkg/util/winutil/pdhutil/pdhcounter.go +++ b/pkg/util/winutil/pdhutil/pdhcounter.go @@ -10,137 +10,292 @@ package pdhutil import ( "fmt" + "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/log" ) +// NOTE TO DEVELOPER +// +// This package uses terminology defined by the following MSDN article +// https://learn.microsoft.com/en-us/windows/win32/perfctrs/about-performance-counters + // For testing var ( pfnPdhOpenQuery = PdhOpenQuery pfnPdhAddEnglishCounter = PdhAddEnglishCounter - pfnPdhCollectQueryData = PdhCollectQueryData + pfnPdhCollectQueryData = pdhCollectQueryData pfnPdhGetFormattedCounterValueFloat = pdhGetFormattedCounterValueFloat pfnPdhGetFormattedCounterArray = pdhGetFormattedCounterArray + pfnPdhRemoveCounter = PdhRemoveCounter pfnPdhCloseQuery = PdhCloseQuery pfnPdhMakeCounterPath = pdhMakeCounterPath ) -// CounterInstanceVerify is a callback function called by GetCounterSet for each +// CounterInstanceVerify is a callback function called by GetAllValues for each // instance of the counter. Implementation should return true if that instance // should be included, false otherwise type CounterInstanceVerify func(string) bool -// PdhCounterSet is the object which represents a pdh counter set. -type PdhCounterSet struct { - className string - query PDH_HQUERY - counter PDH_HCOUNTER +// Manages a PDH Query +// https://learn.microsoft.com/en-us/windows/win32/perfctrs/creating-a-query +// https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhopenqueryw +type PdhQuery struct { + Handle PDH_HQUERY + counters []PdhCounter +} + +// Manages behavior common to all types of PDH counters +// https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhaddenglishcounterw +type PdhCounter interface { + // Return true if a query should attempt to initialize this counter. + // Return false if a query must not attempt to initialize this counter. + ShouldInit() bool + + // Called during (*PdhQuery).CollectQueryData via AddToQuery() for counters that return true from ShouldInit() + // Must call the appropriate PdhAddCounter/PdhAddEnglishCounter function to add the + // counter to the query. + AddToQuery(*PdhQuery) error + + // Given the result of PdhCounter.AddToQuery, should update initError and initFailCount + SetInitError(error) error - counterName string + // Calls PdhRemoveCounter and updates internal state (handle field) + Remove() error } -// PdhSingleInstanceCounterSet is a specialization for single instance counters -type PdhSingleInstanceCounterSet struct { - PdhCounterSet +// Manages a PDH counter with no instance or for a specific instance +// Only a single value is returned. +// https://learn.microsoft.com/en-us/windows/win32/perfctrs/specifying-a-counter-path +type PdhSingleInstanceCounter interface { + PdhCounter + // Return the counter value formatted as a float + GetValue() (float64, error) } -// PdhMultiInstanceCounterSet is a specialization for a multiple instance counter -type PdhMultiInstanceCounterSet struct { - PdhCounterSet - verifyfn CounterInstanceVerify +// Manages a PDH counter that can have multiple instances +// Returns a value for every instance +// https://learn.microsoft.com/en-us/windows/win32/perfctrs/specifying-a-counter-path +type PdhMultiInstanceCounter interface { + PdhCounter + // Return a map of instance name -> counter value formatted as a float + GetAllValues() (map[string]float64, error) } -// Initialize initializes a counter set object -func (p *PdhCounterSet) Initialize(className string, counterName string) error { +// pdhCounter contains info that is common to all counter types +type pdhCounter struct { + handle PDH_HCOUNTER - // refresh PDH object cache (refresh will only occur periodically) - _, _ = tryRefreshPdhObjectCache() + // Parts of PDH counter path + ObjectName string // also referred to by Microsoft as a counterset, class, or performance object + InstanceName string + CounterName string - p.className = className - p.counterName = counterName + initError error + initFailCount int +} - pdherror := pfnPdhOpenQuery(uintptr(0), uintptr(0), &p.query) - if ERROR_SUCCESS != pdherror { - err := fmt.Errorf("Failed to open PDH query handle %#x", pdherror) - return err +// pdhEnglishCounter implements AddToQuery for both single and multi instance english counters +type pdhEnglishCounter struct { + pdhCounter +} + +// pdhEnglishSingleInstanceCounter is a specialization for single-instance counters +// https://learn.microsoft.com/en-us/windows/win32/perfctrs/about-performance-counters +type PdhEnglishSingleInstanceCounter struct { + pdhEnglishCounter +} + +// pdhMultiInstanceCounterSet is a specialization for a multi-instance counters +// https://learn.microsoft.com/en-us/windows/win32/perfctrs/about-performance-counters +type PdhEnglishMultiInstanceCounter struct { + pdhEnglishCounter + verifyfn CounterInstanceVerify +} + +func (counter *pdhCounter) ShouldInit() bool { + if counter.handle != PDH_HCOUNTER(0) { + // already initialized + return false } - return nil + var initFailLimit = config.Datadog.GetInt("windows_counter_init_failure_limit") + if initFailLimit > 0 && counter.initFailCount >= initFailLimit { + counter.initError = fmt.Errorf("Counter exceeded the maximum number of failed initialization attempts. This error indicates that the Windows performance counter database may need to be rebuilt.") + // attempts exceeded + return false + } + return true } -// GetEnglishCounterInstance returns a specific instance of the given counter -// the className and counterName must be in English. -// See PdhAddEnglishCounter docs for details -// https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhaddenglishcountera -func GetEnglishCounterInstance(className string, counterName string, instance string) (*PdhSingleInstanceCounterSet, error) { +func (counter *pdhCounter) SetInitError(err error) error { + if err == nil { + counter.initError = nil + return nil + } - var p PdhSingleInstanceCounterSet - if err := p.Initialize(className, counterName); err != nil { - return nil, err + counter.initFailCount += 1 + var initFailLimit = config.Datadog.GetInt("windows_counter_init_failure_limit") + if initFailLimit > 0 && counter.initFailCount >= initFailLimit { + err = fmt.Errorf("%v. Counter exceeded the maximum number of failed initialization attempts", err) + } else if initFailLimit > 0 { + err = fmt.Errorf("%v (Failure %d/%d)", err, counter.initFailCount, initFailLimit) + } else { + err = fmt.Errorf("%v (Failure %d)", err, counter.initFailCount) } + counter.initError = err + return counter.initError +} - path, err := pfnPdhMakeCounterPath("", className, instance, counterName) - if err != nil { - return nil, fmt.Errorf("Failed to make counter path %s: %v", counterName, err) +func (counter *pdhCounter) Remove() error { + if counter.handle == PDH_HCOUNTER(0) { + return fmt.Errorf("counter is not initialized") } - pdherror := pfnPdhAddEnglishCounter(p.query, path, uintptr(0), &p.counter) + + pdherror := pfnPdhRemoveCounter(counter.handle) if ERROR_SUCCESS != pdherror { - return nil, fmt.Errorf("Failed to add english counter %#x", pdherror) + return fmt.Errorf("RemoveCounter failed: %#x", pdherror) } - pdherror = pfnPdhCollectQueryData(p.query) + + counter.handle = PDH_HCOUNTER(0) + return nil +} + +// Implements PdhCounter.AddToQuery for english counters. +func (counter *pdhEnglishCounter) AddToQuery(query *PdhQuery) error { + path, err := pfnPdhMakeCounterPath("", counter.ObjectName, counter.InstanceName, counter.CounterName) + if err != nil { + return fmt.Errorf("Failed to make counter path (\\%s(%s)\\%s): %v", counter.ObjectName, counter.InstanceName, counter.CounterName, err) + } + pdherror := pfnPdhAddEnglishCounter(query.Handle, path, uintptr(0), &counter.handle) if ERROR_SUCCESS != pdherror { - return nil, fmt.Errorf("Failed to collect query data %#x", pdherror) + return fmt.Errorf("Failed to add english counter (%s): %#x", path, pdherror) } - return &p, nil + return nil +} + +// Calls PdhCounter.AddToQuery and handles initError logic +// Counters should implement PdhCounter.AddToQuery to override init logic +func AddToQuery(query *PdhQuery, counter PdhCounter) error { + err := counter.AddToQuery(query) + return counter.SetInitError(err) +} + +func (query *PdhQuery) AddCounter(counter PdhCounter) { + query.counters = append(query.counters, counter) } -// GetEnglishSingleInstanceCounter returns a single instance counter object for the given counter class -// the className and counterName must be in English. +// AddEnglishCounterInstance returns a PdhSingleInstanceCounter that will fetch the value of a given instance of the given counter. +// the objectName and counterName must be in English. // See PdhAddEnglishCounter docs for details -// https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhaddenglishcountera -func GetEnglishSingleInstanceCounter(className string, counterName string) (*PdhSingleInstanceCounterSet, error) { - return GetEnglishCounterInstance(className, counterName, "") +// https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhaddenglishcounterw +// +// Implementation detail: This function does not actually call the Windows API PdhAddEnglishCounter. That happens +// when (*PdhQuery).CollectQueryData calls AddToQuery. This function only links our pdhCounter struct +// to our PdhQuery struct. +// We do this so we can handle several PDH error cases and their recovery behind the scenes to reduce +// duplicate/error prone code in the checks that uses this package. +// For example, see tryRefreshPdhObjectCache(). +// This function cannot fail, if it does then the checks that use it will need to be +// restructured so that their Configure() call does not fail if the counter is not available +// right away on host boot (see https://github.com/DataDog/datadog-agent/pull/13101). +// All errors related to the counter are returned from the GetValue()/GetAllValues() function. +// +func (query *PdhQuery) AddEnglishCounterInstance(objectName string, counterName string, instanceName string) PdhSingleInstanceCounter { + var p PdhEnglishSingleInstanceCounter + p.Initialize(objectName, counterName, instanceName) + query.AddCounter(&p) + return &p } -// GetMultiInstanceCounter returns a multi-instance counter object for the given counter class -func GetEnglishMultiInstanceCounter(className string, counterName string, verifyfn CounterInstanceVerify) (*PdhMultiInstanceCounterSet, error) { - var p PdhMultiInstanceCounterSet - if err := p.Initialize(className, counterName); err != nil { - return nil, err - } +// AddEnglishSingleInstanceCounter returns a PdhSingleInstanceCounter that will fetch a single instance counter value. +// the objectName and counterName must be in English. +// See PdhAddEnglishCounter docs for details +// https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhaddenglishcounterw +// +// Implementation detail: See AddEnglishCounterInstance() +func (query *PdhQuery) AddEnglishSingleInstanceCounter(objectName string, counterName string) PdhSingleInstanceCounter { + return query.AddEnglishCounterInstance(objectName, counterName, "") +} +// AddMultiInstanceCounter returns a PdhMultiInstanceCounter that will fetch values for all instances of a counter. +// This uses a '*' wildcard to collect values for all instances of a counter. +// Instances/values can be filtered manually once returned from GetAllValues() or with verifyfn (see CounterInstanceVerify) +// +// Implementation detail: See AddEnglishCounterInstance() +func (query *PdhQuery) AddEnglishMultiInstanceCounter(objectName string, counterName string, verifyfn CounterInstanceVerify) PdhMultiInstanceCounter { + var p PdhEnglishMultiInstanceCounter + // Use the * wildcard to collect all instances + p.Initialize(objectName, counterName, "*") p.verifyfn = verifyfn + query.AddCounter(&p) + return &p +} - // Use the * wildcard to collect all instances - path, err := pfnPdhMakeCounterPath("", className, "*", counterName) - if err != nil { - return nil, fmt.Errorf("Failed to make counter path %s: %v", counterName, err) +// Must be called before GetValue/GetAllValues to make new counter values available. +// https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhcollectquerydata +func (query *PdhQuery) CollectQueryData() error { + // iterate each of the counters and try to add them to the query + var addedNewCounter = false + for _, counter := range query.counters { + if counter.ShouldInit() { + // refresh PDH object cache (refresh will only occur periodically) + // This will update Windows PDH internals and make any newly + // initialized (during host boot) or newly enabled counters available to us. + // https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc784382(v=ws.10) + _, _ = tryRefreshPdhObjectCache() + + err := AddToQuery(query, counter) + if err == nil { + addedNewCounter = true + } else { + log.Warnf("Failed to add counter to query: %v. This error indicates that the Windows performance counter database may need to be rebuilt.", err) + } + } } - pdherror := pfnPdhAddEnglishCounter(p.query, path, uintptr(0), &p.counter) - if ERROR_SUCCESS != pdherror { - return nil, fmt.Errorf("Failed to add english counter %#x", pdherror) + if addedNewCounter { + // if we added a new counter then we need an additional call to + // PdhCollectQuery data because some counters require two datapoints + // before they can return a value. + err := PdhCollectQueryData(query.Handle) + if err != nil { + return fmt.Errorf("%v. This error indicates that the Windows performance counter database may need to be rebuilt.", err) + } } - pdherror = pfnPdhCollectQueryData(p.query) - if ERROR_SUCCESS != pdherror { - return nil, fmt.Errorf("Failed to collect query data %#x", pdherror) + + // Update the counters + err := PdhCollectQueryData(query.Handle) + if err != nil { + return fmt.Errorf("%v. This error indicates that the Windows performance counter database may need to be rebuilt.", err) } + return nil +} - return &p, nil +// Initialize initializes a pdhCounter object +func (counter *pdhCounter) Initialize(objectName string, counterName string, instanceName string) { + counter.ObjectName = objectName + counter.CounterName = counterName + counter.InstanceName = instanceName } -// GetAllValues returns the data associated with each instance in a query. +// GetAllValues returns the data associated with each instance in a counter. // verifyfn is used to filter out instance names that are returned // instance:value pairs are not returned for items whose CStatus contains an error -func (p *PdhMultiInstanceCounterSet) GetAllValues() (values map[string]float64, err error) { - // update data - pfnPdhCollectQueryData(p.query) +func (counter *PdhEnglishMultiInstanceCounter) GetAllValues() (values map[string]float64, err error) { + if counter.handle == PDH_HCOUNTER(0) { + // If there was an error initializing this counter, return it here + if counter.initError != nil { + return nil, counter.initError + } + return nil, fmt.Errorf("counter is not initialized") + } // fetch data - items, err := pfnPdhGetFormattedCounterArray(p.counter, PDH_FMT_DOUBLE) + items, err := pfnPdhGetFormattedCounterArray(counter.handle, PDH_FMT_DOUBLE) if err != nil { return nil, err } values = make(map[string]float64) for _, item := range items { - if p.verifyfn != nil { - if p.verifyfn(item.instance) == false { + if counter.verifyfn != nil { + if counter.verifyfn(item.instance) == false { // not interested, moving on continue } @@ -149,7 +304,7 @@ func (p *PdhMultiInstanceCounterSet) GetAllValues() (values map[string]float64, item.value.CStatus != PDH_CSTATUS_NEW_DATA { // Does not necessarily indicate the problem, e.g. the process may have // exited by the time the formatting of its counter values happened - log.Debugf("Counter value not valid for %s[%s]: %#x", p.counterName, item.instance, item.value.CStatus) + log.Debugf("Counter value not valid for %s[%s]: %#x", counter.CounterName, item.instance, item.value.CStatus) continue } values[item.instance] = item.value.Double @@ -158,16 +313,48 @@ func (p *PdhMultiInstanceCounterSet) GetAllValues() (values map[string]float64, } // GetValue returns the data associated with a single-value counter -func (p *PdhSingleInstanceCounterSet) GetValue() (val float64, err error) { - if p.counter == PDH_HCOUNTER(0) { - return 0, fmt.Errorf("Not a single-value counter") +func (counter *PdhEnglishSingleInstanceCounter) GetValue() (float64, error) { + if counter.handle == PDH_HCOUNTER(0) { + // If there was an error initializing this counter, return it here + if counter.initError != nil { + return 0, counter.initError + } + return 0, fmt.Errorf("counter is not initialized") } - pfnPdhCollectQueryData(p.query) - return pfnPdhGetFormattedCounterValueFloat(p.counter) + // fetch data + return pfnPdhGetFormattedCounterValueFloat(counter.handle) +} + +// Create a query that can have counters added to it +func CreatePdhQuery() (*PdhQuery, error) { + var q PdhQuery + pdherror := pfnPdhOpenQuery(uintptr(0), uintptr(0), &q.Handle) + if ERROR_SUCCESS != pdherror { + err := fmt.Errorf("failed to open PDH query handle %#x", pdherror) + return nil, err + } + return &q, nil } // Close closes the query handle, freeing the underlying windows resources. -func (p *PdhCounterSet) Close() { - pfnPdhCloseQuery(p.query) +// It is not necessary to remove the counters from the query before calling this function. +// PdhCloseQuery closes all counter handles associated with the query. +// https://learn.microsoft.com/en-us/windows/win32/perfctrs/creating-a-query +func (query *PdhQuery) Close() { + if query.Handle != PDH_HQUERY(0) { + pfnPdhCloseQuery(query.Handle) + query.Handle = PDH_HQUERY(0) + } +} + +func PdhCollectQueryData(hQuery PDH_HQUERY) error { + if hQuery == PDH_HQUERY(0) { + return fmt.Errorf("invalid query handle") + } + pdherror := pfnPdhCollectQueryData(hQuery) + if ERROR_SUCCESS != pdherror { + return fmt.Errorf("failed to collect query data %#x", pdherror) + } + return nil } diff --git a/pkg/util/winutil/pdhutil/pdhhelper.go b/pkg/util/winutil/pdhutil/pdhhelper.go index 2d64838e7c820..a2a9c32313c0f 100644 --- a/pkg/util/winutil/pdhutil/pdhhelper.go +++ b/pkg/util/winutil/pdhutil/pdhhelper.go @@ -64,6 +64,24 @@ func refreshPdhObjectCache(forceRefresh bool) (didrefresh bool, err error) { // // returns didrefresh=true if the refresh operation was successful // + // Background information for 'windows_counter_refresh_interval' config + // -------------------------------------------------------------------- + // Controls the minimum number of seconds that must have elapsed before the + // cached performance counters objects list can be refreshed again. Starting + // in 7.40 it had been used for all Windows Performance Counters based + // checks (all the time for Python checks and only to initialize Go checks). + // Starting from 7.42 it is not used anymore for Python Performance Counters + // based checks due to its side effects (for details see integrations-core PR + // https://github.com/DataDog/integrations-core/pull/13243). It is still used + // for Go Performance Counters based checks because it may be useful in rare + // cases when their initialization fails. + // + // A higher value will have lower performance impact and create fewer perflib + // Windows Event log errors and warnings but will increase the time before the + // failing counters have a chance to initialize successfully. A lower value + // will have higher performance impact and create more perflib Windows Event + // log errors and warnings but will decrease the time before the failing + // counters have a chance to initialize successfully. var len uint32 diff --git a/pkg/workloadmeta/collectors.go b/pkg/workloadmeta/collectors.go index 08bd0cd2519b1..6db6094c9fdd0 100644 --- a/pkg/workloadmeta/collectors.go +++ b/pkg/workloadmeta/collectors.go @@ -32,6 +32,9 @@ var ( // ClusterAgentCatalog is a catalog of collectors that runs in the // cluster agent, and the cluster checks runner agents ClusterAgentCatalog = make(CollectorCatalog) + + // RemoteCatalog collectors to run when workloadmeta is configured as remote + RemoteCatalog = make(CollectorCatalog) ) // RegisterCollector registers a new collector in the NodeAgentCatalog, @@ -47,3 +50,10 @@ func RegisterCollector(id string, c collectorFactory) { func RegisterClusterCollector(id string, c collectorFactory) { ClusterAgentCatalog[id] = c } + +// RegisterRemoteCollector registers a new collector in the RemoteCatalog, +// identified by an id for logging and telemetry purposes, to be used by the +// store. +func RegisterRemoteCollector(id string, c collectorFactory) { + RemoteCatalog[id] = c +} diff --git a/pkg/workloadmeta/collectors/collectors.go b/pkg/workloadmeta/collectors/collectors.go index e273a15748464..9ca3f96f0eb7c 100644 --- a/pkg/workloadmeta/collectors/collectors.go +++ b/pkg/workloadmeta/collectors/collectors.go @@ -20,4 +20,5 @@ import ( _ "github.com/DataDog/datadog-agent/pkg/workloadmeta/collectors/internal/kubelet" _ "github.com/DataDog/datadog-agent/pkg/workloadmeta/collectors/internal/kubemetadata" _ "github.com/DataDog/datadog-agent/pkg/workloadmeta/collectors/internal/podman" + _ "github.com/DataDog/datadog-agent/pkg/workloadmeta/collectors/internal/remoteworkloadmeta" ) diff --git a/pkg/workloadmeta/collectors/internal/containerd/containerd.go b/pkg/workloadmeta/collectors/internal/containerd/containerd.go index 58a472f1dbda0..55481db4d08fc 100644 --- a/pkg/workloadmeta/collectors/internal/containerd/containerd.go +++ b/pkg/workloadmeta/collectors/internal/containerd/containerd.go @@ -34,6 +34,10 @@ const ( containerUpdateTopic = "/containers/update" containerDeletionTopic = "/containers/delete" + imageCreationTopic = "/images/create" + imageUpdateTopic = "/images/update" + imageDeletionTopic = "/images/delete" + // These are not all the task-related topics, but enough to detect changes // in the state of the container (only need to know if it's running or not). @@ -56,6 +60,9 @@ var containerdTopics = []string{ containerCreationTopic, containerUpdateTopic, containerDeletionTopic, + imageCreationTopic, + imageUpdateTopic, + imageDeletionTopic, TaskStartTopic, TaskOOMTopic, TaskExitTopic, @@ -79,12 +86,19 @@ type collector struct { // Container exit info (mainly exit code and exit timestamp) are attached to the corresponding task events. // contToExitInfo caches the exit info of a task to enrich the container deletion event when it's received later. contToExitInfo map[string]*exitInfo + + knownImages *knownImages + + // Map of image ID => array of repo tags + repoTags map[string][]string } func init() { workloadmeta.RegisterCollector(collectorID, func() workloadmeta.Collector { return &collector{ contToExitInfo: make(map[string]*exitInfo), + knownImages: newKnownImages(), + repoTags: make(map[string][]string), } }) } @@ -110,7 +124,7 @@ func (c *collector) Start(ctx context.Context, store workloadmeta.Store) error { eventsCtx, cancelEvents := context.WithCancel(ctx) c.eventsChan, c.errorsChan = c.containerdClient.GetEvents().Subscribe(eventsCtx, subscribeFilters()...) - err = c.generateEventsFromContainerList(ctx) + err = c.notifyInitialEvents(ctx) if err != nil { cancelEvents() return err @@ -165,8 +179,8 @@ func (c *collector) stream(ctx context.Context) { } } -func (c *collector) generateEventsFromContainerList(ctx context.Context) error { - var events []workloadmeta.CollectorEvent +func (c *collector) notifyInitialEvents(ctx context.Context) error { + var containerEvents []workloadmeta.CollectorEvent namespaces, err := cutil.NamespacesToWatch(ctx, c.containerdClient) if err != nil { @@ -174,22 +188,27 @@ func (c *collector) generateEventsFromContainerList(ctx context.Context) error { } for _, namespace := range namespaces { - nsEvents, err := c.generateInitialEvents(namespace) + nsContainerEvents, err := c.generateInitialContainerEvents(namespace) if err != nil { return err } + containerEvents = append(containerEvents, nsContainerEvents...) - events = append(events, nsEvents...) + if config.Datadog.GetBool("workloadmeta.image_metadata_collection.enabled") { + if err := c.notifyInitialImageEvents(ctx, namespace); err != nil { + return err + } + } } - if len(events) > 0 { - c.store.Notify(events) + if len(containerEvents) > 0 { + c.store.Notify(containerEvents) } return nil } -func (c *collector) generateInitialEvents(namespace string) ([]workloadmeta.CollectorEvent, error) { +func (c *collector) generateInitialContainerEvents(namespace string) ([]workloadmeta.CollectorEvent, error) { var events []workloadmeta.CollectorEvent existingContainers, err := c.containerdClient.Containers(namespace) @@ -221,7 +240,30 @@ func (c *collector) generateInitialEvents(namespace string) ([]workloadmeta.Coll return events, nil } +func (c *collector) notifyInitialImageEvents(ctx context.Context, namespace string) error { + existingImages, err := c.containerdClient.ListImages(namespace) + if err != nil { + return err + } + + for _, image := range existingImages { + if err := c.notifyEventForImage(ctx, namespace, image); err != nil { + return err + } + } + + return nil +} + func (c *collector) handleEvent(ctx context.Context, containerdEvent *containerdevents.Envelope) error { + if isImageTopic(containerdEvent.Topic) { + return c.handleImageEvent(ctx, containerdEvent) + } + + return c.handleContainerEvent(ctx, containerdEvent) +} + +func (c *collector) handleContainerEvent(ctx context.Context, containerdEvent *containerdevents.Envelope) error { containerID, container, err := c.extractContainerFromEvent(ctx, containerdEvent) if err != nil { return fmt.Errorf("cannot extract container from event: %w", err) @@ -313,6 +355,10 @@ func subscribeFilters() []string { var filters []string for _, topic := range containerdTopics { + if isImageTopic(topic) && !config.Datadog.GetBool("workloadmeta.image_metadata_collection.enabled") { + continue + } + filters = append(filters, fmt.Sprintf(`topic==%q`, topic)) } diff --git a/pkg/workloadmeta/collectors/internal/containerd/event_builder_test.go b/pkg/workloadmeta/collectors/internal/containerd/event_builder_test.go index 0bbc8bacec064..0d6d24c57f20c 100644 --- a/pkg/workloadmeta/collectors/internal/containerd/event_builder_test.go +++ b/pkg/workloadmeta/collectors/internal/containerd/event_builder_test.go @@ -290,7 +290,7 @@ func containerdClient(container containerd.Container) fake.MockedContainerdClien MockLabels: func(namespace string, ctn containerd.Container) (map[string]string, error) { return labels, nil }, - MockImage: func(namespace string, ctn containerd.Container) (containerd.Image, error) { + MockImageOfContainer: func(namespace string, ctn containerd.Container) (containerd.Image, error) { return &mockedImage{ mockName: func() string { return imgName diff --git a/pkg/workloadmeta/collectors/internal/containerd/image.go b/pkg/workloadmeta/collectors/internal/containerd/image.go new file mode 100644 index 0000000000000..647812a8adf50 --- /dev/null +++ b/pkg/workloadmeta/collectors/internal/containerd/image.go @@ -0,0 +1,358 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build containerd +// +build containerd + +package containerd + +import ( + "context" + "encoding/json" + "fmt" + "strings" + + "github.com/containerd/containerd" + "github.com/containerd/containerd/api/events" + "github.com/containerd/containerd/content" + containerdevents "github.com/containerd/containerd/events" + "github.com/containerd/containerd/images" + "github.com/containerd/containerd/namespaces" + "github.com/gogo/protobuf/proto" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" + + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" +) + +const imageTopicPrefix = "/images/" + +// Events from containerd contain an image name, but not IDs. When a delete +// event arrives it'll contain a name, but we won't be able to access the ID +// because the image is already gone, that's why we need to keep the IDs => +// names relationships. +type knownImages struct { + // Store IDs and names in both directions for efficient access + idsByName map[string]string // map name => ID + namesByID map[string]map[string]struct{} // map ID => set of names +} + +func newKnownImages() *knownImages { + return &knownImages{ + idsByName: make(map[string]string), + namesByID: make(map[string]map[string]struct{}), + } +} + +func (images *knownImages) addAssociation(imageName string, imageID string) { + images.idsByName[imageName] = imageID + + if images.namesByID[imageID] == nil { + images.namesByID[imageID] = make(map[string]struct{}) + } + images.namesByID[imageID][imageName] = struct{}{} +} + +func (images *knownImages) deleteAssociation(imageName string, imageID string) { + delete(images.idsByName, imageName) + + if images.namesByID[imageID] == nil { + return + } + + delete(images.namesByID[imageID], imageName) + if len(images.namesByID[imageID]) == 0 { + delete(images.namesByID, imageID) + } +} + +func (images *knownImages) getImageID(imageName string) (string, bool) { + id, found := images.idsByName[imageName] + return id, found +} + +func (images *knownImages) isReferenced(imageID string) bool { + return len(images.namesByID[imageID]) > 0 +} + +func isImageTopic(topic string) bool { + return strings.HasPrefix(topic, imageTopicPrefix) +} + +func (c *collector) handleImageEvent(ctx context.Context, containerdEvent *containerdevents.Envelope) error { + switch containerdEvent.Topic { + case imageCreationTopic: + event := &events.ImageCreate{} + if err := proto.Unmarshal(containerdEvent.Event.Value, event); err != nil { + return fmt.Errorf("error unmarshaling containerd event: %w", err) + } + + return c.handleImageCreateOrUpdate(ctx, containerdEvent.Namespace, event.Name) + + case imageUpdateTopic: + event := &events.ImageUpdate{} + if err := proto.Unmarshal(containerdEvent.Event.Value, event); err != nil { + return fmt.Errorf("error unmarshaling containerd event: %w", err) + } + + return c.handleImageCreateOrUpdate(ctx, containerdEvent.Namespace, event.Name) + + case imageDeletionTopic: + event := &events.ImageDelete{} + if err := proto.Unmarshal(containerdEvent.Event.Value, event); err != nil { + return fmt.Errorf("error unmarshaling containerd event: %w", err) + } + + imageID, found := c.knownImages.getImageID(event.Name) + if !found { + return nil + } + + c.knownImages.deleteAssociation(event.Name, imageID) + + if c.knownImages.isReferenced(imageID) { + // Image is still referenced by a different name. Don't delete the + // image, but update its repo tags. + return c.deleteRepoTagOfImage(ctx, containerdEvent.Namespace, imageID, event.Name) + } + + c.store.Notify([]workloadmeta.CollectorEvent{ + { + Type: workloadmeta.EventTypeUnset, + Source: workloadmeta.SourceRuntime, + Entity: &workloadmeta.ContainerImageMetadata{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainerImageMetadata, + ID: imageID, + }, + }, + }, + }) + + return nil + default: + return fmt.Errorf("unknown containerd image event topic %s, ignoring", containerdEvent.Topic) + } +} + +func (c *collector) handleImageCreateOrUpdate(ctx context.Context, namespace string, imageName string) error { + img, err := c.containerdClient.Image(namespace, imageName) + if err != nil { + return fmt.Errorf("error getting image: %w", err) + } + + return c.notifyEventForImage(ctx, namespace, img) +} + +func (c *collector) notifyEventForImage(ctx context.Context, namespace string, img containerd.Image) error { + ctxWithNamespace := namespaces.WithNamespace(ctx, namespace) + + manifest, err := images.Manifest(ctxWithNamespace, img.ContentStore(), img.Target(), img.Platform()) + if err != nil { + return fmt.Errorf("error getting image manifest: %w", err) + } + + layers, err := getLayersWithHistory(ctxWithNamespace, img.ContentStore(), manifest) + if err != nil { + log.Warnf("error while getting layers with history: %s", err) + + // Not sure if the layers and history are always available. Instead of + // returning an error, collect the image without this information. + } + + platforms, err := images.Platforms(ctxWithNamespace, img.ContentStore(), manifest.Config) + if err != nil { + return fmt.Errorf("error getting image platforms: %w", err) + } + + imageName := img.Name() + shortName := "" + parsedImg, err := workloadmeta.NewContainerImage(imageName) + if err == nil { + // Don't set a short name. We know that some images handled here contain + // "sha256" in the name, and those don't have a short name. + } else { + shortName = parsedImg.ShortName + } + + imageID := manifest.Config.Digest.String() + + // We can get "create" events for images that already exist. That happens + // when the same image is referenced with different names. For example, + // datadog/agent:latest and datadog/agent:7 might refer to the same image. + // Also, in some environments (at least with Kind), pulling an image like + // datadog/agent:latest creates several events: in one of them the image + // name is a digest, in other is something with the same format as + // datadog/agent:7, and sometimes there's a temporary name prefixed with + // "import-". + // When that happens, give precedence to the name with repo and tag instead + // of the name that includes a digest. This is just to show names that are + // more user-friendly (the digests are already present in other attributes + // like ID, and repo digest). + existingImg, err := c.store.GetImage(imageID) + if err == nil { + if strings.Contains(imageName, "sha256:") && !strings.Contains(existingImg.Name, "sha256:") { + imageName = existingImg.Name + shortName = existingImg.ShortName + } + } + + var repoDigests []string + if strings.Contains(imageName, "@sha256:") { + repoDigests = append(repoDigests, imageName) + } else { + repoDigests = append(repoDigests, imageName+"@"+img.Target().Digest.String()) + + repoTagAlreadyPresent := false + for _, repoTag := range c.repoTags[imageID] { + if repoTag == imageName { + repoTagAlreadyPresent = true + break + } + } + + if !repoTagAlreadyPresent { + c.repoTags[imageID] = append(c.repoTags[imageID], imageName) + } + } + + var totalSizeBytes int64 = 0 + for _, layer := range manifest.Layers { + totalSizeBytes += layer.Size + } + + var os, osVersion, architecture, variant string + // If there are multiple platforms, return the info about the first one + if len(platforms) >= 1 { + os = platforms[0].OS + osVersion = platforms[0].OSVersion + architecture = platforms[0].Architecture + variant = platforms[0].Variant + } + + workloadmetaImg := workloadmeta.ContainerImageMetadata{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainerImageMetadata, + ID: imageID, + }, + EntityMeta: workloadmeta.EntityMeta{ + Name: imageName, + Namespace: namespace, + Labels: img.Labels(), + }, + ShortName: shortName, + RepoTags: c.repoTags[imageID], + RepoDigests: repoDigests, + MediaType: manifest.MediaType, + SizeBytes: totalSizeBytes, + OS: os, + OSVersion: osVersion, + Architecture: architecture, + Variant: variant, + Layers: layers, + } + + c.store.Notify([]workloadmeta.CollectorEvent{ + { + Type: workloadmeta.EventTypeSet, + Source: workloadmeta.SourceRuntime, + Entity: &workloadmetaImg, + }, + }) + + return c.updateKnownImages(ctx, namespace, imageName, imageID) +} + +// Updates the map with the image name => image ID relationships and also the repo tags +func (c *collector) updateKnownImages(ctx context.Context, namespace string, imageName string, newImageID string) error { + oldImageID, found := c.knownImages.getImageID(imageName) + c.knownImages.addAssociation(imageName, newImageID) + + // If the image name is already pointing to an ID, we need to delete the name from + // the repo tags of the image with that ID. + if found && newImageID != oldImageID { + c.knownImages.deleteAssociation(imageName, oldImageID) + return c.deleteRepoTagOfImage(ctx, namespace, oldImageID, imageName) + } + + return nil +} + +func (c *collector) deleteRepoTagOfImage(ctx context.Context, namespace string, imageID string, repoTagToDelete string) error { + repoTagDeleted := false + + for i, repoTag := range c.repoTags[imageID] { + if repoTag == repoTagToDelete { + c.repoTags[imageID] = append(c.repoTags[imageID][:i], c.repoTags[imageID][i+1:]...) + repoTagDeleted = true + break + } + } + + if repoTagDeleted && len(c.repoTags[imageID]) > 0 { + // We need to notify to workloadmeta that the image has changed. + // Updating workloadmeta entities directly is not thread-safe, that's + // why we generate an update event here instead. + if err := c.handleImageCreateOrUpdate(ctx, namespace, c.repoTags[imageID][len(c.repoTags[imageID])-1]); err != nil { + return err + } + } + + return nil +} + +func getLayersWithHistory(ctx context.Context, store content.Store, manifest ocispec.Manifest) ([]workloadmeta.ContainerImageLayer, error) { + blob, err := content.ReadBlob(ctx, store, manifest.Config) + if err != nil { + return nil, fmt.Errorf("error while getting image contents: %w", err) + } + + var ocispecImage ocispec.Image + if err = json.Unmarshal(blob, &ocispecImage); err != nil { + return nil, fmt.Errorf("error while unmarshaling image: %w", err) + } + + var layers []workloadmeta.ContainerImageLayer + + // The layers in the manifest don't include the history, and the only way to + // match the history with each layer is to rely on the order and take into + // account that some history objects don't have an associated layer + // (emptyLayer = true). + + history := ocispecImage.History + manifestLayersIdx := 0 + + for _, historyPoint := range history { + layer := workloadmeta.ContainerImageLayer{ + History: historyPoint, + } + + if !historyPoint.EmptyLayer { + if manifestLayersIdx >= len(manifest.Layers) { + // This should never happen. len(manifest.Layers) should equal + // len(history) minus the number of history points with + // emptyLayer = false. + return nil, fmt.Errorf("error while extracting image layer history") + } + + manifestLayer := manifest.Layers[manifestLayersIdx] + manifestLayersIdx += 1 + + layer.MediaType = manifestLayer.MediaType + layer.Digest = manifestLayer.Digest.String() + layer.SizeBytes = manifestLayer.Size + layer.URLs = manifestLayer.URLs + } + + layers = append(layers, layer) + } + + if manifestLayersIdx != len(manifest.Layers) { + // This should never happen. Same case as above. + return nil, fmt.Errorf("error while extracting image layer history") + } + + return layers, nil +} diff --git a/pkg/workloadmeta/collectors/internal/containerd/image_test.go b/pkg/workloadmeta/collectors/internal/containerd/image_test.go new file mode 100644 index 0000000000000..93964538637d9 --- /dev/null +++ b/pkg/workloadmeta/collectors/internal/containerd/image_test.go @@ -0,0 +1,45 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build containerd +// +build containerd + +package containerd + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestKnownImages(t *testing.T) { + images := newKnownImages() + + // Add a first image name that refers to the "123" ID + images.addAssociation("agent:7", "123") + imageID, found := images.getImageID("agent:7") + assert.True(t, found) + assert.Equal(t, "123", imageID) + assert.True(t, images.isReferenced("123")) + + // Add a second image that refers to the "123" ID + images.addAssociation("agent:latest", "123") + imageID, found = images.getImageID("agent:latest") + assert.True(t, found) + assert.Equal(t, "123", imageID) + assert.True(t, images.isReferenced("123")) + + // Delete one of the associations + images.deleteAssociation("agent:latest", "123") + _, found = images.getImageID("agent:latest") + assert.False(t, found) + assert.True(t, images.isReferenced("123")) // Still referenced by the other + + // Delete the other association + images.deleteAssociation("agent:7", "123") + _, found = images.getImageID("agent:7") + assert.False(t, found) + assert.False(t, images.isReferenced("123")) +} diff --git a/pkg/workloadmeta/collectors/internal/remoteworkloadmeta/remoteworkloadmeta.go b/pkg/workloadmeta/collectors/internal/remoteworkloadmeta/remoteworkloadmeta.go new file mode 100644 index 0000000000000..064ee7e3afde1 --- /dev/null +++ b/pkg/workloadmeta/collectors/internal/remoteworkloadmeta/remoteworkloadmeta.go @@ -0,0 +1,238 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package remoteworkloadmeta + +import ( + "context" + "crypto/tls" + "fmt" + "net" + "time" + + "github.com/cenkalti/backoff" + "github.com/pkg/errors" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + + "github.com/DataDog/datadog-agent/pkg/api/security" + "github.com/DataDog/datadog-agent/pkg/config" + pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" + "github.com/DataDog/datadog-agent/pkg/proto/utils" + grpcutil "github.com/DataDog/datadog-agent/pkg/util/grpc" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + "github.com/DataDog/datadog-agent/pkg/workloadmeta/telemetry" +) + +const ( + collectorID = "remote-workloadmeta" + noTimeout = 0 * time.Minute + streamRecvTimeout = 10 * time.Minute +) + +// Note: some code in this collector is the same as in the remote-tagger. + +var errWorkloadmetaStreamNotStarted = errors.New("workloadmeta stream not started") + +type collector struct { + store workloadmeta.Store + resyncNeeded bool + + conn *grpc.ClientConn + client pb.AgentSecureClient + stream pb.AgentSecure_WorkloadmetaStreamEntitiesClient + + streamCtx context.Context + streamCancel context.CancelFunc + + ctx context.Context + cancel context.CancelFunc +} + +func init() { + grpclog.SetLoggerV2(grpcutil.NewLogger()) + + workloadmeta.RegisterRemoteCollector(collectorID, func() workloadmeta.Collector { + return &collector{} + }) +} + +func (c *collector) Start(ctx context.Context, store workloadmeta.Store) error { + c.store = store + + c.ctx, c.cancel = context.WithCancel(ctx) + + // NOTE: we're using InsecureSkipVerify because the gRPC server only + // persists its TLS certs in memory, and we currently have no + // infrastructure to make them available to clients. This is NOT + // equivalent to grpc.WithInsecure(), since that assumes a non-TLS + // connection. + creds := credentials.NewTLS(&tls.Config{ + InsecureSkipVerify: true, + }) + + var err error + c.conn, err = grpc.DialContext( + c.ctx, + fmt.Sprintf(":%v", config.Datadog.GetInt("cmd_port")), + grpc.WithTransportCredentials(creds), + grpc.WithContextDialer(func(ctx context.Context, url string) (net.Conn, error) { + return net.Dial("tcp", url) + }), + ) + if err != nil { + return err + } + + c.client = pb.NewAgentSecureClient(c.conn) + + log.Info("remote workloadmeta initialized successfully") + + go c.run() + + return nil +} + +func (c *collector) Pull(ctx context.Context) error { + return nil +} + +func (c *collector) startWorkloadmetaStream(maxElapsed time.Duration) error { + expBackoff := backoff.NewExponentialBackOff() + expBackoff.InitialInterval = 500 * time.Millisecond + expBackoff.MaxInterval = 5 * time.Minute + expBackoff.MaxElapsedTime = maxElapsed + + return backoff.Retry(func() error { + select { + case <-c.ctx.Done(): + return &backoff.PermanentError{Err: errWorkloadmetaStreamNotStarted} + default: + } + + token, err := security.FetchAuthToken() + if err != nil { + err = fmt.Errorf("unable to fetch authentication token: %w", err) + log.Infof("unable to establish stream, will possibly retry: %s", err) + return err + } + + c.streamCtx, c.streamCancel = context.WithCancel( + metadata.NewOutgoingContext( + c.ctx, + metadata.MD{ + "authorization": []string{ + fmt.Sprintf("Bearer %s", token), + }, + }, + ), + ) + + c.stream, err = c.client.WorkloadmetaStreamEntities( + c.streamCtx, + &pb.WorkloadmetaStreamRequest{ + Filter: nil, // Subscribes to all events + }, + ) + + if err != nil { + log.Infof("unable to establish stream, will possibly retry: %s", err) + return err + } + + log.Info("workloadmeta stream established successfully") + + return nil + }, expBackoff) +} + +func (c *collector) run() { + for { + select { + case <-c.ctx.Done(): + return + default: + } + + if c.stream == nil { + if err := c.startWorkloadmetaStream(noTimeout); err != nil { + log.Warnf("error received trying to start stream: %s", err) + continue + } + } + + var response *pb.WorkloadmetaStreamResponse + err := grpcutil.DoWithTimeout(func() error { + var err error + response, err = c.stream.Recv() + return err + }, streamRecvTimeout) + if err != nil { + c.streamCancel() + + telemetry.RemoteClientErrors.Inc() + + // when Recv() returns an error, the stream is aborted and the + // contents of our store are considered out of sync. The stream must + // be re-established. No events are notified to the store until the + // connection is re-established. + c.stream = nil + c.resyncNeeded = true + + log.Warnf("error received from remote workloadmeta: %s", err) + + continue + } + + err = c.processResponse(response) + if err != nil { + log.Warnf("error processing event received from remote workloadmeta: %s", err) + continue + } + } +} + +func (c *collector) processResponse(response *pb.WorkloadmetaStreamResponse) error { + var collectorEvents []workloadmeta.CollectorEvent + + for _, protoEvent := range response.Events { + workloadmetaEvent, err := utils.WorkloadmetaEventFromProtoEvent(protoEvent) + if err != nil { + return err + } + + collectorEvent := workloadmeta.CollectorEvent{ + Type: workloadmetaEvent.Type, + Source: workloadmeta.SourceRemoteWorkloadmeta, + Entity: workloadmetaEvent.Entity, + } + + collectorEvents = append(collectorEvents, collectorEvent) + } + + if c.resyncNeeded { + var entities []workloadmeta.Entity + for _, event := range collectorEvents { + entities = append(entities, event.Entity) + } + + // This should be the first response that we got from workloadmeta after + // we lost the connection and specified that a re-sync is needed. So, at + // this point we know that "entities" contains all the existing entities + // in the store, because when a client subscribes to workloadmeta, the + // first response is always a bundle of events with all the existing + // entities in the store that match the filters specified (see + // workloadmeta.Store#Subscribe). + c.store.Reset(entities, workloadmeta.SourceRemoteWorkloadmeta) + c.resyncNeeded = false + return nil + } + + c.store.Notify(collectorEvents) + return nil +} diff --git a/pkg/workloadmeta/server/server.go b/pkg/workloadmeta/server/server.go index f0e2a1a978cbb..e9fed83cf2fed 100644 --- a/pkg/workloadmeta/server/server.go +++ b/pkg/workloadmeta/server/server.go @@ -13,10 +13,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/grpc" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/workloadmeta" + "github.com/DataDog/datadog-agent/pkg/workloadmeta/telemetry" ) const ( workloadmetaStreamSendTimeout = 1 * time.Minute + workloadmetaKeepAliveInterval = 9 * time.Minute ) func NewServer(store workloadmeta.Store) *Server { @@ -39,16 +41,16 @@ func (s *Server) StreamEntities(in *pb.WorkloadmetaStreamRequest, out pb.AgentSe workloadmetaEventsChannel := s.store.Subscribe("stream-client", workloadmeta.NormalPriority, filter) defer s.store.Unsubscribe(workloadmetaEventsChannel) - // Note: In the tagger stream function, when there are no events for a few - // minutes, we send an empty list to keep the connection alive. We might - // need to do the same here depending on the implementation of the remote - // workloadmeta. + ticker := time.NewTicker(workloadmetaKeepAliveInterval) + defer ticker.Stop() for { select { case eventBundle := <-workloadmetaEventsChannel: close(eventBundle.Ch) + ticker.Reset(workloadmetaKeepAliveInterval) + var protobufEvents []*pb.WorkloadmetaEvent for _, event := range eventBundle.Events { @@ -73,11 +75,31 @@ func (s *Server) StreamEntities(in *pb.WorkloadmetaStreamRequest, out pb.AgentSe if err != nil { log.Warnf("error sending workloadmeta event: %s", err) + telemetry.RemoteServerErrors.Inc() return err } } case <-out.Context().Done(): return nil + + // The remote workloadmeta client has a timeout that closes the + // connection after some minutes of inactivity. In order to avoid + // closing the connection and having to open it again, the server will + // send an empty message from time to time as defined in the ticker. The + // goal is only to keep the connection alive without losing the + // protection against “half” closed connections brought by the timeout. + case <-ticker.C: + err = grpc.DoWithTimeout(func() error { + return out.Send(&pb.WorkloadmetaStreamResponse{ + Events: []*pb.WorkloadmetaEvent{}, + }) + }, workloadmetaStreamSendTimeout) + + if err != nil { + log.Warnf("error sending workloadmeta keep-alive: %s", err) + telemetry.RemoteServerErrors.Inc() + return err + } } } } diff --git a/pkg/workloadmeta/store.go b/pkg/workloadmeta/store.go index ab50541347518..a01b57f7cbc5c 100644 --- a/pkg/workloadmeta/store.go +++ b/pkg/workloadmeta/store.go @@ -323,6 +323,16 @@ func (s *store) ListImages() []*ContainerImageMetadata { return images } +// GetImage implements Store#GetImage +func (s *store) GetImage(id string) (*ContainerImageMetadata, error) { + entity, err := s.getEntityByKind(KindContainerImageMetadata, id) + if err != nil { + return nil, err + } + + return entity.(*ContainerImageMetadata), nil +} + // Notify implements Store#Notify func (s *store) Notify(events []CollectorEvent) { if len(events) > 0 { @@ -330,6 +340,46 @@ func (s *store) Notify(events []CollectorEvent) { } } +// Reset implements Store#Reset +func (s *store) Reset(newEntities []Entity, source Source) { + s.storeMut.RLock() + defer s.storeMut.RUnlock() + + var events []CollectorEvent + + // Create a "set" event for each entity that need to be in the store. + // The store will takes care of not sending events for entities that already + // exist and haven't changed. + for _, newEntity := range newEntities { + events = append(events, CollectorEvent{ + Type: EventTypeSet, + Source: source, + Entity: newEntity, + }) + } + + // Create an "unset" event for each entity that needs to be deleted + newEntitiesByKindAndID := classifyByKindAndID(newEntities) + for kind, storedEntitiesOfKind := range s.store { + initialEntitiesOfKind, found := newEntitiesByKindAndID[kind] + if !found { + initialEntitiesOfKind = make(map[string]Entity) + } + + for ID, storedEntity := range storedEntitiesOfKind { + if _, found = initialEntitiesOfKind[ID]; !found { + events = append(events, CollectorEvent{ + Type: EventTypeUnset, + Source: source, + Entity: storedEntity.cached, + }) + } + } + } + + s.Notify(events) +} + func (s *store) startCandidates(ctx context.Context) bool { s.collectorMut.Lock() defer s.collectorMut.Unlock() @@ -579,6 +629,23 @@ func notifyChannel(name string, ch chan EventBundle, events []Event, wait bool) } } +func classifyByKindAndID(entities []Entity) map[Kind]map[string]Entity { + res := make(map[Kind]map[string]Entity) + + for _, entity := range entities { + kind := entity.GetID().Kind + entityID := entity.GetID().ID + + _, found := res[kind] + if !found { + res[kind] = make(map[string]Entity) + } + res[kind][entityID] = entity + } + + return res +} + // CreateGlobalStore creates a workloadmeta store, sets it as the default // global one, and returns it. Start() needs to be called before any data // collection happens. diff --git a/pkg/workloadmeta/store_test.go b/pkg/workloadmeta/store_test.go index ca933f287f997..a1b7ac1f44e5e 100644 --- a/pkg/workloadmeta/store_test.go +++ b/pkg/workloadmeta/store_test.go @@ -724,8 +724,252 @@ func TestListImages(t *testing.T) { } } +func TestGetImage(t *testing.T) { + image := &ContainerImageMetadata{ + EntityID: EntityID{ + Kind: KindContainerImageMetadata, + ID: "abc", + }, + } + + tests := []struct { + name string + imageID string + preEvents []CollectorEvent + expectedImage *ContainerImageMetadata + expectsError bool + }{ + { + name: "image exists", + imageID: image.ID, + preEvents: []CollectorEvent{ + { + Type: EventTypeSet, + Source: fooSource, + Entity: image, + }, + }, + expectedImage: image, + }, + { + name: "image does not exist", + imageID: "non_existing_ID", + preEvents: nil, + expectsError: true, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + testStore := newTestStore() + testStore.handleEvents(test.preEvents) + + actualImage, err := testStore.GetImage(test.imageID) + + if test.expectsError { + assert.Error(t, err, errors.NewNotFound(string(KindContainerImageMetadata)).Error()) + } else { + assert.NilError(t, err) + assert.DeepEqual(t, test.expectedImage, actualImage) + } + }) + } +} + +func TestReset(t *testing.T) { + fooContainer := &Container{ + EntityID: EntityID{ + Kind: KindContainer, + ID: "foo", + }, + EntityMeta: EntityMeta{ + Name: "foo", + }, + Hostname: "foo", + } + + fooSetEvent := CollectorEvent{ + Type: EventTypeSet, + Source: fooSource, + Entity: fooContainer, + } + + // Same ID as fooContainer but with different values + updatedFooContainer := &Container{ + EntityID: EntityID{ + Kind: KindContainer, + ID: "foo", + }, + EntityMeta: EntityMeta{ + Name: "foo", + Labels: map[string]string{ // Added + "test-label": "1", + }, + }, + Hostname: "foo", + } + + barContainer := &Container{ + EntityID: EntityID{ + Kind: KindContainer, + ID: "bar", + }, + EntityMeta: EntityMeta{ + Name: "bar", + }, + Hostname: "bar", + } + + tests := []struct { + name string + preEvents []CollectorEvent + newEntities []Entity + expectedEventsReceived []EventBundle + }{ + { + name: "new entity already exists without changes", + preEvents: []CollectorEvent{ + fooSetEvent, + }, + newEntities: []Entity{ + fooContainer, + }, + expectedEventsReceived: []EventBundle{ + { + Events: []Event{ + { + Type: EventTypeSet, + Entity: fooContainer, + }, + }, + }, + }, + }, + { + name: "new entity exists but it has been updated", + preEvents: []CollectorEvent{ + fooSetEvent, + }, + newEntities: []Entity{ + updatedFooContainer, + }, + expectedEventsReceived: []EventBundle{ + { + Events: []Event{ + { + Type: EventTypeSet, + Entity: fooContainer, + }, + }, + }, + { + Events: []Event{ + { + Type: EventTypeSet, + Entity: updatedFooContainer, + }, + }, + }, + }, + }, + { + name: "new event does not exist", + preEvents: []CollectorEvent{ + fooSetEvent, + }, + newEntities: []Entity{ + fooContainer, + barContainer, + }, + expectedEventsReceived: []EventBundle{ + { + Events: []Event{ + { + Type: EventTypeSet, + Entity: fooContainer, + }, + }, + }, + { + Events: []Event{ + { + Type: EventTypeSet, + Entity: barContainer, + }, + }, + }, + }, + }, + { + name: "an event that exists is not included in the list of new ones", + preEvents: []CollectorEvent{ + fooSetEvent, + }, + newEntities: []Entity{}, + expectedEventsReceived: []EventBundle{ + { + Events: []Event{ + { + Type: EventTypeSet, + Entity: fooContainer, + }, + }, + }, + { + Events: []Event{ + { + Type: EventTypeUnset, + Entity: fooContainer, + }, + }, + }, + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + s := newTestStore() + + s.handleEvents(test.preEvents) + + ch := s.Subscribe(dummySubscriber, NormalPriority, nil) + doneCh := make(chan struct{}) + + var actualEventsReceived []EventBundle + go func() { + for bundle := range ch { + close(bundle.Ch) + + // nil the bundle's Ch so we can deep-equal just the events + // later + bundle.Ch = nil + + actualEventsReceived = append(actualEventsReceived, bundle) + } + + close(doneCh) + }() + + s.Reset(test.newEntities, fooSource) + + // Force handling of events generated by the reset + if len(s.eventCh) > 0 { + s.handleEvents(<-s.eventCh) + } + + s.Unsubscribe(ch) + + <-doneCh + + assert.DeepEqual(t, test.expectedEventsReceived, actualEventsReceived) + }) + } +} + func newTestStore() *store { return &store{ - store: make(map[Kind]map[string]*cachedEntity), + store: make(map[Kind]map[string]*cachedEntity), + eventCh: make(chan []CollectorEvent, eventChBufferSize), } } diff --git a/pkg/workloadmeta/telemetry/telemetry.go b/pkg/workloadmeta/telemetry/telemetry.go index b791537ac7309..aa600b3d682ae 100644 --- a/pkg/workloadmeta/telemetry/telemetry.go +++ b/pkg/workloadmeta/telemetry/telemetry.go @@ -66,4 +66,24 @@ var ( "Number of notifications sent by workloadmeta to its subscribers", commonOpts, ) + + // RemoteClientErrors tracks the number of errors on the remote workloadmeta + // client while receiving events. + RemoteClientErrors = telemetry.NewCounterWithOpts( + subsystem, + "remote_client_errors", + []string{}, + "Number of errors on the remote workloadmeta client while receiving events", + commonOpts, + ) + + // RemoteServerErrors track the number of errors on the remote workloadmeta + // server while streaming events. + RemoteServerErrors = telemetry.NewCounterWithOpts( + subsystem, + "remote_server_errors", + []string{}, + "Number of errors on the remote workloadmeta server while streaming events", + commonOpts, + ) ) diff --git a/pkg/workloadmeta/testing/store.go b/pkg/workloadmeta/testing/store.go index ddf54c8c68550..da5d734129795 100644 --- a/pkg/workloadmeta/testing/store.go +++ b/pkg/workloadmeta/testing/store.go @@ -117,6 +117,16 @@ func (s *Store) ListImages() []*workloadmeta.ContainerImageMetadata { return images } +// GetImage implements Store#GetImage +func (s *Store) GetImage(id string) (*workloadmeta.ContainerImageMetadata, error) { + entity, err := s.getEntityByKind(workloadmeta.KindContainerImageMetadata, id) + if err != nil { + return nil, err + } + + return entity.(*workloadmeta.ContainerImageMetadata), nil +} + // Set sets an entity in the store. func (s *Store) Set(entity workloadmeta.Entity) { s.mu.Lock() @@ -169,6 +179,11 @@ func (s *Store) Dump(verbose bool) workloadmeta.WorkloadDumpResponse { panic("not implemented") } +// Reset is not implemented in the testing store. +func (s *Store) Reset(newEntities []workloadmeta.Entity, source workloadmeta.Source) { + panic("not implemented") +} + func (s *Store) getEntityByKind(kind workloadmeta.Kind, id string) (workloadmeta.Entity, error) { entitiesOfKind, ok := s.store[kind] if !ok { diff --git a/pkg/workloadmeta/types.go b/pkg/workloadmeta/types.go index cb35ae685d72a..5253474b27071 100644 --- a/pkg/workloadmeta/types.go +++ b/pkg/workloadmeta/types.go @@ -78,12 +78,25 @@ type Store interface { // entities with kind KindContainerImageMetadata. ListImages() []*ContainerImageMetadata + // GetImage returns metadata about a container image. It fetches the entity + // with kind KindContainerImageMetadata and the given ID. + GetImage(id string) (*ContainerImageMetadata, error) + // Notify notifies the store with a slice of events. It should only be // used by workloadmeta collectors. Notify(events []CollectorEvent) // Dump lists the content of the store, for debugging purposes. Dump(verbose bool) WorkloadDumpResponse + + // Reset resets the state of the store so that newEntities are the only + // entities stored. This function sends events to the subscribers in the + // following cases: + // - EventTypeSet: one for each entity in newEntities that doesn't exist in + // the store. Also, when the entity exists, but with different values. + // - EventTypeUnset: one for each entity that exists in the store but is not + // present in newEntities. + Reset(newEntities []Entity, source Source) } // Kind is the kind of an entity. @@ -120,6 +133,10 @@ const ( // the central component of an orchestrator, or the Datadog Cluster // Agent. `kube_metadata` and `cloudfoundry` use this. SourceClusterOrchestrator Source = "cluster_orchestrator" + + // SourceRemoteWorkloadmeta represents entities detected by the remote + // workloadmeta. + SourceRemoteWorkloadmeta Source = "remote_workloadmeta" ) // ContainerRuntime is the container runtime used by a container. diff --git a/release.json b/release.json index 651222d0b50d2..60d4996e7b11a 100644 --- a/release.json +++ b/release.json @@ -8,8 +8,8 @@ "INTEGRATIONS_CORE_VERSION": "master", "OMNIBUS_SOFTWARE_VERSION": "master", "OMNIBUS_RUBY_VERSION": "datadog-5.5.0", - "JMXFETCH_VERSION": "0.47.1", - "JMXFETCH_HASH": "4cbbff73abfa0e6baaa1e3cad57497abcbb0e1570a022eecb7828dce3a14a3d9", + "JMXFETCH_VERSION": "0.47.2", + "JMXFETCH_HASH": "92f9c744fe00c13c6401829b9eb50f44c5843ae9d1a14f7618531bdf0187e44f", "MACOS_BUILD_VERSION": "master", "WINDOWS_DDNPM_DRIVER": "release-signed", "WINDOWS_DDNPM_VERSION": "2.1.1", @@ -20,8 +20,8 @@ "INTEGRATIONS_CORE_VERSION": "master", "OMNIBUS_SOFTWARE_VERSION": "master", "OMNIBUS_RUBY_VERSION": "datadog-5.5.0", - "JMXFETCH_VERSION": "0.47.1", - "JMXFETCH_HASH": "4cbbff73abfa0e6baaa1e3cad57497abcbb0e1570a022eecb7828dce3a14a3d9", + "JMXFETCH_VERSION": "0.47.2", + "JMXFETCH_HASH": "92f9c744fe00c13c6401829b9eb50f44c5843ae9d1a14f7618531bdf0187e44f", "MACOS_BUILD_VERSION": "master", "WINDOWS_DDNPM_DRIVER": "release-signed", "WINDOWS_DDNPM_VERSION": "2.1.1", @@ -29,25 +29,25 @@ "SECURITY_AGENT_POLICIES_VERSION": "master" }, "release-a6": { - "INTEGRATIONS_CORE_VERSION": "7.41.0-rc.3", - "OMNIBUS_SOFTWARE_VERSION": "7.41.0-rc.1", - "OMNIBUS_RUBY_VERSION": "7.41.0-rc.1", - "JMXFETCH_VERSION": "0.47.1", - "JMXFETCH_HASH": "4cbbff73abfa0e6baaa1e3cad57497abcbb0e1570a022eecb7828dce3a14a3d9", - "SECURITY_AGENT_POLICIES_VERSION": "v0.41.0", - "MACOS_BUILD_VERSION": "6.41.0-rc.1", + "INTEGRATIONS_CORE_VERSION": "7.42.0-rc.3", + "OMNIBUS_SOFTWARE_VERSION": "7.42.0-rc.1", + "OMNIBUS_RUBY_VERSION": "7.42.0-rc.1", + "JMXFETCH_VERSION": "0.47.2", + "JMXFETCH_HASH": "92f9c744fe00c13c6401829b9eb50f44c5843ae9d1a14f7618531bdf0187e44f", + "SECURITY_AGENT_POLICIES_VERSION": "v0.42.1", + "MACOS_BUILD_VERSION": "6.42.0-rc.1", "WINDOWS_DDNPM_DRIVER": "release-signed", "WINDOWS_DDNPM_VERSION": "2.1.1", "WINDOWS_DDNPM_SHASUM": "f52d4db27715e32008c5903393d0bc990ceb134f269fa10e76d08b3659587731" }, "release-a7": { - "INTEGRATIONS_CORE_VERSION": "7.41.0-rc.3", - "OMNIBUS_SOFTWARE_VERSION": "7.41.0-rc.1", - "OMNIBUS_RUBY_VERSION": "7.41.0-rc.1", - "JMXFETCH_VERSION": "0.47.1", - "JMXFETCH_HASH": "4cbbff73abfa0e6baaa1e3cad57497abcbb0e1570a022eecb7828dce3a14a3d9", - "SECURITY_AGENT_POLICIES_VERSION": "v0.41.0", - "MACOS_BUILD_VERSION": "7.41.0-rc.1", + "INTEGRATIONS_CORE_VERSION": "7.42.0-rc.3", + "OMNIBUS_SOFTWARE_VERSION": "7.42.0-rc.1", + "OMNIBUS_RUBY_VERSION": "7.42.0-rc.1", + "JMXFETCH_VERSION": "0.47.2", + "JMXFETCH_HASH": "92f9c744fe00c13c6401829b9eb50f44c5843ae9d1a14f7618531bdf0187e44f", + "SECURITY_AGENT_POLICIES_VERSION": "v0.42.1", + "MACOS_BUILD_VERSION": "7.42.0-rc.1", "WINDOWS_DDNPM_DRIVER": "release-signed", "WINDOWS_DDNPM_VERSION": "2.1.1", "WINDOWS_DDNPM_SHASUM": "f52d4db27715e32008c5903393d0bc990ceb134f269fa10e76d08b3659587731" diff --git a/releasenotes-dca/notes/VerticalPodAutoscaler-fb7eec91762e05a4.yaml b/releasenotes-dca/notes/VerticalPodAutoscaler-fb7eec91762e05a4.yaml new file mode 100644 index 0000000000000..ba16ebefb4f3f --- /dev/null +++ b/releasenotes-dca/notes/VerticalPodAutoscaler-fb7eec91762e05a4.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Starts the collecting of Vertical Pod Autoscalers within Kubernetes clusters. diff --git a/releasenotes-dca/notes/collect-crd-71e0854883288ae1.yaml b/releasenotes-dca/notes/collect-crd-71e0854883288ae1.yaml new file mode 100644 index 0000000000000..a9631b7d6254c --- /dev/null +++ b/releasenotes-dca/notes/collect-crd-71e0854883288ae1.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG-DCA.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Supports the collection of custom resource definition and custom resource manifests for the orchestrator explorer. diff --git a/releasenotes/notes/Escape-path-in-get-acl-command-b4c123c26759a1e1.yaml b/releasenotes/notes/Escape-path-in-get-acl-command-b4c123c26759a1e1.yaml new file mode 100644 index 0000000000000..3363184989369 --- /dev/null +++ b/releasenotes/notes/Escape-path-in-get-acl-command-b4c123c26759a1e1.yaml @@ -0,0 +1,3 @@ +--- +fixes: + - The secret command now correctly displays the ACL on a path with spaces. diff --git a/releasenotes/notes/LowerTraceLimit-839236eacc69d87a.yaml b/releasenotes/notes/LowerTraceLimit-839236eacc69d87a.yaml new file mode 100644 index 0000000000000..da6924056e386 --- /dev/null +++ b/releasenotes/notes/LowerTraceLimit-839236eacc69d87a.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + APM: Lower default incoming trace payload limit to 25MB. This more closely aligns with the backend limit. Some users may see traces rejected by the Agent that the Agent would have previously accepted, but would have subsequently been rejected by the trace intake. The Agent limit can still be configured via `apm_config.max_payload_size`. diff --git a/releasenotes/notes/NDM---Add-snmp.device_up-metric-65a7855a959af675.yaml b/releasenotes/notes/NDM---Add-snmp.device_up-metric-65a7855a959af675.yaml new file mode 100644 index 0000000000000..ec47c24240f6f --- /dev/null +++ b/releasenotes/notes/NDM---Add-snmp.device_up-metric-65a7855a959af675.yaml @@ -0,0 +1,10 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - NDM: Add snmp.device.reachable/unreachable metrics to all monitored devices. diff --git a/releasenotes/notes/NDM---Add-snmp.interface_status-metric-13fb0f54fd11f197.yaml b/releasenotes/notes/NDM---Add-snmp.interface_status-metric-13fb0f54fd11f197.yaml new file mode 100644 index 0000000000000..bf856328fa706 --- /dev/null +++ b/releasenotes/notes/NDM---Add-snmp.interface_status-metric-13fb0f54fd11f197.yaml @@ -0,0 +1,10 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - Adds a new snmp.interface_status metric reflecting the same status as within NDM. diff --git a/releasenotes/notes/PortNormalizedTagImprovements-374203de9f436f90.yaml b/releasenotes/notes/PortNormalizedTagImprovements-374203de9f436f90.yaml new file mode 100644 index 0000000000000..186a42088a412 --- /dev/null +++ b/releasenotes/notes/PortNormalizedTagImprovements-374203de9f436f90.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + APM: Ported a faster implementation of NormalizeTag with a fast-path for already normalized ASCII tags. Should marginally improve CPU usage of the trace-agent. diff --git a/releasenotes/notes/add-cluster-tagger-in-k8s-events-collection-a3dd165ce93a7114.yaml b/releasenotes/notes/add-cluster-tagger-in-k8s-events-collection-a3dd165ce93a7114.yaml new file mode 100644 index 0000000000000..a4ecfabdcb71e --- /dev/null +++ b/releasenotes/notes/add-cluster-tagger-in-k8s-events-collection-a3dd165ce93a7114.yaml @@ -0,0 +1,12 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Kubernetes Pod events generated by the `kubernetes_apiserver` can now + benefit from the new `cluster-tagger` component in the Cluster-Agent. diff --git a/releasenotes/notes/apm-fix-info-0ac3d9106e780798.yaml b/releasenotes/notes/apm-fix-info-0ac3d9106e780798.yaml new file mode 100644 index 0000000000000..735c245d5abdd --- /dev/null +++ b/releasenotes/notes/apm-fix-info-0ac3d9106e780798.yaml @@ -0,0 +1,3 @@ +fixes: + - | + APM: Fix the `trace-agent -info` command when remote configuration is enabled. diff --git a/releasenotes/notes/apm-max-cpu-mem-feb99ac256073f7c.yaml b/releasenotes/notes/apm-max-cpu-mem-feb99ac256073f7c.yaml new file mode 100644 index 0000000000000..6b8e11fb8c445 --- /dev/null +++ b/releasenotes/notes/apm-max-cpu-mem-feb99ac256073f7c.yaml @@ -0,0 +1,6 @@ +--- +enhancements: + - | + APM: Disable ``max_memory`` and ``max_cpu_percent`` by default in containerized environments (Docker-only, ECS and CI). + Users rely on the orchestrator / container runtime to set resource limits. + Note: ``max_memory`` and ``max_cpu_percent`` have been disabled by default in Kubernetes environments since Agent ``7.18.0``. diff --git a/releasenotes/notes/apm-otlp-support-datadogprocessor-384b9c0c3130289f.yaml b/releasenotes/notes/apm-otlp-support-datadogprocessor-384b9c0c3130289f.yaml new file mode 100644 index 0000000000000..9965ca98c47d8 --- /dev/null +++ b/releasenotes/notes/apm-otlp-support-datadogprocessor-384b9c0c3130289f.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + APM OTLP: Added compatibility for the OpenTelemetry Collector's datadogprocessor to the OTLP Ingest. diff --git a/releasenotes/notes/bump-wheel-218fcf0e14839ed5.yaml b/releasenotes/notes/bump-wheel-218fcf0e14839ed5.yaml new file mode 100644 index 0000000000000..ebf3a1624f6c4 --- /dev/null +++ b/releasenotes/notes/bump-wheel-218fcf0e14839ed5.yaml @@ -0,0 +1,4 @@ +--- +security: + - Upgrade the wheel package to ``0.37.1`` for Python 2. + - Upgrade the wheel package to ``0.38.4`` for Python 3. diff --git a/releasenotes/notes/cws-mount-event-1ccc3c4e86a27143.yaml b/releasenotes/notes/cws-mount-event-1ccc3c4e86a27143.yaml new file mode 100644 index 0000000000000..820b244b9fc7f --- /dev/null +++ b/releasenotes/notes/cws-mount-event-1ccc3c4e86a27143.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + The CWS agent now supports rules on mount events. diff --git a/releasenotes/notes/fileless-process-execution-8dadfb42a059be0f.yaml b/releasenotes/notes/fileless-process-execution-8dadfb42a059be0f.yaml new file mode 100644 index 0000000000000..35862f3e7ebf4 --- /dev/null +++ b/releasenotes/notes/fileless-process-execution-8dadfb42a059be0f.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds detection for a process being executed directly from memory without the binary present on disk. diff --git a/releasenotes/notes/fix-ad-prometheus-scrape-config-8c99b1cd6a4b1fae.yaml b/releasenotes/notes/fix-ad-prometheus-scrape-config-8c99b1cd6a4b1fae.yaml new file mode 100644 index 0000000000000..f92511d356b90 --- /dev/null +++ b/releasenotes/notes/fix-ad-prometheus-scrape-config-8c99b1cd6a4b1fae.yaml @@ -0,0 +1,12 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + Create only endpoints check from prometheus scrape configuration + when `prometheus_scrape.service.endpoint` option is enabled. diff --git a/releasenotes/notes/fix-obfuscator-logger-8c6a4debbf3a0bf6.yaml b/releasenotes/notes/fix-obfuscator-logger-8c6a4debbf3a0bf6.yaml new file mode 100644 index 0000000000000..1474d0e7194a6 --- /dev/null +++ b/releasenotes/notes/fix-obfuscator-logger-8c6a4debbf3a0bf6.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Fix panic due to uninitialized Obfuscator logger diff --git a/releasenotes/notes/fix-sql-a4adfd27d024af39.yaml b/releasenotes/notes/fix-sql-a4adfd27d024af39.yaml new file mode 100644 index 0000000000000..d9282839978ca --- /dev/null +++ b/releasenotes/notes/fix-sql-a4adfd27d024af39.yaml @@ -0,0 +1,12 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + APM: Fix SQL parsing of negative numbers and improve error message. + diff --git a/releasenotes/notes/go-1.18.9-3e413f5554edc84e.yaml b/releasenotes/notes/go-1.18.9-3e413f5554edc84e.yaml new file mode 100644 index 0000000000000..85937a47fbdbe --- /dev/null +++ b/releasenotes/notes/go-1.18.9-3e413f5554edc84e.yaml @@ -0,0 +1,4 @@ +--- +enhancements: + - | + Agents are now built with Go ``1.18.9``. diff --git a/releasenotes/notes/improve-ecs-fargate-hostname-detection-0a468e1c3a53b3df.yaml b/releasenotes/notes/improve-ecs-fargate-hostname-detection-0a468e1c3a53b3df.yaml new file mode 100644 index 0000000000000..0343ca27ecd72 --- /dev/null +++ b/releasenotes/notes/improve-ecs-fargate-hostname-detection-0a468e1c3a53b3df.yaml @@ -0,0 +1,12 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + The agent no longer wrongly resolves its hostname on ECS Fargate when + requests to the Fargate API timeout. diff --git a/releasenotes/notes/jmxfetch-0.47.2-c8211399517e021f.yaml b/releasenotes/notes/jmxfetch-0.47.2-c8211399517e021f.yaml new file mode 100644 index 0000000000000..f0c83fbe7f3eb --- /dev/null +++ b/releasenotes/notes/jmxfetch-0.47.2-c8211399517e021f.yaml @@ -0,0 +1,3 @@ +other: + - | + JMXFetch upgraded to `0.47.2 `_ diff --git a/releasenotes/notes/ksm_annotations_as_tags-3d8bdbb8daf0f736.yaml b/releasenotes/notes/ksm_annotations_as_tags-3d8bdbb8daf0f736.yaml new file mode 100644 index 0000000000000..f6e4317960dcb --- /dev/null +++ b/releasenotes/notes/ksm_annotations_as_tags-3d8bdbb8daf0f736.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + Add an ``annotations_as_tags`` parameter to the kubernetes_state_core check to allow attaching Kubernetes annotations as Datadog tags in a similar way that the ``labels_as_tags`` parameter does. diff --git a/releasenotes/notes/limit-pdh-init-failures-a4918705f55936fd.yaml b/releasenotes/notes/limit-pdh-init-failures-a4918705f55936fd.yaml new file mode 100644 index 0000000000000..2e83f1067662c --- /dev/null +++ b/releasenotes/notes/limit-pdh-init-failures-a4918705f55936fd.yaml @@ -0,0 +1,6 @@ +--- +enhancements: + - | + Adds the ``windows_counter_init_failure_limit`` option. + This option limits the number of times a check will attempt to initialize + a performance counter before ceasing attempts to initialize the counter. diff --git a/releasenotes/notes/process-agent-on-win-secret-backend-a2f4668bc6bc07dc.yaml b/releasenotes/notes/process-agent-on-win-secret-backend-a2f4668bc6bc07dc.yaml new file mode 100644 index 0000000000000..f72c9e926baa2 --- /dev/null +++ b/releasenotes/notes/process-agent-on-win-secret-backend-a2f4668bc6bc07dc.yaml @@ -0,0 +1,5 @@ +--- +enhancements: + - | + Allows running secrets in the Process Agent on Windows by sandboxing + ``secret_backend_command`` execution to the ``ddagentuser`` account used by the Core Agent service. diff --git a/releasenotes/notes/process-agent-service-tag-extraction-3fb97205155ed1a4.yaml b/releasenotes/notes/process-agent-service-tag-extraction-3fb97205155ed1a4.yaml new file mode 100644 index 0000000000000..2c3d4545fc47b --- /dev/null +++ b/releasenotes/notes/process-agent-service-tag-extraction-3fb97205155ed1a4.yaml @@ -0,0 +1,6 @@ +--- +enhancements: + - | + Add `process_context` tag extraction based on a process's command line arguments for service monitoring. + This feature is configured in the `system-probe.yaml` with the following configuration: + `service_monitoring_config.process_service_inference.enabled`. diff --git a/releasenotes/notes/reduce-pdh-overhead-9e915f2ac9deb085.yaml b/releasenotes/notes/reduce-pdh-overhead-9e915f2ac9deb085.yaml new file mode 100644 index 0000000000000..b22bcea220af0 --- /dev/null +++ b/releasenotes/notes/reduce-pdh-overhead-9e915f2ac9deb085.yaml @@ -0,0 +1,7 @@ +--- +enhancements: + - | + Reduce the overhead of using Windows Performance Counters / PDH in checks. +fixes: + - | + Fix a PDH query handle leak that occurred when a counter failed to add to a query. diff --git a/releasenotes/notes/remove-cca-in-ad-config-4a8bd6e0816b8656.yaml b/releasenotes/notes/remove-cca-in-ad-config-4a8bd6e0816b8656.yaml new file mode 100644 index 0000000000000..80d983ee8cd5b --- /dev/null +++ b/releasenotes/notes/remove-cca-in-ad-config-4a8bd6e0816b8656.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +other: + - | + The ``logs_config.cca_in_ad`` has been removed. diff --git a/releasenotes/notes/remove-deprecated-py-env-vars-c4a67902c6aaa10b.yaml b/releasenotes/notes/remove-deprecated-py-env-vars-c4a67902c6aaa10b.yaml new file mode 100644 index 0000000000000..dd16fcb559924 --- /dev/null +++ b/releasenotes/notes/remove-deprecated-py-env-vars-c4a67902c6aaa10b.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Remove unused environment variables `DD_AGENT_PY` and `DD_AGENT_PY_ENV` from known environment variables in flare command. \ No newline at end of file diff --git a/releasenotes/notes/remove-sending-API-keys-as-params-1cec05cf38b99b71.yaml b/releasenotes/notes/remove-sending-API-keys-as-params-1cec05cf38b99b71.yaml new file mode 100644 index 0000000000000..ebfef971f2293 --- /dev/null +++ b/releasenotes/notes/remove-sending-API-keys-as-params-1cec05cf38b99b71.yaml @@ -0,0 +1,8 @@ +--- +security: + - | + Some HTTP requests sent by the Datadog Agent to Datadog endpoints were including the Datadog API key in the query parameters (in the URL). + This meant that the keys could potentially have been logged in various locations, for example, in a forward or a reverse proxy server logs the Agent connected to. + We have updated all requests to not send the API key as a query parameter. + Anyone who uses a proxy to connect the Agent to Datadog endpoints should make sure their proxy forwards all Datadog headers (patricularly ``DD-Api-Key``). + Failure to not send all Datadog headers could cause payloads to be rejected by our endpoints. diff --git a/releasenotes/notes/secret_backend_command_sha256-b322140f976f02e1.yaml b/releasenotes/notes/secret_backend_command_sha256-b322140f976f02e1.yaml new file mode 100644 index 0000000000000..6457e418b69cf --- /dev/null +++ b/releasenotes/notes/secret_backend_command_sha256-b322140f976f02e1.yaml @@ -0,0 +1,10 @@ +--- +features: + - | + Adds support for ``secret_backend_command_sha256`` SHA for the ``secret_backend_command`` executable. If ``secret_backend_command_sha256`` is used, + the following restrictions are in place: + - Value specified in the ``secret_backend_command`` setting must be an absolute path. + - Permissions for the ``datadog.yaml`` config file must disallow write access by users other than ``ddagentuser`` or ``Administrators`` on Windows or the user running the Agent on Linux and macOS. + The agent will refuse to start if the actual SHA256 of the ``secret_backend_command`` executable is different from the one specified by ``secret_backend_command_sha256``. + The ``secret_backend_command`` file is locked during verification of SHA256 and subsequent run of the secret backend executable. + diff --git a/releasenotes/notes/snmp_add_ip_addresses_to_ndm_metadata_interfaces-ff310a683f997bc1.yaml b/releasenotes/notes/snmp_add_ip_addresses_to_ndm_metadata_interfaces-ff310a683f997bc1.yaml new file mode 100644 index 0000000000000..a3e704b96c39d --- /dev/null +++ b/releasenotes/notes/snmp_add_ip_addresses_to_ndm_metadata_interfaces-ff310a683f997bc1.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + [corechecks/snmp] Add IP Addresses to NDM Metadata interfaces diff --git a/releasenotes/notes/sql-identifier-dollar-sign-4a2c61f45138e621.yaml b/releasenotes/notes/sql-identifier-dollar-sign-4a2c61f45138e621.yaml new file mode 100644 index 0000000000000..fe5fc31d7dc10 --- /dev/null +++ b/releasenotes/notes/sql-identifier-dollar-sign-4a2c61f45138e621.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + APM: Fix SQL obfuscator parsing of identifiers containing dollar signs. diff --git a/releasenotes/notes/tag_by_endpoint-support-in-prometheusScrape-47d13a051221057d.yaml b/releasenotes/notes/tag_by_endpoint-support-in-prometheusScrape-47d13a051221057d.yaml new file mode 100644 index 0000000000000..5553afadfe532 --- /dev/null +++ b/releasenotes/notes/tag_by_endpoint-support-in-prometheusScrape-47d13a051221057d.yaml @@ -0,0 +1,3 @@ +enhancements: + - | + prometheus_scrape: Adds support for `tag_by_endpoint` and `collect_counters_with_distributions` in the `prometheus_scrape.checks[].configurations[]` items. diff --git a/releasenotes/notes/update-python-3-8-16-63368caf05939bfa.yaml b/releasenotes/notes/update-python-3-8-16-63368caf05939bfa.yaml new file mode 100644 index 0000000000000..1cea9b499f3e2 --- /dev/null +++ b/releasenotes/notes/update-python-3-8-16-63368caf05939bfa.yaml @@ -0,0 +1,4 @@ +--- +other: + - | + Bump embedded Python3 to `3.8.16`. diff --git a/releasenotes/notes/v0.68.0-otel-f1571b993848d654.yaml b/releasenotes/notes/v0.68.0-otel-f1571b993848d654.yaml new file mode 100644 index 0000000000000..17a3c743d2588 --- /dev/null +++ b/releasenotes/notes/v0.68.0-otel-f1571b993848d654.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + The OTLP ingest endpoint now supports the same settings and protocols as the OpenTelemetry Collector OTLP receiver v0.68.0. diff --git a/tasks/__init__.py b/tasks/__init__.py index ba5525c894624..ebf7c716fe56d 100644 --- a/tasks/__init__.py +++ b/tasks/__init__.py @@ -49,6 +49,7 @@ install_shellcheck, install_tools, integration_tests, + junit_macos_repack, junit_upload, lint_copyrights, lint_filenames, @@ -92,6 +93,7 @@ ns.add_task(check_go_version) ns.add_task(generate_config) ns.add_task(junit_upload) +ns.add_task(junit_macos_repack) ns.add_task(fuzz) # add namespaced tasks to the root diff --git a/tasks/agent.py b/tasks/agent.py index d899c62b69eed..5d15428dd18a5 100644 --- a/tasks/agent.py +++ b/tasks/agent.py @@ -365,6 +365,7 @@ def get_omnibus_env( nikos_path=None, go_mod_cache=None, flavor=AgentFlavor.base, + pip_config_file="pip.conf", ): env = load_release_versions(ctx, release_version) @@ -401,6 +402,11 @@ def get_omnibus_env( ) env['MAJOR_VERSION'] = major_version env['PY_RUNTIMES'] = python_runtimes + + # Since omnibus and the invoke task won't run in the same folder + # we need to input the absolute path of the pip config file + env['PIP_CONFIG_FILE'] = os.path.abspath(pip_config_file) + if system_probe_bin: env['SYSTEM_PROBE_BIN'] = system_probe_bin if nikos_path: @@ -480,6 +486,8 @@ def omnibus_build( system_probe_bin=None, nikos_path=None, go_mod_cache=None, + python_mirror=None, + pip_config_file="pip.conf", ): """ Build the Agent packages with Omnibus Installer. @@ -513,6 +521,7 @@ def omnibus_build( nikos_path=nikos_path, go_mod_cache=go_mod_cache, flavor=flavor, + pip_config_file=pip_config_file, ) target_project = "agent" @@ -521,6 +530,16 @@ def omnibus_build( elif agent_binaries: target_project = "agent-binaries" + # Get the python_mirror from the PIP_INDEX_URL environment variable if it is not passed in the args + python_mirror = python_mirror or os.environ.get("PIP_INDEX_URL") + + # If a python_mirror is set then use it for pip by adding it in the pip.conf file + pip_index_url = f"[global]\nindex-url = {python_mirror}" if python_mirror else "" + + # We're passing the --index-url arg through a pip.conf file so that omnibus doesn't leak the token + with open(pip_config_file, 'w') as f: + f.write(pip_index_url) + bundle_start = datetime.datetime.now() bundle_install_omnibus(ctx, gem_path, env) bundle_done = datetime.datetime.now() @@ -539,6 +558,9 @@ def omnibus_build( omnibus_done = datetime.datetime.now() omnibus_elapsed = omnibus_done - omnibus_start + # Delete the temporary pip.conf file once the build is done + os.remove(pip_config_file) + print("Build component timing:") if not skip_deps: print(f"Deps: {deps_elapsed}") diff --git a/tasks/build_tags.py b/tasks/build_tags.py index 0a892e6934f67..599f0b19f1c22 100644 --- a/tasks/build_tags.py +++ b/tasks/build_tags.py @@ -41,6 +41,7 @@ "systemd", "zk", "zlib", + "test", # used for unit-tests } ### Tag inclusion lists @@ -136,6 +137,9 @@ # List of tags to always remove when building on Windows 32-bits WINDOWS_32BIT_EXCLUDE_TAGS = {"docker", "kubeapiserver", "kubelet", "orchestrator"} +# Unit test build tags +UNIT_TEST_TAGS = {"test"} + # Build type: maps flavor to build tags map build_tags = { AgentFlavor.base: { @@ -150,22 +154,26 @@ "trace-agent": TRACE_AGENT_TAGS, # Test setups "test": AGENT_TEST_TAGS, - "unit-tests": AGENT_TEST_TAGS.union(PROCESS_AGENT_TAGS), + "lint": AGENT_TEST_TAGS.union(PROCESS_AGENT_TAGS), + "unit-tests": AGENT_TEST_TAGS.union(PROCESS_AGENT_TAGS).union(UNIT_TEST_TAGS), }, AgentFlavor.heroku: { "agent": AGENT_HEROKU_TAGS, "process-agent": PROCESS_AGENT_HEROKU_TAGS, "trace-agent": TRACE_AGENT_HEROKU_TAGS, - "unit-tests": AGENT_HEROKU_TAGS, + "lint": AGENT_HEROKU_TAGS, + "unit-tests": AGENT_HEROKU_TAGS.union(UNIT_TEST_TAGS), }, AgentFlavor.iot: { "agent": IOT_AGENT_TAGS, - "unit-tests": IOT_AGENT_TAGS, + "lint": IOT_AGENT_TAGS, + "unit-tests": IOT_AGENT_TAGS.union(UNIT_TEST_TAGS), }, AgentFlavor.dogstatsd: { "dogstatsd": DOGSTATSD_TAGS, "system-tests": AGENT_TAGS, - "unit-tests": DOGSTATSD_TAGS, + "lint": DOGSTATSD_TAGS, + "unit-tests": DOGSTATSD_TAGS.union(UNIT_TEST_TAGS), }, } diff --git a/tasks/libs/junit_upload.py b/tasks/libs/junit_upload.py index c2e91950041c8..70afb89700705 100644 --- a/tasks/libs/junit_upload.py +++ b/tasks/libs/junit_upload.py @@ -10,6 +10,7 @@ from invoke.exceptions import Exit from ..flavor import AgentFlavor +from .pipeline_notifications import DEFAULT_SLACK_CHANNEL, GITHUB_SLACK_MAP CODEOWNERS_ORG_PREFIX = "@DataDog/" REPO_NAME_PREFIX = "github.com/DataDog/datadog-agent/" @@ -78,13 +79,17 @@ def upload_junitxmls(output_dir, owners, flavor, additional_tags=None, job_url=" process_env = os.environ.copy() process_env["CI_JOB_URL"] = job_url for owner in owners: + codeowner = CODEOWNERS_ORG_PREFIX + owner + slack_channel = GITHUB_SLACK_MAP.get(codeowner, DEFAULT_SLACK_CHANNEL)[1:] args = [ "--service", "datadog-agent", "--tags", - 'test.codeowners:["' + CODEOWNERS_ORG_PREFIX + owner + '"]', + f'test.codeowners:["{codeowner}"]', "--tags", f"test.flavor:{flavor}", + "--tags", + f"slack_channel:{slack_channel}", ] if additional_tags: args.extend(additional_tags) @@ -177,3 +182,22 @@ def produce_junit_tar(files, result_path): job_url_info.size = job_url_file.getbuffer().nbytes job_url_file.seek(0) tgz.addfile(job_url_info, job_url_file) + + +def repack_macos_junit_tar(infile, outfile): + with tarfile.open(infile) as infp, tarfile.open(outfile, "w:gz") as outfp, tempfile.TemporaryDirectory() as tempd: + infp.extractall(tempd) + + # write the proper job url and job name + with open(os.path.join(tempd, JOB_URL_FILE_NAME), "w") as fp: + fp.write(os.environ.get("CI_JOB_URL", "")) + with open(os.path.join(tempd, TAGS_FILE_NAME)) as fp: + tags = fp.read() + job_name = os.environ.get("CI_JOB_NAME", "") + tags = tags.replace("ci.job.name:", f"ci.job.name:{job_name}") + with open(os.path.join(tempd, TAGS_FILE_NAME), "w") as fp: + fp.write(tags) + + # pack all files to a new tarball + for f in os.listdir(tempd): + outfp.add(os.path.join(tempd, f), arcname=f) diff --git a/tasks/libs/pipeline_data.py b/tasks/libs/pipeline_data.py index 8e74ae930d9c7..d691d547a46cc 100644 --- a/tasks/libs/pipeline_data.py +++ b/tasks/libs/pipeline_data.py @@ -67,7 +67,7 @@ def get_failed_jobs(project_name, pipeline_id): FailedJobReason.RUNNER, ), ( - re.compile(r'WARNING: Failed to pull image with policy "always":.*:.*\(.*\)'), + re.compile(r'WARNING: Failed to pull image with policy "always":.*\(.*\)'), FailedJobReason.RUNNER, ), # k8s Gitlab runner init failures diff --git a/tasks/libs/pipeline_notifications.py b/tasks/libs/pipeline_notifications.py index b49ff53aa6499..1fe005fc0e022 100644 --- a/tasks/libs/pipeline_notifications.py +++ b/tasks/libs/pipeline_notifications.py @@ -6,6 +6,31 @@ from .common.gitlab import Gitlab, get_gitlab_token from .types import FailedJobType, Test +DEFAULT_SLACK_CHANNEL = "#agent-platform" +GITHUB_SLACK_MAP = { + "@DataDog/agent-platform": DEFAULT_SLACK_CHANNEL, + "@DataDog/container-integrations": "#container-integrations", + "@DataDog/platform-integrations": "#platform-integrations", + "@DataDog/agent-network": "#network-agent", + "@DataDog/agent-security": "#security-and-compliance-agent-ops", + "@DataDog/agent-apm": "#apm-agent", + "@DataDog/infrastructure-integrations": "#infrastructure-integrations", + "@DataDog/processes": "#process-agent-ops", + "@DataDog/agent-core": "#agent-core", + "@DataDog/agent-metrics-logs": "#agent-metrics-logs", + "@DataDog/agent-shared-components": "#agent-shared-components", + "@DataDog/container-app": "#container-app", + "@DataDog/metrics-aggregation": "#metrics-aggregation", + "@DataDog/serverless": "#serverless-agent", + "@DataDog/remote-config": "#remote-config-monitoring", + "@DataDog/agent-all": "#datadog-agent-pipelines", + "@DataDog/ebpf-platform": "#ebpf-platform", + "@DataDog/Networks": "#network-performance-monitoring", + "@DataDog/universal-service-monitoring": "#universal-service-monitoring", + "@DataDog/windows-kernel-integrations": "#windows-kernel-integrations", + "@DataDog/opentelemetry": "#opentelemetry-ops", +} + def read_owners(owners_file): from codeowners import CodeOwners diff --git a/tasks/modules.py b/tasks/modules.py index 13a86da435155..53b6af962a36d 100644 --- a/tasks/modules.py +++ b/tasks/modules.py @@ -125,6 +125,7 @@ def dependency_path(self, agent_version): "test/e2e/containers/otlp_sender": GoModule( "test/e2e/containers/otlp_sender", condition=lambda: False, should_tag=False ), + "test/new-e2e": GoModule("test/new-e2e", condition=lambda: False, should_tag=False), "pkg/quantile": GoModule("pkg/quantile", independent=True), "pkg/obfuscate": GoModule("pkg/obfuscate", independent=True), "pkg/trace": GoModule("pkg/trace", independent=True), diff --git a/tasks/pipeline.py b/tasks/pipeline.py index f3a72fbf84adb..e949eb4395cba 100644 --- a/tasks/pipeline.py +++ b/tasks/pipeline.py @@ -14,7 +14,13 @@ from .libs.common.gitlab import Gitlab, get_gitlab_bot_token, get_gitlab_token from .libs.datadog_api import create_count, send_metrics from .libs.pipeline_data import get_failed_jobs -from .libs.pipeline_notifications import base_message, find_job_owners, get_failed_tests, send_slack_message +from .libs.pipeline_notifications import ( + GITHUB_SLACK_MAP, + base_message, + find_job_owners, + get_failed_tests, + send_slack_message, +) from .libs.pipeline_stats import get_failed_jobs_stats from .libs.pipeline_tools import ( FilteredOutException, @@ -320,30 +326,6 @@ def wait_for_pipeline_from_ref(gitlab, ref): # Tasks to trigger pipeline notifications -GITHUB_SLACK_MAP = { - "@DataDog/agent-platform": "#agent-platform", - "@DataDog/container-integrations": "#container-integrations", - "@DataDog/platform-integrations": "#platform-integrations", - "@DataDog/agent-network": "#network-agent", - "@DataDog/agent-security": "#security-and-compliance-agent-ops", - "@DataDog/agent-apm": "#apm-agent", - "@DataDog/infrastructure-integrations": "#infrastructure-integrations", - "@DataDog/processes": "#process-agent-ops", - "@DataDog/agent-core": "#agent-core", - "@DataDog/agent-metrics-logs": "#agent-metrics-logs", - "@DataDog/agent-shared-components": "#agent-shared-components", - "@DataDog/container-app": "#container-app", - "@DataDog/metrics-aggregation": "#metrics-aggregation", - "@DataDog/serverless": "#serverless-agent", - "@DataDog/remote-config": "#remote-config-monitoring", - "@DataDog/agent-all": "#datadog-agent-pipelines", - "@DataDog/ebpf-platform": "#ebpf-platform", - "@DataDog/Networks": "#networks", - "@DataDog/universal-service-monitoring": "#universal-service-monitoring", - "@DataDog/windows-kernel-integrations": "#windows-kernel-integrations", - "@DataDog/opentelemetry": "#opentelemetry-ops", -} - UNKNOWN_OWNER_TEMPLATE = """The owner `{owner}` is not mapped to any slack channel. Please check for typos in the JOBOWNERS file and/or add them to the Github <-> Slack map. """ diff --git a/tasks/process_agent.py b/tasks/process_agent.py index 66a5fdc000f2d..0b8e107e0455d 100644 --- a/tasks/process_agent.py +++ b/tasks/process_agent.py @@ -65,11 +65,6 @@ def build( build_tags = get_build_tags(build_include, build_exclude) - ## secrets is not supported on windows because the process agent still runs as - ## root. No matter what `get_default_build_tags()` returns, take secrets out. - if sys.platform == 'win32' and "secrets" in build_tags: - build_tags.remove("secrets") - # TODO static option cmd = 'go build -mod={go_mod} {race_opt} {build_type} -tags "{go_build_tags}" ' cmd += '-o {agent_bin} -gcflags="{gcflags}" -ldflags="{ldflags}" {REPO_PATH}/cmd/process-agent' @@ -159,6 +154,7 @@ def gen_mocks(ctx): """ interfaces = { + "./cmd/process-agent": ["Submitter"], "./pkg/process/checks": ["Check", "CheckWithRealTime"], "./pkg/process/net": ["SysProbeUtil"], "./pkg/process/procutil": ["Probe"], diff --git a/tasks/security_agent.py b/tasks/security_agent.py index f7383ccfd896c..d290c8abd766b 100644 --- a/tasks/security_agent.py +++ b/tasks/security_agent.py @@ -18,7 +18,6 @@ CURRENT_ARCH, build_cws_object_files, check_for_ninja, - generate_runtime_files, ninja_define_ebpf_compiler, ninja_define_exe_compiler, ) @@ -33,7 +32,6 @@ get_go_version, get_gopath, get_version, - get_version_numeric_only, ) BIN_DIR = os.path.join(".", "bin") @@ -58,23 +56,6 @@ def build( """ ldflags, gcflags, env = get_build_flags(ctx, major_version=major_version, python_runtimes='3', static=static) - # generate windows resources - if sys.platform == 'win32': - windres_target = "pe-x86-64" - if arch == "x86": - env["GOARCH"] = "386" - windres_target = "pe-i386" - - ver = get_version_numeric_only(ctx, major_version=major_version) - maj_ver, min_ver, patch_ver = ver.split(".") - - ctx.run( - f"windmc --target {windres_target} -r cmd/security-agent/windows_resources cmd/security-agent/windows_resources/security-agent-msg.mc" - ) - ctx.run( - f"windres --define MAJ_VER={maj_ver} --define MIN_VER={min_ver} --define PATCH_VER={patch_ver} -i cmd/security-agent/windows_resources/security-agent.rc --target {windres_target} -O coff -o cmd/security-agent/rsrc.syso" - ) - # TODO use pkg/version for this main = "main." ld_vars = { @@ -174,7 +155,7 @@ def ninja_ebpf_probe_syscall_tester(nw, build_dir): rule="ebpfclang", variables={ "target": "-target bpf", - "flags": [f"-D__{uname_m}__", f"-isystem/usr/include/{uname_m}-linux-gnu"], + "flags": [f"-D__{uname_m}__", f"-isystem/usr/include/{uname_m}-linux-gnu", "-DBPF_NO_GLOBAL_DATA"], }, ) @@ -674,7 +655,6 @@ def go_generate_check(ctx): [cws_go_generate], [generate_cws_documentation], [gen_mocks], - [generate_runtime_files], ] failing_tasks = [] diff --git a/tasks/system_probe.py b/tasks/system_probe.py index 15dd5f03c4d3a..0636fbac38e5b 100644 --- a/tasks/system_probe.py +++ b/tasks/system_probe.py @@ -5,6 +5,7 @@ import platform import re import shutil +import string import sys import tarfile import tempfile @@ -211,7 +212,7 @@ def ninja_network_ebpf_programs(nw, build_dir, co_re_build_dir): network_flags = "-Ipkg/network/ebpf/c -g" network_co_re_flags = f"-I{network_co_re_dir}" - network_programs = ["dns", "offset-guess", "tracer", "http"] + network_programs = ["dns", "offset-guess", "tracer", "http", "usm_events_test"] network_co_re_programs = [] for prog in network_programs: @@ -226,12 +227,12 @@ def ninja_network_ebpf_programs(nw, build_dir, co_re_build_dir): def ninja_container_integrations_ebpf_programs(nw, co_re_build_dir): - container_integrations_co_re_dir = os.path.join("pkg", "collector", "corechecks", "ebpf", "c", "co-re") + container_integrations_co_re_dir = os.path.join("pkg", "collector", "corechecks", "ebpf", "c", "runtime") container_integrations_co_re_flags = f"-I{container_integrations_co_re_dir}" container_integrations_co_re_programs = ["oom-kill"] for prog in container_integrations_co_re_programs: - infile = os.path.join(container_integrations_co_re_dir, f"{prog}.c") + infile = os.path.join(container_integrations_co_re_dir, f"{prog}-kern.c") outfile = os.path.join(co_re_build_dir, f"{prog}.o") ninja_ebpf_co_re_program(nw, infile, outfile, {"flags": container_integrations_co_re_flags}) @@ -263,7 +264,6 @@ def ninja_runtime_compilation_files(nw): rule="headerincl", ) rc_outputs.extend([c_file, hash_file]) - nw.build(rule="phony", inputs=rc_outputs, outputs=["runtime-compilation"]) def ninja_cgo_type_files(nw, windows): @@ -311,6 +311,9 @@ def ninja_cgo_type_files(nw, windows): "pkg/network/telemetry/telemetry_types.go": [ "pkg/ebpf/c/telemetry_types.h", ], + "pkg/network/protocols/events/types.go": [ + "pkg/network/ebpf/c/protocols/events-types.h", + ], } nw.rule( name="godefs", @@ -569,7 +572,7 @@ def chdir(dirname=None): @task -def kitchen_prepare(ctx, windows=is_windows, kernel_release=None): +def kitchen_prepare(ctx, windows=is_windows, kernel_release=None, ci=False): """ Compile test suite for kitchen """ @@ -644,6 +647,9 @@ def kitchen_prepare(ctx, windows=is_windows, kernel_release=None): if os.path.exists(cf): shutil.copy(cf, files_dir) + if not ci: + kitchen_prepare_btfs(ctx, files_dir) + ctx.run(f"go build -o {files_dir}/test2json -ldflags=\"-s -w\" cmd/test2json", env={"CGO_ENABLED": "0"}) @@ -895,6 +901,7 @@ def get_ebpf_build_flags(): '-DCONFIG_64BIT', '-D__BPF_TRACING__', '-DKBUILD_MODNAME=\\"ddsysprobe\\"', + '-DCOMPILE_PREBUILT', ] ) flags.extend( @@ -927,18 +934,17 @@ def get_ebpf_build_flags(): def get_co_re_build_flags(): flags = get_ebpf_build_flags() + flags.remove('-DCOMPILE_PREBUILT') flags.remove('-DCONFIG_64BIT') flags.remove('-include pkg/ebpf/c/asm_goto_workaround.h') - flags.remove('-Ipkg/ebpf/c') arch = get_kernel_arch() - co_re_dir = os.path.join(".", "pkg", "ebpf", "c", "co-re") flags.extend( [ f"-D__TARGET_ARCH_{arch}", + "-DCOMPILE_CORE", '-emit-llvm', '-g', - f"-I{co_re_dir}", ] ) @@ -953,8 +959,12 @@ def get_kernel_headers_flags(kernel_release=None, minimal_kernel_release=None): def check_for_inline(ctx): - for p in [ebpf_check_source_file(ctx, parallel_build=True, src_file=f) for f in get_ebpf_targets()]: - p.join() + for f in get_ebpf_targets(): + if os.path.basename(f) == "bpf_helpers.h": + continue + + for p in [ebpf_check_source_file(ctx, parallel_build=True, src_file=f)]: + p.join() def ebpf_check_source_file(ctx, parallel_build, src_file): @@ -1047,8 +1057,8 @@ def build_object_files( ctx.run("which llvm-strip") check_for_inline(ctx) - ctx.run(f"mkdir -p {build_dir}/runtime") - ctx.run(f"mkdir -p {build_dir}/co-re") + ctx.run(f"mkdir -p -m 0755 {build_dir}/runtime") + ctx.run(f"mkdir -p -m 0755 {build_dir}/co-re") run_ninja( ctx, @@ -1066,6 +1076,7 @@ def build_object_files( ctx.run(f"{sudo} mkdir -p {EMBEDDED_SHARE_DIR}") ctx.run(f"{sudo} cp -R {build_dir}/* {EMBEDDED_SHARE_DIR}") ctx.run(f"{sudo} chown root:root -R {EMBEDDED_SHARE_DIR}") + ctx.run(f"{sudo} find {EMBEDDED_SHARE_DIR} ! -type d | {sudo} xargs chmod 0644") def build_cws_object_files( @@ -1102,11 +1113,6 @@ def clean_object_files( ) -# deprecated: this function is only kept to prevent breaking security-agent.go-generate-check -def generate_runtime_files(ctx): - run_ninja(ctx, explain=True, target="runtime-compilation") - - @task def generate_lookup_tables(ctx, windows=is_windows): if windows: @@ -1131,6 +1137,14 @@ def check_for_ninja(ctx): ctx.run("which ninja") +def is_bpftool_compatible(ctx): + try: + ctx.run("bpftool gen min_core_btf 2>&1 | grep -q \"'min_core_btf' needs at least 3 arguments, 0 found\"") + return True + except Exception: + return False + + @contextlib.contextmanager def tempdir(): """ @@ -1143,6 +1157,51 @@ def tempdir(): shutil.rmtree(dirpath) +def kitchen_prepare_btfs(ctx, files_dir, arch=CURRENT_ARCH): + btf_dir = "/opt/datadog-agent/embedded/share/system-probe/ebpf/co-re/btf" + + if arch == "x64": + arch = "x86_64" + elif arch == "arm64": + arch = "aarch64" + + if not os.path.exists(f"{btf_dir}/kitchen-btfs-{arch}.tar.xz"): + exit("BTFs for kitchen test environments not found. Please update & re-provision your dev VM.") + + sudo = "sudo" if not is_root() else "" + ctx.run(f"{sudo} chmod -R 0777 {btf_dir}") + + if not os.path.exists(f"{btf_dir}/kitchen-btfs-{arch}"): + ctx.run( + f"mkdir {btf_dir}/kitchen-btfs-{arch} && " + + f"tar xf {btf_dir}/kitchen-btfs-{arch}.tar.xz -C {btf_dir}/kitchen-btfs-{arch}" + ) + + can_minimize = True + if not is_bpftool_compatible(ctx): + print( + "Cannot minimize BTFs: bpftool version 6 or higher is required: preparing kitchen environment with full sized BTFs instead." + ) + can_minimize = False + + if can_minimize: + co_re_programs = " ".join(glob.glob("/opt/datadog-agent/embedded/share/system-probe/ebpf/co-re/*.o")) + generate_minimized_btfs( + ctx, + source_dir=f"{btf_dir}/kitchen-btfs-{arch}", + output_dir=f"{btf_dir}/minimized-btfs", + input_bpf_programs=co_re_programs, + ) + + ctx.run( + f"cd {btf_dir}/minimized-btfs && " + + "tar -cJf minimized-btfs.tar.xz * && " + + f"mv minimized-btfs.tar.xz {files_dir}" + ) + else: + ctx.run(f"cp {btf_dir}/kitchen-btfs-{arch}.tar.xz {files_dir}/minimized-btfs.tar.xz") + + @task def generate_minimized_btfs( ctx, @@ -1163,28 +1222,60 @@ def generate_minimized_btfs( return ctx.run(f"mkdir -p {output_dir}") - for root, dirs, files in os.walk(source_dir): - path_from_root = os.path.relpath(root, source_dir) - - for dir in dirs: - output_subdir = os.path.join(output_dir, path_from_root, dir) - ctx.run(f"mkdir -p {output_subdir}") - for file in files: - if not file.endswith(".tar.xz"): - continue - - btf_filename = file[: -len(".tar.xz")] - compressed_source_btf_path = os.path.join(root, file) - output_btf_path = os.path.join(output_dir, path_from_root, btf_filename) - compressed_output_btf_path = output_btf_path + ".tar.xz" - - ctx.run(f"tar -xf {compressed_source_btf_path}") - ctx.run(f"bpftool gen min_core_btf {btf_filename} {output_btf_path} {input_bpf_programs}") + check_for_ninja(ctx) - tar_working_directory = os.path.join(output_dir, path_from_root) - ctx.run(f"tar -C {tar_working_directory} -cJf {compressed_output_btf_path} {btf_filename}") - ctx.run(f"rm {output_btf_path}") + ninja_file_path = os.path.join(ctx.cwd, 'generate-minimized-btfs.ninja') + with open(ninja_file_path, 'w') as ninja_file: + nw = NinjaWriter(ninja_file, width=180) + + nw.rule(name="decompress_btf", command="tar -xf $in -C $target_directory") + nw.rule(name="minimize_btf", command="bpftool gen min_core_btf $in $out $input_bpf_programs") + nw.rule(name="compress_minimized_btf", command="tar -cJf $out -C $tar_working_directory $rel_in && rm $in") + + for root, dirs, files in os.walk(source_dir): + path_from_root = os.path.relpath(root, source_dir) + + for d in dirs: + output_subdir = os.path.join(output_dir, path_from_root, d) + ctx.run(f"mkdir -p {output_subdir}") + + for file in files: + if not file.endswith(".tar.xz"): + continue + + btf_filename = file[: -len(".tar.xz")] + minimized_btf_path = os.path.join(output_dir, path_from_root, btf_filename) + + nw.build( + rule="decompress_btf", + inputs=[os.path.join(root, file)], + outputs=[os.path.join(root, btf_filename)], + variables={ + "target_directory": root, + }, + ) + + nw.build( + rule="minimize_btf", + inputs=[os.path.join(root, btf_filename)], + outputs=[minimized_btf_path], + variables={ + "input_bpf_programs": input_bpf_programs, + }, + ) + + nw.build( + rule="compress_minimized_btf", + inputs=[minimized_btf_path], + outputs=[f"{minimized_btf_path}.tar.xz"], + variables={ + "tar_working_directory": os.path.join(output_dir, path_from_root), + "rel_in": btf_filename, + }, + ) + + ctx.run(f"ninja -f {ninja_file_path}") @task @@ -1213,3 +1304,28 @@ def print_failed_tests(_, output_dir): if fail_count > 0: raise Exit(code=1) + + +@task +def save_test_dockers(ctx, output_dir, arch, windows=is_windows): + import yaml + + if windows: + return + + docker_compose_paths = glob.glob("./pkg/network/protocols/*/testdata/docker-compose.yml") + # Add relative docker-compose paths + # For example: + # docker_compose_paths.append("./pkg/network/protocols/dockers/testdata/docker-compose.yml") + + images = set() + for docker_compose_path in docker_compose_paths: + with open(docker_compose_path, "r") as f: + docker_compose = yaml.safe_load(f.read()) + for component in docker_compose["services"]: + images.add(docker_compose["services"][component]["image"]) + + for image in images: + output_path = image.translate(str.maketrans('', '', string.punctuation)) + ctx.run(f"docker pull --platform linux/{arch} {image}") + ctx.run(f"docker save {image} > {os.path.join(output_dir, output_path)}.tar") diff --git a/tasks/test.py b/tasks/test.py index b93dc3774565c..d709aa138e549 100644 --- a/tasks/test.py +++ b/tasks/test.py @@ -23,7 +23,7 @@ from .flavor import AgentFlavor from .go import golangci_lint from .libs.copyright import CopyrightLinter -from .libs.junit_upload import add_flavor_to_junitxml, junit_upload_from_tgz, produce_junit_tar +from .libs.junit_upload import add_flavor_to_junitxml, junit_upload_from_tgz, produce_junit_tar, repack_macos_junit_tar from .modules import DEFAULT_MODULES, GoModule from .trace_agent import integration_tests as trace_integration_tests from .utils import DEFAULT_BRANCH, get_build_flags @@ -161,7 +161,7 @@ def test_flavor( failed_modules = [] junit_files = [] - args["go_build_tags"] = " ".join(build_tags + ["test"]) + args["go_build_tags"] = " ".join(build_tags) junit_file_flag = "" junit_file = f"junit-out-{flavor.name}.xml" @@ -288,6 +288,7 @@ def test( targets=None, flavors=None, coverage=False, + print_coverage=False, build_include=None, build_exclude=None, verbose=False, @@ -326,7 +327,13 @@ def test( modules, flavors = process_input_args(module, targets, flavors) - flavors_build_tags = { + linter_tags = { + f: compute_build_tags_for_flavor( + flavor=f, build="lint", arch=arch, build_include=build_include, build_exclude=build_exclude + ) + for f in flavors + } + unit_tests_tags = { f: compute_build_tags_for_flavor( flavor=f, build="unit-tests", arch=arch, build_include=build_include, build_exclude=build_exclude ) @@ -340,7 +347,7 @@ def test( if skip_linters: print("--- [skipping Go linters]") else: - for flavor, build_tags in flavors_build_tags.items(): + for flavor, build_tags in linter_tags.items(): lint_flavor( ctx, modules=modules, flavor=flavor, build_tags=build_tags, arch=arch, rtloader_root=rtloader_root ) @@ -421,7 +428,7 @@ def test( failed_modules = {} junit_files = [] - for flavor, build_tags in flavors_build_tags.items(): + for flavor, build_tags in unit_tests_tags.items(): junit_files_for_flavor, failed_modules_for_flavor = test_flavor( ctx, flavor=flavor, @@ -445,7 +452,7 @@ def test( if junit_tar: produce_junit_tar(junit_files, junit_tar) - if coverage: + if coverage and print_coverage: for flavor in flavors: coverage_flavor(ctx, flavor, modules) @@ -730,3 +737,12 @@ def junit_upload(_, tgz_path): """ junit_upload_from_tgz(tgz_path) + + +@task +def junit_macos_repack(_, infile, outfile): + """ + Repacks JUnit tgz file from macOS Github Action run, so it would + containt correct job name and job URL. + """ + repack_macos_junit_tar(infile, outfile) diff --git a/tasks/vscode.py b/tasks/vscode.py index 6b17dbbda6801..e98676cf896b4 100644 --- a/tasks/vscode.py +++ b/tasks/vscode.py @@ -14,6 +14,8 @@ VSCODE_DIR = ".vscode" VSCODE_FILE = "settings.json" +VSCODE_DEVCONTAINER_DIR = ".devcontainer" +VSCODE_DEVCONTAINER_FILE = "devcontainer.json" @task @@ -56,3 +58,73 @@ def set_buildtags( with open(fullpath, "w") as sf: json.dump(settings, sf, indent=4, sort_keys=False, separators=(',', ': ')) + + +@task +def setup_devcontainer( + _, + target="agent", + build_include=None, + build_exclude=None, + flavor=AgentFlavor.base.name, + arch='x64', + image='', +): + """ + Generate or Modify devcontainer settings file for this project. + """ + flavor = AgentFlavor[flavor] + if target not in build_tags[flavor].keys(): + print("Must choose a valid target. Valid targets are: \n") + print(f'{", ".join(build_tags[flavor].keys())} \n') + return + + build_include = ( + get_default_build_tags(build=target, arch=arch, flavor=flavor) + if build_include is None + else filter_incompatible_tags(build_include.split(","), arch=arch) + ) + build_exclude = [] if build_exclude is None else build_exclude.split(",") + use_tags = get_build_tags(build_include, build_exclude) + + if not os.path.exists(VSCODE_DEVCONTAINER_DIR): + os.makedirs(VSCODE_DEVCONTAINER_DIR) + + devcontainer = {} + fullpath = os.path.join(VSCODE_DEVCONTAINER_DIR, VSCODE_DEVCONTAINER_FILE) + if os.path.exists(fullpath): + with open(fullpath, "r") as sf: + devcontainer = json.load(sf, object_pairs_hook=OrderedDict) + + local_build_tags = ",".join(use_tags) + + devcontainer["name"] = "Datadog-Agent-DevEnv" + if image: + devcontainer["image"] = image + if devcontainer.get("build"): + del devcontainer["build"] + else: + devcontainer["build"] = { + "dockerfile": "Dockerfile", + "args": {}, + } + if devcontainer.get("image"): + del devcontainer["image"] + devcontainer["runArgs"] = ["--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined"] + devcontainer["remoteUser"] = "datadog" + devcontainer["customizations"] = { + "vscode": { + "settings": { + "go.toolsManagement.checkForUpdates": "local", + "go.useLanguageServer": True, + "go.gopath": "/home/datadog/go", + "go.goroot": "/usr/local/go", + "go.buildTags": local_build_tags, + "go.testTags": local_build_tags, + }, + "extensions": ["golang.Go"], + } + } + + with open(fullpath, "w") as sf: + json.dump(devcontainer, sf, indent=4, sort_keys=False, separators=(',', ': ')) diff --git a/tasks/winbuildscripts/Generate-Chocolatey-Package.ps1 b/tasks/winbuildscripts/Generate-Chocolatey-Package.ps1 index 35d023b3a7ac7..d8129b5dee969 100644 --- a/tasks/winbuildscripts/Generate-Chocolatey-Package.ps1 +++ b/tasks/winbuildscripts/Generate-Chocolatey-Package.ps1 @@ -36,7 +36,7 @@ if ($rawAgentVersion -match $releaseCandidatePattern) { $agentVersion = "{0}-rc-{1}" -f $agentVersionMatches.Matches.Groups[1], $agentVersionMatches.Matches.Groups[2].Value # We don't have release notes for RCs but this way the user can always see what commits are included in this RC $releaseNotes = "https://github.com/DataDog/datadog-agent/releases/tag/{0}-rc.{1}" -f $agentVersionMatches.Matches.Groups[1], $agentVersionMatches.Matches.Groups[2] - $url = "https://s3.amazonaws.com/dd-agent-mstesting/builds/beta/datadog-agent-$($agentVersionMatches.Matches.Groups[1])-rc.$($agentVersionMatches.Matches.Groups[2])-1-x86_64.msi" + $url = "https://s3.amazonaws.com/dd-agent-mstesting/builds/beta/ddagent-cli-$($agentVersionMatches.Matches.Groups[1])-rc.$($agentVersionMatches.Matches.Groups[2]).msi" } elseif ($rawAgentVersion -match $develPattern) { if ($installMethod -eq "online") { # We don't publish online chocolatey packages for dev branches, error out @@ -61,6 +61,10 @@ Invoke-WebRequest -Uri "https://raw.githubusercontent.com/DataDog/datadog-agent/ Write-Host "Generating Chocolatey $installMethod package version $agentVersion in $outputDirectory" +if ([System.Net.WebRequest]::Create($url).GetResponse().StatusCode -ne 200) { + Write-Error "Package $($url) doesn't exists, cannot continue publishing process." +} + if (!(Test-Path $outputDirectory)) { New-Item -ItemType Directory -Path $outputDirectory } @@ -71,3 +75,6 @@ if ($installMethod -eq "online") { } choco pack --out=$outputDirectory $nuspecFile package_version=$agentVersion release_notes=$releaseNotes copyright=$copyright + +# restore installScript (useful for local testing/deployment) +git checkout $installScript diff --git a/tasks/winbuildscripts/Update-Winget.ps1 b/tasks/winbuildscripts/Update-Winget.ps1 index 84302a0de3b24..7f6772c2a4dd4 100644 --- a/tasks/winbuildscripts/Update-Winget.ps1 +++ b/tasks/winbuildscripts/Update-Winget.ps1 @@ -16,7 +16,7 @@ if ($m) { } if ($rc) { Write-Host ("Updating Winget manifest for Agent version ${agentVersion}-rc.${rc}") - wingetcreate.exe update --urls "https://s3.amazonaws.com/dd-agent-mstesting/builds/beta/datadog-agent-${agentVersion}-rc.${rc}-1-x86_64.msi" --version "${agentVersion}-rc.${rc}" --submit --token "${env:WINGET_GITHUB_ACCESS_TOKEN}" "Datadog.Agent" + wingetcreate.exe update --urls "https://s3.amazonaws.com/dd-agent-mstesting/builds/beta/ddagent-cli-${agentVersion}-rc.${rc}.msi" --version "${agentVersion}-rc.${rc}" --submit --token "${env:WINGET_GITHUB_ACCESS_TOKEN}" "Datadog.Agent" } else { Write-Host ("Updating Winget manifest for Agent version ${agentVersion}.1") wingetcreate.exe update --urls "https://s3.amazonaws.com/ddagent-windows-stable/ddagent-cli-${agentVersion}.msi" --version "${agentVersion}.1" --submit --token "${env:WINGET_GITHUB_ACCESS_TOKEN}" "Datadog.Agent" diff --git a/tasks/winbuildscripts/dobuild.bat b/tasks/winbuildscripts/dobuild.bat index bac5b1edd0140..9252b49f0d85f 100644 --- a/tasks/winbuildscripts/dobuild.bat +++ b/tasks/winbuildscripts/dobuild.bat @@ -2,10 +2,12 @@ @echo RELEASE_VERSION %RELEASE_VERSION% @echo MAJOR_VERSION %MAJOR_VERSION% @echo PY_RUNTIMES %PY_RUNTIMES% +@echo GO_VERSION_CHECK %GO_VERSION_CHECK% if NOT DEFINED RELEASE_VERSION set RELEASE_VERSION=%~1 if NOT DEFINED MAJOR_VERSION set MAJOR_VERSION=%~2 if NOT DEFINED PY_RUNTIMES set PY_RUNTIMES=%~3 +if NOT DEFINED GO_VERSION_CHECK set GO_VERSION_CHECK=%~4 set OMNIBUS_BUILD=agent.omnibus-build set OMNIBUS_ARGS=--python-runtimes "%PY_RUNTIMES%" @@ -45,7 +47,9 @@ cd \dev\go\src\github.com\DataDog\datadog-agent || exit /b 101 pip3 install -r requirements.txt || exit /b 102 inv -e deps || exit /b 103 -inv check-go-version || exit /b 104 +if "%GO_VERSION_CHECK%" == "true" ( + inv -e check-go-version || exit /b 104 +) @echo "inv -e %OMNIBUS_BUILD% %OMNIBUS_ARGS% --skip-deps --major-version %MAJOR_VERSION% --release-version %RELEASE_VERSION%" inv -e %OMNIBUS_BUILD% %OMNIBUS_ARGS% --skip-deps --major-version %MAJOR_VERSION% --release-version %RELEASE_VERSION% || exit /b 105 diff --git a/tasks/winbuildscripts/sysprobe.ps1 b/tasks/winbuildscripts/sysprobe.ps1 index 48859600d3f03..b4cb461b22843 100644 --- a/tasks/winbuildscripts/sysprobe.ps1 +++ b/tasks/winbuildscripts/sysprobe.ps1 @@ -37,7 +37,7 @@ if ($err -ne 0) { [Environment]::Exit($err) } -& inv -e system-probe.kitchen-prepare +& inv -e system-probe.kitchen-prepare --ci $err = $LASTEXITCODE Write-Host Test result is $err diff --git a/test/benchmarks/apm_scripts/analyze-results.sh b/test/benchmarks/apm_scripts/analyze-results.sh new file mode 100755 index 0000000000000..d01799d7b017e --- /dev/null +++ b/test/benchmarks/apm_scripts/analyze-results.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +ARTIFACTS_DIR="/artifacts/${CI_JOB_ID}" +REPORTS_DIR="$(pwd)/reports/" +mkdir "${REPORTS_DIR}" || : + +source /benchmark-analyzer/.venv/bin/activate +cd /benchmark-analyzer + +./benchmark_analyzer convert \ + --framework=GoBench \ + --outpath="pr.json" \ + --extra-params="{\"trace_agent\":\"${CI_COMMIT_REF_NAME}\"}" \ + "${ARTIFACTS_DIR}/pr_bench.txt" + +./benchmark_analyzer convert \ + --framework=GoBench \ + --outpath="main.json" \ + --extra-params="{\"trace_agent\":\"main\"}" \ + "${ARTIFACTS_DIR}/main_bench.txt" + +./benchmark_analyzer compare pairwise --outpath ${REPORTS_DIR}/report.md --format md-nodejs main.json pr.json +./benchmark_analyzer compare pairwise --outpath ${REPORTS_DIR}/report_full.html --format html main.json pr.json + diff --git a/test/benchmarks/apm_scripts/capture-hardware-software-info.sh b/test/benchmarks/apm_scripts/capture-hardware-software-info.sh new file mode 100755 index 0000000000000..b7db7081b4c13 --- /dev/null +++ b/test/benchmarks/apm_scripts/capture-hardware-software-info.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +REPORTS_DIR="$(pwd)/reports/" +mkdir "${REPORTS_DIR}" || : + +ARTIFACTS_DIR="/artifacts/${CI_JOB_ID}" +mkdir -p "${ARTIFACTS_DIR}" && cd "${ARTIFACTS_DIR}" + +# Collect software information + +(which top && top -b -n 1 > top.txt) || : +(which uname && uname -a > uname.txt) || : +(which ldconfig && ldconfig -v > ldconfig.txt) || : +(which sysctl && sysctl -a > sysctl.txt) || : + +# Collect hardware information + +(which lscpu && lscpu -e > lscpu-e.txt) || : +(which lscpu && lscpu > lscpu.txt) || : +(which hwinfo && hwinfo --short > hwinfo-short.txt) || : +(which hwinfo && hwinfo > hwinfo-full.txt) || : +#cpupower frequency-info > cpupower-frequency-info.txt +#turbostat -n 1 > turbostat.txt + +# Save all collected information to Gitlab reports as well + +cp * "${REPORTS_DIR}" diff --git a/test/benchmarks/apm_scripts/post-pr-comment.sh b/test/benchmarks/apm_scripts/post-pr-comment.sh new file mode 100755 index 0000000000000..07aeccdaa0c21 --- /dev/null +++ b/test/benchmarks/apm_scripts/post-pr-comment.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +REPORTS_DIR="$(pwd)/reports/" + +cat ${REPORTS_DIR}/report.md | /usr/local/bin/pr-commenter --for-repo="$CI_PROJECT_NAME" --for-pr="$CI_COMMIT_REF_NAME" --header="Benchmarks" diff --git a/test/benchmarks/apm_scripts/run-benchmarks.sh b/test/benchmarks/apm_scripts/run-benchmarks.sh new file mode 100755 index 0000000000000..66b8b9707d8aa --- /dev/null +++ b/test/benchmarks/apm_scripts/run-benchmarks.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +ARTIFACTS_DIR="/artifacts/${CI_JOB_ID}" +mkdir -p "${ARTIFACTS_DIR}" + +inv trace-agent.benchmarks --output="${ARTIFACTS_DIR}/pr_bench.txt" --bench="BenchmarkAgentTraceProcessing$" + +git checkout main +inv trace-agent.benchmarks --output="${ARTIFACTS_DIR}/main_bench.txt" --bench="BenchmarkAgentTraceProcessing$" + +git checkout "${CI_COMMIT_REF_NAME}" # (Only needed while these changes aren't merged to main) diff --git a/test/benchmarks/apm_scripts/upload-results-to-s3.sh b/test/benchmarks/apm_scripts/upload-results-to-s3.sh new file mode 100755 index 0000000000000..e39eaa4ebc567 --- /dev/null +++ b/test/benchmarks/apm_scripts/upload-results-to-s3.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +PROJECT="${CI_PROJECT_NAME:-$CI_PROJECT_NAME}" +BRANCH="${CI_COMMIT_REF_NAME:-$CI_COMMIT_REF_NAME}" + +S3_URL=s3://relenv-benchmarking-data/${PROJECT}/${BRANCH}/${CI_JOB_ID}/ + +aws s3 cp --recursive --acl bucket-owner-full-control /artifacts/${CI_JOB_ID}/ $S3_URL diff --git a/test/e2e/containers/fake_datadog/README.md b/test/e2e/containers/fake_datadog/README.md index 7efa619808784..c04b70617966b 100644 --- a/test/e2e/containers/fake_datadog/README.md +++ b/test/e2e/containers/fake_datadog/README.md @@ -178,6 +178,7 @@ db.series.aggregate([ This tool can be used as a debug proxy to inspect agent payloads. Here is how to do it for Kubernetes. +##### K8S - run the following from within this folder: ```console @@ -198,3 +199,42 @@ kubectl apply -f fake-datadog.yaml # if you deployed the service & deployment in a separate namespace, add `..svc.cluster.local value: "http://fake-datadog" ``` + +##### Docker + +1. Create a `agent-docker-compose-extra.yaml` file to override url and V2 series environment variables + +```yaml +services: + agent: # use your agent service name here + environment: + DD_DD_URL: "http://fake-datadog" + DD_USE_V2_API_SERIES: false +``` + +- `agent` is the docker service name used for Datadog Agent. Rename it if you are using another service id. +- `DD_DD_URL` overrides the URL for metric submission +- `DD_USE_V2_API_SERIES` force using v1 APIs + +1. Run `docker compose up` passing datadog agent compose, agent extra compose and fake datadog compose + +```bash +docker compose up -f "${PATH_TO_AGENT_COMPOSE}.yaml" -f "fake-datadog.yaml" -f "agent-docker-compose-extra.yaml" +``` + +1. Query `datadog` on `mongo` service, reachable from host at `localhost:27017` and from another container at `mongo:27017` + +##### VM + +1. Create `fake-datadog` compose + +```bash +docker compose up -f "fake-datadog.yaml" +``` + +1. Configure the agent to send requests to `fake-datadog` using `V1` endpoint passing following environment variables + +```txt +DD_DD_URL="http://fake-datadog" +DD_USE_V2_API_SERIES=false +``` diff --git a/test/e2e/containers/fake_datadog/docker-compose.yaml b/test/e2e/containers/fake_datadog/docker-compose.yaml new file mode 100644 index 0000000000000..eb4ff70532c8d --- /dev/null +++ b/test/e2e/containers/fake_datadog/docker-compose.yaml @@ -0,0 +1,13 @@ +version: "3.9" +services: + fake-datadog: + image: "datadog/fake-datadog:20220621" + ports: + - "8080:80" + - "27017:27017" + container_name: fake-datadog + mongo: + image: "mongo:5.0" + container_name: mongo + network_mode: "service:fake-datadog" + diff --git a/test/e2e/cws-tests/requirements.txt b/test/e2e/cws-tests/requirements.txt index 128f2fe21cf8b..1e6cb0efb4a0c 100644 --- a/test/e2e/cws-tests/requirements.txt +++ b/test/e2e/cws-tests/requirements.txt @@ -1,5 +1,5 @@ kubernetes==25.3.0 -datadog-api-client==2.6.0 +datadog-api-client==2.7.0 pyaml==21.10.1 docker==6.0.1 retry==0.9.2 diff --git a/test/e2e/cws-tests/tests/lib/config.py b/test/e2e/cws-tests/tests/lib/config.py index a1d9c094b59d0..6db3828c2cd04 100644 --- a/test/e2e/cws-tests/tests/lib/config.py +++ b/test/e2e/cws-tests/tests/lib/config.py @@ -25,7 +25,7 @@ def gen_datadog_agent_config(hostname="myhost", log_level="INFO", tags=None): if not tags: tags = [] - data = {"log_level": log_level, "hostname": hostname, "tags": tags} + data = {"log_level": log_level, "hostname": hostname, "tags": tags, "security_agent.remote_workloadmeta": True} yaml.dump(data, fp) fp.close() diff --git a/test/integration/corechecks/docker/main_test.go b/test/integration/corechecks/docker/main_test.go index 5a120f1bdbd20..02f48b3635f6b 100644 --- a/test/integration/corechecks/docker/main_test.go +++ b/test/integration/corechecks/docker/main_test.go @@ -16,6 +16,7 @@ import ( log "github.com/cihub/seelog" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/collector/check" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/containers/docker" "github.com/DataDog/datadog-agent/pkg/config" @@ -137,9 +138,9 @@ func doRun(m *testing.M) int { sender.SetupAcceptAll() // Setup docker check - dockerCfg := []byte(dockerCfgString) - dockerInitCfg := []byte("") - dockerCheck.Configure(dockerCfg, dockerInitCfg, "test") + dockerCfg := integration.Data(dockerCfgString) + dockerInitCfg := integration.Data("") + dockerCheck.Configure(integration.FakeConfigHash, dockerCfg, dockerInitCfg, "test") dockerCheck.Run() return m.Run() diff --git a/test/integration/serverless/log_normalize.py b/test/integration/serverless/log_normalize.py new file mode 100644 index 0000000000000..c018983ad9130 --- /dev/null +++ b/test/integration/serverless/log_normalize.py @@ -0,0 +1,188 @@ +import argparse +import json +import re + + +def normalize_metrics(stage): + return [ + replace(r'raise Exception', r'\n'), + require(r'BEGINMETRIC.*ENDMETRIC'), + exclude(r'BEGINMETRIC'), + exclude(r'ENDMETRIC'), + replace(r'(ts":)[0-9]{10}', r'\1XXX'), + replace(r'(min":)[0-9\.e\-]{1,30}', r'\1XXX'), + replace(r'(max":)[0-9\.e\-]{1,30}', r'\1XXX'), + replace(r'(cnt":)[0-9\.e\-]{1,30}', r'\1XXX'), + replace(r'(avg":)[0-9\.e\-]{1,30}', r'\1XXX'), + replace(r'(sum":)[0-9\.e\-]{1,30}', r'\1XXX'), + replace(r'(k":\[)[0-9\.e\-]{1,30}', r'\1XXX'), + replace(r'(datadog-nodev)[0-9]+\.[0-9]+\.[0-9]+', r'\1X.X.X'), + replace(r'(datadog_lambda:v)[0-9]+\.[0-9]+\.[0-9]+', r'\1X.X.X'), + replace(r'dd_lambda_layer:datadog-go[0-9.]{1,}', r'dd_lambda_layer:datadog-gox.x.x'), + replace(r'(dd_lambda_layer:datadog-python)[0-9_]+\.[0-9]+\.[0-9]+', r'\1X.X.X'), + replace(r'(serverless.lambda-extension.integration-test.count)[0-9\.]+', r'\1'), + replace(r'(architecture:)(x86_64|arm64)', r'\1XXX'), + replace(stage, 'XXXXXX'), + exclude(r'[ ]$'), + sort_by(lambda log: (log["metric"], "cold_start:true" in log["tags"])), + ] + + +def normalize_logs(stage): + return [ + require(r'BEGINLOG.*ENDLOG'), + exclude(r'BEGINLOG'), + exclude(r'ENDLOG'), + replace(r'("timestamp":\s*?)\d{13}', r'\1"XXX"'), + replace(r'\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}:\d{3}', 'TIMESTAMP'), + replace(r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z', 'TIMESTAMP'), + replace(r'\d{4}\/\d{2}\/\d{2}\s\d{2}:\d{2}:\d{2}', 'TIMESTAMP'), + replace(r'\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}', 'TIMESTAMP'), + replace(r'([a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12})', r'XXX'), + replace(stage, 'XXXXXX'), + replace(r'(architecture:)(x86_64|arm64)', r'\1XXX'), + sort_by(lambda log: log["message"]["message"]), + # TODO: these messages may be an indication of a real problem and + # should be investigated + rm_item( + lambda log: log["message"]["message"] + in ( + "TIMESTAMP UTC | DD_EXTENSION | ERROR | could not forward the request context canceled\n", + "TIMESTAMP http: proxy error: context canceled\n", + ) + ), + ] + + +def normalize_traces(stage): + return [ + require(r'BEGINTRACE.*ENDTRACE'), + exclude(r'BEGINTRACE'), + exclude(r'ENDTRACE'), + replace(r'(ts":)[0-9]{10}', r'\1XXX'), + replace(r'((startTime|endTime|traceID|trace_id|span_id|parent_id|start|system.pid)":)[0-9]+', r'\1null'), + replace(r'((tracer_version|language_version)":)["a-zA-Z0-9~\-\.\_]+', r'\1null'), + replace(r'(duration":)[0-9]+', r'\1null'), + replace(r'((datadog_lambda|dd_trace)":")[0-9]+\.[0-9]+\.[0-9]+', r'\1X.X.X'), + replace(r'(,"request_id":")[a-zA-Z0-9\-,]+"', r'\1null"'), + replace(r'(,"runtime-id":")[a-zA-Z0-9\-,]+"', r'\1null"'), + replace(r'(,"system.pid":")[a-zA-Z0-9\-,]+"', r'\1null"'), + replace(r'("_dd.no_p_sr":)[0-9\.]+', r'\1null'), + replace(r'("architecture":)"(x86_64|arm64)"', r'\1"XXX"'), + replace(r'("process_id":)[0-9]+', r'\1null'), + replace(stage, 'XXXXXX'), + exclude(r'[ ]$'), + ] + + +##################### +# BEGIN NORMALIZERS # +##################### + + +def replace(pattern, repl): + """ + Replace all substrings matching regex pattern with given replacement string + """ + comp = re.compile(pattern, flags=re.DOTALL) + + def _replace(log): + return comp.sub(repl, log) + + return _replace + + +def exclude(pattern): + """ + Remove all substrings matching regex pattern + """ + return replace(pattern, '') + + +def require(pattern): + """ + Remove all substrings that don't match the given regex pattern + """ + comp = re.compile(pattern, flags=re.DOTALL) + + def _require(log): + match = comp.search(log) + if not match: + return '' + return match.group(0) + + return _require + + +def sort_by(key): + """ + Sort the json entries using the given key function, requires the log string + to be proper json and to be a list + """ + + def _sort(log): + log_json = json.loads(log, strict=False) + log_sorted = sorted(log_json, key=key) + return json.dumps(log_sorted) + + return _sort + + +def rm_item(key): + """ + Delete json entries from the log string using the given key function, key + takes an item from the json list and must return boolean which is True when + the item is to be removed and False if it is to be kept + """ + + def _rm_item(log): + log_json = json.loads(log, strict=False) + new_logs = [i for i in log_json if not key(i)] + return json.dumps(new_logs) + + return _rm_item + + +################### +# END NORMALIZERS # +################### + + +def normalize(log, typ, stage): + for normalizer in get_normalizers(typ, stage): + log = normalizer(log) + return format_json(log) + + +def get_normalizers(typ, stage): + if typ == 'metrics': + return normalize_metrics(stage) + elif typ == 'logs': + return normalize_logs(stage) + elif typ == 'traces': + return normalize_traces(stage) + else: + raise ValueError(f'invalid type "{typ}"') + + +def format_json(log): + return json.dumps(json.loads(log, strict=False), indent=2) + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument('--type', required=True) + parser.add_argument('--logs', required=True) + parser.add_argument('--stage', required=True) + return parser.parse_args() + + +if __name__ == '__main__': + try: + args = parse_args() + print(normalize(args.logs, args.type, args.stage)) + except Exception: + err = {"error": "normalization raised exception"} + err_json = json.dumps(err, indent=2) + print(err_json) + exit(1) diff --git a/test/integration/serverless/parse-json.js b/test/integration/serverless/parse-json.js deleted file mode 100644 index 8f7651144e1dd..0000000000000 --- a/test/integration/serverless/parse-json.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict' - -var readline = require('readline'); -var rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, - terminal: false -}); - -rl.on('line', function(line){ - try { - const obj = JSON.parse(line) - console.log(JSON.stringify(obj, null, 2)) - } catch (e) { - console.log(line) - } -}) \ No newline at end of file diff --git a/test/integration/serverless/run.sh b/test/integration/serverless/run.sh index e420136d27534..fe56a88035048 100755 --- a/test/integration/serverless/run.sh +++ b/test/integration/serverless/run.sh @@ -154,20 +154,7 @@ all_functions=("${metric_functions[@]}" "${log_functions[@]}" "${trace_functions # Add a function to this list to skip checking its results # This should only be used temporarily while we investigate and fix the test -functions_to_skip=( - # Tagging behavior after a timeout is currently known to be flaky - "timeout-node" - "timeout-python" - "timeout-java" - "timeout-go" - "timeout-csharp" - "timeout-proxy" - "trace-csharp" # Will be reactivated when the new dotnet layer will be released - "trace-proxy" # Will be reactivated when sampling with proxy will be implemented - "error-proxy" - "log-proxy" - "metric-proxy" -) +functions_to_skip=() echo "Invoking functions for the first time..." set +e # Don't exit this script if an invocation fails or there's a diff @@ -215,95 +202,22 @@ for function_name in "${all_functions[@]}"; do # Replace invocation-specific data like timestamps and IDs with XXX to normalize across executions if [[ " ${metric_functions[*]} " =~ " ${function_name} " ]]; then - # Normalize metrics - logs=$( - echo "$raw_logs" | - perl -p -e "s/raise Exception/\n/g" | - grep -v "BEGINLOG.*" | - grep -v "BEGINTRACE.*" | - grep "BEGINMETRIC.*" | - perl -p -e "s/BEGINMETRIC/\1/g" | - perl -p -e "s/ENDMETRIC/\1/g" | - perl -p -e "s/(ts\":)[0-9]{10}/\1XXX/g" | - perl -p -e "s/(min\":)[0-9\.e\-]{1,30}/\1XXX/g" | - perl -p -e "s/(max\":)[0-9\.e\-]{1,30}/\1XXX/g" | - perl -p -e "s/(cnt\":)[0-9\.e\-]{1,30}/\1XXX/g" | - perl -p -e "s/(avg\":)[0-9\.e\-]{1,30}/\1XXX/g" | - perl -p -e "s/(sum\":)[0-9\.e\-]{1,30}/\1XXX/g" | - perl -p -e "s/(k\":\[)[0-9\.e\-]{1,30}/\1XXX/g" | - perl -p -e "s/(datadog-nodev)[0-9]+\.[0-9]+\.[0-9]+/\1X\.X\.X/g" | - perl -p -e "s/(datadog_lambda:v)[0-9]+\.[0-9]+\.[0-9]+/\1X\.X\.X/g" | - perl -p -e "s/dd_lambda_layer:datadog-go[0-9.]{1,}/dd_lambda_layer:datadog-gox.x.x/g" | - perl -p -e "s/(dd_lambda_layer:datadog-python)[0-9_]+\.[0-9]+\.[0-9]+/\1X\.X\.X/g" | - perl -p -e "s/(serverless.lambda-extension.integration-test.count)[0-9\.]+/\1/g" | - perl -p -e "s/(architecture:)(x86_64|arm64)/\1XXX/g" | - perl -p -e "s/$stage/XXXXXX/g" | - perl -p -e "s/[ ]$//g" | - node parse-json.js - ) + norm_type=metrics elif [[ " ${log_functions[*]} " =~ " ${function_name} " ]]; then - # Normalize logs - logs=$( - echo "$raw_logs" | - grep "BEGINLOG" | - grep -v "BEGINMETRIC.*" | - grep -v "BEGINTRACE.*" | - perl -p -e "s/BEGINLOG/\1/g" | - perl -p -e "s/ENDLOG/\1/g" | - perl -p -e "s/(\"timestamp\": )\d{13}/\1\"XXX\"/g" | - perl -p -e "s/(\"timestamp\": )\d{13}/\1\"XXX\"/g" | - perl -p -e "s/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}:\d{3}/TIMESTAMP/g" | - perl -p -e "s/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z/TIMESTAMP/g" | - perl -p -e "s/\d{4}\/\d{2}\/\d{2}\s\d{2}:\d{2}:\d{2}/TIMESTAMP/g" | - perl -p -e "s/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/TIMESTAMP/g" | - perl -p -e "s/\"timestamp\":\d{13},/\1/g" | - perl -p -e "s/([a-zA-Z0-9]{8}\-[a-zA-Z0-9]{4}\-[a-zA-Z0-9]{4}\-[a-zA-Z0-9]{4}\-[a-zA-Z0-9]{12})/\0\XXX/g" | - perl -p -e "s/$stage/STAGE/g" | - perl -p -e "s/(architecture:)(x86_64|arm64)/\1XXX/g" | - # ignore a Lambda error that occurs sporadically for log-csharp - # see here for more info: https://repost.aws/questions/QUq2OfIFUNTCyCKsChfJLr5w/lambda-function-working-locally-but-crashing-on-aws - perl -n -e "print unless /LAMBDA_RUNTIME Failed to get next invocation. No Response from endpoint/ or \ - /An error occurred while attempting to execute your code.: LambdaException/ or \ - /terminate called after throwing an instance of 'std::logic_error'/ or \ - /basic_string::_M_construct null not valid/" | - node parse-json.js - ) + norm_type=logs else - # Normalize traces - logs=$( - echo "$raw_logs" | - grep "BEGINTRACE" | - grep -v "BEGINMETRIC.*" | - grep -v "BEGINLOG.*" | - perl -p -e "s/BEGINTRACE/\1/g" | - perl -p -e "s/ENDTRACE/\1/g" | - perl -p -e "s/(ts\":)[0-9]{10}/\1XXX/g" | - perl -p -e "s/((startTime|endTime|traceID|trace_id|span_id|parent_id|start|system.pid)\":)[0-9]+/\1null/g" | - perl -p -e "s/((tracer_version|language_version)\":)[\"a-zA-Z0-9~\-\.\_]+/\1null/g" | - perl -p -e "s/(duration\":)[0-9]+/\1null/g" | - perl -p -e "s/((datadog_lambda|dd_trace)\":\")[0-9]+\.[0-9]+\.[0-9]+/\1X\.X\.X/g" | - perl -p -e "s/(,\"request_id\":\")[a-zA-Z0-9\-,]+\"/\1null\"/g" | - perl -p -e "s/(,\"runtime-id\":\")[a-zA-Z0-9\-,]+\"/\1null\"/g" | - perl -p -e "s/(,\"system.pid\":\")[a-zA-Z0-9\-,]+\"/\1null\"/g" | - perl -p -e "s/(\"_dd.no_p_sr\":)[0-9\.]+/\1null/g" | - perl -p -e "s/(\"architecture\":)\"(x86_64|arm64)\"/\1\"XXX\"/g" | - perl -p -e "s/(\"process_id\":)[0-9]+/\1null/g" | - perl -p -e "s/$stage/XXXXXX/g" | - perl -p -e "s/[ ]$//g" | - node parse-json.js - ) + norm_type=traces fi + logs=$(python3 log_normalize.py --type $norm_type --logs "$raw_logs" --stage $stage) function_snapshot_path="./snapshots/${function_name}" - jsonLogs="$(echo $logs | node parse-json.js)" - if [ ! -f "$function_snapshot_path" ]; then printf "${MAGENTA} CREATE ${END_COLOR} $function_name\n" - echo "$jsonLogs" >"$function_snapshot_path" + echo "$logs" >"$function_snapshot_path" elif [ "$UPDATE_SNAPSHOTS" == "true" ]; then printf "${MAGENTA} UPDATE ${END_COLOR} $function_name\n" - echo "$jsonLogs" > "$function_snapshot_path" + echo "$logs" > "$function_snapshot_path" else if [[ " ${functions_to_skip[*]} " =~ " ${function_name} " ]]; then printf "${YELLOW} SKIP ${END_COLOR} $function_name\n" @@ -314,7 +228,7 @@ for function_name in "${all_functions[@]}"; do printf "${YELLOW} SKIP ${END_COLOR} $function_name, no .NET support on arm64\n" continue fi - diff_output=$(echo "$jsonLogs" | diff - "$function_snapshot_path") + diff_output=$(echo "$logs" | diff - "$function_snapshot_path") if [ $? -eq 1 ]; then failed_functions+=("$function_name") diff --git a/test/integration/serverless/serverless.yml b/test/integration/serverless/serverless.yml index 407353b9537f8..073566b8a097f 100644 --- a/test/integration/serverless/serverless.yml +++ b/test/integration/serverless/serverless.yml @@ -28,10 +28,10 @@ provider: DD_CAPTURE_LAMBDA_PAYLOAD: true timeout: 15 deploymentBucket: - name: integration-tests-deployment-bucket-lambda-extension + name: integration-tests-serververless-deployment-bucket iam: # IAM permissions require that all functions are deployed with this role - role: "arn:aws:iam::601427279990:role/serverless-integration-test-lambda-role" + role: "arn:aws:iam::425362996713:role/serverless-integration-test-lambda-role" architecture: ${self:custom.altArchitectureNames.${env:ARCHITECTURE}} package: diff --git a/test/integration/serverless/snapshots/appsec-csharp b/test/integration/serverless/snapshots/appsec-csharp index d219b5d19c214..23ac018c743a9 100644 --- a/test/integration/serverless/snapshots/appsec-csharp +++ b/test/integration/serverless/snapshots/appsec-csharp @@ -22,13 +22,13 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "component": "WebRequest", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-appsec-csharp", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-appsec-csharp", "functionname": "integration-tests-extension-XXXXXX-appsec-csharp", "http.method": "GET", "http.status_code": "200", @@ -88,13 +88,13 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "component": "WebRequest", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-appsec-csharp", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-appsec-csharp", "functionname": "integration-tests-extension-XXXXXX-appsec-csharp", "http.method": "GET", "http.status_code": "200", diff --git a/test/integration/serverless/snapshots/appsec-java b/test/integration/serverless/snapshots/appsec-java index cf9d0846236ff..940c6dab1602e 100644 --- a/test/integration/serverless/snapshots/appsec-java +++ b/test/integration/serverless/snapshots/appsec-java @@ -22,12 +22,12 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-appsec-java", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-appsec-java", "functionname": "integration-tests-extension-XXXXXX-appsec-java", "memorysize": "1024", "region": "eu-west-1", @@ -78,14 +78,14 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "true", "datadog_lambda": "X.X.X", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-appsec-java", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-appsec-java", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-appsec-java", "language": "jvm", @@ -147,14 +147,14 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "false", "datadog_lambda": "X.X.X", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-appsec-java", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-appsec-java", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-appsec-java", "language": "jvm", diff --git a/test/integration/serverless/snapshots/error-csharp b/test/integration/serverless/snapshots/error-csharp index 2d78972744eac..c44db211768b3 100644 --- a/test/integration/serverless/snapshots/error-csharp +++ b/test/integration/serverless/snapshots/error-csharp @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -103,12 +103,12 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -127,12 +127,12 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -151,13 +151,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -176,13 +176,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -201,13 +201,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -226,14 +226,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-error-csharp", @@ -251,14 +252,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-error-csharp", @@ -276,13 +278,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -301,13 +303,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -326,13 +328,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -351,13 +353,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -376,13 +378,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -401,13 +403,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -426,13 +428,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -451,13 +453,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -476,13 +478,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -501,13 +503,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -526,13 +528,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -551,13 +553,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -576,13 +578,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", @@ -601,13 +603,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-csharp", "functionname:integration-tests-extension-XXXXXX-error-csharp", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/error-java b/test/integration/serverless/snapshots/error-java index b372068cca88d..e39cc94b00592 100644 --- a/test/integration/serverless/snapshots/error-java +++ b/test/integration/serverless/snapshots/error-java @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -178,14 +178,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-error-java", @@ -203,14 +204,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-error-java", @@ -228,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -253,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -278,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -303,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -328,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -353,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -378,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -403,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -428,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -453,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -478,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -503,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -528,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", @@ -553,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-java", "functionname:integration-tests-extension-XXXXXX-error-java", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/error-node b/test/integration/serverless/snapshots/error-node index 286aef7abfdf8..da0688d846148 100644 --- a/test/integration/serverless/snapshots/error-node +++ b/test/integration/serverless/snapshots/error-node @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -103,14 +103,14 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "datadog_lambda:vX.X.X", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -129,14 +129,14 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "datadog_lambda:vX.X.X", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -155,13 +155,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -180,13 +180,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -205,13 +205,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -230,14 +230,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-error-node", @@ -255,14 +256,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-error-node", @@ -280,13 +282,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -305,13 +307,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -330,13 +332,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -355,13 +357,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -380,13 +382,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -405,13 +407,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -430,13 +432,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -455,13 +457,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -480,13 +482,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -505,13 +507,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -530,13 +532,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -555,13 +557,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -580,13 +582,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", @@ -605,13 +607,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-node", "functionname:integration-tests-extension-XXXXXX-error-node", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/error-proxy b/test/integration/serverless/snapshots/error-proxy index 448f14144dac1..cf390fa818377 100644 --- a/test/integration/serverless/snapshots/error-proxy +++ b/test/integration/serverless/snapshots/error-proxy @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -103,12 +103,12 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -127,12 +127,12 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -151,13 +151,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -176,13 +176,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -201,13 +201,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -226,14 +226,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-error-proxy", @@ -251,14 +252,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-error-proxy", @@ -276,13 +278,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -301,13 +303,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -326,13 +328,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -351,13 +353,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -376,13 +378,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -401,13 +403,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -426,13 +428,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -451,13 +453,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -476,13 +478,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -501,13 +503,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -526,13 +528,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -551,13 +553,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -576,13 +578,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", @@ -601,13 +603,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-proxy", "functionname:integration-tests-extension-XXXXXX-error-proxy", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/error-python b/test/integration/serverless/snapshots/error-python index 915cb79b24dc6..f1dea142bdb9a 100644 --- a/test/integration/serverless/snapshots/error-python +++ b/test/integration/serverless/snapshots/error-python @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -103,15 +103,15 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "datadog_lambda:vX.X.X", "dd_extension_version:123", "dd_lambda_layer:datadog-pythonX.X.X", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -130,15 +130,15 @@ "metric": "aws.lambda.enhanced.errors", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "datadog_lambda:vX.X.X", "dd_extension_version:123", "dd_lambda_layer:datadog-pythonX.X.X", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -157,13 +157,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -182,13 +182,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -207,13 +207,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -232,14 +232,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-error-python", @@ -257,14 +258,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-error-python", @@ -282,13 +284,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -307,13 +309,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -332,13 +334,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -357,13 +359,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -382,13 +384,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -407,13 +409,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -432,13 +434,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -457,13 +459,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -482,13 +484,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -507,13 +509,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -532,13 +534,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -557,13 +559,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -582,13 +584,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", @@ -607,13 +609,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-error-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-error-python", "functionname:integration-tests-extension-XXXXXX-error-python", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/log-csharp b/test/integration/serverless/snapshots/log-csharp index 82c50357e2f0b..54beeeb033920 100644 --- a/test/integration/serverless/snapshots/log-csharp +++ b/test/integration/serverless/snapshots/log-csharp @@ -1,170 +1,182 @@ [ { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 0 XXX\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 1 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 2 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 2 XXX\n", + "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "TIMESTAMP\tXXX\tinfo\tXXX Log 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-csharp,functionname:integration-tests-extension-STAGE-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-csharp,functionname:integration-tests-extension-XXXXXX-log-csharp,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-csharp,runtime:dotnet6,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" } ] diff --git a/test/integration/serverless/snapshots/log-go b/test/integration/serverless/snapshots/log-go index 6856ee8e63c15..e1bada356cfd5 100644 --- a/test/integration/serverless/snapshots/log-go +++ b/test/integration/serverless/snapshots/log-go @@ -1,170 +1,182 @@ [ { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX LOG 0 XXX\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX LOG 1 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX LOG 2 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "XXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "XXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "XXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX LOG 2 XXX\n", + "message": "XXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "XXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "XXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-go,functionname:integration-tests-extension-STAGE-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-go,functionname:integration-tests-extension-XXXXXX-log-go,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-go,runtime:provided.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" } ] diff --git a/test/integration/serverless/snapshots/log-java b/test/integration/serverless/snapshots/log-java index e7b6a7cfca0f3..3d4b9a038af53 100644 --- a/test/integration/serverless/snapshots/log-java +++ b/test/integration/serverless/snapshots/log-java @@ -1,198 +1,212 @@ [ { "message": { - "message": "Picked up JAVA_TOOL_OPTIONS: -javaagent:\"/opt/java/lib/dd-java-agent.jar\" -XX:+TieredCompilation -XX:TieredStopAtLevel=1\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "[dd.trace TIMESTAMP +0000] [main] INFO datadog.trace.agent.common.writer.WriterFactory - Detected serverless environment. Serverless extension has been detected, using DDAgentWriter\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "Picked up JAVA_TOOL_OPTIONS: -javaagent:\"/opt/java/lib/dd-java-agent.jar\" -XX:+TieredCompilation -XX:TieredStopAtLevel=1\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX Log 0 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX Log 1 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX Log 2 XXX\n", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "XXX Log 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "XXX Log 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "XXX Log 0 XXX\n", + "message": "XXX Log 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "XXX Log 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "XXX Log 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "XXX Log 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "[dd.trace TIMESTAMP +0000] [main] INFO datadog.trace.agent.common.writer.WriterFactory - Detected serverless environment. Serverless extension has been detected, using DDAgentWriter\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-java,functionname:integration-tests-extension-STAGE-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-java,functionname:integration-tests-extension-XXXXXX-log-java,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-java,runtime:java8.al2,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" } ] diff --git a/test/integration/serverless/snapshots/log-node b/test/integration/serverless/snapshots/log-node index eb06afb445e2c..114d007abacd4 100644 --- a/test/integration/serverless/snapshots/log-node +++ b/test/integration/serverless/snapshots/log-node @@ -1,198 +1,212 @@ [ { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG masked XXX\n", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG masked XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG masked XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-node,functionname:integration-tests-extension-STAGE-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-node,functionname:integration-tests-extension-XXXXXX-log-node,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-node,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" } ] diff --git a/test/integration/serverless/snapshots/log-proxy b/test/integration/serverless/snapshots/log-proxy index cef6ff6e4bdde..283aa1a2633c4 100644 --- a/test/integration/serverless/snapshots/log-proxy +++ b/test/integration/serverless/snapshots/log-proxy @@ -1,198 +1,182 @@ [ { "message": { - "message": "START RequestId: XXX Version: $LATEST", - "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", - "request_id": "XXX" - } - }, - "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", - "service": "integration-tests-service", - "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" - }, - { - "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", - "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", - "request_id": "XXX" - } - }, - "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", - "service": "integration-tests-service", - "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" - }, - { - "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP http: proxy error: context canceled\n", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "TIMESTAMP UTC | DD_EXTENSION | ERROR | could not forward the request context canceled\n", + "message": "TIMESTAMP\tXXX\tERROR\tXXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-proxy,functionname:integration-tests-extension-STAGE-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-proxy,functionname:integration-tests-extension-XXXXXX-log-proxy,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-proxy,runtime:nodejs14.x,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" } ] diff --git a/test/integration/serverless/snapshots/log-python b/test/integration/serverless/snapshots/log-python index 537a75857add3..fb4a414c6b42c 100644 --- a/test/integration/serverless/snapshots/log-python +++ b/test/integration/serverless/snapshots/log-python @@ -1,170 +1,182 @@ [ { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 0 XXX\n", + "message": "END RequestId: XXX", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 1 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 2 XXX\n", + "message": "REPORT", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "START RequestId: XXX Version: $LATEST", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "START RequestId: XXX Version: $LATEST", + "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 0 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 2 XXX\n", + "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 1 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "END RequestId: XXX", + "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" }, { "message": { - "message": "REPORT", + "message": "[ERROR]\tTIMESTAMP\tXXX\tXXX LOG 2 XXX\n", "lambda": { - "arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "request_id": "XXX" } }, "status": "info", - "hostname": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python", + "timestamp": "XXX", + "hostname": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python", "service": "integration-tests-service", "ddsource": "lambda", - "ddtags": "account_id:601427279990,architecture:XXX,aws_account:601427279990,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-STAGE-log-python,functionname:integration-tests-extension-STAGE-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-STAGE-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" + "ddtags": "account_id:425362996713,architecture:XXX,aws_account:425362996713,dd_extension_version:123,env:integration-tests-env,function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-log-python,functionname:integration-tests-extension-XXXXXX-log-python,memorysize:1024,region:eu-west-1,resource:integration-tests-extension-XXXXXX-log-python,runtime:python3.8,service:integration-tests-service,taga:valuea,tagb:valueb,tagc:valuec,tagd:valued,version:integration-tests-version" } ] diff --git a/test/integration/serverless/snapshots/metric-csharp b/test/integration/serverless/snapshots/metric-csharp index 4fc7d934fca7a..09b0ae76a108c 100644 --- a/test/integration/serverless/snapshots/metric-csharp +++ b/test/integration/serverless/snapshots/metric-csharp @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -178,14 +178,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-metric-csharp", @@ -203,14 +204,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-metric-csharp", @@ -228,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -253,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -278,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -303,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -328,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -353,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -378,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -403,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -428,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -453,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -478,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -503,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -528,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", @@ -553,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-csharp", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-csharp", "functionname:integration-tests-extension-XXXXXX-metric-csharp", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/metric-go b/test/integration/serverless/snapshots/metric-go index 41124490238a7..fe42f8a7a6a27 100644 --- a/test/integration/serverless/snapshots/metric-go +++ b/test/integration/serverless/snapshots/metric-go @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -178,14 +178,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-metric-go", @@ -203,14 +204,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-metric-go", @@ -228,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -253,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -278,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -303,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -328,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -353,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -378,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -403,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -428,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -453,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -478,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -503,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -528,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -553,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -578,13 +580,13 @@ "metric": "serverless.lambda-extension.integration-test.count", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "dd_lambda_layer:datadog-gox.x.x", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", @@ -603,13 +605,13 @@ "metric": "serverless.lambda-extension.integration-test.count", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "dd_lambda_layer:datadog-gox.x.x", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-go", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-go", "functionname:integration-tests-extension-XXXXXX-metric-go", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/metric-java b/test/integration/serverless/snapshots/metric-java index 80aed1bc441fb..882ddcd6cb40a 100644 --- a/test/integration/serverless/snapshots/metric-java +++ b/test/integration/serverless/snapshots/metric-java @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -178,14 +178,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-metric-java", @@ -203,14 +204,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-metric-java", @@ -228,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -253,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -278,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -303,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -328,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -353,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -378,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -403,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -428,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -453,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -478,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -503,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -528,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", @@ -553,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-java", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-java", "functionname:integration-tests-extension-XXXXXX-metric-java", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/metric-node b/test/integration/serverless/snapshots/metric-node index d061dff76b9cd..f6d8e2802366a 100644 --- a/test/integration/serverless/snapshots/metric-node +++ b/test/integration/serverless/snapshots/metric-node @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -178,14 +178,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-metric-node", @@ -203,14 +204,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-metric-node", @@ -228,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -253,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -278,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -303,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -328,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -353,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -378,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -403,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -428,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -453,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -478,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -503,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -528,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -553,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", @@ -578,13 +580,13 @@ "metric": "serverless.lambda-extension.integration-test.count", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "dd_lambda_layer:datadog-nodevX.X.X", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-node", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-node", "functionname:integration-tests-extension-XXXXXX-metric-node", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/metric-proxy b/test/integration/serverless/snapshots/metric-proxy index c7fe723a38551..0e2bb6a2b6f9b 100644 --- a/test/integration/serverless/snapshots/metric-proxy +++ b/test/integration/serverless/snapshots/metric-proxy @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -178,14 +178,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-metric-proxy", @@ -203,14 +204,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-metric-proxy", @@ -228,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -253,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -278,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -303,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -328,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -353,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -378,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -403,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -428,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -453,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -478,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -503,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -528,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", @@ -553,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-proxy", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-proxy", "functionname:integration-tests-extension-XXXXXX-metric-proxy", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/metric-python b/test/integration/serverless/snapshots/metric-python index 6fd426ed786a5..e9ad1f0dc60eb 100644 --- a/test/integration/serverless/snapshots/metric-python +++ b/test/integration/serverless/snapshots/metric-python @@ -3,13 +3,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -28,13 +28,13 @@ "metric": "aws.lambda.enhanced.billed_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -53,13 +53,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -78,13 +78,13 @@ "metric": "aws.lambda.enhanced.duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -103,13 +103,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -128,13 +128,13 @@ "metric": "aws.lambda.enhanced.estimated_cost", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -153,13 +153,13 @@ "metric": "aws.lambda.enhanced.init_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -178,14 +178,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-metric-python", @@ -203,14 +204,15 @@ "metric": "aws.lambda.enhanced.invocations", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", + "init_type:on-demand", "memorysize:1024", "region:eu-west-1", "resource:integration-tests-extension-XXXXXX-metric-python", @@ -228,13 +230,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -253,13 +255,13 @@ "metric": "aws.lambda.enhanced.max_memory_used", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -278,13 +280,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -303,13 +305,13 @@ "metric": "aws.lambda.enhanced.memorysize", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -328,13 +330,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -353,13 +355,13 @@ "metric": "aws.lambda.enhanced.post_runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -378,13 +380,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -403,13 +405,13 @@ "metric": "aws.lambda.enhanced.produced_bytes", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -428,13 +430,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -453,13 +455,13 @@ "metric": "aws.lambda.enhanced.response_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -478,13 +480,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -503,13 +505,13 @@ "metric": "aws.lambda.enhanced.response_latency", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -528,13 +530,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:true", + "aws_account:425362996713", + "cold_start:false", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -553,13 +555,13 @@ "metric": "aws.lambda.enhanced.runtime_duration", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", - "cold_start:false", + "aws_account:425362996713", + "cold_start:true", "dd_extension_version:123", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", @@ -578,13 +580,13 @@ "metric": "serverless.lambda-extension.integration-test.count", "distributions": null, "tags": [ - "account_id:601427279990", + "account_id:425362996713", "architecture:XXX", - "aws_account:601427279990", + "aws_account:425362996713", "dd_extension_version:123", "dd_lambda_layer:datadog-pythonX.X.X", "env:integration-tests-env", - "function_arn:arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-metric-python", + "function_arn:arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-metric-python", "functionname:integration-tests-extension-XXXXXX-metric-python", "memorysize:1024", "region:eu-west-1", diff --git a/test/integration/serverless/snapshots/timeout-csharp b/test/integration/serverless/snapshots/timeout-csharp index 8b137891791fe..059f4251737b1 100644 --- a/test/integration/serverless/snapshots/timeout-csharp +++ b/test/integration/serverless/snapshots/timeout-csharp @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/timeout-go b/test/integration/serverless/snapshots/timeout-go index 8b137891791fe..059f4251737b1 100644 --- a/test/integration/serverless/snapshots/timeout-go +++ b/test/integration/serverless/snapshots/timeout-go @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/timeout-java b/test/integration/serverless/snapshots/timeout-java index 8b137891791fe..059f4251737b1 100644 --- a/test/integration/serverless/snapshots/timeout-java +++ b/test/integration/serverless/snapshots/timeout-java @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/timeout-node b/test/integration/serverless/snapshots/timeout-node index 8b137891791fe..059f4251737b1 100644 --- a/test/integration/serverless/snapshots/timeout-node +++ b/test/integration/serverless/snapshots/timeout-node @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/timeout-proxy b/test/integration/serverless/snapshots/timeout-proxy index 8b137891791fe..059f4251737b1 100644 --- a/test/integration/serverless/snapshots/timeout-proxy +++ b/test/integration/serverless/snapshots/timeout-proxy @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/timeout-python b/test/integration/serverless/snapshots/timeout-python index 8b137891791fe..059f4251737b1 100644 --- a/test/integration/serverless/snapshots/timeout-python +++ b/test/integration/serverless/snapshots/timeout-python @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/trace-csharp b/test/integration/serverless/snapshots/trace-csharp index 2d6df8278c36d..63126c73288b3 100644 --- a/test/integration/serverless/snapshots/trace-csharp +++ b/test/integration/serverless/snapshots/trace-csharp @@ -22,13 +22,13 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "component": "WebRequest", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-csharp", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-csharp", "functionname": "integration-tests-extension-XXXXXX-trace-csharp", "http.method": "GET", "http.status_code": "200", @@ -48,6 +48,7 @@ "metrics": { "_dd.top_level": 1, "_dd.tracer_kr": 0, + "_sampling_priority_rate_v1": 1, "_sampling_priority_v1": 1, "_top_level": 1, "process_id": null @@ -87,13 +88,13 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "component": "WebRequest", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-csharp", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-csharp", "functionname": "integration-tests-extension-XXXXXX-trace-csharp", "http.method": "GET", "http.status_code": "200", @@ -113,6 +114,7 @@ "metrics": { "_dd.top_level": 1, "_dd.tracer_kr": 1, + "_sampling_priority_rate_v1": 1, "_sampling_priority_v1": 1, "_top_level": 1, "process_id": null diff --git a/test/integration/serverless/snapshots/trace-go b/test/integration/serverless/snapshots/trace-go index e1747ab1fbe51..23b01771d794e 100644 --- a/test/integration/serverless/snapshots/trace-go +++ b/test/integration/serverless/snapshots/trace-go @@ -22,12 +22,12 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "functionname": "integration-tests-extension-XXXXXX-trace-go", "memorysize": "1024", "region": "eu-west-1", @@ -40,9 +40,10 @@ "version": "integration-tests-version" }, "metrics": { + "_sampling_priority_rate_v1": 1, "_top_level": 1 }, - "type": "" + "type": "serverless" } ], "tags": null, @@ -79,15 +80,15 @@ "_dd.compute_stats": "1", "_dd.origin": "lambda", "_dd.p.upstream_services": "YXdzLmxhbWJkYQ|1|1|1.0000", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "true", "datadog_lambda": "X.X.X", "dd_extension_version": "123", "dd_trace": "X.X.X", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-go", "memorysize": "1024", @@ -127,12 +128,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "functionname": "integration-tests-extension-XXXXXX-trace-go", "http.method": "GET", "http.status_code": "200", @@ -168,12 +169,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "functionname": "integration-tests-extension-XXXXXX-trace-go", "memorysize": "1024", "region": "eu-west-1", @@ -228,15 +229,15 @@ "_dd.compute_stats": "1", "_dd.origin": "lambda", "_dd.p.upstream_services": "YXdzLmxhbWJkYQ|1|1|1.0000", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "false", "datadog_lambda": "X.X.X", "dd_extension_version": "123", "dd_trace": "X.X.X", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-go", "memorysize": "1024", @@ -276,12 +277,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "functionname": "integration-tests-extension-XXXXXX-trace-go", "http.method": "GET", "http.status_code": "200", @@ -317,12 +318,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-go", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-go", "functionname": "integration-tests-extension-XXXXXX-trace-go", "memorysize": "1024", "region": "eu-west-1", diff --git a/test/integration/serverless/snapshots/trace-java b/test/integration/serverless/snapshots/trace-java index bcfd53b4bb9da..40a7dd423a045 100644 --- a/test/integration/serverless/snapshots/trace-java +++ b/test/integration/serverless/snapshots/trace-java @@ -1,7 +1,7 @@ [ { "container_id": "", - "language_name": "", + "language_name": "java", "language_version": null, "tracer_version": null, "runtime_id": "", @@ -12,7 +12,7 @@ "spans": [ { "service": "integration-tests-service", - "name": "aws.lambda.cold_start", + "name": "aws.lambda", "resource": "integration-tests-extension-XXXXXX-trace-java", "trace_id": null, "span_id": null, @@ -22,25 +22,39 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", + "cold_start": "true", + "datadog_lambda": "X.X.X", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-java", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-java", + "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-java", + "language": "jvm", "memorysize": "1024", "region": "eu-west-1", + "request_id": "null", + "resource_names": "integration-tests-extension-XXXXXX-trace-java", "runtime": "java8.al2", + "runtime-id": "null", "service": "integration-tests-service", + "tagA": "valueA", + "tagB": "valueB", "taga": "valuea", "tagb": "valueb", "tagc": "valuec", "tagd": "valued", + "thread.name": "main", "version": "integration-tests-version" }, "metrics": { - "_top_level": 1 + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_sampling_priority_v1": 1, + "_top_level": 1, + "thread.id": 1 }, "type": "" } @@ -56,7 +70,7 @@ }, { "container_id": "", - "language_name": "java", + "language_name": "", "language_version": null, "tracer_version": null, "runtime_id": "", @@ -67,7 +81,7 @@ "spans": [ { "service": "integration-tests-service", - "name": "aws.lambda", + "name": "aws.lambda.cold_start", "resource": "integration-tests-extension-XXXXXX-trace-java", "trace_id": null, "span_id": null, @@ -77,41 +91,28 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", - "cold_start": "true", - "datadog_lambda": "X.X.X", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-java", - "function_version": "$LATEST", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-java", "functionname": "integration-tests-extension-XXXXXX-trace-java", - "language": "jvm", "memorysize": "1024", "region": "eu-west-1", - "request_id": "null", - "resource_names": "integration-tests-extension-XXXXXX-trace-java", "runtime": "java8.al2", - "runtime-id": "null", "service": "integration-tests-service", - "tagA": "valueA", - "tagB": "valueB", "taga": "valuea", "tagb": "valueb", "tagc": "valuec", "tagd": "valued", - "thread.name": "main", "version": "integration-tests-version" }, "metrics": { - "_dd.agent_psr": 1, - "_dd.top_level": 1, - "_sampling_priority_v1": 1, - "_top_level": 1, - "thread.id": 1 + "_sampling_priority_rate_v1": 1, + "_top_level": 1 }, - "type": "" + "type": "serverless" } ], "tags": null, @@ -146,14 +147,14 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "false", "datadog_lambda": "X.X.X", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-java", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-java", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-java", "language": "jvm", diff --git a/test/integration/serverless/snapshots/trace-node b/test/integration/serverless/snapshots/trace-node index f48a632647f40..14604c1acd8c2 100644 --- a/test/integration/serverless/snapshots/trace-node +++ b/test/integration/serverless/snapshots/trace-node @@ -1,7 +1,7 @@ [ { "container_id": "", - "language_name": "", + "language_name": "nodejs", "language_version": null, "tracer_version": null, "runtime_id": "", @@ -12,8 +12,8 @@ "spans": [ { "service": "integration-tests-service", - "name": "aws.lambda.cold_start", - "resource": "integration-tests-extension-XXXXXX-trace-node", + "name": "integration_test", + "resource": "integration-test", "trace_id": null, "span_id": null, "parent_id": null, @@ -22,17 +22,20 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "_dd.origin": "lambda", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-node", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-node", "functionname": "integration-tests-extension-XXXXXX-trace-node", + "language": "javascript", "memorysize": "1024", "region": "eu-west-1", "runtime": "nodejs14.x", "service": "integration-tests-service", + "tagA": "valueA tagB:valueB", "taga": "valuea", "tagb": "valueb", "tagc": "valuec", @@ -40,35 +43,16 @@ "version": "integration-tests-version" }, "metrics": { - "_top_level": 1 + "_dd.measured": 1, + "_sample_rate": 1, + "_sampling_priority_v1": 1 }, "type": "" - } - ], - "tags": null, - "dropped_trace": false - } - ], - "tags": null, - "env": "integration-tests-env", - "hostname": "", - "app_version": "integration-tests-version" - }, - { - "container_id": "", - "language_name": "nodejs", - "language_version": null, - "tracer_version": null, - "runtime_id": "", - "chunks": [ - { - "priority": 1, - "origin": "lambda", - "spans": [ + }, { "service": "integration-tests-service", - "name": "integration_test", - "resource": "integration-test", + "name": "aws.lambda", + "resource": "integration-tests-extension-XXXXXX-trace-node", "trace_id": null, "span_id": null, "parent_id": null, @@ -78,16 +62,22 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", + "cold_start": "true", + "datadog_lambda": "X.X.X", "dd_extension_version": "123", + "dd_trace": "X.X.X", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-node", + "function.response.body": "ok", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-node", + "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-node", - "language": "javascript", "memorysize": "1024", "region": "eu-west-1", + "request_id": "null", + "resource_names": "integration-tests-extension-XXXXXX-trace-node", "runtime": "nodejs14.x", "service": "integration-tests-service", "tagA": "valueA tagB:valueB", @@ -98,15 +88,39 @@ "version": "integration-tests-version" }, "metrics": { + "_dd.agent_psr": 1, "_dd.measured": 1, "_sample_rate": 1, - "_sampling_priority_v1": 1 + "_sampling_priority_v1": 1, + "_top_level": 1, + "function.response.statusCode": 200 }, - "type": "" - }, + "type": "serverless" + } + ], + "tags": null, + "dropped_trace": false + } + ], + "tags": null, + "env": "integration-tests-env", + "hostname": "", + "app_version": "integration-tests-version" + }, + { + "container_id": "", + "language_name": "", + "language_version": null, + "tracer_version": null, + "runtime_id": "", + "chunks": [ + { + "priority": 1, + "origin": "lambda", + "spans": [ { "service": "integration-tests-service", - "name": "aws.lambda", + "name": "aws.lambda.cold_start", "resource": "integration-tests-extension-XXXXXX-trace-node", "trace_id": null, "span_id": null, @@ -116,26 +130,17 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", - "cold_start": "true", - "datadog_lambda": "X.X.X", + "aws_account": "425362996713", "dd_extension_version": "123", - "dd_trace": "X.X.X", "env": "integration-tests-env", - "function.response.body": "ok", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-node", - "function_version": "$LATEST", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-node", "functionname": "integration-tests-extension-XXXXXX-trace-node", "memorysize": "1024", "region": "eu-west-1", - "request_id": "null", - "resource_names": "integration-tests-extension-XXXXXX-trace-node", "runtime": "nodejs14.x", "service": "integration-tests-service", - "tagA": "valueA tagB:valueB", "taga": "valuea", "tagb": "valueb", "tagc": "valuec", @@ -143,12 +148,8 @@ "version": "integration-tests-version" }, "metrics": { - "_dd.agent_psr": 1, - "_dd.measured": 1, - "_sample_rate": 1, - "_sampling_priority_v1": 1, - "_top_level": 1, - "function.response.statusCode": 200 + "_sampling_priority_rate_v1": 1, + "_top_level": 1 }, "type": "serverless" } @@ -186,12 +187,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-node", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-node", "functionname": "integration-tests-extension-XXXXXX-trace-node", "language": "javascript", "memorysize": "1024", @@ -225,9 +226,9 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "false", "datadog_lambda": "X.X.X", "dd_extension_version": "123", @@ -235,7 +236,7 @@ "env": "integration-tests-env", "function.request.body": "testing request payload", "function.response.body": "ok", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-node", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-node", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-node", "memorysize": "1024", diff --git a/test/integration/serverless/snapshots/trace-proxy b/test/integration/serverless/snapshots/trace-proxy index 8b137891791fe..059f4251737b1 100644 --- a/test/integration/serverless/snapshots/trace-proxy +++ b/test/integration/serverless/snapshots/trace-proxy @@ -1 +1,3 @@ - +{ + "error": "normalization raised exception" +} diff --git a/test/integration/serverless/snapshots/trace-python b/test/integration/serverless/snapshots/trace-python index b8821ad44ff2a..dc673bda42c5a 100644 --- a/test/integration/serverless/snapshots/trace-python +++ b/test/integration/serverless/snapshots/trace-python @@ -22,12 +22,12 @@ "error": 0, "meta": { "_dd.compute_stats": "1", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-python", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-python", "functionname": "integration-tests-extension-XXXXXX-trace-python", "memorysize": "1024", "region": "eu-west-1", @@ -40,9 +40,10 @@ "version": "integration-tests-version" }, "metrics": { + "_sampling_priority_rate_v1": 1, "_top_level": 1 }, - "type": "" + "type": "serverless" } ], "tags": null, @@ -78,16 +79,16 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "true", "datadog_lambda": "X.X.X", "dd_extension_version": "123", "dd_trace": "X.X.X", "env": "integration-tests-env", "function.response.body": "ok", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-python", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-python", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-python", "memorysize": "1024", @@ -128,12 +129,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-python", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-python", "functionname": "integration-tests-extension-XXXXXX-trace-python", "memorysize": "1024", "region": "eu-west-1", @@ -184,9 +185,9 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "cold_start": "false", "datadog_lambda": "X.X.X", "dd_extension_version": "123", @@ -194,7 +195,7 @@ "env": "integration-tests-env", "function.request.body": "testing request payload", "function.response.body": "ok", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-python", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-python", "function_version": "$LATEST", "functionname": "integration-tests-extension-XXXXXX-trace-python", "memorysize": "1024", @@ -235,12 +236,12 @@ "meta": { "_dd.compute_stats": "1", "_dd.origin": "lambda", - "account_id": "601427279990", + "account_id": "425362996713", "architecture": "XXX", - "aws_account": "601427279990", + "aws_account": "425362996713", "dd_extension_version": "123", "env": "integration-tests-env", - "function_arn": "arn:aws:lambda:eu-west-1:601427279990:function:integration-tests-extension-XXXXXX-trace-python", + "function_arn": "arn:aws:lambda:eu-west-1:425362996713:function:integration-tests-extension-XXXXXX-trace-python", "functionname": "integration-tests-extension-XXXXXX-trace-python", "memorysize": "1024", "region": "eu-west-1", diff --git a/test/kitchen/drivers/azure-driver.yml b/test/kitchen/drivers/azure-driver.yml index 9d351ca859aa5..95671206cbded 100644 --- a/test/kitchen/drivers/azure-driver.yml +++ b/test/kitchen/drivers/azure-driver.yml @@ -1,12 +1,21 @@ <% ENV['AZURE_LOCATION'] ||= "North Central US" location = ENV['AZURE_LOCATION'] + + change_mount_dir = ENV['AZURE_KITCHEN_MOUNT_DIR'] + ENV['AZURE_KITCHEN_MOUNT_DIR'] ||= "/mnt/kitchen" + mount_dir = ENV['AZURE_KITCHEN_MOUNT_DIR'] + + change_target_mount_dir = ENV['AZURE_KITCHEN_TARGET_MOUNT_DIR'] + ENV['AZURE_KITCHEN_TARGET_MOUNT_DIR'] ||= "/tmp/kitchen" + target_mount_dir = ENV['AZURE_KITCHEN_TARGET_MOUNT_DIR'] %> <% vm_tags = { 'dd_agent_testing': 'dd_agent_testing' } + vm_username = ENV['VM_USERNAME'] ? ENV['VM_USERNAME'] : "datadog" if ENV['DD_PIPELINE_ID'] vm_tags['pipeline_id'] = ENV['DD_PIPELINE_ID'] else @@ -16,6 +25,9 @@ provisioner: name: chef_solo + <% if change_target_mount_dir %> + root_path: <%= ENV['AZURE_KITCHEN_TARGET_MOUNT_DIR'] %>/kitchen + <% end %> product_name: chef # There is no arm64 distribution of Chef 14 for Debian. Use the Ubuntu package instead <% if ENV['KITCHEN_PLATFORM'] == "debian" && ENV['KITCHEN_ARCH'] == "arm64" %> @@ -46,9 +58,13 @@ driver_config: custom_data: | #cloud-config runcmd: - - mkdir /mnt/kitchen - - chmod a+rwx /mnt/kitchen - - ln -s /mnt/kitchen /tmp/kitchen + - mkdir <%= mount_dir %> + - chmod -R a+rwx <%= mount_dir %> + - ln -s <%= mount_dir %> <%= target_mount_dir %> + <% if change_mount_dir %> + - mkdir <%= mount_dir %>/kitchen + - chown -R <%= vm_username %>:<%= vm_username %> <%= target_mount_dir %>/kitchen + <% end %> platforms: # Loop through two lists and output a total matrix of all possible platform + chef versions, @@ -120,7 +136,6 @@ platforms: ed25519_platforms = [] use_ed25519 = ed25519_platforms.any? { |p| platform_name.include?(p) } - vm_username = ENV['VM_USERNAME'] ? ENV['VM_USERNAME'] : "datadog" vm_password = ENV['SERVER_PASSWORD'] %> @@ -160,6 +175,17 @@ platforms: username: <%= vm_username %> password: <%= vm_password %> + lifecycle: + # HACK: this is needed to install rexml for system-probe tests without using bundler, which cannot be used for now + # (see the explanation in tasks/run-test-kitchen.sh). + pre_verify: + - local: echo 'Installing rexml gem for the system-probe-test suite' + <% if windows %> + - remote: C:/opscode/chef/embedded/bin/gem.bat install rexml --install-dir C:/Users/<%= vm_username %>/AppData/Local/Temp/verifier/gems + <% else %> + - remote: /opt/chef/embedded/bin/gem install rexml --install-dir /tmp/verifier/gems + <% end %> + transport: <% if windows %> name: winrm diff --git a/test/kitchen/drivers/ec2-driver.yml b/test/kitchen/drivers/ec2-driver.yml index ed03091976dec..8e56b68b0bf11 100644 --- a/test/kitchen/drivers/ec2-driver.yml +++ b/test/kitchen/drivers/ec2-driver.yml @@ -102,13 +102,13 @@ platforms: image_id: <%= platform[1] %> block_device_mappings: <% if ENV['KITCHEN_ARCH'] == "arm64" %> - - device_name: /dev/sda1 + - device_name: <%= ENV['KITCHEN_EC2_DEVICE_NAME'] || "/dev/sda1" %> <% else %> - - device_name: /dev/xvda + - device_name: <%= ENV['KITCHEN_EC2_DEVICE_NAME'] || "/dev/xvda" %> <% end %> ebs: volume_type: gp2 - volume_size: 40 + volume_size: 45 delete_on_termination: true <% if allow_rsa_key || al2022 %> user_data: | @@ -143,6 +143,15 @@ platforms: let i+=${wait}; done; <% end %> + # HACK: this is needed to install rexml for system-probe tests without using bundler, which cannot be used for now + # (see the explanation in tasks/run-test-kitchen.sh). + pre_verify: + - local: echo 'Installing rexml gem for the system-probe-test suite' + <% if windows %> + - remote: C:/opscode/chef/embedded/bin/gem.bat install rexml --install-dir C:/Users/ec2-user/AppData/Local/Temp/verifier/gems + <% else %> + - remote: /opt/chef/embedded/bin/gem install rexml --install-dir /tmp/verifier/gems + <% end %> verifier: downloads: "/tmp/junit.tar.gz": kitchen-junit-<%= platform_name %>.tar.gz diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore b/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore index 52bab439b7c42..bae3233263f53 100644 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore +++ b/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore @@ -4,3 +4,4 @@ files/default/clang-bpf files/default/llc-bpf files/default/gotestsum files/default/test2json +files/default/minimized-btfs.tar.xz diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/metadata.rb b/test/kitchen/site-cookbooks/dd-system-probe-check/metadata.rb index eea1c13709790..c3ce3f2c0bc8d 100644 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/metadata.rb +++ b/test/kitchen/site-cookbooks/dd-system-probe-check/metadata.rb @@ -4,3 +4,4 @@ long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) version "0.1.0" depends "yum-centos", "~> 5.0.0" +depends 'docker' diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/docker_installation.rb b/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/docker_installation.rb new file mode 100644 index 0000000000000..a82779a257564 --- /dev/null +++ b/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/docker_installation.rb @@ -0,0 +1,56 @@ +case node[:platform] +when 'ubuntu', 'debian' + package 'gnupg' + + package 'unattended-upgrades' do + action :remove + end + + package 'xfsprogs' +when 'centos' + package 'xfsprogs' +when 'redhat' + execute 'install docker-compose' do + command <<-EOF + dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo + dnf install -y docker-ce-19.03.13 + EOF + user "root" + live_stream true + end +end + +case node[:platform] +when 'amazon' + docker_installation_package 'default' do + action :create + package_name 'docker' + package_options %q|-y| + end + + service 'docker' do + action [ :enable, :start ] + end +when 'ubuntu' + docker_installation_package 'default' do + action :create + package_name 'docker.io' + end +when 'redhat' + docker_service 'default' do + action [:start] + end +else + docker_service 'default' do + action [:create, :start] + end +end + +execute 'install docker-compose' do + command <<-EOF + curl -SL https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s | awk '{print tolower($0)}')-$(uname -m) -o /usr/bin/docker-compose + chmod 0755 /usr/bin/docker-compose + EOF + user "root" + live_stream true +end diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/linux.rb b/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/linux.rb index 6c54c23c181f1..9ac45b8ddbb31 100644 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/linux.rb +++ b/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/linux.rb @@ -80,6 +80,28 @@ action :run end +if Chef::SystemProbeHelpers::arm?(node) and node[:platform] == 'centos' + package 'cloud-utils-growpart' + package 'gdisk' + + execute 'increase space' do + command <<-EOF + df -h /tmp + + dev_name=$(df -h / | tail -n1 | awk '{print $1}') + dev_name=$(python3 -c "print(' '.join('$dev_name'.rsplit('p', 1)))") + dev_name_array=($dev_name) + + growpart ${dev_name_array[0]} ${dev_name_array[1]} + xfs_growfs -d / + df -h /tmp + EOF + user "root" + live_stream true + ignore_failure true + end +end + execute 'disable firewalld on redhat' do command "systemctl disable --now firewalld" user "root" @@ -162,3 +184,29 @@ directory "/tmp/pkgjson" do recursive true end + +# Install relevant packages for docker +include_recipe "::docker_installation" + +remote_directory "/tmp/kitchen-dockers" do + source 'dockers' + files_owner 'root' + files_group 'root' + files_mode '0750' + action :create + recursive true +end + +# Load docker images +execute 'install docker-compose' do + cwd '/tmp/kitchen-dockers' + command <<-EOF + for docker_file in $(ls); do + echo docker load -i $docker_file + docker load -i $docker_file + rm -rf $docker_file + done + EOF + user "root" + live_stream true +end diff --git a/test/kitchen/tasks/run-test-kitchen.sh b/test/kitchen/tasks/run-test-kitchen.sh index b9caaa8a0cbfb..5028eb84e1af2 100755 --- a/test/kitchen/tasks/run-test-kitchen.sh +++ b/test/kitchen/tasks/run-test-kitchen.sh @@ -149,8 +149,24 @@ set +o pipefail test_suites=".*" # This for loop retries kitchen tests failing because of infrastructure/networking issues for attempt in $(seq 0 "${KITCHEN_INFRASTRUCTURE_FLAKES_RETRY:-2}"); do - bundle exec kitchen verify "$test_suites" -c -d always 2>&1 | tee "/tmp/runlog${attempt}" - result=${PIPESTATUS[0]} + bundle exec kitchen converge "$test_suites" -c -d always 2>&1 | tee "/tmp/runlog${attempt}" + converge_result=${PIPESTATUS[0]} + + # HACK: Since December 24, 2022, the first verify attempt always fails, due to a bundler <-> ruby + # version issue at the start of the verifier. + # The kitchen verifier uses the latest version of busser (0.8.0). busser detects that we have rspec tests, + # and therefore installs the latest version of the busser-rspec gem (0.7.6). + # The busser-rspec gem has a postinstall hook that installs the latest versions of the rspec and bundler gems. + # The rspec install goes fine, but the bundler install fails since December 24, 2022, when 2.4.0 of bundler + # was released, which drops support for ruby < 2.6. + # Running kitchen verify another time does work, because the postinstall hook isn't run again, + # and we don't actually need bundler in the test suites (for suites that do have depedencies, we install them + # manually with lifecycle hooks in the platform definitions). + bundle exec kitchen verify "$test_suites" --no-log-overwrite -c -d always 2>&1 || true + + bundle exec kitchen verify "$test_suites" --no-log-overwrite -c -d always 2>&1 | tee -a "/tmp/runlog${attempt}" + verify_result=${PIPESTATUS[0]} + # Before destroying the kitchen machines, get the list of failed suites, # as their status will be reset to non-failing once they're destroyed. # failing_test_suites is a newline-separated list of the failing test suite names. @@ -170,7 +186,7 @@ for attempt in $(seq 0 "${KITCHEN_INFRASTRUCTURE_FLAKES_RETRY:-2}"); do break fi - if [ "$result" -eq 0 ]; then + if [ "$converge_result" -eq 0 ] && [ "$verify_result" -eq 0 ]; then # if kitchen test succeeded, exit with 0 exit 0 else diff --git a/test/kitchen/test/integration/security-agent-test/rspec/security-agent-test_spec.rb b/test/kitchen/test/integration/security-agent-test/rspec/security-agent-test_spec.rb index 817cd50d12d85..ce5902fc472b0 100644 --- a/test/kitchen/test/integration/security-agent-test/rspec/security-agent-test_spec.rb +++ b/test/kitchen/test/integration/security-agent-test/rspec/security-agent-test_spec.rb @@ -44,6 +44,15 @@ def check_output(output, wait_thr, tag="") end end end +when "ad" + describe 'activity dump functional test running on dedicated node' do + it 'successfully runs' do + Open3.popen2e({"DEDICATED_ACTIVITY_DUMP_NODE"=>"1", "DD_TESTS_RUNTIME_COMPILED"=>"1", "DD_RUNTIME_SECURITY_CONFIG_RUNTIME_COMPILATION_ENABLED"=>"true", "DD_SYSTEM_PROBE_BPF_DIR"=>"/tmp/security-agent/ebpf_bytecode"}, "sudo", "-E", "/tmp/security-agent/testsuite", "-test.v", "-status-metrics", "-test.run", "TestActivityDump") do |_, output, wait_thr| + test_failures = check_output(output, wait_thr, "a") + expect(test_failures).to be_empty, test_failures.join("\n") + end + end + end else raise "no CWS platform provided" end diff --git a/test/kitchen/test/integration/system-probe-test/rspec/Gemfile b/test/kitchen/test/integration/system-probe-test/rspec/Gemfile deleted file mode 100644 index e4324aac6dbce..0000000000000 --- a/test/kitchen/test/integration/system-probe-test/rspec/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'rspec' -gem 'rexml' diff --git a/test/new-e2e/containers/ecs_test.go b/test/new-e2e/containers/ecs_test.go new file mode 100644 index 0000000000000..82b4aea9a8cb7 --- /dev/null +++ b/test/new-e2e/containers/ecs_test.go @@ -0,0 +1,79 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package containers + +import ( + "context" + "errors" + "fmt" + "testing" + "time" + + "github.com/DataDog/test-infra-definitions/aws/ecs/ecs" + "github.com/cenkalti/backoff" + + "github.com/DataDog/datadog-agent/test/new-e2e/utils/credentials" + "github.com/DataDog/datadog-agent/test/new-e2e/utils/infra" + + "github.com/pulumi/pulumi/sdk/v3/go/auto" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/stretchr/testify/require" + + datadog "gopkg.in/zorkian/go-datadog-api.v2" +) + +func TestAgentOnECS(t *testing.T) { + // Fetching credentials + credentialsManager := credentials.NewManager() + apiKey, err := credentialsManager.GetCredential(credentials.AWSSSMStore, "agent.ci.dev.apikey") + require.NoError(t, err) + appKey, err := credentialsManager.GetCredential(credentials.AWSSSMStore, "agent.ci.dev.appkey") + require.NoError(t, err) + + // Creating the stack + parameters := auto.ConfigMap{ + "ddinfra:aws/ecs/linuxECSOptimizedNodeGroup": auto.ConfigValue{Value: "false"}, + "ddinfra:aws/ecs/linuxBottlerocketNodeGroup": auto.ConfigValue{Value: "false"}, + "ddinfra:aws/ecs/windowsLTSCNodeGroup": auto.ConfigValue{Value: "false"}, + "ddagent:apiKey": auto.ConfigValue{Value: apiKey, Secret: true}, + } + stackOutput, err := infra.GetStackManager().GetStack(context.Background(), "aws/sandbox", "ecs-cluster", parameters, func(ctx *pulumi.Context) error { + return ecs.Run(ctx) + }) + require.NoError(t, err) + + ecsClusterName := stackOutput.Outputs["ecs-cluster-name"].Value.(string) + ecsTaskFamily := stackOutput.Outputs["ecs-task-family"].Value.(string) + ecsTaskVersion := stackOutput.Outputs["ecs-task-version"].Value.(float64) + + // Check content in Datadog + datadogClient := datadog.NewClient(apiKey, appKey) + query := fmt.Sprintf("avg:ecs.fargate.cpu.user{ecs_cluster_name:%s,ecs_task_family:%s,ecs_task_version:%.0f} by {ecs_container_name}", ecsClusterName, ecsTaskFamily, ecsTaskVersion) + t.Log(query) + + err = backoff.Retry(func() error { + currentTime := time.Now().Unix() + series, err := datadogClient.QueryMetrics(currentTime-120, currentTime, query) + if err != nil { + return err + } + + if len(series) == 0 { + return errors.New("No data yet") + } + + if len(series) != 3 { + return errors.New("Not all containers") + } + + if series[0].Points[0][1] == nil || *series[0].Points[0][1] == 0 { + return errors.New("0-value") + } + + return nil + }, backoff.WithMaxRetries(backoff.NewConstantBackOff(20*time.Second), 20)) + require.NoError(t, err) +} diff --git a/test/new-e2e/containers/main_test.go b/test/new-e2e/containers/main_test.go new file mode 100644 index 0000000000000..566066c129fc4 --- /dev/null +++ b/test/new-e2e/containers/main_test.go @@ -0,0 +1,25 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package containers + +import ( + "context" + "fmt" + "os" + "testing" + + "github.com/DataDog/datadog-agent/test/new-e2e/utils/infra" +) + +func TestMain(m *testing.M) { + code := m.Run() + fmt.Fprintf(os.Stderr, "Cleaning up stacks") + errs := infra.GetStackManager().Cleanup(context.Background()) + for _, err := range errs { + fmt.Fprint(os.Stderr, err.Error()) + } + os.Exit(code) +} diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod new file mode 100644 index 0000000000000..6155e04bbd60e --- /dev/null +++ b/test/new-e2e/go.mod @@ -0,0 +1,104 @@ +module github.com/DataDog/datadog-agent/test/new-e2e + +go 1.18 + +require ( + github.com/DataDog/test-infra-definitions v0.0.0-20221213160310-a4b5a27ec1dd + github.com/aws/aws-sdk-go-v2 v1.17.2 + github.com/aws/aws-sdk-go-v2/config v1.18.4 + github.com/aws/aws-sdk-go-v2/service/ssm v1.33.2 + github.com/cenkalti/backoff v2.2.1+incompatible + github.com/pulumi/pulumi/sdk/v3 v3.49.0 + github.com/stretchr/testify v1.8.1 + golang.org/x/crypto v0.4.0 + gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 +) + +require ( + github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect + github.com/Masterminds/semver v1.5.0 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 // indirect + github.com/acomagu/bufpipe v1.0.3 // indirect + github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.4 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.11.26 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.17.6 // indirect + github.com/aws/smithy-go v1.13.5 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/cheggaaa/pb v1.0.29 // indirect + github.com/cloudflare/circl v1.3.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/djherbis/times v1.5.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-git/gcfg v1.5.0 // indirect + github.com/go-git/go-billy/v5 v5.3.1 // indirect + github.com/go-git/go-git/v5 v5.5.1 // indirect + github.com/gofrs/uuid v4.3.1+incompatible // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.0.0 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/imdario/mergo v0.3.13 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.16 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/nxadm/tail v1.4.8 // indirect + github.com/opentracing/basictracer-go v1.1.0 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pjbgf/sha1cd v0.2.3 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pkg/term v1.1.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pulumi/pulumi-aws/sdk/v5 v5.23.0 // indirect + github.com/pulumi/pulumi-awsx/sdk v1.0.0 // indirect + github.com/pulumi/pulumi-command/sdk v0.7.0 // indirect + github.com/pulumi/pulumi-docker/sdk/v3 v3.6.1 // indirect + github.com/pulumi/pulumi-kubernetes/sdk/v3 v3.22.2 // indirect + github.com/rivo/uniseg v0.4.3 // indirect + github.com/rogpeppe/go-internal v1.9.0 // indirect + github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.1.1 // indirect + github.com/sergi/go-diff v1.2.0 // indirect + github.com/skeema/knownhosts v1.1.0 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cobra v1.6.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/texttheater/golang-levenshtein v1.0.1 // indirect + github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 // indirect + github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect + github.com/uber/jaeger-lib v2.4.1+incompatible // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect + github.com/zorkian/go-datadog-api v2.30.0+incompatible // indirect + go.uber.org/atomic v1.10.0 // indirect + golang.org/x/mod v0.7.0 // indirect + golang.org/x/net v0.4.0 // indirect + golang.org/x/sys v0.3.0 // indirect + golang.org/x/term v0.3.0 // indirect + golang.org/x/text v0.5.0 // indirect + golang.org/x/tools v0.4.0 // indirect + google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37 // indirect + google.golang.org/grpc v1.51.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + lukechampine.com/frand v1.4.2 // indirect + sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600 // indirect +) diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum new file mode 100644 index 0000000000000..ac7f6586fbae0 --- /dev/null +++ b/test/new-e2e/go.sum @@ -0,0 +1,503 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/test-infra-definitions v0.0.0-20221213160310-a4b5a27ec1dd h1:NoPGW4gyLfOMlr10Eya/vv4vfw1nuaSxgqWhv4bNpuQ= +github.com/DataDog/test-infra-definitions v0.0.0-20221213160310-a4b5a27ec1dd/go.mod h1:weTpRyRbOZYDpYk06wIROZysIkYP3o0+QYErkcSJV8U= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= +github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= +github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aws/aws-sdk-go-v2 v1.17.2 h1:r0yRZInwiPBNpQ4aDy/Ssh3ROWsGtKDwar2JS8Lm+N8= +github.com/aws/aws-sdk-go-v2 v1.17.2/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/config v1.18.4 h1:VZKhr3uAADXHStS/Gf9xSYVmmaluTUfkc0dcbPiDsKE= +github.com/aws/aws-sdk-go-v2/config v1.18.4/go.mod h1:EZxMPLSdGAZ3eAmkqXfYbRppZJTzFTkv8VyEzJhKko4= +github.com/aws/aws-sdk-go-v2/credentials v1.13.4 h1:nEbHIyJy7mCvQ/kzGG7VWHSBpRB4H6sJy3bWierWUtg= +github.com/aws/aws-sdk-go-v2/credentials v1.13.4/go.mod h1:/Cj5w9LRsNTLSwexsohwDME32OzJ6U81Zs33zr2ZWOM= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20 h1:tpNOglTZ8kg9T38NpcGBxudqfUAwUzyUnLQ4XSd0CHE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20/go.mod h1:d9xFpWd3qYwdIXM0fvu7deD08vvdRXyc/ueV+0SqaWE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26 h1:5WU31cY7m0tG+AiaXuXGoMzo2GBQ1IixtWa8Yywsgco= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26/go.mod h1:2E0LdbJW6lbeU4uxjum99GZzI0ZjDpAb0CoSCM0oeEY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20 h1:WW0qSzDWoiWU2FS5DbKpxGilFVlCEJPwx4YtjdfI0Jw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20/go.mod h1:/+6lSiby8TBFpTVXZgKiN/rCfkYXEGvhlM4zCgPpt7w= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27 h1:N2eKFw2S+JWRCtTt0IhIX7uoGGQciD4p6ba+SJv4WEU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27/go.mod h1:RdwFVc7PBYWY33fa2+8T1mSqQ7ZEK4ILpM0wfioDC3w= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20 h1:jlgyHbkZQAgAc7VIxJDmtouH8eNjOk2REVAQfVhdaiQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20/go.mod h1:Xs52xaLBqDEKRcAfX/hgjmD3YQ7c/W+BEyfamlO/W2E= +github.com/aws/aws-sdk-go-v2/service/ssm v1.33.2 h1:NXq6I98AZ3rrnykgTp93ik4RykmYEInnGDc4I/mYQNk= +github.com/aws/aws-sdk-go-v2/service/ssm v1.33.2/go.mod h1:bUqD3OXwwp4e+IPXVPfp6g/7OyiSesUjqHwOcwtfZBM= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.26 h1:ActQgdTNQej/RuUJjB9uxYVLDOvRGtUreXF8L3c8wyg= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.26/go.mod h1:uB9tV79ULEZUXc6Ob18A46KSQ0JDlrplPni9XW6Ot60= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9 h1:wihKuqYUlA2T/Rx+yu2s6NDAns8B9DgnRooB1PVhY+Q= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9/go.mod h1:2E/3D/mB8/r2J7nK42daoKP/ooCwbf0q1PznNc+DZTU= +github.com/aws/aws-sdk-go-v2/service/sts v1.17.6 h1:VQFOLQVL3BrKM/NLO/7FiS4vcp5bqK0mGMyk09xLoAY= +github.com/aws/aws-sdk-go-v2/service/sts v1.17.6/go.mod h1:Az3OXXYGyfNwQNsK/31L4R75qFYnO641RZGAoV3uH1c= +github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= +github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cheggaaa/pb v1.0.18/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= +github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/circl v1.3.0 h1:Anq00jxDtoyX3+aCaYUZ0vXC5r4k4epberfWGDXV1zE= +github.com/cloudflare/circl v1.3.0/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/djherbis/times v1.2.0/go.mod h1:CGMZlo255K5r4Yw0b9RRfFQpM2y7uOmxg4jm9HsaVf8= +github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU= +github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= +github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= +github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= +github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= +github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= +github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= +github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= +github.com/go-git/go-git/v5 v5.5.1 h1:5vtv2TB5PM/gPM+EvsHJ16hJh4uAkdGcKilcwY7FYwo= +github.com/go-git/go-git/v5 v5.5.1/go.mod h1:uz5PQ3d0gz7mSgzZhSJToM6ALPaKCdSnl58/Xb5hzr8= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.3.1+incompatible h1:0/KbAdpx3UXAx1kEOWHJeOkpbgRFGHVgv+CFIY7dBJI= +github.com/gofrs/uuid v4.3.1+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= +github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= +github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= +github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= +github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/pulumi/pulumi-aws/sdk/v5 v5.23.0 h1:QTfjGgR0m8EonOJV+RNBG8r2Y1pgjqmxf3n4uYTq60g= +github.com/pulumi/pulumi-aws/sdk/v5 v5.23.0/go.mod h1:Ro2eNbpP/uGWMMvtBDrVph+jdL/G6+IiGB6kj+kDRYM= +github.com/pulumi/pulumi-awsx/sdk v1.0.0 h1:QIoPaK/ZYMduigfSrNHmA57n48lg0mG6cE663TKGXTs= +github.com/pulumi/pulumi-awsx/sdk v1.0.0/go.mod h1:sf1iASa+6i6APeHKigYeyoHl6hbNIOOdQL9awmMNWqo= +github.com/pulumi/pulumi-command/sdk v0.7.0 h1:gBxTtg6lY29wbu/XZHsLo6Syoc2yieDmTrSAuxLBRb4= +github.com/pulumi/pulumi-command/sdk v0.7.0/go.mod h1:YX0Ri1ezMr4mk8j4S/S1gjJpidt63mMG2C+VXDoTlpU= +github.com/pulumi/pulumi-docker/sdk/v3 v3.6.1 h1:plWLn9O6u80Vr37LoCsckyobBfcrdTU9cERor72QjqA= +github.com/pulumi/pulumi-docker/sdk/v3 v3.6.1/go.mod h1:N4Yu4c49QErfucPt9Y/fGmpTryRqc0VfhyKHsGR9/g8= +github.com/pulumi/pulumi-kubernetes/sdk/v3 v3.22.2 h1:MuiXmsQfXzlJosSH5CWqPlGMgxg4xnKMu5UwJBCzn2w= +github.com/pulumi/pulumi-kubernetes/sdk/v3 v3.22.2/go.mod h1:fv2nZ3nS1jNk6+EMOmO2MaS5Oyj2rOXT9ZIP/7q5YGI= +github.com/pulumi/pulumi/sdk/v3 v3.48.0/go.mod h1:n5EPRVFDh+EFwYZ+oaZmEtwgVN1A6NnI82B7ks/bmTU= +github.com/pulumi/pulumi/sdk/v3 v3.49.0 h1:DSIeLJVPj7H+9fWjx/LguqDclzhiz90uhxERbMiHM+A= +github.com/pulumi/pulumi/sdk/v3 v3.49.0/go.mod h1:58NOiU6vEdA0S8KFiFt4/eqH7vKtWhDFsEGCUFRBovw= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94/go.mod h1:b18R55ulyQ/h3RaWyloPyER7fWQVZvimKKhnI5OfrJQ= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= +github.com/santhosh-tekuri/jsonschema/v5 v5.1.1 h1:lEOLY2vyGIqKWUI9nzsOJRV3mb3WC9dXYORsLEUcoeY= +github.com/santhosh-tekuri/jsonschema/v5 v5.1.1/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= +github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= +github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= +github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= +github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 h1:X9dsIWPuuEJlPX//UmRKophhOKCGXc46RVIGuttks68= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7/go.mod h1:UxoP3EypF8JfGEjAII8jx1q8rQyDnX8qdTCs/UQBVIE= +github.com/uber/jaeger-client-go v2.22.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zorkian/go-datadog-api v2.30.0+incompatible h1:R4ryGocppDqZZbnNc5EDR8xGWF/z/MxzWnqTUijDQes= +github.com/zorkian/go-datadog-api v2.30.0+incompatible/go.mod h1:PkXwHX9CUQa/FpB9ZwAD45N1uhCW4MT/Wj7m36PbKss= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220824171710-5757bc0c5503/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= +golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220823224334-20c2bfdbfe24/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37 h1:jmIfw8+gSvXcZSgaFAGyInDXeWzUhvYH57G/5GKMn70= +google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 h1:umQdVO0Ytx+kYadhuJNjFtDgIsIEBnKrOTvNuu8ClKI= +gopkg.in/zorkian/go-datadog-api.v2 v2.30.0/go.mod h1:kx0CSMRpzEZfx/nFH62GLU4stZjparh/BRpM89t4XCQ= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +lukechampine.com/frand v1.4.2 h1:RzFIpOvkMXuPMBb9maa4ND4wjBn71E1Jpf8BzJHMaVw= +lukechampine.com/frand v1.4.2/go.mod h1:4S/TM2ZgrKejMcKMbeLjISpJMO+/eZ1zu3vYX9dtj3s= +pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= +pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600 h1:hfyJ5ku9yFtLVOiSxa3IN+dx5eBQT9mPmKFypAmg8XM= +sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/test/new-e2e/ndm/snmp/compose/data/apc_ups.snmprec b/test/new-e2e/ndm/snmp/compose/data/apc_ups.snmprec new file mode 100644 index 0000000000000..51caca45cf3b6 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/apc_ups.snmprec @@ -0,0 +1,613 @@ +1.3.6.1.2.1.1.1.0|4|APC Web/SNMP Management Card (MB:v3.9.2 PF:v3.9.2 PN:apc_hw02_aos_392.bin AF1:v3.7.2 AN1:apc_hw02_sumx_372.bin MN:AP9619 HR:A10 SN: 5A1827E00000 MD:12/04/2007) (Embedded PowerNet SNMP Agent SW v2.2 compatible) +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.318.1.1.1 +1.3.6.1.4.1.318.1.1.1.1.1.1.0|4|APC Smart-UPS 600 +1.3.6.1.4.1.318.1.1.1.1.1.2.0|4|testIdentName +1.3.6.1.4.1.318.1.1.1.1.2.1.0|4|2.0.3-test +1.3.6.1.4.1.318.1.1.1.1.2.2.0|4x|666f7277617264206163746564207468656972204a6164656420717561696e746c79207a6f6d6269657320717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.318.1.1.1.1.2.3.0|4|test_serial +1.3.6.1.4.1.318.1.1.1.1.2.4.0|4x|64726976696e67206b657074207a6f6d62696573204a61646564204a61646564206b657074 +1.3.6.1.4.1.318.1.1.1.1.2.5.0|4x|4a61646564206163746564206b657074 +1.3.6.1.4.1.318.1.1.1.2.1.1.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.1.2.0|67|2281169700 +1.3.6.1.4.1.318.1.1.1.2.1.3.0|4x|666f7277617264206f78656e20627574 +1.3.6.1.4.1.318.1.1.1.2.2.1.0|66|1560689601 +1.3.6.1.4.1.318.1.1.1.2.2.2.0|66|1179156899 +1.3.6.1.4.1.318.1.1.1.2.2.3.0|67|1472879197 +1.3.6.1.4.1.318.1.1.1.2.2.4.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.5.0|2|17 +1.3.6.1.4.1.318.1.1.1.2.2.6.0|2|31 +1.3.6.1.4.1.318.1.1.1.2.2.7.0|2|16 +1.3.6.1.4.1.318.1.1.1.2.2.8.0|2|11 +1.3.6.1.4.1.318.1.1.1.2.2.9.0|2|12 +1.3.6.1.4.1.318.1.1.1.2.2.10.0|2|10 +1.3.6.1.4.1.318.1.1.1.2.2.11.0|2|17 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.1|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.5|2|5 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.10|2|10 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.14|2|14 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.18|2|18 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.25|2|25 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.1|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.5|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.7|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.10|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.14|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.18|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.22|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.25|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.0|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.1|2|5 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.5|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.7|2|4 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.10|2|8 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.14|2|22 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.18|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.22|2|26 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.25|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.1|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.3|2|3 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.8|2|8 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.9|2|9 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.12|2|12 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.21|2|21 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.23|2|23 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.24|2|24 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.1|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.3|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.8|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.9|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.12|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.21|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.22|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.23|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.24|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.0|2|21 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.1|2|10 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.3|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.8|2|4 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.9|2|20 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.12|2|17 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.21|2|23 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.22|2|13 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.23|2|5 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.24|2|16 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.2.26|2|2 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.7.29|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.8.0|2|8 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.13.22|2|13 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.17.19|2|17 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.25.29|2|25 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.27.21|2|27 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.29.12|2|29 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.30.3|2|30 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.2.26|2|26 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.7.29|2|29 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.8.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.13.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.17.19|2|19 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.25.29|2|29 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.27.21|2|21 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.29.12|2|12 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.30.3|2|3 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.2.26|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.7.29|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.8.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.13.22|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.17.19|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.25.29|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.27.21|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.29.12|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.30.3|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.2.26|2|5 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.7.29|2|14 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.8.0|2|27 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.13.22|2|21 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.17.19|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.25.29|2|11 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.27.21|2|8 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.29.12|2|27 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.30.3|2|11 +1.3.6.1.4.1.318.1.1.1.2.2.15.0|67|3648468618 +1.3.6.1.4.1.318.1.1.1.2.2.16.0|2|30 +1.3.6.1.4.1.318.1.1.1.2.2.17.0|2|2 +1.3.6.1.4.1.318.1.1.1.2.2.19.0|4x|4a61646564206b657074 +1.3.6.1.4.1.318.1.1.1.2.2.20.0|4x|6b657074206163746564 +1.3.6.1.4.1.318.1.1.1.2.2.21.0|4x|64726976696e67206f78656e207a6f6d6269657320717561696e746c7920717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.1.0|66|38240162 +1.3.6.1.4.1.318.1.1.1.2.3.2.0|66|2948084659 +1.3.6.1.4.1.318.1.1.1.2.3.3.0|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.4.0|2|30 +1.3.6.1.4.1.318.1.1.1.2.3.5.0|2|30 +1.3.6.1.4.1.318.1.1.1.2.3.6.0|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.2|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.9|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.18|2|18 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.21|2|21 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.23|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.24|2|24 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.2|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.7|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.9|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.15|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.18|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.21|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.23|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.24|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.2|2|5 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.7|2|18 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.9|2|29 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.15|2|17 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.18|2|15 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.21|2|14 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.23|2|20 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.24|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.1|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.5|2|5 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.6|2|6 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.10|2|10 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.11|2|11 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.23|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.25|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.1|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.5|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.6|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.10|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.11|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.15|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.22|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.23|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.25|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.0|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.1|2|6 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.5|2|28 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.6|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.10|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.11|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.15|2|21 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.22|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.23|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.25|2|19 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.0.17|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.0.25|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.4.31|2|4 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.6.12|2|6 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.10.7|2|10 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.14.27|2|14 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.18.24|2|18 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.21.17|2|21 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.22.26|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.25.17|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.0.17|2|17 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.0.25|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.4.31|2|31 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.6.12|2|12 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.10.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.14.27|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.18.24|2|24 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.21.17|2|17 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.22.26|2|26 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.25.17|2|17 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.0.17|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.0.25|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.4.31|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.6.12|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.10.7|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.14.27|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.18.24|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.21.17|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.22.26|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.25.17|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.0.17|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.0.25|2|4 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.4.31|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.6.12|2|29 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.10.7|2|13 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.14.27|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.18.24|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.21.17|2|30 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.22.26|2|4 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.25.17|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.10.1.0|2|10 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.2.26|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.3.27|2|3 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.19.24|2|19 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.22.12|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.23.7|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.23.9|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.26.7|2|26 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.26.22|2|26 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.27.5|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.30.29|2|30 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.2.26|2|26 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.3.27|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.19.24|2|24 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.22.12|2|12 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.23.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.23.9|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.26.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.26.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.27.5|2|5 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.30.29|2|29 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.2.26|4x|7a6f6d6269657320666f727761726420666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.3.27|4x|64726976696e67207a6f6d62696573207a6f6d6269657320666f727761726420666f7277617264206f78656e206b6570742064726976696e67204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.19.24|4x|6b657074204a61646564207468656972207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.22.12|4x|6f78656e204a6164656420666f7277617264207a6f6d62696573206b657074207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.23.7|4x|64726976696e6720666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.23.9|4x|7468656972206b65707420616374656420627574 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.26.7|4x|7a6f6d6269657320627574206f78656e20627574 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.26.22|4x|616374656420746865697220717561696e746c7920717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.27.5|4x|62757420666f7277617264204a6164656420666f7277617264207a6f6d62696573206f78656e20627574204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.30.29|4x|7a6f6d62696573206f78656e20666f7277617264206b657074207468656972204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.2.26|4x|666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.3.27|4x|7a6f6d62696573207a6f6d62696573206f78656e206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.19.24|4x|6f78656e20717561696e746c7920616374656420627574204a61646564207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.22.12|4x|6b6570742064726976696e67204a61646564207a6f6d6269657320666f7277617264206b657074204a6164656420666f7277617264207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.23.7|4x|717561696e746c79206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.23.9|4|kept +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.26.7|4x|64726976696e67206163746564206163746564206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.26.22|4x|4a616465642064726976696e672064726976696e67207a6f6d62696573206f78656e20666f727761726420666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.27.5|4|oxen +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.30.29|4x|7a6f6d62696573206f78656e204a61646564204a6164656420717561696e746c79206163746564206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.2.26|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.3.27|2|28 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.19.24|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.22.12|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.23.7|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.23.9|2|14 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.26.7|2|24 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.26.22|2|18 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.27.5|2|31 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.30.29|2|4 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.2.26|4|their +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.3.27|4x|6b657074207a6f6d62696573206b657074206163746564206b657074206f78656e206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.19.24|4x|64726976696e6720717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.22.12|4x|717561696e746c79206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.23.7|4|forward +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.23.9|4x|6f78656e2064726976696e6720717561696e746c7920666f7277617264204a61646564206f78656e204a6164656420666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.26.7|4x|7a6f6d6269657320746865697220627574207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.26.22|4x|4a616465642074686569722064726976696e67207468656972204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.27.5|4x|7468656972206163746564206275742064726976696e67204a61646564207a6f6d626965732064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.30.29|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.2.26|4x|7a6f6d6269657320746865697220666f7277617264207468656972206163746564207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.3.27|4|oxen +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.19.24|4x|6b65707420666f7277617264206f78656e207468656972206b657074207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.22.12|4x|6163746564206b657074206f78656e206b65707420666f727761726420666f7277617264206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.23.7|4|Jaded +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.23.9|4x|666f7277617264206f78656e206f78656e207a6f6d6269657320666f7277617264204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.26.7|4x|616374656420717561696e746c79207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.26.22|4x|627574206b657074206b657074206b657074207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.27.5|4x|6163746564207a6f6d62696573204a61646564206b65707420666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.30.29|4x|7a6f6d62696573207468656972204a61646564207468656972204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.2.26|4x|64726976696e67207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.3.27|4x|6163746564207a6f6d6269657320616374656420717561696e746c792062757420717561696e746c7920627574 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.19.24|4x|6163746564207a6f6d62696573204a616465642062757420616374656420616374656420746865697220666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.22.12|4x|6163746564204a61646564204a616465642064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.23.7|4x|64726976696e67204a61646564206163746564207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.23.9|4x|61637465642064726976696e672064726976696e672064726976696e67207a6f6d6269657320666f7277617264206b657074206b657074206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.26.7|4x|6f78656e207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.26.22|4x|717561696e746c792074686569722064726976696e6720666f72776172642062757420666f727761726420627574204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.27.5|4x|6275742061637465642064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.30.29|4|acted +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.2.26|4x|6163746564206b657074207468656972207a6f6d62696573206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.3.27|4x|6b657074206163746564206b657074206f78656e20717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.19.24|4x|717561696e746c7920717561696e746c79206163746564207a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.22.12|4|their +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.23.7|4x|6b65707420616374656420627574 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.23.9|4|acted +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.26.7|4x|717561696e746c79204a61646564207a6f6d6269657320746865697220627574206163746564207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.26.22|4x|666f7277617264207a6f6d6269657320627574207468656972204a6164656420746865697220666f727761726420666f7277617264206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.27.5|4x|7a6f6d6269657320666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.30.29|4|their +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.2.26|4x|666f727761726420616374656420627574207a6f6d6269657320717561696e746c7920746865697220666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.3.27|4x|6b657074206b65707420627574207468656972207a6f6d62696573206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.19.24|4x|6b6570742061637465642064726976696e6720666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.22.12|4x|64726976696e67207468656972207a6f6d6269657320666f72776172642062757420717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.23.7|4x|627574207468656972207468656972206163746564207a6f6d62696573204a61646564207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.23.9|4x|6163746564206b657074206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.26.7|4x|7a6f6d626965732064726976696e67204a61646564206f78656e207a6f6d6269657320666f727761726420666f7277617264206f78656e207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.26.22|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.27.5|4x|7a6f6d6269657320717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.30.29|4x|616374656420666f727761726420666f727761726420627574206b65707420717561696e746c7920627574 +1.3.6.1.4.1.318.1.1.1.3.1.1.0|2|5 +1.3.6.1.4.1.318.1.1.1.3.2.1.0|66|4072212830 +1.3.6.1.4.1.318.1.1.1.3.2.2.0|66|1535446494 +1.3.6.1.4.1.318.1.1.1.3.2.3.0|66|3248693327 +1.3.6.1.4.1.318.1.1.1.3.2.4.0|66|3401339341 +1.3.6.1.4.1.318.1.1.1.3.2.5.0|2|6 +1.3.6.1.4.1.318.1.1.1.3.2.6.0|2|4 +1.3.6.1.4.1.318.1.1.1.3.2.7.0|2|27 +1.3.6.1.4.1.318.1.1.1.3.2.8.0|2|25 +1.3.6.1.4.1.318.1.1.1.3.2.9.0|2|16 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.2|2|2 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.6|2|6 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.8|2|8 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.10|2|10 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.16|2|16 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.17|2|17 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.20|2|20 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.26|2|26 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.2|2|30 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.6|2|11 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.8|2|26 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.10|2|7 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.15|2|4 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.16|2|5 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.17|2|15 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.20|2|16 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.26|2|28 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.2|2|21 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.6|2|9 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.8|2|19 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.10|2|2 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.15|2|2 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.16|2|4 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.17|2|19 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.20|2|22 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.26|2|23 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.2|2|25 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.6|2|1 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.8|2|28 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.10|2|15 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.15|2|11 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.16|2|12 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.17|2|24 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.20|2|9 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.26|2|3 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.2|2|13 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.6|2|31 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.8|2|2 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.10|2|7 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.15|2|1 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.16|2|22 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.17|2|11 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.20|2|21 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.26|2|13 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.2|2|5 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.6|2|1 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.8|2|29 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.10|2|31 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.15|2|16 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.16|2|20 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.17|2|17 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.20|2|3 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.26|2|14 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.2|2|3 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.6|2|28 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.8|2|12 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.10|2|26 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.15|2|27 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.16|2|5 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.17|2|0 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.20|2|30 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.26|2|28 +1.3.6.1.4.1.318.1.1.1.3.2.11.0|2|11 +1.3.6.1.4.1.318.1.1.1.3.2.12.0|2|14 +1.3.6.1.4.1.318.1.1.1.3.2.13.0|2|24 +1.3.6.1.4.1.318.1.1.1.3.2.14.0|2|26 +1.3.6.1.4.1.318.1.1.1.3.3.1.0|66|637077047 +1.3.6.1.4.1.318.1.1.1.3.3.2.0|66|3527777113 +1.3.6.1.4.1.318.1.1.1.3.3.3.0|66|3018338698 +1.3.6.1.4.1.318.1.1.1.3.3.4.0|66|1506429297 +1.3.6.1.4.1.318.1.1.1.3.3.5.0|66|50912 +1.3.6.1.4.1.318.1.1.1.3.3.6.0|66|5699 +1.3.6.1.4.1.318.1.1.1.3.3.7.0|66|33661 +1.3.6.1.4.1.318.1.1.1.4.1.1.0|2|10 +1.3.6.1.4.1.318.1.1.1.4.1.2.0|2|5 +1.3.6.1.4.1.318.1.1.1.4.1.3.0|2|3 +1.3.6.1.4.1.318.1.1.1.4.1.4.0|2|6 +1.3.6.1.4.1.318.1.1.1.4.1.5.0|2|3 +1.3.6.1.4.1.318.1.1.1.4.1.6.0|2|2 +1.3.6.1.4.1.318.1.1.1.4.1.7.0|2|3 +1.3.6.1.4.1.318.1.1.1.4.2.1.0|66|4185594960 +1.3.6.1.4.1.318.1.1.1.4.2.2.0|66|1756892535 +1.3.6.1.4.1.318.1.1.1.4.2.3.0|66|3155186359 +1.3.6.1.4.1.318.1.1.1.4.2.4.0|66|913553071 +1.3.6.1.4.1.318.1.1.1.4.2.5.0|66|178941591 +1.3.6.1.4.1.318.1.1.1.4.2.6.0|2|25 +1.3.6.1.4.1.318.1.1.1.4.2.7.0|2|29 +1.3.6.1.4.1.318.1.1.1.4.2.8.0|2|1 +1.3.6.1.4.1.318.1.1.1.4.2.9.0|2|7 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.3|2|3 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.10|2|10 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.24|2|24 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.25|2|25 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.27|2|27 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.28|2|28 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.29|2|29 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.31|2|31 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.0|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.3|2|7 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.10|2|0 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.24|2|4 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.25|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.27|2|17 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.28|2|28 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.29|2|4 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.31|2|7 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.0|2|8 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.3|2|10 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.10|2|26 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.24|2|30 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.25|2|26 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.27|2|28 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.28|2|21 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.29|2|5 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.31|2|23 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.0|2|5 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.3|2|14 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.10|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.24|2|13 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.25|2|17 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.27|2|21 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.28|2|7 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.29|2|0 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.31|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.11.0|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.12.0|2|20 +1.3.6.1.4.1.318.1.1.1.4.3.1.0|66|3489953300 +1.3.6.1.4.1.318.1.1.1.4.3.2.0|66|3300892168 +1.3.6.1.4.1.318.1.1.1.4.3.3.0|66|1698328203 +1.3.6.1.4.1.318.1.1.1.4.3.4.0|66|4279608909 +1.3.6.1.4.1.318.1.1.1.4.3.5.0|2|31 +1.3.6.1.4.1.318.1.1.1.4.3.6.0|66|51951 +1.3.6.1.4.1.318.1.1.1.5.1.1.0|2|22 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.2|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.4|2|4 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.9|2|9 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.13|2|13 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.18|2|18 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.19|2|19 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.23|2|23 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.26|2|26 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.27|2|27 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.2|4x|717561696e746c79206f78656e +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.4|4x|616374656420666f7277617264206275742062757420717561696e746c79207a6f6d62696573207a6f6d62696573206163746564204a61646564 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.9|4x|4a61646564204a61646564207a6f6d6269657320666f727761726420717561696e746c79207468656972204a61646564207468656972206163746564 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.13|4x|627574204a61646564207468656972204a61646564206163746564 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.18|4x|4a61646564204a61646564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.19|4x|64726976696e6720746865697220717561696e746c79206b657074204a6164656420717561696e746c792064726976696e67207468656972 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.23|4x|6163746564204a61646564207a6f6d62696573207a6f6d62696573204a616465642064726976696e67 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.26|4x|746865697220627574206f78656e206f78656e206b657074204a61646564206f78656e +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.27|4x|4a616465642062757420717561696e746c79 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.2|2|31 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.4|2|26 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.9|2|9 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.13|2|26 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.18|2|3 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.19|2|7 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.23|2|21 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.26|2|13 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.27|2|7 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.2|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.4|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.9|2|1 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.13|2|1 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.18|2|1 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.19|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.23|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.26|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.27|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.1.0|2|24 +1.3.6.1.4.1.318.1.1.1.5.2.2.0|2|9 +1.3.6.1.4.1.318.1.1.1.5.2.3.0|2|20 +1.3.6.1.4.1.318.1.1.1.5.2.4.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.5.0|67|2150908910 +1.3.6.1.4.1.318.1.1.1.5.2.6.0|2|5 +1.3.6.1.4.1.318.1.1.1.5.2.7.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.8.0|67|385065057 +1.3.6.1.4.1.318.1.1.1.5.2.9.0|67|4287371001 +1.3.6.1.4.1.318.1.1.1.5.2.10.0|67|4128486802 +1.3.6.1.4.1.318.1.1.1.5.2.11.0|67|2140484210 +1.3.6.1.4.1.318.1.1.1.5.2.12.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.12|2|12 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.14|2|14 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.16|2|16 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.17|2|17 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.21|2|21 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.24|2|24 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.25|2|25 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.12|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.14|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.15|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.16|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.17|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.21|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.24|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.25|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.14.0|67|3090446300 +1.3.6.1.4.1.318.1.1.1.5.2.15.0|4x|61637465642064726976696e67206163746564 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.4|2|4 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.11|2|11 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.12|2|12 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.13|2|13 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.16|2|16 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.17|2|17 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.20|2|20 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.28|2|28 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.0|6|1.3.6.1.3.200.114.30.67.215.95.144.202.103 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.4|6|1.3.6.1.3.32.206.164.137.235.155.190 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.11|6|1.3.6.1.3.65.22.136 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.12|6|1.3.6.1.3.63.95.196.158 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.13|6|1.3.6.1.3.178.61.99.254.79.132.9.151.230 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.16|6|1.3.6.1.3.183.246.117.161.146.61 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.17|6|1.3.6.1.3.147.70.179 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.20|6|1.3.6.1.3 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.28|6|1.3.6.1.3.61.19.76.34.168.37 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.0|4x|616374656420616374656420717561696e746c7920717561696e746c79206b6570742074686569722064726976696e67 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.4|4x|666f7277617264207a6f6d6269657320627574204a61646564206f78656e207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.11|4x|6f78656e207468656972206b657074207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.12|4x|64726976696e67206275742062757420666f7277617264 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.13|4x|6f78656e206b6570742064726976696e67206b657074207468656972 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.16|4x|666f7277617264204a6164656420746865697220627574207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.17|4x|64726976696e67204a6164656420666f72776172642062757420746865697220666f727761726420717561696e746c79 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.20|4x|627574204a61646564206f78656e206f78656e +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.28|4x|616374656420616374656420666f727761726420666f72776172642064726976696e6720717561696e746c79 +1.3.6.1.4.1.318.1.1.1.5.2.17.0|2|7 +1.3.6.1.4.1.318.1.1.1.5.2.18.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.19.0|2|10 +1.3.6.1.4.1.318.1.1.1.5.2.20.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.21.0|2|27 +1.3.6.1.4.1.318.1.1.1.5.2.22.0|2|10 +1.3.6.1.4.1.318.1.1.1.5.2.23.0|2|28 +1.3.6.1.4.1.318.1.1.1.5.2.24.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.25.0|2|29 +1.3.6.1.4.1.318.1.1.1.5.2.26.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.27.0|2|0 +1.3.6.1.4.1.318.1.1.1.5.2.28.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.29.0|67|4010835390 +1.3.6.1.4.1.318.1.1.1.5.2.30.0|67|1782930428 +1.3.6.1.4.1.318.1.1.1.5.2.31.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.32.0|2|6 +1.3.6.1.4.1.318.1.1.1.5.2.33.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.34.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.35.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.36.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.37.0|2|13 +1.3.6.1.4.1.318.1.1.1.5.2.38.0|2|4 +1.3.6.1.4.1.318.1.1.1.5.2.39.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.40.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.41.0|2|6 +1.3.6.1.4.1.318.1.1.1.5.2.43.0|2|6 +1.3.6.1.4.1.318.1.1.1.5.2.44.0|2|11 +1.3.6.1.4.1.318.1.1.1.5.2.45.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.46.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.47.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.48.0|2|25 +1.3.6.1.4.1.318.1.1.1.5.2.49.0|2|1 +1.3.6.1.4.1.318.1.1.1.6.1.1.0|2|1 +1.3.6.1.4.1.318.1.1.1.6.2.1.0|2|5 +1.3.6.1.4.1.318.1.1.1.6.2.2.0|2|3 +1.3.6.1.4.1.318.1.1.1.6.2.3.0|2|4 +1.3.6.1.4.1.318.1.1.1.6.2.4.0|2|1 +1.3.6.1.4.1.318.1.1.1.6.2.5.0|2|3 +1.3.6.1.4.1.318.1.1.1.6.2.6.0|2|2 +1.3.6.1.4.1.318.1.1.1.6.2.7.0|2|2 +1.3.6.1.4.1.318.1.1.1.6.2.8.0|2|2 +1.3.6.1.4.1.318.1.1.1.6.2.9.0|2|4 +1.3.6.1.4.1.318.1.1.1.7.2.1.0|2|7 +1.3.6.1.4.1.318.1.1.1.7.2.2.0|2|1 +1.3.6.1.4.1.318.1.1.1.7.2.3.0|2|4 +1.3.6.1.4.1.318.1.1.1.11.1.1.0|4|0000100100100000001000000000010010000000000000000000000000000000 +1.3.6.1.4.1.318.1.1.1.12.1.2.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.12.1.2.1.2.15|4|test_outlet +1.3.6.1.4.1.318.1.1.1.12.1.2.1.3.15|2|3 +1.3.6.1.4.1.318.1.1.25.1.2.1.6.0|2|25 diff --git a/test/new-e2e/ndm/snmp/compose/data/args_list.txt b/test/new-e2e/ndm/snmp/compose/data/args_list.txt new file mode 100644 index 0000000000000..39ba2fea1e52c --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/args_list.txt @@ -0,0 +1,14 @@ +--v3-user=datadogNoAuthNoPriv +--v3-user=datadogMD5NoPriv --v3-auth-key=doggiepass --v3-auth-proto=MD5 +--v3-user=datadogMD5DES --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=DES +--v3-user=datadogMD5AES --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES +--v3-user=datadogSHADES --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=DES +--v3-user=datadogSHAAES --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES +--v3-user=datadogSHAAES192 --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES192 +--v3-user=datadogSHAAES192BLMT --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES192BLMT +--v3-user=datadogSHAAES256 --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES256 +--v3-user=datadogSHAAES256BLMT --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES256BLMT +--v3-user=datadogMD5AES192 --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES192 +--v3-user=datadogMD5AES192BLMT --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES192BLMT +--v3-user=datadogMD5AES256 --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES256 +--v3-user=datadogMD5AES256BLMT --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES256BLMT diff --git a/test/new-e2e/ndm/snmp/compose/data/arista.snmprec b/test/new-e2e/ndm/snmp/compose/data/arista.snmprec new file mode 100644 index 0000000000000..6d77a50af40ec --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/arista.snmprec @@ -0,0 +1,75 @@ +1.3.6.1.2.1.1.1.0|4|Arista Networks EOS version 4.20.11.1M running on an Arista Networks DCS-7504 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.30065.1.3011.7504 +1.3.6.1.2.1.1.3.0|67|1972242781 +1.3.6.1.2.1.1.4.0|4| +1.3.6.1.2.1.1.5.0|4|DCS-7504-name +1.3.6.1.2.1.1.6.0|4| +1.3.6.1.2.1.1.7.0|2|14 +1.3.6.1.2.1.47.1.1.1.1.2.1|4|DCS-7504 Chassis +1.3.6.1.2.1.47.1.1.1.1.3.1|6|0.0 +1.3.6.1.2.1.47.1.1.1.1.4.1|2|0 +1.3.6.1.2.1.47.1.1.1.1.5.1|2|3 +1.3.6.1.2.1.47.1.1.1.1.6.1|2|0 +1.3.6.1.2.1.47.1.1.1.1.7.1|4| +1.3.6.1.2.1.47.1.1.1.1.8.1|4|12.00 +1.3.6.1.2.1.47.1.1.1.1.9.1|4| +1.3.6.1.2.1.47.1.1.1.1.10.1|4| +1.3.6.1.2.1.47.1.1.1.1.11.1|4|HSH16195058 +1.3.6.1.2.1.47.1.1.1.1.12.1|4|Arista Networks +1.3.6.1.2.1.47.1.1.1.1.13.1|4|DCS-7504 +1.3.6.1.2.1.47.1.1.1.1.14.1|4| +1.3.6.1.2.1.47.1.1.1.1.15.1|4| +1.3.6.1.2.1.47.1.1.1.1.16.1|2|2 +1.3.6.1.2.1.47.1.1.1.1.17.1|4x|0000000000000000000000 +1.3.6.1.2.1.47.1.1.1.1.18.1|4| +1.3.6.1.2.1.99.1.1.1.1.1|2|11 +1.3.6.1.2.1.99.1.1.1.1.7|2|8 +1.3.6.1.2.1.99.1.1.1.2.1|2|12 +1.3.6.1.2.1.99.1.1.1.2.7|2|6 +1.3.6.1.2.1.99.1.1.1.3.1|2|4 +1.3.6.1.2.1.99.1.1.1.3.7|2|3 +1.3.6.1.2.1.99.1.1.1.4.1|2|18 +1.3.6.1.2.1.99.1.1.1.4.7|2|3 +1.3.6.1.2.1.99.1.1.1.5.1|2|3 +1.3.6.1.2.1.99.1.1.1.5.7|2|2 +1.3.6.1.2.1.99.1.1.1.6.1|4x|6f78656e2062757420666f72776172642062757420746865697220666f7277617264 +1.3.6.1.2.1.99.1.1.1.6.7|4x|666f7277617264207a6f6d626965732062757420666f7277617264204a61646564204a6164656420666f727761726420746865697220627574 +1.3.6.1.2.1.99.1.1.1.7.1|67|2933286610 +1.3.6.1.2.1.99.1.1.1.7.7|67|2903823879 +1.3.6.1.2.1.99.1.1.1.8.1|66|35020 +1.3.6.1.2.1.99.1.1.1.8.7|66|63942 +1.3.6.1.4.1.30065.3.6.1.1.1.1.7.25|2|7 +1.3.6.1.4.1.30065.3.6.1.1.1.1.8.24|2|8 +1.3.6.1.4.1.30065.3.6.1.1.1.2.7.25|2|25 +1.3.6.1.4.1.30065.3.6.1.1.1.2.8.24|2|24 +1.3.6.1.4.1.30065.3.6.1.1.1.3.7.25|70|9199876016787426485 +1.3.6.1.4.1.30065.3.6.1.1.1.3.8.24|70|3479424230406894790 +1.3.6.1.4.1.30065.3.6.1.1.1.4.7.25|70|633664576576632894 +1.3.6.1.4.1.30065.3.6.1.1.1.4.8.24|70|4510009279710477789 +1.3.6.1.4.1.30065.3.6.1.2.1.1.13.10.1|2|13 +1.3.6.1.4.1.30065.3.6.1.2.1.1.28.22.1|2|28 +1.3.6.1.4.1.30065.3.6.1.2.1.2.13.10.1|2|10 +1.3.6.1.4.1.30065.3.6.1.2.1.2.28.22.1|2|22 +1.3.6.1.4.1.30065.3.6.1.2.1.3.13.10.1|2|1 +1.3.6.1.4.1.30065.3.6.1.2.1.3.28.22.1|2|1 +1.3.6.1.4.1.30065.3.6.1.2.1.4.13.10.1|70|6316718526186328558 +1.3.6.1.4.1.30065.3.6.1.2.1.4.28.22.1|70|15636900873813563248 +1.3.6.1.4.1.30065.3.6.1.2.1.5.13.10.1|70|17029503172072197473 +1.3.6.1.4.1.30065.3.6.1.2.1.5.28.22.1|70|1568364382245390281 +1.3.6.1.4.1.30065.3.6.1.2.1.6.13.10.1|70|10749715859223173370 +1.3.6.1.4.1.30065.3.6.1.2.1.6.28.22.1|70|1286713412761199793 +1.3.6.1.4.1.30065.3.6.1.2.1.7.13.10.1|70|9062851505176451588 +1.3.6.1.4.1.30065.3.6.1.2.1.7.28.22.1|70|934740462710221661 +1.3.6.1.4.1.30065.3.6.1.2.1.8.13.10.1|70|7596654376884963276 +1.3.6.1.4.1.30065.3.6.1.2.1.8.28.22.1|70|2792974981000623152 +1.3.6.1.4.1.30065.3.6.1.2.1.9.13.10.1|70|9366008999217936642 +1.3.6.1.4.1.30065.3.6.1.2.1.9.28.22.1|70|8656516912515957367 +1.3.6.1.4.1.30065.3.6.1.2.1.10.13.10.1|2|0 +1.3.6.1.4.1.30065.3.6.1.2.1.10.28.22.1|2|0 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.23 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.67 +1.3.6.1.6.3.1.1.6.1.0|2|17 +1.3.6.1.6.3.10.2.1.1.0|4x|64726976696e6720627574204a61646564207468656972207a6f6d62696573 +1.3.6.1.6.3.10.2.1.2.0|2|19 +1.3.6.1.6.3.10.2.1.3.0|2|18 +1.3.6.1.6.3.10.2.1.4.0|2|485 diff --git a/test/new-e2e/ndm/snmp/compose/data/aruba-access-point.snmprec b/test/new-e2e/ndm/snmp/compose/data/aruba-access-point.snmprec new file mode 100644 index 0000000000000..d033b29cd69d3 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/aruba-access-point.snmprec @@ -0,0 +1,7 @@ +1.3.6.1.2.1.1.1.0|4|ArubaOS (MODEL: 335), Version 6.5.4.3-6.5.4.3 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.14823.1.2.80 +1.3.6.1.2.1.1.3.0|67|1469348797 +1.3.6.1.2.1.1.4.0|4| +1.3.6.1.2.1.1.5.0|4|aruba-335-name +1.3.6.1.2.1.1.6.0|4| +1.3.6.1.2.1.1.7.0|2|72 diff --git a/test/new-e2e/ndm/snmp/compose/data/aruba-switch.snmprec b/test/new-e2e/ndm/snmp/compose/data/aruba-switch.snmprec new file mode 100644 index 0000000000000..fd5da4f30cae0 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/aruba-switch.snmprec @@ -0,0 +1,21 @@ +1.3.6.1.2.1.1.1.0|4|ArubaOS (MODEL: Aruba7210), Version 8.6.0.4 (74969) +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.14823.1.1.32 +1.3.6.1.2.1.1.3.0|67|300689100 +1.3.6.1.2.1.1.4.0|4| +1.3.6.1.2.1.1.5.0|4|aruba-device-name +1.3.6.1.2.1.1.6.0|4| +1.3.6.1.4.1.14823.2.2.1.1.1.1.0|4|aruba-device-name +1.3.6.1.4.1.14823.2.2.1.1.1.2.0|4|A7210 +1.3.6.1.4.1.14823.2.2.1.1.1.3.0|64x|ac174404 +1.3.6.1.4.1.14823.2.2.1.1.1.4.0|2|1 +1.3.6.1.4.1.14823.2.2.1.1.1.5.0|64x|ac174403 +1.3.6.1.4.1.14823.2.2.1.1.1.7.0|2|6 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.1.4|2|4 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.2.4|2|4 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.3.4|66|29 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.1.4|2|4 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.2.4|66|16777216 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.3.4|66|8388608 +1.3.6.1.4.1.14823.2.2.1.2.1.27.0|4|A1.0 +1.3.6.1.4.1.14823.2.2.1.2.1.28.0|4|8.6.0.4 +1.3.6.1.4.1.14823.2.2.1.2.1.29.0|4|CV0009200 diff --git a/test/new-e2e/ndm/snmp/compose/data/aruba.snmprec b/test/new-e2e/ndm/snmp/compose/data/aruba.snmprec new file mode 100644 index 0000000000000..e022e8cbb3602 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/aruba.snmprec @@ -0,0 +1,272 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.14823.1.1.32 +1.3.6.1.2.1.14.7.1.1.18.2.8.29.22|64x|1202081d +1.3.6.1.2.1.14.7.1.1.58.115.169.188.27|64x|3a73a9bc +1.3.6.1.2.1.14.7.1.2.18.2.8.29.22|2|22 +1.3.6.1.2.1.14.7.1.2.58.115.169.188.27|2|27 +1.3.6.1.2.1.14.7.1.3.18.2.8.29.22|64x|359f7a8e +1.3.6.1.2.1.14.7.1.3.58.115.169.188.27|64x|08516ac7 +1.3.6.1.2.1.14.7.1.4.18.2.8.29.22|2|3 +1.3.6.1.2.1.14.7.1.4.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.7.1.5.18.2.8.29.22|2|1 +1.3.6.1.2.1.14.7.1.5.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.7.1.6.18.2.8.29.22|2|0 +1.3.6.1.2.1.14.7.1.6.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.7.1.7.18.2.8.29.22|2|14 +1.3.6.1.2.1.14.7.1.7.58.115.169.188.27|2|28 +1.3.6.1.2.1.14.7.1.8.18.2.8.29.22|2|10 +1.3.6.1.2.1.14.7.1.8.58.115.169.188.27|2|7 +1.3.6.1.2.1.14.7.1.9.18.2.8.29.22|2|17 +1.3.6.1.2.1.14.7.1.9.58.115.169.188.27|2|7 +1.3.6.1.2.1.14.7.1.10.18.2.8.29.22|2|31 +1.3.6.1.2.1.14.7.1.10.58.115.169.188.27|2|8 +1.3.6.1.2.1.14.7.1.11.18.2.8.29.22|2|28 +1.3.6.1.2.1.14.7.1.11.58.115.169.188.27|2|5 +1.3.6.1.2.1.14.7.1.12.18.2.8.29.22|2|4 +1.3.6.1.2.1.14.7.1.12.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.7.1.13.18.2.8.29.22|64x|fe8a6a46 +1.3.6.1.2.1.14.7.1.13.58.115.169.188.27|64x|448b4dc9 +1.3.6.1.2.1.14.7.1.14.18.2.8.29.22|64x|179dc85b +1.3.6.1.2.1.14.7.1.14.58.115.169.188.27|64x|a06c639c +1.3.6.1.2.1.14.7.1.15.18.2.8.29.22|65|337210857 +1.3.6.1.2.1.14.7.1.15.58.115.169.188.27|65|62176372 +1.3.6.1.2.1.14.7.1.16.18.2.8.29.22|4x|6163746564207a6f6d626965732064726976696e672062757420717561696e746c79 +1.3.6.1.2.1.14.7.1.16.58.115.169.188.27|4x|717561696e746c7920627574207a6f6d62696573207a6f6d62696573206f78656e206163746564 +1.3.6.1.2.1.14.7.1.17.18.2.8.29.22|2|0 +1.3.6.1.2.1.14.7.1.17.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.7.1.18.18.2.8.29.22|2|1 +1.3.6.1.2.1.14.7.1.18.58.115.169.188.27|2|3 +1.3.6.1.2.1.14.7.1.19.18.2.8.29.22|2|1 +1.3.6.1.2.1.14.7.1.19.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.7.1.20.18.2.8.29.22|2|0 +1.3.6.1.2.1.14.7.1.20.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.7.1.21.18.2.8.29.22|66|1626568828 +1.3.6.1.2.1.14.7.1.21.58.115.169.188.27|66|4122238079 +1.3.6.1.2.1.14.7.1.22.18.2.8.29.22|66|37664 +1.3.6.1.2.1.14.7.1.22.58.115.169.188.27|66|13819 +1.3.6.1.2.1.14.7.1.23.18.2.8.29.22|64x|57a70c12 +1.3.6.1.2.1.14.7.1.23.58.115.169.188.27|64x|1ca52e0e +1.3.6.1.2.1.14.7.1.24.18.2.8.29.22|64x|4976f89f +1.3.6.1.2.1.14.7.1.24.58.115.169.188.27|64x|df0366aa +1.3.6.1.2.1.14.8.1.1.18.46.198.118.28.25|64x|122ec676 +1.3.6.1.2.1.14.8.1.1.74.178.23.226.10.22|64x|4ab217e2 +1.3.6.1.2.1.14.8.1.1.79.250.196.166.7.21|64x|4ffac4a6 +1.3.6.1.2.1.14.8.1.1.88.90.97.4.9.20|64x|585a6104 +1.3.6.1.2.1.14.8.1.1.130.45.3.9.19.12|64x|822d0309 +1.3.6.1.2.1.14.8.1.1.152.55.172.234.10.10|64x|9837acea +1.3.6.1.2.1.14.8.1.1.217.138.168.52.5.29|64x|d98aa834 +1.3.6.1.2.1.14.8.1.1.218.218.58.35.6.10|64x|dada3a23 +1.3.6.1.2.1.14.8.1.1.223.7.108.14.5.22|64x|df076c0e +1.3.6.1.2.1.14.8.1.1.238.30.92.198.23.10|64x|ee1e5cc6 +1.3.6.1.2.1.14.8.1.2.18.46.198.118.28.25|2|28 +1.3.6.1.2.1.14.8.1.2.74.178.23.226.10.22|2|10 +1.3.6.1.2.1.14.8.1.2.79.250.196.166.7.21|2|7 +1.3.6.1.2.1.14.8.1.2.88.90.97.4.9.20|2|9 +1.3.6.1.2.1.14.8.1.2.130.45.3.9.19.12|2|19 +1.3.6.1.2.1.14.8.1.2.152.55.172.234.10.10|2|10 +1.3.6.1.2.1.14.8.1.2.217.138.168.52.5.29|2|5 +1.3.6.1.2.1.14.8.1.2.218.218.58.35.6.10|2|6 +1.3.6.1.2.1.14.8.1.2.223.7.108.14.5.22|2|5 +1.3.6.1.2.1.14.8.1.2.238.30.92.198.23.10|2|23 +1.3.6.1.2.1.14.8.1.3.18.46.198.118.28.25|2|25 +1.3.6.1.2.1.14.8.1.3.74.178.23.226.10.22|2|22 +1.3.6.1.2.1.14.8.1.3.79.250.196.166.7.21|2|21 +1.3.6.1.2.1.14.8.1.3.88.90.97.4.9.20|2|20 +1.3.6.1.2.1.14.8.1.3.130.45.3.9.19.12|2|12 +1.3.6.1.2.1.14.8.1.3.152.55.172.234.10.10|2|10 +1.3.6.1.2.1.14.8.1.3.217.138.168.52.5.29|2|29 +1.3.6.1.2.1.14.8.1.3.218.218.58.35.6.10|2|10 +1.3.6.1.2.1.14.8.1.3.223.7.108.14.5.22|2|22 +1.3.6.1.2.1.14.8.1.3.238.30.92.198.23.10|2|10 +1.3.6.1.2.1.14.8.1.4.18.46.198.118.28.25|2|29 +1.3.6.1.2.1.14.8.1.4.74.178.23.226.10.22|2|11 +1.3.6.1.2.1.14.8.1.4.79.250.196.166.7.21|2|5 +1.3.6.1.2.1.14.8.1.4.88.90.97.4.9.20|2|10 +1.3.6.1.2.1.14.8.1.4.130.45.3.9.19.12|2|21 +1.3.6.1.2.1.14.8.1.4.152.55.172.234.10.10|2|21 +1.3.6.1.2.1.14.8.1.4.217.138.168.52.5.29|2|18 +1.3.6.1.2.1.14.8.1.4.218.218.58.35.6.10|2|3 +1.3.6.1.2.1.14.8.1.4.223.7.108.14.5.22|2|19 +1.3.6.1.2.1.14.8.1.4.238.30.92.198.23.10|2|8 +1.3.6.1.2.1.14.8.1.5.18.46.198.118.28.25|2|6 +1.3.6.1.2.1.14.8.1.5.74.178.23.226.10.22|2|6 +1.3.6.1.2.1.14.8.1.5.79.250.196.166.7.21|2|0 +1.3.6.1.2.1.14.8.1.5.88.90.97.4.9.20|2|1 +1.3.6.1.2.1.14.8.1.5.130.45.3.9.19.12|2|0 +1.3.6.1.2.1.14.8.1.5.152.55.172.234.10.10|2|4 +1.3.6.1.2.1.14.8.1.5.217.138.168.52.5.29|2|3 +1.3.6.1.2.1.14.8.1.5.218.218.58.35.6.10|2|4 +1.3.6.1.2.1.14.8.1.5.223.7.108.14.5.22|2|2 +1.3.6.1.2.1.14.8.1.5.238.30.92.198.23.10|2|2 +1.3.6.1.2.1.14.9.1.1.14.154.6.3.194.154.66.112|64x|0e9a0603 +1.3.6.1.2.1.14.9.1.1.69.248.159.239.184.201.101.140|64x|45f89fef +1.3.6.1.2.1.14.9.1.2.14.154.6.3.194.154.66.112|64x|c29a4270 +1.3.6.1.2.1.14.9.1.2.69.248.159.239.184.201.101.140|64x|b8c9658c +1.3.6.1.2.1.14.9.1.3.14.154.6.3.194.154.66.112|2|7 +1.3.6.1.2.1.14.9.1.3.69.248.159.239.184.201.101.140|2|2 +1.3.6.1.2.1.14.9.1.4.14.154.6.3.194.154.66.112|2|9 +1.3.6.1.2.1.14.9.1.4.69.248.159.239.184.201.101.140|2|7 +1.3.6.1.2.1.14.9.1.5.14.154.6.3.194.154.66.112|2|4 +1.3.6.1.2.1.14.9.1.5.69.248.159.239.184.201.101.140|2|31 +1.3.6.1.2.1.14.9.1.6.14.154.6.3.194.154.66.112|2|28 +1.3.6.1.2.1.14.9.1.6.69.248.159.239.184.201.101.140|2|6 +1.3.6.1.2.1.14.9.1.7.14.154.6.3.194.154.66.112|2|4 +1.3.6.1.2.1.14.9.1.7.69.248.159.239.184.201.101.140|2|1 +1.3.6.1.2.1.14.9.1.8.14.154.6.3.194.154.66.112|65|3840304252 +1.3.6.1.2.1.14.9.1.8.69.248.159.239.184.201.101.140|65|3388558016 +1.3.6.1.2.1.14.9.1.9.14.154.6.3.194.154.66.112|4x|62757420666f727761726420627574206f78656e20717561696e746c79204a6164656420666f7277617264206f78656e20717561696e746c79 +1.3.6.1.2.1.14.9.1.9.69.248.159.239.184.201.101.140|4x|7a6f6d626965732064726976696e67 +1.3.6.1.2.1.14.9.1.10.14.154.6.3.194.154.66.112|2|0 +1.3.6.1.2.1.14.9.1.10.69.248.159.239.184.201.101.140|2|3 +1.3.6.1.2.1.14.9.1.11.14.154.6.3.194.154.66.112|2|1 +1.3.6.1.2.1.14.9.1.11.69.248.159.239.184.201.101.140|2|0 +1.3.6.1.2.1.14.9.1.12.14.154.6.3.194.154.66.112|66|3883744561 +1.3.6.1.2.1.14.9.1.12.69.248.159.239.184.201.101.140|66|4042815112 +1.3.6.1.2.1.14.9.1.13.14.154.6.3.194.154.66.112|66|57727 +1.3.6.1.2.1.14.9.1.13.69.248.159.239.184.201.101.140|66|37473 +1.3.6.1.2.1.14.10.1.1.18.2.8.29.22|64x|486fb31d +1.3.6.1.2.1.14.10.1.1.58.115.169.188.27|64x|c01d741a +1.3.6.1.2.1.14.10.1.2.18.2.8.29.22|2|9 +1.3.6.1.2.1.14.10.1.2.58.115.169.188.27|2|0 +1.3.6.1.2.1.14.10.1.3.18.2.8.29.22|64x|76f6c1f7 +1.3.6.1.2.1.14.10.1.3.58.115.169.188.27|64x|c01d424f +1.3.6.1.2.1.14.10.1.4.58.115.169.188.27|2|8 +1.3.6.1.2.1.14.10.1.5.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.10.1.6.58.115.169.188.27|2|8 +1.3.6.1.2.1.14.10.1.7.58.115.169.188.27|65|6 +1.3.6.1.2.1.14.10.1.8.58.115.169.188.27|66|0 +1.3.6.1.2.1.14.10.1.9.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.10.1.10.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.10.1.11.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.11.1.1.14.154.6.3.194.154.66.112|64x|0e9a0603 +1.3.6.1.2.1.14.11.1.1.69.248.159.239.184.201.101.140|64x|45f89fef +1.3.6.1.2.1.14.11.1.2.14.154.6.3.194.154.66.112|64x|c29a4270 +1.3.6.1.2.1.14.11.1.2.69.248.159.239.184.201.101.140|64x|b8c9658c +1.3.6.1.2.1.14.11.1.3.14.154.6.3.194.154.66.112|64x|4ad25201 +1.3.6.1.2.1.14.11.1.3.69.248.159.239.184.201.101.140|64x|7ae25601 +1.3.6.1.2.1.14.11.1.4.14.154.6.3.194.154.66.112|2|16 +1.3.6.1.2.1.14.11.1.4.69.248.159.239.184.201.101.140|2|16 +1.3.6.1.2.1.14.11.1.5.14.154.6.3.194.154.66.112|2|6 +1.3.6.1.2.1.14.11.1.5.69.248.159.239.184.201.101.140|2|6 +1.3.6.1.2.1.14.11.1.6.14.154.6.3.194.154.66.112|65|3881559280 +1.3.6.1.2.1.14.11.1.6.69.248.159.239.184.201.101.140|65|3881559280 +1.3.6.1.2.1.14.11.1.7.14.154.6.3.194.154.66.112|66|1152724473 +1.3.6.1.2.1.14.11.1.7.69.248.159.239.184.201.101.140|66|1152724473 +1.3.6.1.4.1.14823.2.2.1.2.1.1.0|64x|a59795d0 +1.3.6.1.4.1.14823.2.2.1.2.1.2.0|4|but +1.3.6.1.4.1.14823.2.2.1.2.1.3.0|4|Jaded +1.3.6.1.4.1.14823.2.2.1.2.1.4.0|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.5.0|64x|d7fe1618 +1.3.6.1.4.1.14823.2.2.1.2.1.6.0|4x|7468656972204a6164656420616374656420627574206b657074207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.7.0|4x|00249b3503f6 +1.3.6.1.4.1.14823.2.2.1.2.1.8.0|4x|7a6f6d62696573204a6164656420717561696e746c79206163746564204a6164656420717561696e746c7920627574 +1.3.6.1.4.1.14823.2.2.1.2.1.9.0|4x|627574207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.14823.2.2.1.2.1.10.0|4x|6f78656e207a6f6d6269657320627574 +1.3.6.1.4.1.14823.2.2.1.2.1.11.0|4x|62757420627574 +1.3.6.1.4.1.14823.2.2.1.2.1.12.0|2|22 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.1.11|2|11 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.1.26|2|26 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.2.11|4|zombies +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.2.26|4x|62757420666f7277617264204a6164656420627574207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.3.11|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.3.26|2|10 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.1.3|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.1.15|2|15 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.2.3|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.2.15|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.3.3|2|17 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.3.15|2|24 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.4.3|2|12 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.4.15|2|20 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.5.3|4x|61637465642064726976696e67207a6f6d62696573207a6f6d62696573206f78656e206b657074207468656972206f78656e20627574 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.5.15|4x|4a61646564204a61646564206275742064726976696e6720627574207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.1.3|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.1.20|2|20 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.2.3|2|22 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.2.20|2|21 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.3.3|2|27 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.3.20|2|6 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.4.3|2|8 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.4.20|2|16 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.1.0|2|0 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.1.25|2|25 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.2.0|2|22 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.2.25|2|15 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.3.0|2|27 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.3.25|2|20 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.4.0|2|22 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.4.25|2|8 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.5.0|2|9 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.5.25|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.6.0|4x|7468656972204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.6.25|4x|6f78656e20746865697220666f7277617264206163746564206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.7.0|4x|7a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.7.25|4x|717561696e746c7920616374656420666f72776172642064726976696e6720666f7277617264206f78656e20627574206163746564 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.8.0|4x|4a61646564206163746564204a61646564 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.8.25|4x|6163746564206163746564204a61646564207a6f6d6269657320666f7277617264204a61646564204a6164656420746865697220627574 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.9.0|4x|4a61646564206f78656e2074686569722064726976696e67 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.9.25|4x|7468656972206f78656e206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.10.0|4x|616374656420627574206f78656e2062757420717561696e746c792062757420717561696e746c79207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.10.25|4|quaintly +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.11.0|4|zombies +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.11.25|4x|6f78656e2062757420666f7277617264 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.12.0|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.12.25|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.13.0|2|23 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.13.25|2|7 +1.3.6.1.4.1.14823.2.2.1.2.1.17.1.1.18|2|18 +1.3.6.1.4.1.14823.2.2.1.2.1.17.1.1.28|2|28 +1.3.6.1.4.1.14823.2.2.1.2.1.17.1.2.18|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.17.1.2.28|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.18.1.1.1|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.18.1.1.17|2|17 +1.3.6.1.4.1.14823.2.2.1.2.1.18.1.2.1|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.18.1.2.17|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.1.2.122.127.215|64x|027a7fd7 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.1.224.210.187.247|64x|e0d2bbf7 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.2.2.122.127.215|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.2.224.210.187.247|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.3.2.122.127.215|4x|7468656972207a6f6d6269657320717561696e746c79206f78656e206275742064726976696e672064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.3.224.210.187.247|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.4.2.122.127.215|4x|717561696e746c7920717561696e746c79207a6f6d6269657320616374656420666f72776172642061637465642064726976696e672064726976696e67 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.4.224.210.187.247|4|kept +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.5.2.122.127.215|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.5.224.210.187.247|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.6.2.122.127.215|4|acted +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.6.224.210.187.247|4x|4a6164656420717561696e746c7920627574207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.7.2.122.127.215|4x|717561696e746c7920717561696e746c79 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.7.224.210.187.247|4|zombies +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.1.8|2|8 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.1.19|2|19 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.2.8|4x|7a6f6d6269657320616374656420616374656420717561696e746c79206b657074207a6f6d62696573206b65707420627574206163746564 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.2.19|4x|6f78656e20666f7277617264204a61646564206163746564204a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.3.8|4x|62757420627574 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.3.19|4x|74686569722064726976696e672064726976696e67206b65707420627574 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.4.8|4x|717561696e746c79207a6f6d62696573206b65707420627574206b6570742064726976696e672062757420746865697220666f7277617264 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.4.19|4x|7a6f6d62696573204a61646564206b657074206b657074207a6f6d626965732064726976696e67206f78656e204a61646564204a61646564 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.5.8|4x|6f78656e206b657074207468656972204a61646564204a6164656420616374656420627574 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.5.19|4x|717561696e746c79204a616465642064726976696e672064726976696e67206163746564206f78656e204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.6.8|4x|717561696e746c7920627574 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.6.19|4x|4a616465642064726976696e672064726976696e67207a6f6d626965732064726976696e67 +1.3.6.1.4.1.14823.2.2.1.2.1.21.0|2|30 +1.3.6.1.4.1.14823.2.2.1.2.1.22.0|2|18 +1.3.6.1.4.1.14823.2.2.1.2.1.23.0|2|14 +1.3.6.1.4.1.14823.2.2.1.2.1.24.0|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.25.0|4x|7468656972206f78656e207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.26.0|67|2557480613 +1.3.6.1.4.1.14823.2.2.1.2.1.27.0|4x|7a6f6d6269657320627574206f78656e204a61646564207468656972206b657074 +1.3.6.1.4.1.14823.2.2.1.2.1.28.0|4|acted +1.3.6.1.4.1.14823.2.2.1.2.1.29.0|4x|6b657074207468656972207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.30.0|66|28799076 +1.3.6.1.4.1.14823.2.2.1.2.1.31.0|66|2990519834 +1.3.6.1.4.1.14823.2.2.1.2.1.32.0|2|31 +1.3.6.1.4.1.14823.2.2.1.2.2.1.0|2|20 +1.3.6.1.4.1.14823.2.2.1.2.2.2.0|2|3 +1.3.6.1.4.1.14823.2.2.1.2.2.3.0|2|27 +1.3.6.1.4.1.14823.2.2.1.2.2.4.0|2|18 +1.3.6.1.4.1.14823.2.2.1.2.2.5.0|2|13 +1.3.6.1.4.1.14823.2.2.1.2.2.6.0|2|22 +1.3.6.1.4.1.14823.2.2.1.2.2.7.0|2|13 +1.3.6.1.4.1.14823.2.2.1.2.2.8.0|2|3 +1.3.6.1.4.1.14823.2.2.1.2.2.9.0|2|0 +1.3.6.1.4.1.14823.2.2.1.2.2.10.0|2|16 +1.3.6.1.4.1.14823.2.2.1.2.2.11.0|2|30 diff --git a/test/new-e2e/ndm/snmp/compose/data/chatsworth_pdu.snmprec b/test/new-e2e/ndm/snmp/compose/data/chatsworth_pdu.snmprec new file mode 100644 index 0000000000000..b60c737fdb235 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/chatsworth_pdu.snmprec @@ -0,0 +1,1026 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.30932.1.2 +1.3.6.1.4.1.30932.1.1.1.1.0|4|1.2.3 +1.3.6.1.4.1.30932.1.1.1.2.0|4x|5031302d313233342d414243 +1.3.6.1.4.1.30932.1.1.1.3.0|4x|30303a30453a44333a41413a43433a4545 +1.3.6.1.4.1.30932.1.1.2.1.0|2|21 +1.3.6.1.4.1.30932.1.1.2.2.0|2|4 +1.3.6.1.4.1.30932.1.1.2.3.0|2|16 +1.3.6.1.4.1.30932.1.1.2.4.0|64x|0c3155c8 +1.3.6.1.4.1.30932.1.1.2.5.1.0|2|0 +1.3.6.1.4.1.30932.1.1.2.5.2.0|2|1 +1.3.6.1.4.1.30932.1.1.2.5.3.0|2|0 +1.3.6.1.4.1.30932.1.1.2.5.4.0|2|0 +1.3.6.1.4.1.30932.1.1.2.5.5.0|2|0 +1.3.6.1.4.1.30932.1.1.2.5.6.0|2|1 +1.3.6.1.4.1.30932.1.1.2.5.7.0|2|1 +1.3.6.1.4.1.30932.1.1.2.5.8.0|2|1 +1.3.6.1.4.1.30932.1.1.2.6.0|64x|2401ee4a +1.3.6.1.4.1.30932.1.1.2.7.0|64x|70cf48d6 +1.3.6.1.4.1.30932.1.1.2.8.1.0|64x|6e6f304c +1.3.6.1.4.1.30932.1.1.2.8.2.0|64x|1ee3f1c3 +1.3.6.1.4.1.30932.1.1.2.8.3.0|64x|15e17b6d +1.3.6.1.4.1.30932.1.1.2.9.1.0|64x|72d3ac5c +1.3.6.1.4.1.30932.1.1.2.9.2.0|64x|728b5572 +1.3.6.1.4.1.30932.1.1.2.9.3.0|64x|ead5687d +1.3.6.1.4.1.30932.1.1.2.10.0|4x|7a6f6d626965732064726976696e67204a61646564 +1.3.6.1.4.1.30932.1.1.2.11.1.0|2|0 +1.3.6.1.4.1.30932.1.1.2.11.2.0|2|1 +1.3.6.1.4.1.30932.1.1.2.11.3.0|2|1 +1.3.6.1.4.1.30932.1.1.2.11.4.0|2|1 +1.3.6.1.4.1.30932.1.1.2.11.5.0|2|1 +1.3.6.1.4.1.30932.1.1.2.12.0|2|28 +1.3.6.1.4.1.30932.1.1.2.13.0|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.14.1.0|4x|61637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.14.2.0|4x|7a6f6d6269657320666f7277617264204a61646564204a61646564207a6f6d62696573207a6f6d62696573206163746564206163746564206b657074 +1.3.6.1.4.1.30932.1.1.2.14.3.0|4x|7a6f6d62696573206f78656e204a61646564206b657074204a6164656420616374656420717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.15.1.0|4x|6b657074204a6164656420627574206f78656e207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.15.2.0|4x|717561696e746c79206b657074204a61646564 +1.3.6.1.4.1.30932.1.1.2.15.3.0|4x|6b657074204a61646564206b6570742064726976696e67207a6f6d62696573204a61646564207468656972 +1.3.6.1.4.1.30932.1.1.2.16.1.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.2.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.3.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.4.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.5.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.6.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.7.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.8.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.9.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.10.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.11.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.12.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.13.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.14.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.15.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.16.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.17.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.18.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.19.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.20.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.21.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.22.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.23.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.24.0|2|0 +1.3.6.1.4.1.30932.1.1.2.17.1.0|2|26 +1.3.6.1.4.1.30932.1.1.2.17.2.0|2|7 +1.3.6.1.4.1.30932.1.1.2.17.3.0|2|11 +1.3.6.1.4.1.30932.1.1.2.17.4.0|2|2 +1.3.6.1.4.1.30932.1.1.2.17.5.0|2|15 +1.3.6.1.4.1.30932.1.1.2.17.6.0|2|4 +1.3.6.1.4.1.30932.1.1.2.17.7.0|2|9 +1.3.6.1.4.1.30932.1.1.2.17.8.0|2|21 +1.3.6.1.4.1.30932.1.1.2.17.9.0|2|14 +1.3.6.1.4.1.30932.1.1.2.17.10.0|2|8 +1.3.6.1.4.1.30932.1.1.2.17.11.0|2|31 +1.3.6.1.4.1.30932.1.1.2.17.12.0|2|7 +1.3.6.1.4.1.30932.1.1.2.17.13.0|2|1 +1.3.6.1.4.1.30932.1.1.2.17.14.0|2|18 +1.3.6.1.4.1.30932.1.1.2.17.15.0|2|16 +1.3.6.1.4.1.30932.1.1.2.17.16.0|2|1 +1.3.6.1.4.1.30932.1.1.2.17.17.0|2|22 +1.3.6.1.4.1.30932.1.1.2.17.18.0|2|22 +1.3.6.1.4.1.30932.1.1.2.17.19.0|2|7 +1.3.6.1.4.1.30932.1.1.2.17.20.0|2|9 +1.3.6.1.4.1.30932.1.1.2.17.21.0|2|1 +1.3.6.1.4.1.30932.1.1.2.17.22.0|2|7 +1.3.6.1.4.1.30932.1.1.2.17.23.0|2|22 +1.3.6.1.4.1.30932.1.1.2.17.24.0|2|4 +1.3.6.1.4.1.30932.1.1.2.18.1.0|2|28 +1.3.6.1.4.1.30932.1.1.2.18.2.0|2|23 +1.3.6.1.4.1.30932.1.1.2.18.3.0|2|9 +1.3.6.1.4.1.30932.1.1.2.18.4.0|2|26 +1.3.6.1.4.1.30932.1.1.2.18.5.0|2|14 +1.3.6.1.4.1.30932.1.1.2.18.6.0|2|20 +1.3.6.1.4.1.30932.1.1.2.18.7.0|2|23 +1.3.6.1.4.1.30932.1.1.2.18.8.0|2|15 +1.3.6.1.4.1.30932.1.1.2.18.9.0|2|15 +1.3.6.1.4.1.30932.1.1.2.18.10.0|2|28 +1.3.6.1.4.1.30932.1.1.2.18.11.0|2|11 +1.3.6.1.4.1.30932.1.1.2.18.12.0|2|11 +1.3.6.1.4.1.30932.1.1.2.18.13.0|2|4 +1.3.6.1.4.1.30932.1.1.2.18.14.0|2|15 +1.3.6.1.4.1.30932.1.1.2.18.15.0|2|25 +1.3.6.1.4.1.30932.1.1.2.18.16.0|2|31 +1.3.6.1.4.1.30932.1.1.2.18.17.0|2|28 +1.3.6.1.4.1.30932.1.1.2.18.18.0|2|27 +1.3.6.1.4.1.30932.1.1.2.18.19.0|2|16 +1.3.6.1.4.1.30932.1.1.2.18.20.0|2|6 +1.3.6.1.4.1.30932.1.1.2.18.21.0|2|9 +1.3.6.1.4.1.30932.1.1.2.18.22.0|2|16 +1.3.6.1.4.1.30932.1.1.2.18.23.0|2|23 +1.3.6.1.4.1.30932.1.1.2.18.24.0|2|27 +1.3.6.1.4.1.30932.1.1.2.19.1.0|2|8 +1.3.6.1.4.1.30932.1.1.2.19.2.0|2|21 +1.3.6.1.4.1.30932.1.1.2.19.3.0|2|8 +1.3.6.1.4.1.30932.1.1.2.19.4.0|2|8 +1.3.6.1.4.1.30932.1.1.2.19.5.0|2|26 +1.3.6.1.4.1.30932.1.1.2.19.6.0|2|1 +1.3.6.1.4.1.30932.1.1.2.20.1.0|2|5 +1.3.6.1.4.1.30932.1.1.2.20.2.0|2|7 +1.3.6.1.4.1.30932.1.1.2.20.3.0|2|15 +1.3.6.1.4.1.30932.1.1.2.20.4.0|2|12 +1.3.6.1.4.1.30932.1.1.2.20.5.0|2|30 +1.3.6.1.4.1.30932.1.1.2.20.6.0|2|0 +1.3.6.1.4.1.30932.1.1.2.21.1.0|2|19 +1.3.6.1.4.1.30932.1.1.2.21.2.0|2|22 +1.3.6.1.4.1.30932.1.1.2.21.3.0|2|21 +1.3.6.1.4.1.30932.1.1.2.21.4.0|2|0 +1.3.6.1.4.1.30932.1.1.2.21.5.0|2|11 +1.3.6.1.4.1.30932.1.1.2.21.6.0|2|6 +1.3.6.1.4.1.30932.1.1.2.22.1.0|2|6 +1.3.6.1.4.1.30932.1.1.2.22.2.0|2|27 +1.3.6.1.4.1.30932.1.1.2.22.3.0|2|17 +1.3.6.1.4.1.30932.1.1.2.22.4.0|2|21 +1.3.6.1.4.1.30932.1.1.2.22.5.0|2|0 +1.3.6.1.4.1.30932.1.1.2.22.6.0|2|13 +1.3.6.1.4.1.30932.1.1.2.24.1.0|2|17 +1.3.6.1.4.1.30932.1.1.2.24.2.0|2|4 +1.3.6.1.4.1.30932.1.1.2.24.3.0|2|26 +1.3.6.1.4.1.30932.1.1.2.24.4.0|2|29 +1.3.6.1.4.1.30932.1.1.2.24.5.0|2|21 +1.3.6.1.4.1.30932.1.1.2.24.6.0|2|26 +1.3.6.1.4.1.30932.1.1.2.25.1.0|2|13 +1.3.6.1.4.1.30932.1.1.2.25.2.0|2|28 +1.3.6.1.4.1.30932.1.1.2.25.3.0|2|21 +1.3.6.1.4.1.30932.1.1.2.25.4.0|2|24 +1.3.6.1.4.1.30932.1.1.2.25.5.0|2|30 +1.3.6.1.4.1.30932.1.1.2.25.6.0|2|2 +1.3.6.1.4.1.30932.1.1.2.26.1.0|2|26 +1.3.6.1.4.1.30932.1.1.2.26.2.0|2|28 +1.3.6.1.4.1.30932.1.1.2.26.3.0|2|0 +1.3.6.1.4.1.30932.1.1.2.26.4.0|2|17 +1.3.6.1.4.1.30932.1.1.2.26.5.0|2|21 +1.3.6.1.4.1.30932.1.1.2.26.6.0|2|11 +1.3.6.1.4.1.30932.1.1.2.27.1.0|2|27 +1.3.6.1.4.1.30932.1.1.2.27.2.0|2|7 +1.3.6.1.4.1.30932.1.1.2.27.3.0|2|18 +1.3.6.1.4.1.30932.1.1.2.27.4.0|2|15 +1.3.6.1.4.1.30932.1.1.2.27.5.0|2|20 +1.3.6.1.4.1.30932.1.1.2.27.6.0|2|31 +1.3.6.1.4.1.30932.1.1.2.28.1.0|2|25 +1.3.6.1.4.1.30932.1.1.2.28.2.0|2|0 +1.3.6.1.4.1.30932.1.1.2.28.3.0|2|28 +1.3.6.1.4.1.30932.1.1.2.28.4.0|2|14 +1.3.6.1.4.1.30932.1.1.2.28.5.0|2|27 +1.3.6.1.4.1.30932.1.1.2.28.6.0|2|10 +1.3.6.1.4.1.30932.1.1.2.28.7.0|2|0 +1.3.6.1.4.1.30932.1.1.2.28.8.0|2|20 +1.3.6.1.4.1.30932.1.1.2.28.9.0|2|9 +1.3.6.1.4.1.30932.1.1.2.28.10.0|2|4 +1.3.6.1.4.1.30932.1.1.2.28.11.0|2|16 +1.3.6.1.4.1.30932.1.1.2.28.12.0|2|19 +1.3.6.1.4.1.30932.1.1.2.28.13.0|2|29 +1.3.6.1.4.1.30932.1.1.2.28.14.0|2|2 +1.3.6.1.4.1.30932.1.1.2.28.15.0|2|16 +1.3.6.1.4.1.30932.1.1.2.28.16.0|2|3 +1.3.6.1.4.1.30932.1.1.2.28.17.0|2|17 +1.3.6.1.4.1.30932.1.1.2.28.18.0|2|17 +1.3.6.1.4.1.30932.1.1.2.28.19.0|2|23 +1.3.6.1.4.1.30932.1.1.2.28.20.0|2|24 +1.3.6.1.4.1.30932.1.1.2.28.21.0|2|12 +1.3.6.1.4.1.30932.1.1.2.28.22.0|2|24 +1.3.6.1.4.1.30932.1.1.2.28.23.0|2|16 +1.3.6.1.4.1.30932.1.1.2.28.24.0|2|0 +1.3.6.1.4.1.30932.1.1.2.29.1.0|2|13 +1.3.6.1.4.1.30932.1.1.2.29.2.0|2|13 +1.3.6.1.4.1.30932.1.1.2.29.3.0|2|19 +1.3.6.1.4.1.30932.1.1.2.29.4.0|2|17 +1.3.6.1.4.1.30932.1.1.2.29.5.0|2|15 +1.3.6.1.4.1.30932.1.1.2.29.6.0|2|26 +1.3.6.1.4.1.30932.1.1.2.29.7.0|2|24 +1.3.6.1.4.1.30932.1.1.2.29.8.0|2|17 +1.3.6.1.4.1.30932.1.1.2.29.9.0|2|17 +1.3.6.1.4.1.30932.1.1.2.29.10.0|2|3 +1.3.6.1.4.1.30932.1.1.2.29.11.0|2|3 +1.3.6.1.4.1.30932.1.1.2.29.12.0|2|16 +1.3.6.1.4.1.30932.1.1.2.29.13.0|2|18 +1.3.6.1.4.1.30932.1.1.2.29.14.0|2|25 +1.3.6.1.4.1.30932.1.1.2.29.15.0|2|10 +1.3.6.1.4.1.30932.1.1.2.29.16.0|2|22 +1.3.6.1.4.1.30932.1.1.2.29.17.0|2|0 +1.3.6.1.4.1.30932.1.1.2.29.18.0|2|9 +1.3.6.1.4.1.30932.1.1.2.29.19.0|2|27 +1.3.6.1.4.1.30932.1.1.2.29.20.0|2|9 +1.3.6.1.4.1.30932.1.1.2.29.21.0|2|12 +1.3.6.1.4.1.30932.1.1.2.29.22.0|2|6 +1.3.6.1.4.1.30932.1.1.2.29.23.0|2|27 +1.3.6.1.4.1.30932.1.1.2.29.24.0|2|26 +1.3.6.1.4.1.30932.1.1.2.30.1.0|2|18 +1.3.6.1.4.1.30932.1.1.2.30.2.0|2|2 +1.3.6.1.4.1.30932.1.1.2.30.3.0|2|25 +1.3.6.1.4.1.30932.1.1.2.30.4.0|2|11 +1.3.6.1.4.1.30932.1.1.2.30.5.0|2|24 +1.3.6.1.4.1.30932.1.1.2.30.6.0|2|21 +1.3.6.1.4.1.30932.1.1.2.30.7.0|2|25 +1.3.6.1.4.1.30932.1.1.2.30.8.0|2|7 +1.3.6.1.4.1.30932.1.1.2.30.9.0|2|5 +1.3.6.1.4.1.30932.1.1.2.30.10.0|2|30 +1.3.6.1.4.1.30932.1.1.2.30.11.0|2|19 +1.3.6.1.4.1.30932.1.1.2.30.12.0|2|21 +1.3.6.1.4.1.30932.1.1.2.30.13.0|2|13 +1.3.6.1.4.1.30932.1.1.2.30.14.0|2|25 +1.3.6.1.4.1.30932.1.1.2.30.15.0|2|10 +1.3.6.1.4.1.30932.1.1.2.30.16.0|2|17 +1.3.6.1.4.1.30932.1.1.2.30.17.0|2|20 +1.3.6.1.4.1.30932.1.1.2.30.18.0|2|5 +1.3.6.1.4.1.30932.1.1.2.30.19.0|2|9 +1.3.6.1.4.1.30932.1.1.2.30.20.0|2|8 +1.3.6.1.4.1.30932.1.1.2.30.21.0|2|2 +1.3.6.1.4.1.30932.1.1.2.30.22.0|2|28 +1.3.6.1.4.1.30932.1.1.2.30.23.0|2|24 +1.3.6.1.4.1.30932.1.1.2.30.24.0|2|5 +1.3.6.1.4.1.30932.1.1.2.31.1.0|2|11 +1.3.6.1.4.1.30932.1.1.2.31.2.0|2|2 +1.3.6.1.4.1.30932.1.1.2.31.3.0|2|26 +1.3.6.1.4.1.30932.1.1.2.31.4.0|2|4 +1.3.6.1.4.1.30932.1.1.2.31.5.0|2|3 +1.3.6.1.4.1.30932.1.1.2.31.6.0|2|3 +1.3.6.1.4.1.30932.1.1.2.31.7.0|2|10 +1.3.6.1.4.1.30932.1.1.2.31.8.0|2|27 +1.3.6.1.4.1.30932.1.1.2.31.9.0|2|19 +1.3.6.1.4.1.30932.1.1.2.31.10.0|2|7 +1.3.6.1.4.1.30932.1.1.2.31.11.0|2|15 +1.3.6.1.4.1.30932.1.1.2.31.12.0|2|24 +1.3.6.1.4.1.30932.1.1.2.31.13.0|2|9 +1.3.6.1.4.1.30932.1.1.2.31.14.0|2|14 +1.3.6.1.4.1.30932.1.1.2.31.15.0|2|4 +1.3.6.1.4.1.30932.1.1.2.31.16.0|2|1 +1.3.6.1.4.1.30932.1.1.2.31.17.0|2|24 +1.3.6.1.4.1.30932.1.1.2.31.18.0|2|0 +1.3.6.1.4.1.30932.1.1.2.31.19.0|2|21 +1.3.6.1.4.1.30932.1.1.2.31.20.0|2|14 +1.3.6.1.4.1.30932.1.1.2.31.21.0|2|1 +1.3.6.1.4.1.30932.1.1.2.31.22.0|2|31 +1.3.6.1.4.1.30932.1.1.2.31.23.0|2|15 +1.3.6.1.4.1.30932.1.1.2.31.24.0|2|3 +1.3.6.1.4.1.30932.1.1.2.32.1.0|2|10 +1.3.6.1.4.1.30932.1.1.2.32.2.0|2|11 +1.3.6.1.4.1.30932.1.1.2.33.1.0|2|2 +1.3.6.1.4.1.30932.1.1.2.33.2.0|2|22 +1.3.6.1.4.1.30932.1.1.2.34.1.0|2|3 +1.3.6.1.4.1.30932.1.1.2.34.2.0|2|10 +1.3.6.1.4.1.30932.1.1.2.35.1.0|2|3 +1.3.6.1.4.1.30932.1.1.2.35.2.0|2|23 +1.3.6.1.4.1.30932.1.1.2.36.1.0|2|17 +1.3.6.1.4.1.30932.1.1.2.36.2.0|2|7 +1.3.6.1.4.1.30932.1.1.2.37.1.0|2|19 +1.3.6.1.4.1.30932.1.1.2.37.2.0|2|26 +1.3.6.1.4.1.30932.1.1.2.38.1.0|2|7 +1.3.6.1.4.1.30932.1.1.2.38.2.0|2|18 +1.3.6.1.4.1.30932.1.1.2.39.1.0|2|7 +1.3.6.1.4.1.30932.1.1.2.39.2.0|2|21 +1.3.6.1.4.1.30932.1.1.2.40.0|4x|6c65676163792d6e616d6531 +1.3.6.1.4.1.30932.1.1.2.41.0|4x|7a6f6d626965732064726976696e6720746865697220666f7277617264204a61646564 +1.3.6.1.4.1.30932.1.1.2.42.1.0|4x|6b657074207468656972204a61646564206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.42.2.0|4x|7a6f6d6269657320666f72776172642062757420717561696e746c79206163746564 +1.3.6.1.4.1.30932.1.1.2.42.3.0|4|their +1.3.6.1.4.1.30932.1.1.2.42.4.0|4x|62757420666f7277617264207a6f6d62696573207468656972206b657074204a61646564207468656972206b657074 +1.3.6.1.4.1.30932.1.1.2.42.5.0|4x|64726976696e67207a6f6d62696573206f78656e20627574206f78656e2064726976696e67 +1.3.6.1.4.1.30932.1.1.2.42.6.0|4x|64726976696e672074686569722064726976696e67206b6570742064726976696e6720717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.30932.1.1.2.42.7.0|4x|7a6f6d6269657320627574206275742064726976696e67206b65707420746865697220627574206b657074206f78656e +1.3.6.1.4.1.30932.1.1.2.42.8.0|4x|4a61646564204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.42.9.0|4x|64726976696e672064726976696e6720666f727761726420666f7277617264206163746564207a6f6d6269657320627574 +1.3.6.1.4.1.30932.1.1.2.42.10.0|4x|64726976696e67206163746564206163746564204a6164656420717561696e746c7920717561696e746c792074686569722064726976696e67206163746564 +1.3.6.1.4.1.30932.1.1.2.42.11.0|4x|64726976696e6720717561696e746c79207468656972207a6f6d6269657320666f727761726420666f727761726420627574206b657074 +1.3.6.1.4.1.30932.1.1.2.42.12.0|4x|746865697220717561696e746c79207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.42.13.0|4x|6f78656e20627574206f78656e20666f727761726420627574206b65707420666f72776172642064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.42.14.0|4x|7468656972206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.30932.1.1.2.42.15.0|4x|6b657074206b65707420666f72776172642062757420666f7277617264204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.42.16.0|4x|6b657074206163746564 +1.3.6.1.4.1.30932.1.1.2.42.17.0|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.30932.1.1.2.42.18.0|4x|717561696e746c79204a6164656420746865697220627574204a6164656420627574204a61646564 +1.3.6.1.4.1.30932.1.1.2.42.19.0|4|kept +1.3.6.1.4.1.30932.1.1.2.42.20.0|4x|7a6f6d626965732064726976696e67204a61646564206163746564206b65707420666f727761726420616374656420627574 +1.3.6.1.4.1.30932.1.1.2.42.21.0|4x|717561696e746c79206275742062757420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.42.22.0|4x|616374656420666f7277617264204a61646564207468656972 +1.3.6.1.4.1.30932.1.1.2.42.23.0|4x|627574207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.30932.1.1.2.42.24.0|4|driving +1.3.6.1.4.1.30932.1.1.2.43.1.0|4x|6b657074204a616465642062757420616374656420717561696e746c79206f78656e20616374656420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.43.2.0|4x|6b65707420627574 +1.3.6.1.4.1.30932.1.1.2.43.3.0|4|their +1.3.6.1.4.1.30932.1.1.2.43.4.0|4|oxen +1.3.6.1.4.1.30932.1.1.2.43.5.0|4x|7468656972207a6f6d62696573206f78656e207a6f6d62696573207468656972206b657074207468656972 +1.3.6.1.4.1.30932.1.1.2.43.6.0|4x|6275742064726976696e67206163746564204a61646564 +1.3.6.1.4.1.30932.1.1.2.43.7.0|4x|6f78656e2064726976696e67206163746564206f78656e206163746564 +1.3.6.1.4.1.30932.1.1.2.43.8.0|4|but +1.3.6.1.4.1.30932.1.1.2.43.9.0|4x|666f727761726420666f7277617264207468656972207468656972 +1.3.6.1.4.1.30932.1.1.2.43.10.0|4x|6b657074206f78656e +1.3.6.1.4.1.30932.1.1.2.43.11.0|4x|4a6164656420666f727761726420666f7277617264207a6f6d626965732062757420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.30932.1.1.2.43.12.0|4x|4a61646564206b65707420627574206b657074207468656972204a61646564207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.43.13.0|4|oxen +1.3.6.1.4.1.30932.1.1.2.43.14.0|4x|717561696e746c7920627574206163746564207a6f6d62696573206b657074207a6f6d626965732064726976696e67 +1.3.6.1.4.1.30932.1.1.2.43.15.0|4|Jaded +1.3.6.1.4.1.30932.1.1.2.43.16.0|4x|4a616465642064726976696e67207a6f6d62696573204a61646564204a6164656420616374656420717561696e746c79206163746564206b657074 +1.3.6.1.4.1.30932.1.1.2.43.17.0|4x|627574204a61646564207a6f6d6269657320616374656420666f727761726420717561696e746c79207468656972204a61646564 +1.3.6.1.4.1.30932.1.1.2.43.18.0|4x|7468656972207a6f6d6269657320627574204a616465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.43.19.0|4x|616374656420666f7277617264204a61646564206163746564204a6164656420666f727761726420746865697220616374656420717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.43.20.0|4x|7468656972204a61646564206b65707420746865697220627574207468656972206f78656e204a61646564 +1.3.6.1.4.1.30932.1.1.2.43.21.0|4x|61637465642062757420717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.43.22.0|4x|74686569722064726976696e672064726976696e6720717561696e746c792061637465642064726976696e67206f78656e20627574 +1.3.6.1.4.1.30932.1.1.2.43.23.0|4x|717561696e746c79206f78656e206b657074207a6f6d6269657320666f727761726420616374656420666f7277617264206163746564 +1.3.6.1.4.1.30932.1.1.2.43.24.0|4x|627574207468656972207468656972206163746564207468656972206f78656e +1.3.6.1.4.1.30932.1.1.2.50.1.0|4x|64726976696e67204a61646564206163746564 +1.3.6.1.4.1.30932.1.1.2.50.2.0|4x|717561696e746c79206b657074 +1.3.6.1.4.1.30932.1.1.2.50.3.0|4x|4a61646564204a61646564 +1.3.6.1.4.1.30932.1.1.2.50.4.0|4x|6b6570742064726976696e67204a61646564206b657074206163746564206b6570742064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.50.5.0|4x|7a6f6d62696573206b657074206f78656e206f78656e20666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.50.6.0|4x|7a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.50.7.0|4x|666f727761726420717561696e746c79207a6f6d626965732064726976696e6720666f727761726420717561696e746c79207468656972207468656972 +1.3.6.1.4.1.30932.1.1.2.50.8.0|4x|717561696e746c7920627574 +1.3.6.1.4.1.30932.1.1.2.50.9.0|4x|6b6570742074686569722064726976696e672062757420666f72776172642064726976696e67207468656972207a6f6d626965732064726976696e67 +1.3.6.1.4.1.30932.1.1.2.50.10.0|4x|666f7277617264204a6164656420666f7277617264206b657074207a6f6d62696573206163746564 +1.3.6.1.4.1.30932.1.1.2.50.11.0|4x|4a61646564206f78656e20666f727761726420717561696e746c79206b657074 +1.3.6.1.4.1.30932.1.1.2.50.12.0|4x|62757420627574204a6164656420746865697220717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.50.13.0|4x|62757420666f7277617264206f78656e20746865697220666f727761726420627574207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.50.14.0|4x|7a6f6d62696573206b657074207a6f6d6269657320666f727761726420627574206f78656e20666f727761726420627574207468656972 +1.3.6.1.4.1.30932.1.1.2.50.15.0|4x|64726976696e67206f78656e206b657074206163746564206b6570742064726976696e67 +1.3.6.1.4.1.30932.1.1.2.50.16.0|4|Jaded +1.3.6.1.4.1.30932.1.1.2.51.1.0|4x|64726976696e67207a6f6d6269657320666f7277617264204a6164656420627574207a6f6d62696573207a6f6d626965732064726976696e67207468656972 +1.3.6.1.4.1.30932.1.1.2.51.2.0|4x|746865697220616374656420717561696e746c792064726976696e67206163746564206b657074207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.51.3.0|4x|717561696e746c79204a6164656420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.30932.1.1.2.51.4.0|4|quaintly +1.3.6.1.4.1.30932.1.1.2.51.5.0|4|but +1.3.6.1.4.1.30932.1.1.2.51.6.0|4|kept +1.3.6.1.4.1.30932.1.1.2.51.7.0|4|kept +1.3.6.1.4.1.30932.1.1.2.51.8.0|4x|7468656972207468656972204a61646564206f78656e206163746564 +1.3.6.1.4.1.30932.1.1.2.51.9.0|4x|6b65707420717561696e746c7920627574206f78656e207a6f6d6269657320746865697220717561696e746c79206163746564 +1.3.6.1.4.1.30932.1.1.2.51.10.0|4x|6f78656e204a61646564204a61646564206f78656e206f78656e204a6164656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.51.11.0|4x|6b65707420627574207a6f6d6269657320627574207a6f6d6269657320616374656420746865697220627574204a61646564 +1.3.6.1.4.1.30932.1.1.2.51.12.0|4|quaintly +1.3.6.1.4.1.30932.1.1.2.51.13.0|4x|4a6164656420746865697220717561696e746c79207468656972207a6f6d626965732064726976696e672062757420666f727761726420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.51.14.0|4x|6f78656e2074686569722064726976696e67206f78656e207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.51.15.0|4x|717561696e746c79204a6164656420627574206163746564 +1.3.6.1.4.1.30932.1.1.2.51.16.0|4x|717561696e746c7920616374656420717561696e746c79206b657074 +1.3.6.1.4.1.30932.1.1.2.55.0|2|24 +1.3.6.1.4.1.30932.1.1.2.56.0|2|5 +1.3.6.1.4.1.30932.1.1.2.57.0|2|5 +1.3.6.1.4.1.30932.1.1.2.58.1.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.2.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.3.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.4.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.5.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.6.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.7.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.8.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.9.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.10.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.11.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.12.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.13.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.14.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.15.0|2|1 +1.3.6.1.4.1.30932.1.1.2.59.1.0|2|3 +1.3.6.1.4.1.30932.1.1.2.59.2.0|2|25 +1.3.6.1.4.1.30932.1.1.2.60.1.0|2|28 +1.3.6.1.4.1.30932.1.1.2.60.2.0|2|8 +1.3.6.1.4.1.30932.1.1.2.61.1.0|2|26 +1.3.6.1.4.1.30932.1.1.2.61.2.0|2|17 +1.3.6.1.4.1.30932.1.1.2.62.1.0|2|25 +1.3.6.1.4.1.30932.1.1.2.62.2.0|2|12 +1.3.6.1.4.1.30932.1.1.2.63.0|4x|6b657074206f78656e +1.3.6.1.4.1.30932.1.1.2.64.0|4|but +1.3.6.1.4.1.30932.1.1.2.65.0|4x|746865697220717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.66.0|4x|6275742064726976696e6720746865697220666f7277617264207a6f6d6269657320666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.67.0|4x|4a61646564206f78656e206b65707420717561696e746c79207a6f6d62696573207468656972 +1.3.6.1.4.1.30932.1.1.2.68.0|4|oxen +1.3.6.1.4.1.30932.1.1.2.69.1.0|2|3 +1.3.6.1.4.1.30932.1.1.2.69.2.0|2|0 +1.3.6.1.4.1.30932.1.1.2.69.3.0|2|1 +1.3.6.1.4.1.30932.1.1.2.70.0|4x|4a61646564206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.71.0|4x|616374656420666f7277617264207a6f6d62696573206b657074207a6f6d62696573206b6570742061637465642064726976696e67207468656972 +1.3.6.1.4.1.30932.1.1.2.72.0|4x|666f727761726420717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.73.0|4|acted +1.3.6.1.4.1.30932.1.1.2.74.0|4|forward +1.3.6.1.4.1.30932.1.1.2.75.0|4x|717561696e746c792064726976696e672064726976696e6720616374656420627574204a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.76.0|4x|616374656420717561696e746c792064726976696e6720717561696e746c79206b657074206f78656e2064726976696e67206163746564204a61646564 +1.3.6.1.4.1.30932.1.1.2.77.0|4x|627574204a6164656420717561696e746c792064726976696e6720717561696e746c7920717561696e746c7920666f7277617264206163746564 +1.3.6.1.4.1.30932.1.1.2.78.0|4x|4a6164656420717561696e746c79206275742064726976696e67206f78656e20627574206163746564204a61646564 +1.3.6.1.4.1.30932.1.1.2.79.1.0|4x|6b65707420717561696e746c792064726976696e672064726976696e67206f78656e20627574 +1.3.6.1.4.1.30932.1.1.2.79.2.0|4x|7a6f6d62696573206f78656e206f78656e2064726976696e6720746865697220666f7277617264206f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.79.3.0|4x|6f78656e207468656972206f78656e207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.30932.1.1.2.80.0|2|2 +1.3.6.1.4.1.30932.1.1.2.81.0|4x|717561696e746c79207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.82.0|4|forward +1.3.6.1.4.1.30932.1.1.2.83.0|4|oxen +1.3.6.1.4.1.30932.1.1.2.84.1.0|2|31 +1.3.6.1.4.1.30932.1.1.2.84.2.0|2|25 +1.3.6.1.4.1.30932.1.1.2.85.0|4x|64726976696e67206f78656e20616374656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.86.0|4x|6163746564204a61646564207a6f6d6269657320717561696e746c79207468656972204a616465642064726976696e67 +1.3.6.1.4.1.30932.1.1.2.87.1.0|2|22 +1.3.6.1.4.1.30932.1.1.2.87.2.0|2|15 +1.3.6.1.4.1.30932.1.1.2.88.1.0|4|kept +1.3.6.1.4.1.30932.1.1.2.88.2.0|4x|7a6f6d62696573206b657074204a616465642074686569722061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.89.1.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.2.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.3.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.4.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.5.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.6.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.7.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.8.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.9.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.10.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.11.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.12.0|2|1 +1.3.6.1.4.1.30932.1.1.2.90.0|2|14 +1.3.6.1.4.1.30932.1.1.2.91.0|2|70 +1.3.6.1.4.1.30932.1.1.2.92.0|4x|616374656420627574 +1.3.6.1.4.1.30932.1.1.2.93.0|2|3 +1.3.6.1.4.1.30932.1.1.2.94.0|4x|627574204a61646564206b65707420746865697220717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.95.0|4x|666f727761726420746865697220666f7277617264206f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.96.0|4x|666f7277617264204a6164656420717561696e746c7920666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.97.0|4x|4a6164656420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.98.1.0|64x|c4fac691 +1.3.6.1.4.1.30932.1.1.2.98.2.0|64x|31fde63e +1.3.6.1.4.1.30932.1.1.2.98.3.0|64x|276b1d6f +1.3.6.1.4.1.30932.1.1.2.99.1.0|4|but +1.3.6.1.4.1.30932.1.1.2.99.2.0|4x|6b657074206f78656e206f78656e206163746564206b657074 +1.3.6.1.4.1.30932.1.1.2.99.3.0|4x|7a6f6d62696573206f78656e206163746564206163746564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.100.0|2|17 +1.3.6.1.4.1.30932.1.1.3.1.1.0|2|11 +1.3.6.1.4.1.30932.1.1.3.1.2.0|2|0 +1.3.6.1.4.1.30932.1.1.3.1.3.0|2|7 +1.3.6.1.4.1.30932.1.1.3.1.4.0|2|15 +1.3.6.1.4.1.30932.1.1.3.1.5.0|2|9 +1.3.6.1.4.1.30932.1.1.3.1.6.0|2|24 +1.3.6.1.4.1.30932.1.1.3.2.1.0|2|26 +1.3.6.1.4.1.30932.1.1.3.2.2.0|2|17 +1.3.6.1.4.1.30932.1.1.3.2.3.0|2|22 +1.3.6.1.4.1.30932.1.1.3.2.4.0|2|30 +1.3.6.1.4.1.30932.1.1.3.2.5.0|2|7 +1.3.6.1.4.1.30932.1.1.3.2.6.0|2|26 +1.3.6.1.4.1.30932.1.1.3.3.1.0|2|3 +1.3.6.1.4.1.30932.1.1.3.3.2.0|2|8 +1.3.6.1.4.1.30932.1.1.3.3.3.0|2|10 +1.3.6.1.4.1.30932.1.1.3.3.4.0|2|11 +1.3.6.1.4.1.30932.1.1.3.3.5.0|2|17 +1.3.6.1.4.1.30932.1.1.3.3.6.0|2|31 +1.3.6.1.4.1.30932.1.1.3.4.1.0|2|2 +1.3.6.1.4.1.30932.1.1.3.4.2.0|2|15 +1.3.6.1.4.1.30932.1.1.3.4.3.0|2|21 +1.3.6.1.4.1.30932.1.1.3.4.4.0|2|22 +1.3.6.1.4.1.30932.1.1.3.4.5.0|2|17 +1.3.6.1.4.1.30932.1.1.3.4.6.0|2|18 +1.3.6.1.4.1.30932.1.1.3.5.1.0|2|3 +1.3.6.1.4.1.30932.1.1.3.5.2.0|2|8 +1.3.6.1.4.1.30932.1.1.3.5.3.0|2|23 +1.3.6.1.4.1.30932.1.1.3.5.4.0|2|17 +1.3.6.1.4.1.30932.1.1.3.5.5.0|2|20 +1.3.6.1.4.1.30932.1.1.3.5.6.0|2|30 +1.3.6.1.4.1.30932.1.1.3.5.7.0|2|19 +1.3.6.1.4.1.30932.1.1.3.5.8.0|2|12 +1.3.6.1.4.1.30932.1.1.3.5.9.0|2|5 +1.3.6.1.4.1.30932.1.1.3.5.10.0|2|23 +1.3.6.1.4.1.30932.1.1.3.5.11.0|2|28 +1.3.6.1.4.1.30932.1.1.3.5.12.0|2|14 +1.3.6.1.4.1.30932.1.1.3.5.13.0|2|25 +1.3.6.1.4.1.30932.1.1.3.5.14.0|2|0 +1.3.6.1.4.1.30932.1.1.3.5.15.0|2|24 +1.3.6.1.4.1.30932.1.1.3.5.16.0|2|20 +1.3.6.1.4.1.30932.1.1.3.5.17.0|2|15 +1.3.6.1.4.1.30932.1.1.3.5.18.0|2|3 +1.3.6.1.4.1.30932.1.1.3.5.19.0|2|28 +1.3.6.1.4.1.30932.1.1.3.5.20.0|2|17 +1.3.6.1.4.1.30932.1.1.3.5.21.0|2|29 +1.3.6.1.4.1.30932.1.1.3.5.22.0|2|5 +1.3.6.1.4.1.30932.1.1.3.5.23.0|2|15 +1.3.6.1.4.1.30932.1.1.3.5.24.0|2|9 +1.3.6.1.4.1.30932.1.1.3.6.0|4x|7468656972204a6164656420627574 +1.3.6.1.4.1.30932.1.1.3.7.1.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.2.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.3.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.4.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.5.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.6.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.7.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.8.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.9.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.10.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.11.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.12.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.13.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.14.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.15.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.16.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.17.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.18.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.19.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.20.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.21.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.22.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.23.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.24.0|2|0 +1.3.6.1.4.1.30932.1.1.3.8.1.0|2|30 +1.3.6.1.4.1.30932.1.1.3.8.2.0|2|20 +1.3.6.1.4.1.30932.1.1.3.9.1.0|2|16 +1.3.6.1.4.1.30932.1.1.3.9.2.0|2|29 +1.3.6.1.4.1.30932.1.1.3.10.1.0|2|3 +1.3.6.1.4.1.30932.1.1.3.10.2.0|2|14 +1.3.6.1.4.1.30932.1.1.3.10.3.0|2|11 +1.3.6.1.4.1.30932.1.1.3.10.4.0|2|9 +1.3.6.1.4.1.30932.1.1.3.10.5.0|2|7 +1.3.6.1.4.1.30932.1.1.3.10.7.0|2|31 +1.3.6.1.4.1.30932.1.1.3.10.9.0|2|0 +1.3.6.1.4.1.30932.1.1.3.10.11.0|2|14 +1.3.6.1.4.1.30932.1.1.3.11.1.0|70|16264590203672736646 +1.3.6.1.4.1.30932.1.1.3.11.2.0|70|10480497828214594536 +1.3.6.1.4.1.30932.1.1.3.11.3.0|70|15275984435908529563 +1.3.6.1.4.1.30932.1.1.3.11.4.0|70|2649644366939238895 +1.3.6.1.4.1.30932.1.1.3.11.5.0|70|16023443192449606371 +1.3.6.1.4.1.30932.1.1.3.11.6.0|70|4242479706199318859 +1.3.6.1.4.1.30932.1.1.3.12.1.0|70|4092322495551077882 +1.3.6.1.4.1.30932.1.1.3.12.2.0|70|1976339425415722858 +1.3.6.1.4.1.30932.1.1.3.12.3.0|70|17082478301598655917 +1.3.6.1.4.1.30932.1.1.3.12.4.0|70|14900246911539986721 +1.3.6.1.4.1.30932.1.1.3.12.5.0|70|17980681661801324771 +1.3.6.1.4.1.30932.1.1.3.12.6.0|70|4404849861412391969 +1.3.6.1.4.1.30932.1.1.3.12.7.0|70|6614263813499667200 +1.3.6.1.4.1.30932.1.1.3.12.8.0|70|11226575729869874634 +1.3.6.1.4.1.30932.1.1.3.12.9.0|70|18304423676138222618 +1.3.6.1.4.1.30932.1.1.3.12.10.0|70|8567092784356374549 +1.3.6.1.4.1.30932.1.1.3.12.11.0|70|15934476233589254254 +1.3.6.1.4.1.30932.1.1.3.12.12.0|70|10526965409775612347 +1.3.6.1.4.1.30932.1.1.3.12.13.0|70|4992860910233408263 +1.3.6.1.4.1.30932.1.1.3.12.14.0|70|6647558032794683578 +1.3.6.1.4.1.30932.1.1.3.12.15.0|70|11780883078059484674 +1.3.6.1.4.1.30932.1.1.3.12.16.0|70|1843737533351206621 +1.3.6.1.4.1.30932.1.1.3.12.17.0|70|4542252279799957129 +1.3.6.1.4.1.30932.1.1.3.12.18.0|70|14916965746036634478 +1.3.6.1.4.1.30932.1.1.3.12.19.0|70|1735783194298570549 +1.3.6.1.4.1.30932.1.1.3.12.20.0|70|16561897416095631530 +1.3.6.1.4.1.30932.1.1.3.12.21.0|70|10049784299176410470 +1.3.6.1.4.1.30932.1.1.3.12.22.0|70|1221396927160634845 +1.3.6.1.4.1.30932.1.1.3.12.23.0|70|13798134093641246880 +1.3.6.1.4.1.30932.1.1.3.12.24.0|70|6889309830170805650 +1.3.6.1.4.1.30932.1.1.3.13.1.0|2|10 +1.3.6.1.4.1.30932.1.1.3.13.2.0|2|8 +1.3.6.1.4.1.30932.1.1.3.13.3.0|2|16 +1.3.6.1.4.1.30932.1.1.4.1.1.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.2.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.3.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.4.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.5.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.6.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.7.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.8.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.9.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.10.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.11.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.12.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.13.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.14.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.15.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.16.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.17.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.18.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.19.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.20.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.21.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.22.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.23.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.24.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.1.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.2.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.3.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.4.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.5.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.6.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.7.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.8.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.9.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.10.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.11.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.12.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.13.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.14.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.15.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.16.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.17.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.18.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.19.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.20.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.21.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.22.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.23.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.24.0|2|0 +1.3.6.1.4.1.30932.1.1.4.3.0|4x|6f78656e2064726976696e6720627574 +1.3.6.1.4.1.30932.1.1.5.1.0|2|26 +1.3.6.1.4.1.30932.1.1.5.2.0|4x|6b65707420627574207468656972207468656972206f78656e207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.5.3.0|2|12 +1.3.6.1.4.1.30932.1.1.5.4.0|4x|627574204a616465642064726976696e67206b657074206f78656e206b657074 +1.3.6.1.4.1.30932.1.10.1.1.1.1.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.1.2.0|64x|cb99c348 +1.3.6.1.4.1.30932.1.10.1.1.1.1.3.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.1.4.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.1.1.5.0|64x|2ea03123 +1.3.6.1.4.1.30932.1.10.1.1.1.1.6.0|64x|9fa67a25 +1.3.6.1.4.1.30932.1.10.1.1.1.1.7.0|64x|d4a5d417 +1.3.6.1.4.1.30932.1.10.1.1.1.1.8.0|64x|65ed45d6 +1.3.6.1.4.1.30932.1.10.1.1.1.1.9.0|64x|ebb7605f +1.3.6.1.4.1.30932.1.10.1.1.1.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.1.2.2.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.2.3.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.1.2.4.0|4x|7a6f6d62696573207a6f6d62696573204a6164656420717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.1.1.2.5.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.2.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.2.7.0|4x|717561696e746c7920627574 +1.3.6.1.4.1.30932.1.10.1.1.1.2.8.0|4|kept +1.3.6.1.4.1.30932.1.10.1.1.1.2.9.0|4x|717561696e746c79204a6164656420616374656420666f7277617264206163746564 +1.3.6.1.4.1.30932.1.10.1.1.1.2.10.0|4x|666f727761726420717561696e746c792064726976696e67206b657074206163746564 +1.3.6.1.4.1.30932.1.10.1.1.1.2.11.0|4x|6f78656e20746865697220717561696e746c792064726976696e672064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.1.3.1.0|4|kept +1.3.6.1.4.1.30932.1.10.1.1.1.3.2.0|4x|6b6570742064726976696e6720666f7277617264206b657074204a61646564207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.2.1.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.2.0|4x|6b65707420746865697220627574206f78656e207a6f6d6269657320627574206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.3.0|4x|6f78656e20746865697220666f7277617264206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.4.0|4x|64726976696e67206b65707420666f727761726420666f7277617264207468656972204a616465642064726976696e67207a6f6d62696573206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.5.0|4x|627574206f78656e206163746564206b6570742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.6.0|4x|746865697220746865697220717561696e746c79206b657074206b657074204a61646564206b657074207468656972206f78656e +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.7.0|4|but +1.3.6.1.4.1.30932.1.10.1.1.2.1.3.0|2|10 +1.3.6.1.4.1.30932.1.10.1.1.2.1.4.0|2|9 +1.3.6.1.4.1.30932.1.10.1.1.2.1.5.0|4x|627574206163746564206b65707420627574 +1.3.6.1.4.1.30932.1.10.1.1.2.1.6.0|4|Jaded +1.3.6.1.4.1.30932.1.10.1.1.2.1.7.0|4x|717561696e746c79207a6f6d626965732064726976696e672062757420627574207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.1.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.1.9.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.2.1.10.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.1.11.0|4x|717561696e746c79207a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.1.12.0|4x|7a6f6d62696573206f78656e2064726976696e67204a6164656420627574204a61646564206f78656e207468656972 +1.3.6.1.4.1.30932.1.10.1.1.2.1.13.0|4x|62757420717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.1.2.1.14.0|4x|666f7277617264206b657074204a61646564206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.1.15.0|4x|6b657074207468656972206163746564204a6164656420666f7277617264 +1.3.6.1.4.1.30932.1.10.1.1.2.1.16.0|4x|64726976696e672064726976696e67204a61646564206f78656e20616374656420627574 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.1.0|4|kept +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.2.0|4x|4a6164656420616374656420666f72776172642064726976696e6720627574206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.3.0|4x|6f78656e20717561696e746c7920666f72776172642074686569722062757420666f7277617264207a6f6d626965732064726976696e672064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.4.0|4x|616374656420666f7277617264206f78656e206b657074206f78656e206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.5.0|4x|666f72776172642062757420627574206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.6.0|4x|6b657074206f78656e20746865697220666f7277617264207a6f6d6269657320627574206f78656e20627574 +1.3.6.1.4.1.30932.1.10.1.1.2.1.18.5.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.2.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.2.2.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.2.2.3.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.2.4.0|2|12 +1.3.6.1.4.1.30932.1.10.1.1.2.2.5.0|2|17 +1.3.6.1.4.1.30932.1.10.1.1.2.3.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.3.2.0|2|27 +1.3.6.1.4.1.30932.1.10.1.1.2.3.3.0|2|29 +1.3.6.1.4.1.30932.1.10.1.1.2.3.4.0|4|Jaded +1.3.6.1.4.1.30932.1.10.1.1.2.3.5.0|4x|4a61646564207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.2.3.6.0|4x|7468656972204a6164656420627574206f78656e2064726976696e6720627574206b657074206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.3.7.0|4x|6b65707420666f7277617264207468656972204a61646564207a6f6d62696573207468656972206b657074206163746564207468656972 +1.3.6.1.4.1.30932.1.10.1.1.2.3.8.0|4x|62757420666f7277617264206f78656e20717561696e746c79206f78656e206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.3.9.0|4x|746865697220666f7277617264207468656972206f78656e207a6f6d626965732064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.2.3.10.0|4x|6163746564207a6f6d626965732062757420627574206b657074206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.3.11.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.2.0|2|26 +1.3.6.1.4.1.30932.1.10.1.1.3.3.0|2|14 +1.3.6.1.4.1.30932.1.10.1.1.3.4.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.5.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.7.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.9.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.10.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.12.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.13.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.14.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.15.0|2|7 +1.3.6.1.4.1.30932.1.10.1.1.3.16.0|2|51 +1.3.6.1.4.1.30932.1.10.1.1.3.17.0|4x|6f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.3.18.0|2|15 +1.3.6.1.4.1.30932.1.10.1.1.3.19.0|4x|666f7277617264206b65707420627574204a6164656420666f7277617264 +1.3.6.1.4.1.30932.1.10.1.1.3.20.0|4x|717561696e746c7920717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.1.3.21.0|4x|64726976696e67207a6f6d6269657320717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.30932.1.10.1.1.3.22.0|4x|616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.3.23.0|4x|627574204a6164656420666f7277617264206163746564204a61646564207468656972206b6570742061637465642064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.3.24.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.25.0|4|kept +1.3.6.1.4.1.30932.1.10.1.1.3.26.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.4.1.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.4.1.2.0|4x|616374656420627574206f78656e206f78656e204a61646564 +1.3.6.1.4.1.30932.1.10.1.1.4.1.3.0|4|oxen +1.3.6.1.4.1.30932.1.10.1.1.4.1.4.0|2|3 +1.3.6.1.4.1.30932.1.10.1.1.4.1.5.0|2|18 +1.3.6.1.4.1.30932.1.10.1.1.4.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.4.2.2.0|4x|6275742061637465642064726976696e67207a6f6d62696573206f78656e204a61646564206163746564206f78656e +1.3.6.1.4.1.30932.1.10.1.1.4.2.3.0|4x|6275742064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.4.2.4.0|4x|6f78656e204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.30932.1.10.1.1.4.2.5.0|2|25 +1.3.6.1.4.1.30932.1.10.1.1.4.2.6.0|2|7 +1.3.6.1.4.1.30932.1.10.1.1.4.2.7.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.4.2.8.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.4.2.9.0|4x|6163746564206b657074206163746564204a616465642064726976696e6720666f7277617264207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.4.2.10.0|4|Jaded +1.3.6.1.4.1.30932.1.10.1.1.4.2.11.0|2|21 +1.3.6.1.4.1.30932.1.10.1.1.4.2.12.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.4.2.13.0|4x|666f727761726420717561696e746c79206b65707420666f7277617264204a6164656420666f7277617264206f78656e206b65707420627574 +1.3.6.1.4.1.30932.1.10.1.1.4.2.14.0|2|20 +1.3.6.1.4.1.30932.1.10.1.1.4.2.15.0|4x|6f78656e20666f7277617264206b657074207a6f6d626965732062757420627574 +1.3.6.1.4.1.30932.1.10.1.1.4.2.16.0|2|20 +1.3.6.1.4.1.30932.1.10.1.1.4.2.17.0|4x|6b6570742062757420627574206163746564207a6f6d626965732074686569722064726976696e67206163746564206f78656e +1.3.6.1.4.1.30932.1.10.1.1.4.2.18.0|2|30 +1.3.6.1.4.1.30932.1.10.1.1.4.2.19.0|4x|717561696e746c7920666f727761726420717561696e746c79206f78656e206b657074206f78656e204a61646564 +1.3.6.1.4.1.30932.1.10.1.1.4.2.20.0|2|24 +1.3.6.1.4.1.30932.1.10.1.1.6.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.6.2.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.6.3.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.6.4.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.6.5.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.6.6.0|2|13 +1.3.6.1.4.1.30932.1.10.1.1.6.7.0|2|28 +1.3.6.1.4.1.30932.1.10.1.1.6.8.0|2|6 +1.3.6.1.4.1.30932.1.10.1.1.6.9.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.7.1.0|2|29 +1.3.6.1.4.1.30932.1.10.1.1.8.1.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.2.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.3.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.4.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.5.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.7.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.9.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.10.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.12.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.13.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.14.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.15.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.16.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.17.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.18.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.19.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.20.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.21.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.22.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.23.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.24.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.25.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.26.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.27.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.28.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.29.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.30.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.31.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.2.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.3.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.4.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.5.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.6.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.7.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.8.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.9.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.10.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.12.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.13.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.14.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.15.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.16.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.17.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.18.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.19.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.20.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.21.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.22.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.23.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.24.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.25.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.26.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.27.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.28.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.29.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.30.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.31.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.2.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.3.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.4.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.5.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.7.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.9.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.10.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.12.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.13.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.14.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.15.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.16.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.17.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.18.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.19.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.20.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.21.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.22.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.23.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.24.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.25.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.26.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.27.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.28.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.29.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.30.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.31.0|2|1 +1.3.6.1.4.1.30932.1.10.1.2.1.0|66|55859 +1.3.6.1.4.1.30932.1.10.1.2.10.1.1.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.2.10.1.2.6.0.36.155.53.3.246|4x|6d6f64656c31 +1.3.6.1.4.1.30932.1.10.1.2.10.1.3.6.0.36.155.53.3.246|4x|6e616d6531 +1.3.6.1.4.1.30932.1.10.1.2.10.1.3.12.48.48.48.69.68.51.48.49.48.54.67.53|4x|6e616d6532 +1.3.6.1.4.1.30932.1.10.1.2.10.1.4.6.0.36.155.53.3.246|4|forward +1.3.6.1.4.1.30932.1.10.1.2.10.1.5.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.2.10.1.6.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.7.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.8.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.2.10.1.9.6.0.36.155.53.3.246|2|19 +1.3.6.1.4.1.30932.1.10.1.2.10.1.10.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.11.6.0.36.155.53.3.246|4x|76312e31 +1.3.6.1.4.1.30932.1.10.1.2.10.1.12.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.13.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.2.10.1.14.6.0.36.155.53.3.246|64x|2a02d2e0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.15.6.0.36.155.53.3.246|4x|7a6f6d62696573204a61646564206163746564206f78656e +1.3.6.1.4.1.30932.1.10.1.2.10.1.16.6.0.36.155.53.3.246|2|31 +1.3.6.1.4.1.30932.1.10.1.2.10.1.17.6.0.36.155.53.3.246|4x|63616231 +1.3.6.1.4.1.30932.1.10.1.2.10.1.18.6.0.36.155.53.3.246|4x|6f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.3.1.0|66|53817 +1.3.6.1.4.1.30932.1.10.1.3.10.1.1.6.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.10.1.1.18.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.10.1.2.6.6.0.36.155.53.3.246|2|6 +1.3.6.1.4.1.30932.1.10.1.3.10.1.2.18.6.0.36.155.53.3.246|2|18 +1.3.6.1.4.1.30932.1.10.1.3.10.1.3.6.6.0.36.155.53.3.246|2|10 +1.3.6.1.4.1.30932.1.10.1.3.10.1.3.18.6.0.36.155.53.3.246|2|27 +1.3.6.1.4.1.30932.1.10.1.3.100.0|66|13416 +1.3.6.1.4.1.30932.1.10.1.3.110.1.1.1.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.110.1.1.17.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.110.1.2.1.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.3.110.1.2.1.12.48.48.48.69.68.51.48.49.48.54.67.53|2|1 +1.3.6.1.4.1.30932.1.10.1.3.110.1.2.17.6.0.36.155.53.3.246|2|17 +1.3.6.1.4.1.30932.1.10.1.3.110.1.3.1.6.0.36.155.53.3.246|2|28 +1.3.6.1.4.1.30932.1.10.1.3.110.1.3.17.6.0.36.155.53.3.246|2|9 +1.3.6.1.4.1.30932.1.10.1.3.110.1.4.1.6.0.36.155.53.3.246|2|31 +1.3.6.1.4.1.30932.1.10.1.3.110.1.4.17.6.0.36.155.53.3.246|2|31 +1.3.6.1.4.1.30932.1.10.1.3.110.1.5.1.6.0.36.155.53.3.246|2|14 +1.3.6.1.4.1.30932.1.10.1.3.110.1.5.17.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.3.110.1.6.1.6.0.36.155.53.3.246|2|17 +1.3.6.1.4.1.30932.1.10.1.3.110.1.6.17.6.0.36.155.53.3.246|2|26 +1.3.6.1.4.1.30932.1.10.1.3.110.1.7.1.6.0.36.155.53.3.246|2|25 +1.3.6.1.4.1.30932.1.10.1.3.110.1.7.1.12.48.48.48.69.68.51.48.49.48.54.67.53|2|25 +1.3.6.1.4.1.30932.1.10.1.3.110.1.7.17.6.0.36.155.53.3.246|2|11 +1.3.6.1.4.1.30932.1.10.1.3.110.1.8.1.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.3.110.1.8.17.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.3.110.1.9.1.6.0.36.155.53.3.246|70|5425026526891357035 +1.3.6.1.4.1.30932.1.10.1.3.110.1.9.1.12.48.48.48.69.68.51.48.49.48.54.67.53|70|5425026526891357035 +1.3.6.1.4.1.30932.1.10.1.3.110.1.9.17.6.0.36.155.53.3.246|70|5905007801987739246 +1.3.6.1.4.1.30932.1.10.1.3.210.1.1.30060|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.210.1.1.42504|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.210.1.2.30060|2|2 +1.3.6.1.4.1.30932.1.10.1.3.210.1.2.42504|2|10 +1.3.6.1.4.1.30932.1.10.1.3.210.1.3.30060|2|9 +1.3.6.1.4.1.30932.1.10.1.3.210.1.3.42504|2|19 +1.3.6.1.4.1.30932.1.10.1.3.210.1.4.30060|2|8 +1.3.6.1.4.1.30932.1.10.1.3.210.1.4.42504|2|13 +1.3.6.1.4.1.30932.1.10.1.3.210.1.5.30060|2|6 +1.3.6.1.4.1.30932.1.10.1.3.210.1.5.42504|2|16 +1.3.6.1.4.1.30932.1.10.1.3.210.1.6.30060|2|8 +1.3.6.1.4.1.30932.1.10.1.3.210.1.6.42504|2|7 +1.3.6.1.4.1.30932.1.10.1.3.210.1.7.30060|2|24 +1.3.6.1.4.1.30932.1.10.1.3.210.1.7.42504|2|15 +1.3.6.1.4.1.30932.1.10.1.3.210.1.8.30060|2|7 +1.3.6.1.4.1.30932.1.10.1.3.210.1.8.42504|2|23 +1.3.6.1.4.1.30932.1.10.1.3.210.1.9.30060|2|20 +1.3.6.1.4.1.30932.1.10.1.3.210.1.9.42504|2|5 +1.3.6.1.4.1.30932.1.10.1.3.210.1.10.30060|2|29 +1.3.6.1.4.1.30932.1.10.1.3.210.1.10.42504|2|5 +1.3.6.1.4.1.30932.1.10.1.3.210.1.11.30060|2|29 +1.3.6.1.4.1.30932.1.10.1.3.210.1.11.42504|2|1 +1.3.6.1.4.1.30932.1.10.1.3.210.1.12.30060|66|30060 +1.3.6.1.4.1.30932.1.10.1.3.210.1.12.42504|66|42504 +1.3.6.1.4.1.30932.1.10.1.4.1.0|66|50677 +1.3.6.1.4.1.30932.1.10.1.4.10.1.1.7.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.10.1.1.16.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.10.1.2.7.6.0.36.155.53.3.246|2|7 +1.3.6.1.4.1.30932.1.10.1.4.10.1.2.16.6.0.36.155.53.3.246|2|16 +1.3.6.1.4.1.30932.1.10.1.4.10.1.3.7.6.0.36.155.53.3.246|2|29 +1.3.6.1.4.1.30932.1.10.1.4.10.1.3.16.6.0.36.155.53.3.246|2|23 +1.3.6.1.4.1.30932.1.10.1.4.10.1.4.7.6.0.36.155.53.3.246|4x|6f75746c657431 +1.3.6.1.4.1.30932.1.10.1.4.10.1.4.16.6.0.36.155.53.3.246|4x|6f75746c657432 +1.3.6.1.4.1.30932.1.10.1.4.10.1.5.7.6.0.36.155.53.3.246|4x|6f78656e20666f72776172642064726976696e67207a6f6d6269657320616374656420717561696e746c79207468656972207a6f6d62696573207468656972 +1.3.6.1.4.1.30932.1.10.1.4.10.1.5.16.6.0.36.155.53.3.246|4x|7468656972206b6570742064726976696e67207468656972207a6f6d6269657320666f7277617264204a616465642064726976696e67 +1.3.6.1.4.1.30932.1.10.1.4.10.1.6.7.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.4.10.1.6.16.6.0.36.155.53.3.246|2|28 +1.3.6.1.4.1.30932.1.10.1.4.10.1.7.7.6.0.36.155.53.3.246|2|3 +1.3.6.1.4.1.30932.1.10.1.4.10.1.7.16.6.0.36.155.53.3.246|2|8 +1.3.6.1.4.1.30932.1.10.1.4.10.1.8.7.6.0.36.155.53.3.246|2|16 +1.3.6.1.4.1.30932.1.10.1.4.10.1.8.16.6.0.36.155.53.3.246|2|16 +1.3.6.1.4.1.30932.1.10.1.4.10.1.9.7.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.9.16.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.10.7.6.0.36.155.53.3.246|70|16933530166855965280 +1.3.6.1.4.1.30932.1.10.1.4.10.1.10.16.6.0.36.155.53.3.246|70|12820398031307264998 +1.3.6.1.4.1.30932.1.10.1.4.10.1.11.7.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.11.16.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.12.7.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.12.16.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.210.1.1.19.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.210.1.1.20.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.210.1.2.19.6.0.36.155.53.3.246|2|19 +1.3.6.1.4.1.30932.1.10.1.4.210.1.2.20.6.0.36.155.53.3.246|2|20 +1.3.6.1.4.1.30932.1.10.1.4.210.1.3.19.6.0.36.155.53.3.246|2|9 +1.3.6.1.4.1.30932.1.10.1.4.210.1.3.20.6.0.36.155.53.3.246|2|6 +1.3.6.1.4.1.30932.1.10.1.4.210.1.4.19.6.0.36.155.53.3.246|2|3 +1.3.6.1.4.1.30932.1.10.1.4.210.1.4.20.6.0.36.155.53.3.246|2|13 +1.3.6.1.4.1.30932.1.10.1.4.310.1.1.4.111.120.101.110.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.310.1.1.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.310.1.2.4.111.120.101.110.6.0.36.155.53.3.246|4|oxen +1.3.6.1.4.1.30932.1.10.1.4.310.1.2.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|4x|7a6f6d62696573206b657074206b657074 +1.3.6.1.4.1.30932.1.10.1.4.310.1.3.4.111.120.101.110.6.0.36.155.53.3.246|2|19 +1.3.6.1.4.1.30932.1.10.1.4.310.1.3.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|29 +1.3.6.1.4.1.30932.1.10.1.4.310.1.4.4.111.120.101.110.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.4.310.1.4.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|4 +1.3.6.1.4.1.30932.1.10.1.4.310.1.5.4.111.120.101.110.6.0.36.155.53.3.246|2|8 +1.3.6.1.4.1.30932.1.10.1.4.310.1.5.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|17 +1.3.6.1.4.1.30932.1.10.1.4.310.1.6.4.111.120.101.110.6.0.36.155.53.3.246|2|26 +1.3.6.1.4.1.30932.1.10.1.4.310.1.6.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|14 +1.3.6.1.4.1.30932.1.10.1.4.310.1.7.4.111.120.101.110.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.4.310.1.7.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.5.1.0|66|47455 +1.3.6.1.4.1.30932.1.10.1.5.5.1.1.5.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.5.1.1.10.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.5.1.2.5.6.0.36.155.53.3.246|2|5 +1.3.6.1.4.1.30932.1.10.1.5.5.1.2.10.6.0.36.155.53.3.246|2|10 +1.3.6.1.4.1.30932.1.10.1.5.5.1.3.5.6.0.36.155.53.3.246|4x|7a6f6d626965732064726976696e672062757420666f7277617264207a6f6d6269657320666f7277617264207a6f6d6269657320717561696e746c7920717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.5.5.1.3.10.6.0.36.155.53.3.246|4x|627574207468656972206b657074206f78656e206b657074206163746564 +1.3.6.1.4.1.30932.1.10.1.5.10.1.1.4.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.10.1.1.6.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.10.1.2.4.6.0.36.155.53.3.246|2|4 +1.3.6.1.4.1.30932.1.10.1.5.10.1.2.6.6.0.36.155.53.3.246|2|6 +1.3.6.1.4.1.30932.1.10.1.5.10.1.3.4.6.0.36.155.53.3.246|4x|73656e736f7231 +1.3.6.1.4.1.30932.1.10.1.5.10.1.3.6.6.0.36.155.53.3.246|4x|73656e736f7232 +1.3.6.1.4.1.30932.1.10.1.5.10.1.4.4.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.5.10.1.4.6.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.5.10.1.5.4.6.0.36.155.53.3.246|2|10 +1.3.6.1.4.1.30932.1.10.1.5.10.1.5.6.6.0.36.155.53.3.246|2|13 +1.3.6.1.4.1.30932.1.10.1.5.110.1.1.10.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.110.1.1.25.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.110.1.2.10.6.0.36.155.53.3.246|2|10 +1.3.6.1.4.1.30932.1.10.1.5.110.1.2.25.6.0.36.155.53.3.246|2|25 +1.3.6.1.4.1.30932.1.10.1.5.110.1.3.10.6.0.36.155.53.3.246|2|31 +1.3.6.1.4.1.30932.1.10.1.5.110.1.3.25.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.5.110.1.4.10.6.0.36.155.53.3.246|2|26 +1.3.6.1.4.1.30932.1.10.1.5.110.1.4.25.6.0.36.155.53.3.246|2|22 +1.3.6.1.4.1.30932.1.10.1.5.110.1.5.10.6.0.36.155.53.3.246|2|6 +1.3.6.1.4.1.30932.1.10.1.5.110.1.5.25.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.5.110.1.6.10.6.0.36.155.53.3.246|2|4 +1.3.6.1.4.1.30932.1.10.1.5.110.1.6.25.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.6.1.0|66|46081 +1.3.6.1.4.1.30932.1.10.1.6.2.0|66|51334 +1.3.6.1.4.1.30932.1.10.1.6.10.1.1.2374|66|2374 +1.3.6.1.4.1.30932.1.10.1.6.10.1.1.59874|66|59874 +1.3.6.1.4.1.30932.1.10.1.6.10.1.2.2374|4x|7468656972206f78656e20717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.30932.1.10.1.6.10.1.2.59874|4x|74686569722064726976696e6720666f72776172642064726976696e67207a6f6d62696573206163746564206f78656e20717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.6.20.1.1.49237|66|49237 +1.3.6.1.4.1.30932.1.10.1.6.20.1.1.57037|66|57037 +1.3.6.1.4.1.30932.1.10.1.6.20.1.2.49237|66|3703 +1.3.6.1.4.1.30932.1.10.1.6.20.1.2.57037|66|22638 +1.3.6.1.4.1.30932.1.10.1.6.20.1.3.49237|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.6.20.1.3.57037|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.6.20.1.4.49237|2|15 +1.3.6.1.4.1.30932.1.10.1.6.20.1.4.57037|2|31 +1.3.6.1.4.1.30932.1.10.1.7.1.0|66|1916 +1.3.6.1.4.1.30932.1.10.1.7.90.1.1.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.7.90.1.2.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.90.1.3.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.7.90.1.4.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.7.90.1.5.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.90.1.6.6.0.36.155.53.3.246|2|8 +1.3.6.1.4.1.30932.1.10.1.7.100.1.1.1.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.7.100.1.1.2.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.7.100.1.2.1.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.2.2.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.7.100.1.3.1.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.7.100.1.3.2.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.7.100.1.4.1.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.7.100.1.4.2.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.5.1.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.5.2.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.7.0|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.8.0|66|26997 +1.3.6.1.4.1.30932.1.10.1.7.100.1.9.0|4x|7a6f6d62696573206275742064726976696e672064726976696e67 +1.3.6.1.4.1.30932.1.10.1.7.100.1.10.0|4x|6f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.30932.1.10.1.7.100.1.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.500.0.1.0|4|their +1.3.6.1.4.1.30932.1.10.1.500.0.2.0|4|forward +1.3.6.1.4.1.30932.1.10.1.500.0.3.0|4x|7468656972204a6164656420717561696e746c792064726976696e67204a61646564 +1.3.6.1.4.1.30932.1.10.1.500.0.4.0|2|2 +1.3.6.1.4.1.30932.1.10.1.500.0.5.0|6|1.3.6.1.3.179.103 +1.3.6.1.4.1.30932.1.10.1.500.0.6.0|2|0 +1.3.6.1.4.1.30932.1.10.1.500.0.7.0|2|9 +1.3.6.1.4.1.30932.1.10.1.500.0.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.500.0.9.0|2|28 +1.3.6.1.4.1.30932.1.10.1.500.0.10.0|4x|627574207a6f6d6269657320717561696e746c792064726976696e67 diff --git a/test/new-e2e/ndm/snmp/compose/data/checkpoint-firewall.snmprec b/test/new-e2e/ndm/snmp/compose/data/checkpoint-firewall.snmprec new file mode 100644 index 0000000000000..2adb7d3cc5ab0 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/checkpoint-firewall.snmprec @@ -0,0 +1,4027 @@ +1.3.6.1.2.1.1.1.0|4|Linux gw-af4bd9 3.10.0-957.21.3cpx86_64 #1 SMP Tue Jan 28 17:26:12 IST 2020 x86_64 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2620.1.1 +1.3.6.1.4.1.2620.1.1.1.0|4x|6f78656e204a61646564206f78656e +1.3.6.1.4.1.2620.1.1.2.0|4x|4a61646564206b6570742064726976696e67204a61646564207a6f6d626965732062757420717561696e746c792064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.1.3.0|4|quaintly +1.3.6.1.4.1.2620.1.1.4.0|2|10 +1.3.6.1.4.1.2620.1.1.5.0|2|25 +1.3.6.1.4.1.2620.1.1.6.0|2|22 +1.3.6.1.4.1.2620.1.1.7.0|2|23 +1.3.6.1.4.1.2620.1.1.8.0|2|3 +1.3.6.1.4.1.2620.1.1.9.0|2|2 +1.3.6.1.4.1.2620.1.1.10.0|4x|746865697220717561696e746c7920627574 +1.3.6.1.4.1.2620.1.1.11.0|4x|74686569722064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.2620.1.1.12.0|4x|6b657074206b657074207468656972207a6f6d62696573207a6f6d62696573206163746564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.1.21.0|4x|64726976696e672062757420666f727761726420666f72776172642062757420746865697220627574206b657074 +1.3.6.1.4.1.2620.1.1.22.0|2|7 +1.3.6.1.4.1.2620.1.1.23.0|2|19 +1.3.6.1.4.1.2620.1.1.24.0|2|31 +1.3.6.1.4.1.2620.1.1.25.1.0|4x|6163746564207a6f6d626965732064726976696e6720717561696e746c7920616374656420746865697220666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.1.25.2.0|4|but +1.3.6.1.4.1.2620.1.1.25.3.0|2|10 +1.3.6.1.4.1.2620.1.1.25.4.0|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.1.749|66|749 +1.3.6.1.4.1.2620.1.1.25.5.1.1.3015|66|3015 +1.3.6.1.4.1.2620.1.1.25.5.1.1.17885|66|17885 +1.3.6.1.4.1.2620.1.1.25.5.1.1.27174|66|27174 +1.3.6.1.4.1.2620.1.1.25.5.1.1.30854|66|30854 +1.3.6.1.4.1.2620.1.1.25.5.1.1.33502|66|33502 +1.3.6.1.4.1.2620.1.1.25.5.1.1.40202|66|40202 +1.3.6.1.4.1.2620.1.1.25.5.1.1.55865|66|55865 +1.3.6.1.4.1.2620.1.1.25.5.1.1.56693|66|56693 +1.3.6.1.4.1.2620.1.1.25.5.1.1.60198|66|60198 +1.3.6.1.4.1.2620.1.1.25.5.1.2.749|4x|6b65707420666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.1.25.5.1.2.3015|4x|6f78656e206b657074206f78656e20627574 +1.3.6.1.4.1.2620.1.1.25.5.1.2.17885|4x|64726976696e67207468656972206b65707420616374656420627574207468656972 +1.3.6.1.4.1.2620.1.1.25.5.1.2.27174|4x|627574206b657074206f78656e207a6f6d6269657320627574206163746564 +1.3.6.1.4.1.2620.1.1.25.5.1.2.30854|4x|6163746564206f78656e206b657074206b657074206b657074204a61646564204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.1.25.5.1.2.33502|4x|666f7277617264204a616465642064726976696e6720666f7277617264206f78656e206b657074 +1.3.6.1.4.1.2620.1.1.25.5.1.2.40202|4x|62757420746865697220666f727761726420717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.1.25.5.1.2.55865|4x|666f727761726420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.1.25.5.1.2.56693|4x|4a61646564206f78656e206b657074 +1.3.6.1.4.1.2620.1.1.25.5.1.2.60198|4x|7468656972206b657074204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.1.25.5.1.5.749|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.5.3015|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.5.17885|2|9 +1.3.6.1.4.1.2620.1.1.25.5.1.5.27174|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.5.30854|2|29 +1.3.6.1.4.1.2620.1.1.25.5.1.5.33502|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.5.40202|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.5.55865|2|0 +1.3.6.1.4.1.2620.1.1.25.5.1.5.56693|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.5.60198|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.6.749|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.6.3015|2|27 +1.3.6.1.4.1.2620.1.1.25.5.1.6.17885|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.6.27174|2|28 +1.3.6.1.4.1.2620.1.1.25.5.1.6.30854|2|12 +1.3.6.1.4.1.2620.1.1.25.5.1.6.33502|2|15 +1.3.6.1.4.1.2620.1.1.25.5.1.6.40202|2|12 +1.3.6.1.4.1.2620.1.1.25.5.1.6.55865|2|11 +1.3.6.1.4.1.2620.1.1.25.5.1.6.56693|2|4 +1.3.6.1.4.1.2620.1.1.25.5.1.6.60198|2|23 +1.3.6.1.4.1.2620.1.1.25.5.1.7.749|2|10 +1.3.6.1.4.1.2620.1.1.25.5.1.7.3015|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.7.17885|2|17 +1.3.6.1.4.1.2620.1.1.25.5.1.7.27174|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.7.30854|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.7.33502|2|11 +1.3.6.1.4.1.2620.1.1.25.5.1.7.40202|2|28 +1.3.6.1.4.1.2620.1.1.25.5.1.7.55865|2|5 +1.3.6.1.4.1.2620.1.1.25.5.1.7.56693|2|15 +1.3.6.1.4.1.2620.1.1.25.5.1.7.60198|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.8.749|2|23 +1.3.6.1.4.1.2620.1.1.25.5.1.8.3015|2|23 +1.3.6.1.4.1.2620.1.1.25.5.1.8.17885|2|18 +1.3.6.1.4.1.2620.1.1.25.5.1.8.27174|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.8.30854|2|13 +1.3.6.1.4.1.2620.1.1.25.5.1.8.33502|2|5 +1.3.6.1.4.1.2620.1.1.25.5.1.8.40202|2|27 +1.3.6.1.4.1.2620.1.1.25.5.1.8.55865|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.8.56693|2|14 +1.3.6.1.4.1.2620.1.1.25.5.1.8.60198|2|0 +1.3.6.1.4.1.2620.1.1.25.5.1.9.749|2|14 +1.3.6.1.4.1.2620.1.1.25.5.1.9.3015|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.9.17885|2|18 +1.3.6.1.4.1.2620.1.1.25.5.1.9.27174|2|4 +1.3.6.1.4.1.2620.1.1.25.5.1.9.30854|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.9.33502|2|26 +1.3.6.1.4.1.2620.1.1.25.5.1.9.40202|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.9.55865|2|11 +1.3.6.1.4.1.2620.1.1.25.5.1.9.56693|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.9.60198|2|28 +1.3.6.1.4.1.2620.1.1.25.5.1.10.749|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.10.3015|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.10.17885|2|27 +1.3.6.1.4.1.2620.1.1.25.5.1.10.27174|2|0 +1.3.6.1.4.1.2620.1.1.25.5.1.10.30854|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.10.33502|2|25 +1.3.6.1.4.1.2620.1.1.25.5.1.10.40202|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.10.55865|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.10.56693|2|26 +1.3.6.1.4.1.2620.1.1.25.5.1.10.60198|2|26 +1.3.6.1.4.1.2620.1.1.25.5.1.11.749|2|15 +1.3.6.1.4.1.2620.1.1.25.5.1.11.3015|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.11.17885|2|9 +1.3.6.1.4.1.2620.1.1.25.5.1.11.27174|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.11.30854|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.11.33502|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.11.40202|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.11.55865|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.11.56693|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.11.60198|2|8 +1.3.6.1.4.1.2620.1.1.25.5.1.12.749|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.12.3015|2|3 +1.3.6.1.4.1.2620.1.1.25.5.1.12.17885|2|6 +1.3.6.1.4.1.2620.1.1.25.5.1.12.27174|2|17 +1.3.6.1.4.1.2620.1.1.25.5.1.12.30854|2|29 +1.3.6.1.4.1.2620.1.1.25.5.1.12.33502|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.12.40202|2|9 +1.3.6.1.4.1.2620.1.1.25.5.1.12.55865|2|26 +1.3.6.1.4.1.2620.1.1.25.5.1.12.56693|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.12.60198|2|19 +1.3.6.1.4.1.2620.1.1.25.5.1.13.749|2|12 +1.3.6.1.4.1.2620.1.1.25.5.1.13.3015|2|20 +1.3.6.1.4.1.2620.1.1.25.5.1.13.17885|2|11 +1.3.6.1.4.1.2620.1.1.25.5.1.13.27174|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.13.30854|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.13.33502|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.13.40202|2|13 +1.3.6.1.4.1.2620.1.1.25.5.1.13.55865|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.13.56693|2|18 +1.3.6.1.4.1.2620.1.1.25.5.1.13.60198|2|23 +1.3.6.1.4.1.2620.1.1.25.5.1.14.749|2|5 +1.3.6.1.4.1.2620.1.1.25.5.1.14.3015|2|27 +1.3.6.1.4.1.2620.1.1.25.5.1.14.17885|2|18 +1.3.6.1.4.1.2620.1.1.25.5.1.14.27174|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.14.30854|2|25 +1.3.6.1.4.1.2620.1.1.25.5.1.14.33502|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.14.40202|2|20 +1.3.6.1.4.1.2620.1.1.25.5.1.14.55865|2|14 +1.3.6.1.4.1.2620.1.1.25.5.1.14.56693|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.14.60198|2|25 +1.3.6.1.4.1.2620.1.1.25.6.0|4x|4a61646564206f78656e207468656972206b657074 +1.3.6.1.4.1.2620.1.1.25.8.0|4x|627574206b657074204a61646564 +1.3.6.1.4.1.2620.1.1.25.9.0|4|acted +1.3.6.1.4.1.2620.1.1.25.10.0|2|13 +1.3.6.1.4.1.2620.1.1.25.16.0|4|their +1.3.6.1.4.1.2620.1.1.26.1.1.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.2.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.3.0|2|1 +1.3.6.1.4.1.2620.1.1.26.1.4.0|2|12 +1.3.6.1.4.1.2620.1.1.26.1.5.0|2|25 +1.3.6.1.4.1.2620.1.1.26.1.6.0|2|1 +1.3.6.1.4.1.2620.1.1.26.1.7.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.8.0|2|23 +1.3.6.1.4.1.2620.1.1.26.1.9.0|2|23 +1.3.6.1.4.1.2620.1.1.26.1.10.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.11.0|2|9 +1.3.6.1.4.1.2620.1.1.26.1.12.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.13.0|2|30 +1.3.6.1.4.1.2620.1.1.26.1.14.0|2|17 +1.3.6.1.4.1.2620.1.1.26.1.15.0|2|8 +1.3.6.1.4.1.2620.1.1.26.1.16.0|2|7 +1.3.6.1.4.1.2620.1.1.26.1.17.0|2|5 +1.3.6.1.4.1.2620.1.1.26.1.18.0|2|4 +1.3.6.1.4.1.2620.1.1.26.1.19.0|2|23 +1.3.6.1.4.1.2620.1.1.26.1.20.0|2|28 +1.3.6.1.4.1.2620.1.1.26.1.21.0|2|1 +1.3.6.1.4.1.2620.1.1.26.1.22.0|2|27 +1.3.6.1.4.1.2620.1.1.26.2.1.0|2|12 +1.3.6.1.4.1.2620.1.1.26.2.2.0|2|11 +1.3.6.1.4.1.2620.1.1.26.2.3.0|2|23 +1.3.6.1.4.1.2620.1.1.26.2.4.0|2|6 +1.3.6.1.4.1.2620.1.1.26.2.5.0|2|6 +1.3.6.1.4.1.2620.1.1.26.2.6.0|2|6 +1.3.6.1.4.1.2620.1.1.26.2.7.0|2|4 +1.3.6.1.4.1.2620.1.1.26.2.8.0|2|29 +1.3.6.1.4.1.2620.1.1.26.2.9.0|2|10 +1.3.6.1.4.1.2620.1.1.26.2.10.0|2|19 +1.3.6.1.4.1.2620.1.1.26.2.11.0|2|2 +1.3.6.1.4.1.2620.1.1.26.2.12.0|2|22 +1.3.6.1.4.1.2620.1.1.26.2.13.0|2|6 +1.3.6.1.4.1.2620.1.1.26.2.14.0|2|23 +1.3.6.1.4.1.2620.1.1.26.2.15.0|2|3 +1.3.6.1.4.1.2620.1.1.26.2.16.0|2|0 +1.3.6.1.4.1.2620.1.1.26.3.1.0|2|30 +1.3.6.1.4.1.2620.1.1.26.3.2.0|2|4 +1.3.6.1.4.1.2620.1.1.26.3.3.0|2|28 +1.3.6.1.4.1.2620.1.1.26.3.4.0|2|7 +1.3.6.1.4.1.2620.1.1.26.3.5.0|2|11 +1.3.6.1.4.1.2620.1.1.26.4.1.0|2|22 +1.3.6.1.4.1.2620.1.1.26.4.2.0|2|5 +1.3.6.1.4.1.2620.1.1.26.4.3.0|2|31 +1.3.6.1.4.1.2620.1.1.26.4.4.0|2|21 +1.3.6.1.4.1.2620.1.1.26.4.5.0|2|0 +1.3.6.1.4.1.2620.1.1.26.4.6.0|2|25 +1.3.6.1.4.1.2620.1.1.26.4.7.0|2|10 +1.3.6.1.4.1.2620.1.1.26.5.1.0|2|0 +1.3.6.1.4.1.2620.1.1.26.5.2.0|2|6 +1.3.6.1.4.1.2620.1.1.26.6.1.0|2|18 +1.3.6.1.4.1.2620.1.1.26.6.2.0|2|26 +1.3.6.1.4.1.2620.1.1.26.6.3.0|2|16 +1.3.6.1.4.1.2620.1.1.26.8.1.0|2|21 +1.3.6.1.4.1.2620.1.1.26.8.2.0|2|2 +1.3.6.1.4.1.2620.1.1.26.8.3.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.1.1.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.2.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.1.3.0|2|23 +1.3.6.1.4.1.2620.1.1.26.9.1.4.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.5.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.1.6.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.1.7.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.1.8.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.1.9.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.1.10.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.1.11.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.12.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.1.13.0|2|23 +1.3.6.1.4.1.2620.1.1.26.9.1.14.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.1.15.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.1.16.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.1.17.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.18.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.1.19.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.1.20.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.21.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.1.22.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.1.23.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.1.24.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.1.25.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.1.26.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.1.27.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.1.28.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.1.29.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.1.30.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.1.31.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.1.32.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.1.33.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.1.34.0|2|25 +1.3.6.1.4.1.2620.1.1.26.9.1.35.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.1.36.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.1.37.0|4x|7a6f6d62696573206163746564207a6f6d62696573207a6f6d62696573207a6f6d626965732061637465642061637465642062757420627574 +1.3.6.1.4.1.2620.1.1.26.9.1.38.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.1.39.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.1.40.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.1.41.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.1.42.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.1.43.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.1.44.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.1.45.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.1.46.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.1.47.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.1.48.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.1.49.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.1.50.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.1.51.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.1.52.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.1.53.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.1.54.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.1.55.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.1.56.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.1.57.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.2.1.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.2.2.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.2.3.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.2.4.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.2.5.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.2.6.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.2.7.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.2.8.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.2.9.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.2.10.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.2.11.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.2.12.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.2.13.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.2.14.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.2.15.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.2.16.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.2.17.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.2.18.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.2.19.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.2.20.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.2.21.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.2.22.0|4x|746865697220666f7277617264206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.2620.1.1.26.9.2.23.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.2.24.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.2.25.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.2.26.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.2.27.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.2.28.0|2|21 +1.3.6.1.4.1.2620.1.1.26.9.2.29.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.2.30.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.2.31.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.2.32.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.2.33.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.2.34.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.2.35.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.2.36.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.2.37.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.2.38.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.3.1.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.3.2.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.3.3.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.3.4.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.3.5.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.3.6.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.3.7.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.3.8.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.3.9.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.3.10.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.3.11.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.3.12.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.3.13.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.3.14.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.3.15.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.3.16.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.3.17.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.3.18.0|4x|6b657074204a61646564207468656972207a6f6d62696573207a6f6d62696573204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.1.26.9.3.19.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.4.1.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.4.2.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.4.3.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.4.4.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.4.5.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.4.6.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.4.7.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.4.8.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.4.9.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.4.10.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.4.11.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.4.12.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.4.13.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.4.14.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.4.15.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.4.16.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.4.17.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.4.18.0|4x|6f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.26.9.4.19.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.5.1.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.5.2.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.5.3.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.5.4.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.5.5.0|4x|666f7277617264206f78656e2064726976696e672064726976696e6720746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.1.26.9.5.6.0|2|21 +1.3.6.1.4.1.2620.1.1.26.9.6.1.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.6.2.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.6.3.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.6.4.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.6.5.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.6.6.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.6.7.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.6.8.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.6.9.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.6.10.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.6.11.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.6.12.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.6.13.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.6.14.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.6.15.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.6.16.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.6.17.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.6.18.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.6.19.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.6.20.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.6.21.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.6.22.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.6.23.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.6.24.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.6.25.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.6.26.0|4x|6b65707420717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.1.26.9.6.27.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.6.28.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.6.29.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.6.30.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.6.31.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.6.32.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.6.33.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.6.34.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.6.35.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.6.36.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.6.37.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.6.38.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.6.39.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.6.40.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.6.41.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.6.42.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.7.1.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.7.2.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.7.3.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.7.4.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.7.5.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.7.6.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.7.7.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.7.8.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.7.9.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.7.10.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.7.11.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.7.12.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.7.13.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.7.14.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.7.15.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.7.16.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.7.17.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.7.18.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.7.19.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.7.20.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.7.21.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.7.22.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.7.23.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.7.24.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.7.25.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.7.26.0|4x|4a61646564206b657074206163746564 +1.3.6.1.4.1.2620.1.1.26.9.7.27.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.7.28.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.7.29.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.7.30.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.7.31.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.7.32.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.7.33.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.7.34.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.7.35.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.7.36.0|2|23 +1.3.6.1.4.1.2620.1.1.26.9.7.37.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.7.38.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.7.39.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.7.40.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.7.41.0|2|25 +1.3.6.1.4.1.2620.1.1.26.9.7.42.0|2|23 +1.3.6.1.4.1.2620.1.1.26.9.10.1.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.10.2.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.10.3.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.10.4.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.10.5.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.10.6.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.10.7.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.10.8.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.10.9.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.10.10.0|2|21 +1.3.6.1.4.1.2620.1.1.26.9.10.11.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.10.12.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.10.13.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.10.14.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.10.15.0|2|4 +1.3.6.1.4.1.2620.1.1.26.11.1.0|2|4 +1.3.6.1.4.1.2620.1.1.26.11.2.0|2|20 +1.3.6.1.4.1.2620.1.1.26.11.3.0|2|24 +1.3.6.1.4.1.2620.1.1.26.11.4.0|2|30 +1.3.6.1.4.1.2620.1.1.26.11.5.0|2|10 +1.3.6.1.4.1.2620.1.1.26.11.6.0|2|2 +1.3.6.1.4.1.2620.1.1.26.12.1.0|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.26.12.2.0|4x|666f7277617264206163746564206b657074207468656972206f78656e206b657074 +1.3.6.1.4.1.2620.1.1.26.12.3.0|4x|62757420717561696e746c79206f78656e2064726976696e6720666f7277617264206f78656e207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.1.26.12.4.0|2|18 +1.3.6.1.4.1.2620.1.1.26.12.5.0|2|9 +1.3.6.1.4.1.2620.1.1.26.12.6.0|4x|7a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.1.26.12.7.0|2|9 +1.3.6.1.4.1.2620.1.1.26.12.8.0|2|7 +1.3.6.1.4.1.2620.1.1.26.12.9.0|4x|4a61646564206163746564206f78656e2061637465642064726976696e672064726976696e6720627574 +1.3.6.1.4.1.2620.1.1.26.12.10.0|2|5 +1.3.6.1.4.1.2620.1.1.26.12.11.0|4x|6f78656e2064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.1.26.12.12.0|2|20 +1.3.6.1.4.1.2620.1.1.26.12.13.0|4x|7a6f6d626965732062757420627574206b6570742064726976696e67206f78656e204a61646564 +1.3.6.1.4.1.2620.1.1.26.12.14.0|2|12 +1.3.6.1.4.1.2620.1.1.26.12.15.0|4x|64726976696e6720717561696e746c7920717561696e746c79206163746564206f78656e +1.3.6.1.4.1.2620.1.1.26.12.16.0|2|12 +1.3.6.1.4.1.2620.1.1.26.12.17.0|2|1 +1.3.6.1.4.1.2620.1.1.26.12.18.0|4x|616374656420717561696e746c792064726976696e672064726976696e6720746865697220616374656420666f7277617264 +1.3.6.1.4.1.2620.1.1.26.12.19.0|2|28 +1.3.6.1.4.1.2620.1.1.26.12.20.0|2|24 +1.3.6.1.4.1.2620.1.1.26.12.21.0|2|3 +1.3.6.1.4.1.2620.1.1.26.12.22.0|2|0 +1.3.6.1.4.1.2620.1.1.27.1.1.10195|66|10195 +1.3.6.1.4.1.2620.1.1.27.1.1.14420|66|14420 +1.3.6.1.4.1.2620.1.1.27.1.1.19605|66|19605 +1.3.6.1.4.1.2620.1.1.27.1.1.24119|66|24119 +1.3.6.1.4.1.2620.1.1.27.1.1.28877|66|28877 +1.3.6.1.4.1.2620.1.1.27.1.1.32113|66|32113 +1.3.6.1.4.1.2620.1.1.27.1.1.33158|66|33158 +1.3.6.1.4.1.2620.1.1.27.1.1.36483|66|36483 +1.3.6.1.4.1.2620.1.1.27.1.1.46390|66|46390 +1.3.6.1.4.1.2620.1.1.27.1.1.61861|66|61861 +1.3.6.1.4.1.2620.1.1.27.1.2.10195|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.1.27.1.2.14420|4|forward +1.3.6.1.4.1.2620.1.1.27.1.2.19605|4|forward +1.3.6.1.4.1.2620.1.1.27.1.2.24119|4x|717561696e746c7920666f727761726420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.2.28877|4x|4a6164656420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.2.32113|4x|717561696e746c79206f78656e20746865697220666f72776172642062757420717561696e746c792062757420627574 +1.3.6.1.4.1.2620.1.1.27.1.2.33158|4x|4a6164656420616374656420717561696e746c792064726976696e6720717561696e746c79206163746564207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.1.27.1.2.36483|4x|7468656972207a6f6d6269657320717561696e746c7920616374656420666f72776172642074686569722064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.1.27.1.2.46390|4x|717561696e746c79206163746564206b657074204a6164656420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.1.27.1.2.61861|4|Jaded +1.3.6.1.4.1.2620.1.1.27.1.3.10195|2|22 +1.3.6.1.4.1.2620.1.1.27.1.3.14420|2|14 +1.3.6.1.4.1.2620.1.1.27.1.3.19605|2|31 +1.3.6.1.4.1.2620.1.1.27.1.3.24119|2|15 +1.3.6.1.4.1.2620.1.1.27.1.3.28877|2|17 +1.3.6.1.4.1.2620.1.1.27.1.3.32113|2|2 +1.3.6.1.4.1.2620.1.1.27.1.3.33158|2|10 +1.3.6.1.4.1.2620.1.1.27.1.3.36483|2|17 +1.3.6.1.4.1.2620.1.1.27.1.3.46390|2|10 +1.3.6.1.4.1.2620.1.1.27.1.3.61861|2|25 +1.3.6.1.4.1.2620.1.1.27.1.4.10195|2|4 +1.3.6.1.4.1.2620.1.1.27.1.4.14420|2|25 +1.3.6.1.4.1.2620.1.1.27.1.4.19605|2|11 +1.3.6.1.4.1.2620.1.1.27.1.4.24119|2|8 +1.3.6.1.4.1.2620.1.1.27.1.4.28877|2|25 +1.3.6.1.4.1.2620.1.1.27.1.4.32113|2|19 +1.3.6.1.4.1.2620.1.1.27.1.4.33158|2|9 +1.3.6.1.4.1.2620.1.1.27.1.4.36483|2|6 +1.3.6.1.4.1.2620.1.1.27.1.4.46390|2|25 +1.3.6.1.4.1.2620.1.1.27.1.4.61861|2|22 +1.3.6.1.4.1.2620.1.1.27.1.5.10195|2|13 +1.3.6.1.4.1.2620.1.1.27.1.5.14420|2|4 +1.3.6.1.4.1.2620.1.1.27.1.5.19605|2|22 +1.3.6.1.4.1.2620.1.1.27.1.5.24119|2|17 +1.3.6.1.4.1.2620.1.1.27.1.5.28877|2|27 +1.3.6.1.4.1.2620.1.1.27.1.5.32113|2|27 +1.3.6.1.4.1.2620.1.1.27.1.5.33158|2|12 +1.3.6.1.4.1.2620.1.1.27.1.5.36483|2|25 +1.3.6.1.4.1.2620.1.1.27.1.5.46390|2|23 +1.3.6.1.4.1.2620.1.1.27.1.5.61861|2|1 +1.3.6.1.4.1.2620.1.1.27.1.6.10195|4x|4a6164656420616374656420717561696e746c7920746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.1.27.1.6.14420|4x|7a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.6.19605|4x|717561696e746c792064726976696e6720717561696e746c79207a6f6d62696573206b657074204a61646564206b657074206f78656e +1.3.6.1.4.1.2620.1.1.27.1.6.24119|4x|6f78656e204a6164656420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.1.27.1.6.28877|4x|6b657074206f78656e20666f72776172642064726976696e672064726976696e6720717561696e746c79204a616465642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.1.27.1.6.32113|4x|4a6164656420666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.1.27.1.6.33158|4|quaintly +1.3.6.1.4.1.2620.1.1.27.1.6.36483|4x|62757420627574206b6570742064726976696e6720627574206163746564 +1.3.6.1.4.1.2620.1.1.27.1.6.46390|4x|627574207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.1.27.1.6.61861|4x|4a6164656420627574 +1.3.6.1.4.1.2620.1.1.27.1.7.10195|2|9 +1.3.6.1.4.1.2620.1.1.27.1.7.14420|2|19 +1.3.6.1.4.1.2620.1.1.27.1.7.19605|2|19 +1.3.6.1.4.1.2620.1.1.27.1.7.24119|2|8 +1.3.6.1.4.1.2620.1.1.27.1.7.28877|2|0 +1.3.6.1.4.1.2620.1.1.27.1.7.32113|2|15 +1.3.6.1.4.1.2620.1.1.27.1.7.33158|2|2 +1.3.6.1.4.1.2620.1.1.27.1.7.36483|2|15 +1.3.6.1.4.1.2620.1.1.27.1.7.46390|2|3 +1.3.6.1.4.1.2620.1.1.27.1.7.61861|2|2 +1.3.6.1.4.1.2620.1.1.27.1.8.10195|2|10 +1.3.6.1.4.1.2620.1.1.27.1.8.14420|2|15 +1.3.6.1.4.1.2620.1.1.27.1.8.19605|2|15 +1.3.6.1.4.1.2620.1.1.27.1.8.24119|2|13 +1.3.6.1.4.1.2620.1.1.27.1.8.28877|2|15 +1.3.6.1.4.1.2620.1.1.27.1.8.32113|2|24 +1.3.6.1.4.1.2620.1.1.27.1.8.33158|2|20 +1.3.6.1.4.1.2620.1.1.27.1.8.36483|2|15 +1.3.6.1.4.1.2620.1.1.27.1.8.46390|2|29 +1.3.6.1.4.1.2620.1.1.27.1.8.61861|2|3 +1.3.6.1.4.1.2620.1.1.27.1.9.10195|4x|666f727761726420627574207a6f6d62696573206f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.1.27.1.9.14420|4x|6f78656e207a6f6d62696573207a6f6d6269657320717561696e746c79204a6164656420616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.9.19605|4x|717561696e746c7920666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.9.24119|4x|616374656420666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.1.27.1.9.28877|4x|717561696e746c7920746865697220666f7277617264206163746564 +1.3.6.1.4.1.2620.1.1.27.1.9.32113|4|zombies +1.3.6.1.4.1.2620.1.1.27.1.9.33158|4x|6f78656e206b65707420717561696e746c79206f78656e204a61646564207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.1.27.1.9.36483|4x|64726976696e6720717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.1.27.1.9.46390|4x|6b65707420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.9.61861|4x|4a61646564206b657074204a61646564206b65707420666f727761726420666f7277617264206163746564 +1.3.6.1.4.1.2620.1.1.27.1.10.10195|4x|7468656972204a61646564 +1.3.6.1.4.1.2620.1.1.27.1.10.14420|4x|6b657074206163746564 +1.3.6.1.4.1.2620.1.1.27.1.10.19605|4|zombies +1.3.6.1.4.1.2620.1.1.27.1.10.24119|4x|6f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.1.27.1.10.28877|4x|717561696e746c792061637465642064726976696e67204a6164656420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.1.27.1.10.32113|4|acted +1.3.6.1.4.1.2620.1.1.27.1.10.33158|4x|666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.1.27.1.10.36483|4|their +1.3.6.1.4.1.2620.1.1.27.1.10.46390|4x|6b657074204a61646564 +1.3.6.1.4.1.2620.1.1.27.1.10.61861|4x|717561696e746c79204a616465642064726976696e67206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.11.10195|4x|6b657074206b657074206f78656e +1.3.6.1.4.1.2620.1.1.27.1.11.14420|4x|666f72776172642074686569722061637465642064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.1.27.1.11.19605|4x|64726976696e672064726976696e6720666f727761726420666f727761726420717561696e746c7920666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.11.24119|4x|616374656420666f7277617264207468656972206f78656e2064726976696e67206b657074206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.1.27.1.11.28877|4x|666f7277617264206163746564 +1.3.6.1.4.1.2620.1.1.27.1.11.32113|4x|666f727761726420616374656420717561696e746c79206b65707420627574206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.1.27.1.11.33158|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.2620.1.1.27.1.11.36483|4|their +1.3.6.1.4.1.2620.1.1.27.1.11.46390|4|acted +1.3.6.1.4.1.2620.1.1.27.1.11.61861|4x|717561696e746c792064726976696e6720616374656420666f7277617264204a61646564206b65707420746865697220717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.1.30.1.0|2|25 +1.3.6.1.4.1.2620.1.1.30.2.0|4x|627574204a616465642064726976696e6720717561696e746c7920666f727761726420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.30.3.1.1.19667|66|19667 +1.3.6.1.4.1.2620.1.1.30.3.1.1.25767|66|25767 +1.3.6.1.4.1.2620.1.1.30.3.1.1.30380|66|30380 +1.3.6.1.4.1.2620.1.1.30.3.1.1.40339|66|40339 +1.3.6.1.4.1.2620.1.1.30.3.1.1.42496|66|42496 +1.3.6.1.4.1.2620.1.1.30.3.1.1.46701|66|46701 +1.3.6.1.4.1.2620.1.1.30.3.1.1.55147|66|55147 +1.3.6.1.4.1.2620.1.1.30.3.1.1.57403|66|57403 +1.3.6.1.4.1.2620.1.1.30.3.1.1.59930|66|59930 +1.3.6.1.4.1.2620.1.1.30.3.1.1.64934|66|64934 +1.3.6.1.4.1.2620.1.1.30.3.1.2.19667|4x|4a61646564206f78656e206f78656e207a6f6d6269657320746865697220616374656420666f7277617264204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.1.30.3.1.2.25767|4x|6b65707420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.1.30.3.1.2.30380|4x|717561696e746c79206163746564207a6f6d62696573207a6f6d626965732064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.1.30.3.1.2.40339|4x|7468656972207468656972207468656972206f78656e20717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.1.30.3.1.2.42496|4|acted +1.3.6.1.4.1.2620.1.1.30.3.1.2.46701|4x|666f7277617264206163746564207468656972 +1.3.6.1.4.1.2620.1.1.30.3.1.2.55147|4x|4a61646564206163746564206b657074 +1.3.6.1.4.1.2620.1.1.30.3.1.2.57403|4x|6163746564204a61646564204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.1.30.3.1.2.59930|4x|64726976696e672064726976696e67204a61646564206f78656e20627574204a616465642064726976696e67207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.30.3.1.2.64934|4x|61637465642062757420717561696e746c79 +1.3.6.1.4.1.2620.1.1.30.3.1.3.19667|2|17 +1.3.6.1.4.1.2620.1.1.30.3.1.3.25767|2|20 +1.3.6.1.4.1.2620.1.1.30.3.1.3.30380|2|5 +1.3.6.1.4.1.2620.1.1.30.3.1.3.40339|2|13 +1.3.6.1.4.1.2620.1.1.30.3.1.3.42496|2|18 +1.3.6.1.4.1.2620.1.1.30.3.1.3.46701|2|26 +1.3.6.1.4.1.2620.1.1.30.3.1.3.55147|2|30 +1.3.6.1.4.1.2620.1.1.30.3.1.3.57403|2|6 +1.3.6.1.4.1.2620.1.1.30.3.1.3.59930|2|23 +1.3.6.1.4.1.2620.1.1.30.3.1.3.64934|2|27 +1.3.6.1.4.1.2620.1.1.30.3.1.4.19667|4x|6b65707420717561696e746c7920717561696e746c7920616374656420717561696e746c79206b657074206b657074207a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.1.30.3.1.4.25767|4x|6f78656e206b657074 +1.3.6.1.4.1.2620.1.1.30.3.1.4.30380|4x|6f78656e20627574204a61646564206b65707420717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.30.3.1.4.40339|4x|64726976696e6720717561696e746c7920627574207a6f6d6269657320666f727761726420666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.1.30.3.1.4.42496|4x|717561696e746c79207a6f6d6269657320717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.2620.1.1.30.3.1.4.46701|4x|64726976696e67207468656972204a6164656420616374656420746865697220717561696e746c79204a616465642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.1.30.3.1.4.55147|4|forward +1.3.6.1.4.1.2620.1.1.30.3.1.4.57403|4x|666f727761726420666f7277617264207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.1.30.3.1.4.59930|4x|6b657074204a616465642062757420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.1.30.3.1.4.64934|4x|746865697220616374656420666f727761726420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.1.30.4.0|4x|7468656972206b657074207468656972206163746564 +1.3.6.1.4.1.2620.1.1.30.5.0|2|17 +1.3.6.1.4.1.2620.1.2.1.0|4x|4a61646564206b657074204a616465642064726976696e6720666f7277617264206b6570742064726976696e67204a61646564206163746564 +1.3.6.1.4.1.2620.1.2.2.0|2|5 +1.3.6.1.4.1.2620.1.2.3.0|2|21 +1.3.6.1.4.1.2620.1.2.4.1.1.0|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.4.1.2.0|4x|6f78656e20666f72776172642062757420627574204a61646564204a6164656420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.2.4.2.1.0|4x|62757420666f7277617264206163746564207468656972 +1.3.6.1.4.1.2620.1.2.4.2.2.0|4x|4a61646564206f78656e207468656972 +1.3.6.1.4.1.2620.1.2.4.2.3.0|4x|666f72776172642064726976696e6720717561696e746c7920717561696e746c7920627574207a6f6d626965732061637465642064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.2.4.2.4.0|4x|6163746564206b65707420627574206275742062757420717561696e746c7920717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.1.0|4x|7a6f6d62696573207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.2.5.2.2.0|4|kept +1.3.6.1.4.1.2620.1.2.5.2.3.0|4x|7a6f6d6269657320717561696e746c7920627574207468656972204a61646564206b657074 +1.3.6.1.4.1.2620.1.2.5.2.4.0|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.5.0|4x|717561696e746c79206275742074686569722064726976696e6720616374656420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.2.6.0|4x|616374656420627574207468656972204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.2.7.0|4x|7a6f6d6269657320666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.8.0|4x|6f78656e204a6164656420717561696e746c79206f78656e206f78656e20627574206b657074206f78656e207468656972 +1.3.6.1.4.1.2620.1.2.5.2.9.0|4x|7468656972206f78656e206f78656e204a6164656420616374656420717561696e746c79207a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.10.0|4x|64726976696e67206f78656e207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.2.5.2.11.0|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.12.0|4x|6163746564206275742064726976696e67206163746564206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.3.1.0|4x|746865697220666f7277617264206163746564204a61646564207a6f6d62696573206b657074204a61646564206f78656e +1.3.6.1.4.1.2620.1.2.5.3.2.0|4x|6b657074206f78656e207468656972206b657074207a6f6d62696573204a616465642064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.2620.1.2.5.3.3.0|4x|666f72776172642064726976696e6720717561696e746c7920717561696e746c79206b657074206f78656e20666f7277617264206f78656e206b657074 +1.3.6.1.4.1.2620.1.2.5.3.4.0|4|but +1.3.6.1.4.1.2620.1.2.5.3.5.0|4x|666f727761726420616374656420717561696e746c7920666f727761726420666f727761726420666f7277617264206163746564206b657074 +1.3.6.1.4.1.2620.1.2.5.3.6.0|4x|7a6f6d62696573206f78656e2074686569722062757420666f7277617264206b657074207468656972 +1.3.6.1.4.1.2620.1.2.5.3.7.0|4x|7468656972206b657074206b657074 +1.3.6.1.4.1.2620.1.2.5.4.1.0|4|but +1.3.6.1.4.1.2620.1.2.5.4.2.0|4x|746865697220627574206163746564206b65707420666f72776172642064726976696e672064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.2.5.4.3.0|4x|666f727761726420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.2.5.4.4.0|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.2.5.4.5.0|4x|746865697220666f7277617264207468656972207468656972204a61646564 +1.3.6.1.4.1.2620.1.2.5.4.6.0|4x|6b65707420627574207468656972204a61646564206163746564206163746564 +1.3.6.1.4.1.2620.1.2.5.4.7.0|4x|627574207a6f6d62696573206b6570742064726976696e6720717561696e746c79207a6f6d6269657320717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.2620.1.2.5.4.8.0|4x|6275742062757420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.4.9.0|4|quaintly +1.3.6.1.4.1.2620.1.2.5.4.10.0|4x|6f78656e2064726976696e6720616374656420616374656420666f7277617264204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.4.11.0|4x|62757420666f7277617264206f78656e20666f727761726420627574204a61646564 +1.3.6.1.4.1.2620.1.2.5.4.12.0|4x|6b65707420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.4.13.0|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.2.5.4.14.0|4x|666f727761726420717561696e746c7920627574206f78656e20717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.4.15.0|4x|6f78656e206163746564207a6f6d62696573206f78656e20627574206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.4.16.0|4x|6f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.4.17.0|4x|7a6f6d62696573206b657074206b6570742062757420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.4.18.0|4x|7468656972206b65707420627574204a61646564 +1.3.6.1.4.1.2620.1.2.5.4.19.0|4x|4a61646564204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.4.20.0|4x|6163746564206275742064726976696e67204a61646564207468656972206f78656e207468656972204a61646564 +1.3.6.1.4.1.2620.1.2.6.1.1.0|2|29 +1.3.6.1.4.1.2620.1.2.6.1.2.0|2|2 +1.3.6.1.4.1.2620.1.2.6.1.3.0|2|3 +1.3.6.1.4.1.2620.1.2.6.1.4.0|2|8 +1.3.6.1.4.1.2620.1.2.6.2.1.0|2|31 +1.3.6.1.4.1.2620.1.2.6.2.2.0|2|15 +1.3.6.1.4.1.2620.1.2.6.2.3.0|2|1 +1.3.6.1.4.1.2620.1.2.6.2.4.0|2|18 +1.3.6.1.4.1.2620.1.2.8.1.1.0|4x|616374656420666f727761726420717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.2.8.1.2.0|4x|7a6f6d626965732064726976696e67206b657074 +1.3.6.1.4.1.2620.1.2.8.1.3.0|2|27 +1.3.6.1.4.1.2620.1.2.8.1.4.0|2|10 +1.3.6.1.4.1.2620.1.2.8.2.1.0|4x|746865697220616374656420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.2.8.2.2.0|4x|6163746564207468656972207468656972206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.2.8.2.3.0|4x|666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.2.8.2.4.0|4x|64726976696e6720666f72776172642074686569722062757420717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.2.8.2.5.0|4x|7a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.2.8.2.6.0|4x|627574206f78656e206b657074 +1.3.6.1.4.1.2620.1.2.8.2.7.0|4x|7468656972207468656972206f78656e20666f7277617264206f78656e20627574206b657074 +1.3.6.1.4.1.2620.1.2.8.2.8.0|4x|7a6f6d62696573206b657074206163746564206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.9.1.1.0|4x|6f78656e206163746564207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.2620.1.2.9.1.2.0|4x|6163746564207a6f6d626965732064726976696e672064726976696e67204a6164656420717561696e746c79206163746564204a61646564 +1.3.6.1.4.1.2620.1.2.9.1.3.0|4|acted +1.3.6.1.4.1.2620.1.2.9.1.4.0|4x|6f78656e206f78656e207a6f6d626965732064726976696e6720717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.2.9.1.5.0|4x|746865697220717561696e746c792064726976696e6720666f727761726420666f7277617264206275742064726976696e6720666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.2.9.1.6.0|4x|616374656420717561696e746c792061637465642064726976696e672064726976696e67206f78656e20717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.2.9.1.7.0|4x|7a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.2.9.1.8.0|4x|616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.2.9.1.9.0|4x|4a6164656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.9.1.10.0|4|forward +1.3.6.1.4.1.2620.1.2.9.1.11.0|4x|6163746564206b657074 +1.3.6.1.4.1.2620.1.2.9.1.12.0|4|forward +1.3.6.1.4.1.2620.1.2.9.2.1.0|4x|4a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.9.2.2.0|4x|6163746564206f78656e20666f7277617264206b65707420616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.2.9.2.3.0|4x|4a61646564207468656972204a61646564206163746564 +1.3.6.1.4.1.2620.1.2.10.1.1.0|2|24 +1.3.6.1.4.1.2620.1.2.10.1.2.0|4x|6163746564204a616465642064726976696e672061637465642064726976696e67206f78656e206163746564 +1.3.6.1.4.1.2620.1.2.10.1.3.0|4x|4a6164656420746865697220627574206b65707420717561696e746c792062757420666f7277617264206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.2.10.1.4.0|4x|4a6164656420717561696e746c7920627574206b657074204a61646564207468656972207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.2.10.1.5.0|4x|74686569722061637465642062757420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.2.10.1.6.0|4x|627574206b657074204a61646564 +1.3.6.1.4.1.2620.1.2.10.1.7.0|4x|7a6f6d62696573206163746564206f78656e206163746564207a6f6d62696573206f78656e20666f72776172642064726976696e67206f78656e +1.3.6.1.4.1.2620.1.3.1.0|4x|4a6164656420616374656420746865697220666f72776172642074686569722062757420627574 +1.3.6.1.4.1.2620.1.3.2.0|2|29 +1.3.6.1.4.1.2620.1.3.3.0|2|21 +1.3.6.1.4.1.2620.1.3.4.0|4x|666f727761726420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.3.5.0|2|7 +1.3.6.1.4.1.2620.1.3.6.0|4x|4a61646564206b65707420627574204a6164656420717561696e746c79204a61646564206f78656e +1.3.6.1.4.1.2620.1.3.7.0|4|acted +1.3.6.1.4.1.2620.1.3.8.0|4x|6f78656e20666f7277617264206275742062757420666f727761726420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.3.9.1.1.6833|66|6833 +1.3.6.1.4.1.2620.1.3.9.1.1.9617|66|9617 +1.3.6.1.4.1.2620.1.3.9.1.1.12777|66|12777 +1.3.6.1.4.1.2620.1.3.9.1.1.21037|66|21037 +1.3.6.1.4.1.2620.1.3.9.1.1.23145|66|23145 +1.3.6.1.4.1.2620.1.3.9.1.1.27759|66|27759 +1.3.6.1.4.1.2620.1.3.9.1.1.40201|66|40201 +1.3.6.1.4.1.2620.1.3.9.1.1.54989|66|54989 +1.3.6.1.4.1.2620.1.3.9.1.1.55318|66|55318 +1.3.6.1.4.1.2620.1.3.9.1.1.57712|66|57712 +1.3.6.1.4.1.2620.1.3.9.1.2.6833|4x|7a6f6d6269657320627574204a616465642062757420666f7277617264204a61646564206f78656e2064726976696e67206b657074 +1.3.6.1.4.1.2620.1.3.9.1.2.9617|4|acted +1.3.6.1.4.1.2620.1.3.9.1.2.12777|4x|627574204a61646564204a6164656420666f727761726420627574206163746564204a61646564 +1.3.6.1.4.1.2620.1.3.9.1.2.21037|4x|62757420666f72776172642064726976696e67204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.3.9.1.2.23145|4x|616374656420717561696e746c79206163746564204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.3.9.1.2.27759|4x|627574206f78656e206275742064726976696e672064726976696e6720666f72776172642061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.3.9.1.2.40201|4x|666f7277617264207a6f6d62696573206f78656e2074686569722064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.3.9.1.2.54989|4|Jaded +1.3.6.1.4.1.2620.1.3.9.1.2.55318|4x|4a6164656420746865697220666f7277617264204a61646564206163746564204a61646564206163746564 +1.3.6.1.4.1.2620.1.3.9.1.2.57712|4x|627574206b65707420717561696e746c7920717561696e746c7920627574 +1.3.6.1.4.1.2620.1.3.9.1.3.6833|4x|7468656972206f78656e204a6164656420627574207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.3.9.1.3.9617|4x|6b657074206f78656e204a6164656420666f727761726420616374656420627574207468656972204a61646564207468656972 +1.3.6.1.4.1.2620.1.3.9.1.3.12777|4x|64726976696e67206b65707420627574206f78656e206f78656e207468656972207468656972 +1.3.6.1.4.1.2620.1.3.9.1.3.21037|4x|6b6570742074686569722074686569722064726976696e67 +1.3.6.1.4.1.2620.1.3.9.1.3.23145|4x|7a6f6d6269657320717561696e746c7920627574 +1.3.6.1.4.1.2620.1.3.9.1.3.27759|4x|74686569722062757420746865697220666f72776172642062757420616374656420627574 +1.3.6.1.4.1.2620.1.3.9.1.3.40201|4x|6f78656e2062757420717561696e746c792064726976696e67206f78656e206b657074 +1.3.6.1.4.1.2620.1.3.9.1.3.54989|4x|627574206f78656e204a61646564207468656972204a61646564206f78656e20627574 +1.3.6.1.4.1.2620.1.3.9.1.3.55318|4|Jaded +1.3.6.1.4.1.2620.1.3.9.1.3.57712|4x|62757420666f727761726420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.3.9.1.4.6833|2|1 +1.3.6.1.4.1.2620.1.3.9.1.4.9617|2|7 +1.3.6.1.4.1.2620.1.3.9.1.4.12777|2|12 +1.3.6.1.4.1.2620.1.3.9.1.4.21037|2|30 +1.3.6.1.4.1.2620.1.3.9.1.4.23145|2|6 +1.3.6.1.4.1.2620.1.3.9.1.4.27759|2|3 +1.3.6.1.4.1.2620.1.3.9.1.4.40201|2|7 +1.3.6.1.4.1.2620.1.3.9.1.4.54989|2|0 +1.3.6.1.4.1.2620.1.3.9.1.4.55318|2|21 +1.3.6.1.4.1.2620.1.3.9.1.4.57712|2|18 +1.3.6.1.4.1.2620.1.3.9.1.5.6833|2|24 +1.3.6.1.4.1.2620.1.3.9.1.5.9617|2|30 +1.3.6.1.4.1.2620.1.3.9.1.5.12777|2|5 +1.3.6.1.4.1.2620.1.3.9.1.5.21037|2|19 +1.3.6.1.4.1.2620.1.3.9.1.5.23145|2|13 +1.3.6.1.4.1.2620.1.3.9.1.5.27759|2|28 +1.3.6.1.4.1.2620.1.3.9.1.5.40201|2|8 +1.3.6.1.4.1.2620.1.3.9.1.5.54989|2|17 +1.3.6.1.4.1.2620.1.3.9.1.5.55318|2|28 +1.3.6.1.4.1.2620.1.3.9.1.5.57712|2|6 +1.3.6.1.4.1.2620.1.3.9.1.6.6833|2|5 +1.3.6.1.4.1.2620.1.3.9.1.6.9617|2|0 +1.3.6.1.4.1.2620.1.3.9.1.6.12777|2|27 +1.3.6.1.4.1.2620.1.3.9.1.6.21037|2|1 +1.3.6.1.4.1.2620.1.3.9.1.6.23145|2|1 +1.3.6.1.4.1.2620.1.3.9.1.6.27759|2|30 +1.3.6.1.4.1.2620.1.3.9.1.6.40201|2|12 +1.3.6.1.4.1.2620.1.3.9.1.6.54989|2|24 +1.3.6.1.4.1.2620.1.3.9.1.6.55318|2|28 +1.3.6.1.4.1.2620.1.3.9.1.6.57712|2|22 +1.3.6.1.4.1.2620.1.3.9.1.7.6833|2|15 +1.3.6.1.4.1.2620.1.3.9.1.7.9617|2|29 +1.3.6.1.4.1.2620.1.3.9.1.7.12777|2|21 +1.3.6.1.4.1.2620.1.3.9.1.7.21037|2|14 +1.3.6.1.4.1.2620.1.3.9.1.7.23145|2|3 +1.3.6.1.4.1.2620.1.3.9.1.7.27759|2|18 +1.3.6.1.4.1.2620.1.3.9.1.7.40201|2|12 +1.3.6.1.4.1.2620.1.3.9.1.7.54989|2|2 +1.3.6.1.4.1.2620.1.3.9.1.7.55318|2|17 +1.3.6.1.4.1.2620.1.3.9.1.7.57712|2|22 +1.3.6.1.4.1.2620.1.3.9.1.8.6833|2|26 +1.3.6.1.4.1.2620.1.3.9.1.8.9617|2|30 +1.3.6.1.4.1.2620.1.3.9.1.8.12777|2|30 +1.3.6.1.4.1.2620.1.3.9.1.8.21037|2|9 +1.3.6.1.4.1.2620.1.3.9.1.8.23145|2|21 +1.3.6.1.4.1.2620.1.3.9.1.8.27759|2|23 +1.3.6.1.4.1.2620.1.3.9.1.8.40201|2|18 +1.3.6.1.4.1.2620.1.3.9.1.8.54989|2|6 +1.3.6.1.4.1.2620.1.3.9.1.8.55318|2|22 +1.3.6.1.4.1.2620.1.3.9.1.8.57712|2|4 +1.3.6.1.4.1.2620.1.3.9.1.9.6833|2|25 +1.3.6.1.4.1.2620.1.3.9.1.9.9617|2|17 +1.3.6.1.4.1.2620.1.3.9.1.9.12777|2|14 +1.3.6.1.4.1.2620.1.3.9.1.9.21037|2|20 +1.3.6.1.4.1.2620.1.3.9.1.9.23145|2|19 +1.3.6.1.4.1.2620.1.3.9.1.9.27759|2|15 +1.3.6.1.4.1.2620.1.3.9.1.9.40201|2|21 +1.3.6.1.4.1.2620.1.3.9.1.9.54989|2|12 +1.3.6.1.4.1.2620.1.3.9.1.9.55318|2|25 +1.3.6.1.4.1.2620.1.3.9.1.9.57712|2|7 +1.3.6.1.4.1.2620.1.3.9.1.10.6833|2|19 +1.3.6.1.4.1.2620.1.3.9.1.10.9617|2|0 +1.3.6.1.4.1.2620.1.3.9.1.10.12777|2|0 +1.3.6.1.4.1.2620.1.3.9.1.10.21037|2|23 +1.3.6.1.4.1.2620.1.3.9.1.10.23145|2|11 +1.3.6.1.4.1.2620.1.3.9.1.10.27759|2|25 +1.3.6.1.4.1.2620.1.3.9.1.10.40201|2|31 +1.3.6.1.4.1.2620.1.3.9.1.10.54989|2|11 +1.3.6.1.4.1.2620.1.3.9.1.10.55318|2|20 +1.3.6.1.4.1.2620.1.3.9.1.10.57712|2|24 +1.3.6.1.4.1.2620.1.3.9.1.11.6833|2|12 +1.3.6.1.4.1.2620.1.3.9.1.11.9617|2|17 +1.3.6.1.4.1.2620.1.3.9.1.11.12777|2|20 +1.3.6.1.4.1.2620.1.3.9.1.11.21037|2|31 +1.3.6.1.4.1.2620.1.3.9.1.11.23145|2|28 +1.3.6.1.4.1.2620.1.3.9.1.11.27759|2|15 +1.3.6.1.4.1.2620.1.3.9.1.11.40201|2|4 +1.3.6.1.4.1.2620.1.3.9.1.11.54989|2|25 +1.3.6.1.4.1.2620.1.3.9.1.11.55318|2|22 +1.3.6.1.4.1.2620.1.3.9.1.11.57712|2|31 +1.3.6.1.4.1.2620.1.3.9.1.12.6833|2|19 +1.3.6.1.4.1.2620.1.3.9.1.12.9617|2|14 +1.3.6.1.4.1.2620.1.3.9.1.12.12777|2|14 +1.3.6.1.4.1.2620.1.3.9.1.12.21037|2|4 +1.3.6.1.4.1.2620.1.3.9.1.12.23145|2|22 +1.3.6.1.4.1.2620.1.3.9.1.12.27759|2|30 +1.3.6.1.4.1.2620.1.3.9.1.12.40201|2|26 +1.3.6.1.4.1.2620.1.3.9.1.12.54989|2|4 +1.3.6.1.4.1.2620.1.3.9.1.12.55318|2|18 +1.3.6.1.4.1.2620.1.3.9.1.12.57712|2|20 +1.3.6.1.4.1.2620.1.3.9.1.13.6833|2|29 +1.3.6.1.4.1.2620.1.3.9.1.13.9617|2|9 +1.3.6.1.4.1.2620.1.3.9.1.13.12777|2|5 +1.3.6.1.4.1.2620.1.3.9.1.13.21037|2|2 +1.3.6.1.4.1.2620.1.3.9.1.13.23145|2|12 +1.3.6.1.4.1.2620.1.3.9.1.13.27759|2|7 +1.3.6.1.4.1.2620.1.3.9.1.13.40201|2|30 +1.3.6.1.4.1.2620.1.3.9.1.13.54989|2|17 +1.3.6.1.4.1.2620.1.3.9.1.13.55318|2|13 +1.3.6.1.4.1.2620.1.3.9.1.13.57712|2|5 +1.3.6.1.4.1.2620.1.3.9.1.14.6833|2|26 +1.3.6.1.4.1.2620.1.3.9.1.14.9617|2|4 +1.3.6.1.4.1.2620.1.3.9.1.14.12777|2|17 +1.3.6.1.4.1.2620.1.3.9.1.14.21037|2|27 +1.3.6.1.4.1.2620.1.3.9.1.14.23145|2|25 +1.3.6.1.4.1.2620.1.3.9.1.14.27759|2|15 +1.3.6.1.4.1.2620.1.3.9.1.14.40201|2|6 +1.3.6.1.4.1.2620.1.3.9.1.14.54989|2|17 +1.3.6.1.4.1.2620.1.3.9.1.14.55318|2|10 +1.3.6.1.4.1.2620.1.3.9.1.14.57712|2|18 +1.3.6.1.4.1.2620.1.3.9.1.15.6833|2|10 +1.3.6.1.4.1.2620.1.3.9.1.15.9617|2|6 +1.3.6.1.4.1.2620.1.3.9.1.15.12777|2|7 +1.3.6.1.4.1.2620.1.3.9.1.15.21037|2|0 +1.3.6.1.4.1.2620.1.3.9.1.15.23145|2|11 +1.3.6.1.4.1.2620.1.3.9.1.15.27759|2|20 +1.3.6.1.4.1.2620.1.3.9.1.15.40201|2|24 +1.3.6.1.4.1.2620.1.3.9.1.15.54989|2|31 +1.3.6.1.4.1.2620.1.3.9.1.15.55318|2|20 +1.3.6.1.4.1.2620.1.3.9.1.15.57712|2|17 +1.3.6.1.4.1.2620.1.5.1.0|4x|7a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.2.0|2|12 +1.3.6.1.4.1.2620.1.5.3.0|2|21 +1.3.6.1.4.1.2620.1.5.4.0|2|22 +1.3.6.1.4.1.2620.1.5.5.0|4x|6f78656e20666f7277617264206163746564206b657074 +1.3.6.1.4.1.2620.1.5.6.0|4x|4a6164656420616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.7.0|4x|4a61646564207468656972206163746564207a6f6d62696573206f78656e206f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.5.8.0|2|18 +1.3.6.1.4.1.2620.1.5.10.0|2|3 +1.3.6.1.4.1.2620.1.5.11.0|4|their +1.3.6.1.4.1.2620.1.5.12.1.1.364|66|364 +1.3.6.1.4.1.2620.1.5.12.1.1.7934|66|7934 +1.3.6.1.4.1.2620.1.5.12.1.1.8496|66|8496 +1.3.6.1.4.1.2620.1.5.12.1.1.13428|66|13428 +1.3.6.1.4.1.2620.1.5.12.1.1.15584|66|15584 +1.3.6.1.4.1.2620.1.5.12.1.1.31324|66|31324 +1.3.6.1.4.1.2620.1.5.12.1.1.41779|66|41779 +1.3.6.1.4.1.2620.1.5.12.1.1.42369|66|42369 +1.3.6.1.4.1.2620.1.5.12.1.1.55537|66|55537 +1.3.6.1.4.1.2620.1.5.12.1.1.64077|66|64077 +1.3.6.1.4.1.2620.1.5.12.1.2.364|4|Jaded +1.3.6.1.4.1.2620.1.5.12.1.2.7934|4x|4a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.5.12.1.2.8496|4x|627574204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.2.13428|4x|7a6f6d62696573206b657074206163746564206b657074206275742062757420666f7277617264 +1.3.6.1.4.1.2620.1.5.12.1.2.15584|4x|6163746564207468656972207a6f6d6269657320627574204a6164656420717561696e746c79204a61646564207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.2.31324|4x|6275742062757420717561696e746c79207468656972206163746564 +1.3.6.1.4.1.2620.1.5.12.1.2.41779|4x|64726976696e672064726976696e672064726976696e67206163746564206f78656e +1.3.6.1.4.1.2620.1.5.12.1.2.42369|4x|6b65707420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.5.12.1.2.55537|4x|64726976696e67206b657074206f78656e +1.3.6.1.4.1.2620.1.5.12.1.2.64077|4x|6b657074206b657074207a6f6d62696573207a6f6d62696573204a6164656420666f72776172642064726976696e67207468656972 +1.3.6.1.4.1.2620.1.5.12.1.3.364|64x|31b04422 +1.3.6.1.4.1.2620.1.5.12.1.3.7934|64x|273c1ef3 +1.3.6.1.4.1.2620.1.5.12.1.3.8496|64x|669ee0fd +1.3.6.1.4.1.2620.1.5.12.1.3.13428|64x|9c96c1b9 +1.3.6.1.4.1.2620.1.5.12.1.3.15584|64x|7dc191f9 +1.3.6.1.4.1.2620.1.5.12.1.3.31324|64x|f6bc802c +1.3.6.1.4.1.2620.1.5.12.1.3.41779|64x|11e6bf9b +1.3.6.1.4.1.2620.1.5.12.1.3.42369|64x|e23aba6f +1.3.6.1.4.1.2620.1.5.12.1.3.55537|64x|2cd187c7 +1.3.6.1.4.1.2620.1.5.12.1.3.64077|64x|09dc0da2 +1.3.6.1.4.1.2620.1.5.12.1.4.364|4x|616374656420627574207468656972206b657074204a61646564204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.5.12.1.4.7934|4x|666f727761726420717561696e746c79204a61646564207a6f6d62696573207468656972207a6f6d626965732064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.4.8496|4x|64726976696e67206f78656e20666f7277617264207468656972204a61646564206b657074206f78656e +1.3.6.1.4.1.2620.1.5.12.1.4.13428|4x|64726976696e672061637465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.4.15584|4x|616374656420666f727761726420666f727761726420666f7277617264206f78656e20746865697220717561696e746c7920627574206163746564 +1.3.6.1.4.1.2620.1.5.12.1.4.31324|4x|64726976696e67206163746564204a61646564206b65707420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.4.41779|4x|666f7277617264206f78656e206f78656e20666f727761726420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.5.12.1.4.42369|4x|6b657074207468656972206b65707420666f72776172642062757420717561696e746c79 +1.3.6.1.4.1.2620.1.5.12.1.4.55537|4|zombies +1.3.6.1.4.1.2620.1.5.12.1.4.64077|4|driving +1.3.6.1.4.1.2620.1.5.12.1.5.364|2|21 +1.3.6.1.4.1.2620.1.5.12.1.5.7934|2|27 +1.3.6.1.4.1.2620.1.5.12.1.5.8496|2|10 +1.3.6.1.4.1.2620.1.5.12.1.5.13428|2|21 +1.3.6.1.4.1.2620.1.5.12.1.5.15584|2|22 +1.3.6.1.4.1.2620.1.5.12.1.5.31324|2|13 +1.3.6.1.4.1.2620.1.5.12.1.5.41779|2|19 +1.3.6.1.4.1.2620.1.5.12.1.5.42369|2|28 +1.3.6.1.4.1.2620.1.5.12.1.5.55537|2|30 +1.3.6.1.4.1.2620.1.5.12.1.5.64077|2|16 +1.3.6.1.4.1.2620.1.5.12.1.6.364|2|16 +1.3.6.1.4.1.2620.1.5.12.1.6.7934|2|24 +1.3.6.1.4.1.2620.1.5.12.1.6.8496|2|23 +1.3.6.1.4.1.2620.1.5.12.1.6.13428|2|10 +1.3.6.1.4.1.2620.1.5.12.1.6.15584|2|6 +1.3.6.1.4.1.2620.1.5.12.1.6.31324|2|17 +1.3.6.1.4.1.2620.1.5.12.1.6.41779|2|16 +1.3.6.1.4.1.2620.1.5.12.1.6.42369|2|28 +1.3.6.1.4.1.2620.1.5.12.1.6.55537|2|18 +1.3.6.1.4.1.2620.1.5.12.1.6.64077|2|28 +1.3.6.1.4.1.2620.1.5.12.1.7.364|2|13 +1.3.6.1.4.1.2620.1.5.12.1.7.7934|2|18 +1.3.6.1.4.1.2620.1.5.12.1.7.8496|2|11 +1.3.6.1.4.1.2620.1.5.12.1.7.13428|2|17 +1.3.6.1.4.1.2620.1.5.12.1.7.15584|2|3 +1.3.6.1.4.1.2620.1.5.12.1.7.31324|2|13 +1.3.6.1.4.1.2620.1.5.12.1.7.41779|2|14 +1.3.6.1.4.1.2620.1.5.12.1.7.42369|2|21 +1.3.6.1.4.1.2620.1.5.12.1.7.55537|2|5 +1.3.6.1.4.1.2620.1.5.12.1.7.64077|2|30 +1.3.6.1.4.1.2620.1.5.13.1.1.2868|2|11 +1.3.6.1.4.1.2620.1.5.13.1.1.5551|2|8 +1.3.6.1.4.1.2620.1.5.13.1.1.16747|2|15 +1.3.6.1.4.1.2620.1.5.13.1.1.20626|2|17 +1.3.6.1.4.1.2620.1.5.13.1.1.24053|2|27 +1.3.6.1.4.1.2620.1.5.13.1.1.24837|2|28 +1.3.6.1.4.1.2620.1.5.13.1.1.31559|2|8 +1.3.6.1.4.1.2620.1.5.13.1.1.32912|2|3 +1.3.6.1.4.1.2620.1.5.13.1.1.32962|2|28 +1.3.6.1.4.1.2620.1.5.13.1.1.34531|2|8 +1.3.6.1.4.1.2620.1.5.13.1.2.2868|4x|666f727761726420717561696e746c7920717561696e746c79206163746564206f78656e20627574206f78656e +1.3.6.1.4.1.2620.1.5.13.1.2.5551|4x|717561696e746c7920717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.2.16747|4x|666f7277617264206f78656e2062757420627574207468656972 +1.3.6.1.4.1.2620.1.5.13.1.2.20626|4x|6f78656e207468656972206163746564 +1.3.6.1.4.1.2620.1.5.13.1.2.24053|4x|4a6164656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.13.1.2.24837|4x|7a6f6d62696573206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.13.1.2.31559|4x|6b657074207a6f6d62696573204a6164656420717561696e746c79204a61646564207a6f6d626965732064726976696e67207468656972 +1.3.6.1.4.1.2620.1.5.13.1.2.32912|4x|7a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264204a616465642064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.5.13.1.2.32962|4x|4a6164656420666f727761726420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.2.34531|4x|4a616465642064726976696e67206b657074207a6f6d6269657320616374656420627574 +1.3.6.1.4.1.2620.1.5.13.1.3.2868|4x|717561696e746c7920717561696e746c7920746865697220627574204a61646564204a6164656420627574206f78656e204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.3.5551|4|zombies +1.3.6.1.4.1.2620.1.5.13.1.3.16747|4x|6b6570742062757420746865697220616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.3.20626|4x|4a61646564204a616465642064726976696e67207a6f6d6269657320627574204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.3.24053|4x|717561696e746c79207468656972206b657074206b657074 +1.3.6.1.4.1.2620.1.5.13.1.3.24837|4x|7a6f6d62696573207a6f6d62696573206b6570742061637465642062757420627574 +1.3.6.1.4.1.2620.1.5.13.1.3.31559|4x|6f78656e20717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.3.32912|4|quaintly +1.3.6.1.4.1.2620.1.5.13.1.3.32962|4x|6f78656e20627574204a61646564204a616465642062757420627574206163746564 +1.3.6.1.4.1.2620.1.5.13.1.3.34531|4x|6f78656e204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.4.2868|2|24 +1.3.6.1.4.1.2620.1.5.13.1.4.5551|2|6 +1.3.6.1.4.1.2620.1.5.13.1.4.16747|2|18 +1.3.6.1.4.1.2620.1.5.13.1.4.20626|2|8 +1.3.6.1.4.1.2620.1.5.13.1.4.24053|2|1 +1.3.6.1.4.1.2620.1.5.13.1.4.24837|2|10 +1.3.6.1.4.1.2620.1.5.13.1.4.31559|2|0 +1.3.6.1.4.1.2620.1.5.13.1.4.32912|2|8 +1.3.6.1.4.1.2620.1.5.13.1.4.32962|2|11 +1.3.6.1.4.1.2620.1.5.13.1.4.34531|2|14 +1.3.6.1.4.1.2620.1.5.13.1.5.2868|2|28 +1.3.6.1.4.1.2620.1.5.13.1.5.5551|2|29 +1.3.6.1.4.1.2620.1.5.13.1.5.16747|2|8 +1.3.6.1.4.1.2620.1.5.13.1.5.20626|2|8 +1.3.6.1.4.1.2620.1.5.13.1.5.24053|2|18 +1.3.6.1.4.1.2620.1.5.13.1.5.24837|2|18 +1.3.6.1.4.1.2620.1.5.13.1.5.31559|2|25 +1.3.6.1.4.1.2620.1.5.13.1.5.32912|2|28 +1.3.6.1.4.1.2620.1.5.13.1.5.32962|2|0 +1.3.6.1.4.1.2620.1.5.13.1.5.34531|2|11 +1.3.6.1.4.1.2620.1.5.13.1.6.2868|4x|7a6f6d62696573206b657074206f78656e +1.3.6.1.4.1.2620.1.5.13.1.6.5551|4x|627574206f78656e206163746564204a6164656420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.6.16747|4x|62757420666f7277617264206163746564206163746564206b657074 +1.3.6.1.4.1.2620.1.5.13.1.6.20626|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.6.24053|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.6.24837|4|but +1.3.6.1.4.1.2620.1.5.13.1.6.31559|4|zombies +1.3.6.1.4.1.2620.1.5.13.1.6.32912|4x|7468656972206163746564207a6f6d62696573204a6164656420627574204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.6.32962|4x|666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.5.13.1.6.34531|4x|666f7277617264206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.14.0|4x|6b65707420717561696e746c792061637465642062757420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.5.15.1.1.995|66|995 +1.3.6.1.4.1.2620.1.5.15.1.1.9585|66|9585 +1.3.6.1.4.1.2620.1.5.15.1.1.14294|66|14294 +1.3.6.1.4.1.2620.1.5.15.1.1.14705|66|14705 +1.3.6.1.4.1.2620.1.5.15.1.1.22335|66|22335 +1.3.6.1.4.1.2620.1.5.15.1.1.25009|66|25009 +1.3.6.1.4.1.2620.1.5.15.1.1.56007|66|56007 +1.3.6.1.4.1.2620.1.5.15.1.1.57014|66|57014 +1.3.6.1.4.1.2620.1.5.15.1.1.60935|66|60935 +1.3.6.1.4.1.2620.1.5.15.1.1.64449|66|64449 +1.3.6.1.4.1.2620.1.5.15.1.2.995|4x|7a6f6d626965732062757420627574204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.15.1.2.9585|4x|6f78656e20666f7277617264207468656972206f78656e20666f72776172642062757420717561696e746c79 +1.3.6.1.4.1.2620.1.5.15.1.2.14294|4x|6f78656e206b657074 +1.3.6.1.4.1.2620.1.5.15.1.2.14705|4x|666f7277617264206b657074 +1.3.6.1.4.1.2620.1.5.15.1.2.22335|4x|4a61646564206163746564206163746564204a61646564 +1.3.6.1.4.1.2620.1.5.15.1.2.25009|4x|6275742064726976696e67207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.5.15.1.2.56007|4x|6f78656e20627574206b657074206b657074 +1.3.6.1.4.1.2620.1.5.15.1.2.57014|4x|746865697220666f7277617264206163746564207a6f6d62696573207a6f6d62696573207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.5.15.1.2.60935|4x|666f727761726420666f72776172642064726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.5.15.1.2.64449|4x|6163746564204a61646564206f78656e20627574 +1.3.6.1.4.1.2620.1.5.15.1.3.995|2|12 +1.3.6.1.4.1.2620.1.5.15.1.3.9585|2|28 +1.3.6.1.4.1.2620.1.5.15.1.3.14294|2|31 +1.3.6.1.4.1.2620.1.5.15.1.3.14705|2|17 +1.3.6.1.4.1.2620.1.5.15.1.3.22335|2|8 +1.3.6.1.4.1.2620.1.5.15.1.3.25009|2|24 +1.3.6.1.4.1.2620.1.5.15.1.3.56007|2|6 +1.3.6.1.4.1.2620.1.5.15.1.3.57014|2|19 +1.3.6.1.4.1.2620.1.5.15.1.3.60935|2|6 +1.3.6.1.4.1.2620.1.5.15.1.3.64449|2|26 +1.3.6.1.4.1.2620.1.5.15.1.4.995|2|19 +1.3.6.1.4.1.2620.1.5.15.1.4.9585|2|16 +1.3.6.1.4.1.2620.1.5.15.1.4.14294|2|27 +1.3.6.1.4.1.2620.1.5.15.1.4.14705|2|7 +1.3.6.1.4.1.2620.1.5.15.1.4.22335|2|14 +1.3.6.1.4.1.2620.1.5.15.1.4.25009|2|6 +1.3.6.1.4.1.2620.1.5.15.1.4.56007|2|15 +1.3.6.1.4.1.2620.1.5.15.1.4.57014|2|4 +1.3.6.1.4.1.2620.1.5.15.1.4.60935|2|27 +1.3.6.1.4.1.2620.1.5.15.1.4.64449|2|0 +1.3.6.1.4.1.2620.1.5.15.1.5.995|2|26 +1.3.6.1.4.1.2620.1.5.15.1.5.9585|2|25 +1.3.6.1.4.1.2620.1.5.15.1.5.14294|2|28 +1.3.6.1.4.1.2620.1.5.15.1.5.14705|2|24 +1.3.6.1.4.1.2620.1.5.15.1.5.22335|2|22 +1.3.6.1.4.1.2620.1.5.15.1.5.25009|2|18 +1.3.6.1.4.1.2620.1.5.15.1.5.56007|2|17 +1.3.6.1.4.1.2620.1.5.15.1.5.57014|2|16 +1.3.6.1.4.1.2620.1.5.15.1.5.60935|2|9 +1.3.6.1.4.1.2620.1.5.15.1.5.64449|2|10 +1.3.6.1.4.1.2620.1.5.15.1.6.995|2|20 +1.3.6.1.4.1.2620.1.5.15.1.6.9585|2|6 +1.3.6.1.4.1.2620.1.5.15.1.6.14294|2|12 +1.3.6.1.4.1.2620.1.5.15.1.6.14705|2|18 +1.3.6.1.4.1.2620.1.5.15.1.6.22335|2|10 +1.3.6.1.4.1.2620.1.5.15.1.6.25009|2|13 +1.3.6.1.4.1.2620.1.5.15.1.6.56007|2|6 +1.3.6.1.4.1.2620.1.5.15.1.6.57014|2|14 +1.3.6.1.4.1.2620.1.5.15.1.6.60935|2|27 +1.3.6.1.4.1.2620.1.5.15.1.6.64449|2|23 +1.3.6.1.4.1.2620.1.5.16.1.1.177|66|177 +1.3.6.1.4.1.2620.1.5.16.1.1.26062|66|26062 +1.3.6.1.4.1.2620.1.5.16.1.1.28566|66|28566 +1.3.6.1.4.1.2620.1.5.16.1.1.31355|66|31355 +1.3.6.1.4.1.2620.1.5.16.1.1.31386|66|31386 +1.3.6.1.4.1.2620.1.5.16.1.1.42207|66|42207 +1.3.6.1.4.1.2620.1.5.16.1.1.51551|66|51551 +1.3.6.1.4.1.2620.1.5.16.1.1.53504|66|53504 +1.3.6.1.4.1.2620.1.5.16.1.1.56015|66|56015 +1.3.6.1.4.1.2620.1.5.16.1.1.58546|66|58546 +1.3.6.1.4.1.2620.1.5.16.1.2.177|4x|6f78656e207a6f6d6269657320666f7277617264206f78656e206163746564207468656972204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.2620.1.5.16.1.2.26062|4x|64726976696e67206b65707420616374656420746865697220666f7277617264206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.5.16.1.2.28566|4x|7a6f6d6269657320666f7277617264206f78656e206275742064726976696e6720666f727761726420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.2620.1.5.16.1.2.31355|4x|717561696e746c79206163746564204a61646564 +1.3.6.1.4.1.2620.1.5.16.1.2.31386|4x|666f7277617264207468656972206f78656e2074686569722064726976696e67207468656972 +1.3.6.1.4.1.2620.1.5.16.1.2.42207|4x|627574204a616465642062757420717561696e746c79206f78656e207468656972206163746564204a61646564 +1.3.6.1.4.1.2620.1.5.16.1.2.51551|4x|7a6f6d62696573207a6f6d62696573206b65707420666f727761726420616374656420666f7277617264207468656972206b657074207468656972 +1.3.6.1.4.1.2620.1.5.16.1.2.53504|4|but +1.3.6.1.4.1.2620.1.5.16.1.2.56015|4x|666f727761726420666f7277617264207468656972204a6164656420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.5.16.1.2.58546|4x|7468656972204a61646564 +1.3.6.1.4.1.2620.1.5.16.1.3.177|2|10 +1.3.6.1.4.1.2620.1.5.16.1.3.26062|2|20 +1.3.6.1.4.1.2620.1.5.16.1.3.28566|2|4 +1.3.6.1.4.1.2620.1.5.16.1.3.31355|2|22 +1.3.6.1.4.1.2620.1.5.16.1.3.31386|2|19 +1.3.6.1.4.1.2620.1.5.16.1.3.42207|2|16 +1.3.6.1.4.1.2620.1.5.16.1.3.51551|2|15 +1.3.6.1.4.1.2620.1.5.16.1.3.53504|2|20 +1.3.6.1.4.1.2620.1.5.16.1.3.56015|2|6 +1.3.6.1.4.1.2620.1.5.16.1.3.58546|2|23 +1.3.6.1.4.1.2620.1.5.16.1.4.177|2|9 +1.3.6.1.4.1.2620.1.5.16.1.4.26062|2|6 +1.3.6.1.4.1.2620.1.5.16.1.4.28566|2|9 +1.3.6.1.4.1.2620.1.5.16.1.4.31355|2|12 +1.3.6.1.4.1.2620.1.5.16.1.4.31386|2|1 +1.3.6.1.4.1.2620.1.5.16.1.4.42207|2|12 +1.3.6.1.4.1.2620.1.5.16.1.4.51551|2|15 +1.3.6.1.4.1.2620.1.5.16.1.4.53504|2|17 +1.3.6.1.4.1.2620.1.5.16.1.4.56015|2|29 +1.3.6.1.4.1.2620.1.5.16.1.4.58546|2|6 +1.3.6.1.4.1.2620.1.5.101.0|2|30 +1.3.6.1.4.1.2620.1.5.102.0|4x|7a6f6d62696573206b6570742064726976696e67206f78656e +1.3.6.1.4.1.2620.1.5.103.0|4x|64726976696e6720616374656420717561696e746c79204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.5.999.0|2|13 +1.3.6.1.4.1.2620.1.6.1.0|4|SVN Foundation +1.3.6.1.4.1.2620.1.6.2.0|2|9 +1.3.6.1.4.1.2620.1.6.3.0|2|9 +1.3.6.1.4.1.2620.1.6.4.1.0|4|R80.10 +1.3.6.1.4.1.2620.1.6.4.2.0|66|991310018 +1.3.6.1.4.1.2620.1.6.5.1.0|4|Gaia +1.3.6.1.4.1.2620.1.6.5.2.0|2|2 +1.3.6.1.4.1.2620.1.6.5.3.0|2|6 +1.3.6.1.4.1.2620.1.6.5.7.0|4| +1.3.6.1.4.1.2620.1.6.6.1.1.4626|66|4626 +1.3.6.1.4.1.2620.1.6.6.1.1.6768|66|6768 +1.3.6.1.4.1.2620.1.6.6.1.1.7799|66|7799 +1.3.6.1.4.1.2620.1.6.6.1.1.32942|66|32942 +1.3.6.1.4.1.2620.1.6.6.1.1.36905|66|36905 +1.3.6.1.4.1.2620.1.6.6.1.1.51226|66|51226 +1.3.6.1.4.1.2620.1.6.6.1.1.52662|66|52662 +1.3.6.1.4.1.2620.1.6.6.1.1.54033|66|54033 +1.3.6.1.4.1.2620.1.6.6.1.1.59395|66|59395 +1.3.6.1.4.1.2620.1.6.6.1.1.59973|66|59973 +1.3.6.1.4.1.2620.1.6.6.1.2.4626|64x|5b33e1aa +1.3.6.1.4.1.2620.1.6.6.1.2.6768|64x|3c2e7622 +1.3.6.1.4.1.2620.1.6.6.1.2.7799|64x|a23cde9f +1.3.6.1.4.1.2620.1.6.6.1.2.32942|64x|af1f3854 +1.3.6.1.4.1.2620.1.6.6.1.2.36905|64x|b4075669 +1.3.6.1.4.1.2620.1.6.6.1.2.51226|64x|2e6e5fa4 +1.3.6.1.4.1.2620.1.6.6.1.2.52662|64x|9e92babc +1.3.6.1.4.1.2620.1.6.6.1.2.54033|64x|8d88ec2a +1.3.6.1.4.1.2620.1.6.6.1.2.59395|64x|39fa362e +1.3.6.1.4.1.2620.1.6.6.1.2.59973|64x|3d7b260c +1.3.6.1.4.1.2620.1.6.6.1.3.4626|64x|8bcf22ce +1.3.6.1.4.1.2620.1.6.6.1.3.6768|64x|e1c51fd5 +1.3.6.1.4.1.2620.1.6.6.1.3.7799|64x|3f9e8289 +1.3.6.1.4.1.2620.1.6.6.1.3.32942|64x|4b7c1467 +1.3.6.1.4.1.2620.1.6.6.1.3.36905|64x|b44f72e2 +1.3.6.1.4.1.2620.1.6.6.1.3.51226|64x|716f517c +1.3.6.1.4.1.2620.1.6.6.1.3.52662|64x|8aa98f40 +1.3.6.1.4.1.2620.1.6.6.1.3.54033|64x|85f8f424 +1.3.6.1.4.1.2620.1.6.6.1.3.59395|64x|0a9d659f +1.3.6.1.4.1.2620.1.6.6.1.3.59973|64x|429e0b93 +1.3.6.1.4.1.2620.1.6.6.1.4.4626|64x|157a4864 +1.3.6.1.4.1.2620.1.6.6.1.4.6768|64x|3ec3dddf +1.3.6.1.4.1.2620.1.6.6.1.4.7799|64x|36b79586 +1.3.6.1.4.1.2620.1.6.6.1.4.32942|64x|58ff7cd0 +1.3.6.1.4.1.2620.1.6.6.1.4.36905|64x|28ed11cf +1.3.6.1.4.1.2620.1.6.6.1.4.51226|64x|57080148 +1.3.6.1.4.1.2620.1.6.6.1.4.52662|64x|a665b16f +1.3.6.1.4.1.2620.1.6.6.1.4.54033|64x|143dd6d0 +1.3.6.1.4.1.2620.1.6.6.1.4.59395|64x|9ec3312e +1.3.6.1.4.1.2620.1.6.6.1.4.59973|64x|132b7e13 +1.3.6.1.4.1.2620.1.6.6.1.5.4626|4x|6b657074207468656972206b6570742064726976696e67206275742064726976696e67 +1.3.6.1.4.1.2620.1.6.6.1.5.6768|4|kept +1.3.6.1.4.1.2620.1.6.6.1.5.7799|4x|666f727761726420717561696e746c792064726976696e67204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.6.6.1.5.32942|4x|6b657074206b657074206f78656e206163746564206b657074206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.6.6.1.5.36905|4x|62757420746865697220746865697220666f727761726420666f7277617264204a61646564206b65707420627574 +1.3.6.1.4.1.2620.1.6.6.1.5.51226|4x|7a6f6d626965732064726976696e6720666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.6.6.1.5.52662|4x|666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.6.1.5.54033|4x|64726976696e6720666f727761726420666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.6.6.1.5.59395|4x|627574204a6164656420666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.6.6.1.5.59973|4x|717561696e746c792064726976696e67206f78656e +1.3.6.1.4.1.2620.1.6.7.1.1.0|2|21 +1.3.6.1.4.1.2620.1.6.7.1.2.0|2|15 +1.3.6.1.4.1.2620.1.6.7.1.3.0|2|9 +1.3.6.1.4.1.2620.1.6.7.1.4.0|2|14 +1.3.6.1.4.1.2620.1.6.7.1.5.0|2|23 +1.3.6.1.4.1.2620.1.6.7.1.6.0|2|26 +1.3.6.1.4.1.2620.1.6.7.1.7.0|2|25 +1.3.6.1.4.1.2620.1.6.7.2.1.0|2|29 +1.3.6.1.4.1.2620.1.6.7.2.2.0|2|5 +1.3.6.1.4.1.2620.1.6.7.2.3.0|2|21 +1.3.6.1.4.1.2620.1.6.7.2.4.0|2|21 +1.3.6.1.4.1.2620.1.6.7.2.5.0|2|21 +1.3.6.1.4.1.2620.1.6.7.2.6.0|2|31 +1.3.6.1.4.1.2620.1.6.7.2.7.0|2|16 +1.3.6.1.4.1.2620.1.6.7.3.1.0|2|27 +1.3.6.1.4.1.2620.1.6.7.3.2.0|2|5 +1.3.6.1.4.1.2620.1.6.7.3.3.0|2|9 +1.3.6.1.4.1.2620.1.6.7.3.4.0|4x|666f7277617264207a6f6d62696573206b65707420666f7277617264204a61646564204a61646564206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.7.3.5.0|4x|64726976696e6720717561696e746c79206163746564207468656972206163746564206f78656e +1.3.6.1.4.1.2620.1.6.7.3.6.0|4x|627574206163746564206163746564206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.4.1.0|4x|38303030303030303030 +1.3.6.1.4.1.2620.1.6.7.4.2.0|4x|38303030303030303030 +1.3.6.1.4.1.2620.1.6.7.4.3.0|4x|3136303030303030303030 +1.3.6.1.4.1.2620.1.6.7.4.4.0|4x|38303030303030303030 +1.3.6.1.4.1.2620.1.6.7.4.5.0|4|8000000000 +1.3.6.1.4.1.2620.1.6.7.4.6.0|2|7 +1.3.6.1.4.1.2620.1.6.7.4.7.0|2|20 +1.3.6.1.4.1.2620.1.6.7.5.1.1.7097|66|7097 +1.3.6.1.4.1.2620.1.6.7.5.1.1.13039|66|13039 +1.3.6.1.4.1.2620.1.6.7.5.1.1.13761|66|13761 +1.3.6.1.4.1.2620.1.6.7.5.1.1.28994|66|28994 +1.3.6.1.4.1.2620.1.6.7.5.1.1.29751|66|29751 +1.3.6.1.4.1.2620.1.6.7.5.1.1.33826|66|33826 +1.3.6.1.4.1.2620.1.6.7.5.1.1.40053|66|40053 +1.3.6.1.4.1.2620.1.6.7.5.1.1.48847|66|48847 +1.3.6.1.4.1.2620.1.6.7.5.1.1.61593|66|61593 +1.3.6.1.4.1.2620.1.6.7.5.1.1.65044|66|65044 +1.3.6.1.4.1.2620.1.6.7.5.1.2.7097|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.2.13039|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.2.13761|2|16 +1.3.6.1.4.1.2620.1.6.7.5.1.2.28994|2|0 +1.3.6.1.4.1.2620.1.6.7.5.1.2.29751|2|25 +1.3.6.1.4.1.2620.1.6.7.5.1.2.33826|2|19 +1.3.6.1.4.1.2620.1.6.7.5.1.2.40053|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.2.48847|2|5 +1.3.6.1.4.1.2620.1.6.7.5.1.2.61593|2|1 +1.3.6.1.4.1.2620.1.6.7.5.1.2.65044|2|12 +1.3.6.1.4.1.2620.1.6.7.5.1.3.7097|2|6 +1.3.6.1.4.1.2620.1.6.7.5.1.3.13039|2|0 +1.3.6.1.4.1.2620.1.6.7.5.1.3.13761|2|8 +1.3.6.1.4.1.2620.1.6.7.5.1.3.28994|2|29 +1.3.6.1.4.1.2620.1.6.7.5.1.3.29751|2|24 +1.3.6.1.4.1.2620.1.6.7.5.1.3.33826|2|23 +1.3.6.1.4.1.2620.1.6.7.5.1.3.40053|2|5 +1.3.6.1.4.1.2620.1.6.7.5.1.3.48847|2|29 +1.3.6.1.4.1.2620.1.6.7.5.1.3.61593|2|10 +1.3.6.1.4.1.2620.1.6.7.5.1.3.65044|2|24 +1.3.6.1.4.1.2620.1.6.7.5.1.4.7097|2|8 +1.3.6.1.4.1.2620.1.6.7.5.1.4.13039|2|27 +1.3.6.1.4.1.2620.1.6.7.5.1.4.13761|2|7 +1.3.6.1.4.1.2620.1.6.7.5.1.4.28994|2|25 +1.3.6.1.4.1.2620.1.6.7.5.1.4.29751|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.4.33826|2|27 +1.3.6.1.4.1.2620.1.6.7.5.1.4.40053|2|16 +1.3.6.1.4.1.2620.1.6.7.5.1.4.48847|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.4.61593|2|23 +1.3.6.1.4.1.2620.1.6.7.5.1.4.65044|2|17 +1.3.6.1.4.1.2620.1.6.7.5.1.5.7097|2|1 +1.3.6.1.4.1.2620.1.6.7.5.1.5.13039|2|6 +1.3.6.1.4.1.2620.1.6.7.5.1.5.13761|2|21 +1.3.6.1.4.1.2620.1.6.7.5.1.5.28994|2|27 +1.3.6.1.4.1.2620.1.6.7.5.1.5.29751|2|1 +1.3.6.1.4.1.2620.1.6.7.5.1.5.33826|2|0 +1.3.6.1.4.1.2620.1.6.7.5.1.5.40053|2|7 +1.3.6.1.4.1.2620.1.6.7.5.1.5.48847|2|7 +1.3.6.1.4.1.2620.1.6.7.5.1.5.61593|2|8 +1.3.6.1.4.1.2620.1.6.7.5.1.5.65044|2|13 +1.3.6.1.4.1.2620.1.6.7.5.1.6.7097|2|29 +1.3.6.1.4.1.2620.1.6.7.5.1.6.13039|2|20 +1.3.6.1.4.1.2620.1.6.7.5.1.6.13761|2|15 +1.3.6.1.4.1.2620.1.6.7.5.1.6.28994|2|8 +1.3.6.1.4.1.2620.1.6.7.5.1.6.29751|2|18 +1.3.6.1.4.1.2620.1.6.7.5.1.6.33826|2|14 +1.3.6.1.4.1.2620.1.6.7.5.1.6.40053|2|15 +1.3.6.1.4.1.2620.1.6.7.5.1.6.48847|2|26 +1.3.6.1.4.1.2620.1.6.7.5.1.6.61593|2|17 +1.3.6.1.4.1.2620.1.6.7.5.1.6.65044|2|13 +1.3.6.1.4.1.2620.1.6.7.5.1.7.7097|2|19 +1.3.6.1.4.1.2620.1.6.7.5.1.7.13039|2|24 +1.3.6.1.4.1.2620.1.6.7.5.1.7.13761|2|3 +1.3.6.1.4.1.2620.1.6.7.5.1.7.28994|2|22 +1.3.6.1.4.1.2620.1.6.7.5.1.7.29751|2|3 +1.3.6.1.4.1.2620.1.6.7.5.1.7.33826|2|12 +1.3.6.1.4.1.2620.1.6.7.5.1.7.40053|2|4 +1.3.6.1.4.1.2620.1.6.7.5.1.7.48847|2|24 +1.3.6.1.4.1.2620.1.6.7.5.1.7.61593|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.7.65044|2|3 +1.3.6.1.4.1.2620.1.6.7.6.1.1.0|66|0 +1.3.6.1.4.1.2620.1.6.7.6.1.1.1|66|1 +1.3.6.1.4.1.2620.1.6.7.6.1.1.2|66|2 +1.3.6.1.4.1.2620.1.6.7.6.1.1.3|66|3 +1.3.6.1.4.1.2620.1.6.7.6.1.1.4|66|4 +1.3.6.1.4.1.2620.1.6.7.6.1.1.5|66|5 +1.3.6.1.4.1.2620.1.6.7.6.1.1.6|66|6 +1.3.6.1.4.1.2620.1.6.7.6.1.1.7|66|7 +1.3.6.1.4.1.2620.1.6.7.6.1.1.8|66|8 +1.3.6.1.4.1.2620.1.6.7.6.1.1.9|66|9 +1.3.6.1.4.1.2620.1.6.7.6.1.2.0|4|first +1.3.6.1.4.1.2620.1.6.7.6.1.2.1|4|second +1.3.6.1.4.1.2620.1.6.7.6.1.2.2|4|third +1.3.6.1.4.1.2620.1.6.7.6.1.2.3|4|fourth +1.3.6.1.4.1.2620.1.6.7.6.1.2.4|4|fifth +1.3.6.1.4.1.2620.1.6.7.6.1.2.5|4|sixth +1.3.6.1.4.1.2620.1.6.7.6.1.2.6|4|seventh +1.3.6.1.4.1.2620.1.6.7.6.1.2.7|4|eighth +1.3.6.1.4.1.2620.1.6.7.6.1.2.8|4|ninth +1.3.6.1.4.1.2620.1.6.7.6.1.2.9|4|tenth +1.3.6.1.4.1.2620.1.6.7.6.1.3.0|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.1|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.2|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.3|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.4|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.5|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.6|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.7|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.8|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.9|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.0|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.1|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.2|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.3|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.4|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.5|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.6|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.7|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.8|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.9|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.0|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.1|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.2|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.3|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.4|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.5|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.6|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.7|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.8|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.9|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.6.0|2|31 +1.3.6.1.4.1.2620.1.6.7.6.1.6.1|2|3 +1.3.6.1.4.1.2620.1.6.7.6.1.6.2|2|28 +1.3.6.1.4.1.2620.1.6.7.6.1.6.3|2|3 +1.3.6.1.4.1.2620.1.6.7.6.1.6.4|2|12 +1.3.6.1.4.1.2620.1.6.7.6.1.6.5|2|19 +1.3.6.1.4.1.2620.1.6.7.6.1.6.6|2|16 +1.3.6.1.4.1.2620.1.6.7.6.1.6.7|2|31 +1.3.6.1.4.1.2620.1.6.7.6.1.6.8|2|23 +1.3.6.1.4.1.2620.1.6.7.6.1.6.9|2|1 +1.3.6.1.4.1.2620.1.6.7.6.1.7.0|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.1|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.2|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.3|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.4|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.5|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.6|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.7|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.8|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.9|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.8.0|2|18 +1.3.6.1.4.1.2620.1.6.7.6.1.8.1|2|14 +1.3.6.1.4.1.2620.1.6.7.6.1.8.2|2|8 +1.3.6.1.4.1.2620.1.6.7.6.1.8.3|2|6 +1.3.6.1.4.1.2620.1.6.7.6.1.8.4|2|24 +1.3.6.1.4.1.2620.1.6.7.6.1.8.5|2|18 +1.3.6.1.4.1.2620.1.6.7.6.1.8.6|2|23 +1.3.6.1.4.1.2620.1.6.7.6.1.8.7|2|15 +1.3.6.1.4.1.2620.1.6.7.6.1.8.8|2|13 +1.3.6.1.4.1.2620.1.6.7.6.1.8.9|2|5 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.882|66|882 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.8345|66|8345 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.14773|66|14773 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.42475|66|42475 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.42661|66|42661 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.43784|66|43784 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.45792|66|45792 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.56965|66|56965 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.59227|66|59227 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.62700|66|62700 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.882|2|24 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.8345|2|30 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.14773|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.42475|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.42661|2|27 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.43784|2|2 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.45792|2|10 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.56965|2|3 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.59227|2|2 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.62700|2|8 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.882|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.8345|2|0 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.14773|2|11 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.42475|2|4 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.42661|2|13 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.43784|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.45792|2|26 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.56965|2|5 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.59227|2|19 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.62700|2|22 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.882|2|23 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.8345|2|23 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.14773|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.42475|2|6 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.42661|2|5 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.43784|2|12 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.45792|2|31 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.56965|2|7 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.59227|2|21 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.62700|2|2 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.882|2|16 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.8345|2|2 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.14773|2|7 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.42475|2|19 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.42661|2|12 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.43784|2|10 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.45792|2|6 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.56965|2|14 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.59227|2|18 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.62700|2|10 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.882|2|11 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.8345|2|4 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.14773|2|6 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.42475|2|8 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.42661|2|12 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.43784|2|27 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.45792|2|6 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.56965|2|0 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.59227|2|18 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.62700|2|30 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.882|2|8 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.8345|2|0 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.14773|2|24 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.42475|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.42661|2|11 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.43784|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.45792|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.56965|2|9 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.59227|2|25 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.62700|2|3 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.882|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.8345|2|9 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.14773|2|26 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.42475|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.42661|2|16 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.43784|2|27 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.45792|2|20 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.56965|2|30 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.59227|2|19 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.62700|2|28 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.23494|66|23494 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.25142|66|25142 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.30106|66|30106 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.34744|66|34744 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.34861|66|34861 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.45301|66|45301 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.50802|66|50802 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.54447|66|54447 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.54672|66|54672 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.54751|66|54751 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.23494|2|28 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.25142|2|17 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.30106|2|1 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.34744|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.34861|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.45301|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.50802|2|30 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.54447|2|6 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.54672|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.54751|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.23494|2|17 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.25142|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.30106|2|31 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.34744|2|29 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.34861|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.45301|2|30 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.50802|2|25 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.54447|2|23 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.54672|2|19 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.54751|2|0 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.23494|2|6 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.25142|2|15 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.30106|2|1 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.34744|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.34861|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.45301|2|29 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.50802|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.54447|2|6 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.54672|2|18 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.54751|2|18 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.23494|4x|64726976696e67207468656972204a6164656420746865697220717561696e746c79206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.25142|4|their +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.30106|4x|4a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.34744|4x|4a61646564207a6f6d6269657320666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.34861|4x|7468656972204a6164656420627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.45301|4x|4a61646564204a6164656420627574206f78656e206f78656e +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.50802|4x|666f7277617264204a61646564206163746564206b65707420717561696e746c7920666f72776172642062757420627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.54447|4x|6163746564206b657074206163746564206275742064726976696e67206b657074206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.54672|4x|6275742064726976696e6720627574207a6f6d6269657320746865697220666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.54751|4x|6f78656e20627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.23494|4x|4a6164656420717561696e746c79206275742064726976696e67207a6f6d62696573207a6f6d6269657320746865697220627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.25142|4x|746865697220717561696e746c7920666f72776172642064726976696e67206f78656e206f78656e +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.30106|4x|74686569722074686569722062757420666f7277617264206b657074204a61646564207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.34744|4x|4a6164656420666f7277617264206b657074206f78656e204a6164656420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.34861|4|acted +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.45301|4x|7468656972206b6570742064726976696e6720627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.50802|4x|7a6f6d626965732064726976696e6720627574206b657074 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.54447|4x|7468656972206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.54672|4x|717561696e746c79206b65707420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.54751|4x|74686569722064726976696e6720616374656420627574204a616465642064726976696e6720627574206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.23494|4x|7a6f6d62696573207a6f6d62696573206b657074206b65707420717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.25142|4x|7a6f6d6269657320746865697220627574206f78656e20666f7277617264206b657074206f78656e +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.30106|4x|6b6570742062757420616374656420717561696e746c7920717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.34744|4x|666f727761726420717561696e746c79206f78656e206f78656e20627574206275742064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.34861|4x|6b65707420717561696e746c79206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.45301|4x|7a6f6d6269657320666f7277617264206b657074206b657074 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.50802|4x|627574207a6f6d62696573206b657074207468656972206b65707420627574204a6164656420627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.54447|4|oxen +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.54672|4x|717561696e746c79204a6164656420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.54751|4x|7468656972206f78656e +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.23494|2|22 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.25142|2|23 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.30106|2|1 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.34744|2|31 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.34861|2|12 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.45301|2|27 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.50802|2|5 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.54447|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.54672|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.54751|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.23494|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.25142|2|11 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.30106|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.34744|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.34861|2|3 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.45301|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.50802|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.54447|2|0 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.54672|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.54751|2|31 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.23494|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.25142|2|30 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.30106|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.34744|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.34861|2|3 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.45301|2|5 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.50802|2|6 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.54447|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.54672|2|13 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.54751|2|20 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.23494|2|17 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.25142|2|13 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.30106|2|0 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.34744|2|7 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.34861|2|28 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.45301|2|18 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.50802|2|21 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.54447|2|19 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.54672|2|18 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.54751|2|21 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.23494|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.25142|2|21 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.30106|2|0 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.34744|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.34861|2|10 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.45301|2|21 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.50802|2|31 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.54447|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.54672|2|28 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.54751|2|18 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.0|66|0 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.1|66|1 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.2|66|2 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.3|66|3 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.4|66|4 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.5|66|5 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.6|66|6 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.7|66|7 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.8|66|8 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.9|66|9 +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.0|4|first +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.1|4|second +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.2|4|third +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.3|4|fourth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.4|4|fifth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.5|4|sixth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.6|4|seventh +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.7|4|eighth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.8|4|ninth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.9|4|tenth +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.0|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.1|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.2|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.3|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.4|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.5|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.6|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.7|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.8|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.9|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.0|4x|666f7277617264207a6f6d62696573207468656972206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.1|4x|666f727761726420627574206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.2|4x|6b657074207468656972206b657074206f78656e207a6f6d62696573204a6164656420616374656420627574206f78656e +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.3|4x|6163746564206b65707420717561696e746c79206275742064726976696e6720717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.4|4x|7a6f6d6269657320717561696e746c79206b657074204a61646564206f78656e2074686569722064726976696e672064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.5|4|but +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.6|4x|666f7277617264207468656972 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.7|4x|62757420746865697220746865697220717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.8|4x|74686569722061637465642062757420717561696e746c79206f78656e20627574 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.9|4x|61637465642064726976696e6720717561696e746c792064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.0|4x|4a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.1|4x|746865697220666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.2|4x|6f78656e204a61646564207468656972206163746564 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.3|4x|6b65707420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.4|4x|746865697220666f7277617264206b65707420746865697220746865697220627574 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.5|4x|64726976696e672062757420666f7277617264206b657074207a6f6d62696573206b6570742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.6|4x|666f727761726420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.7|4x|6163746564206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.8|4x|6b657074204a61646564207468656972207a6f6d62696573206b657074204a61646564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.9|4x|6b6570742064726976696e67206f78656e206275742062757420627574206b657074204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.0|2|9 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.1|2|31 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.2|2|22 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.3|2|25 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.4|2|20 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.5|2|9 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.6|2|11 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.7|2|18 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.8|2|30 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.9|2|6 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.0|66|0 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.1|66|1 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.2|66|2 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.3|66|3 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.4|66|4 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.5|66|5 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.6|66|6 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.7|66|7 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.8|66|8 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.9|66|9 +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.0|4|first +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.1|4|second +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.2|4|third +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.3|4|fourth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.4|4|fifth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.5|4|sixth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.6|4|seventh +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.7|4|eighth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.8|4|ninth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.9|4|tenth +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.0|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.1|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.2|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.3|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.4|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.5|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.6|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.7|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.8|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.9|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.0|4x|6163746564206f78656e20627574206f78656e206b657074207468656972204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.1|4x|616374656420627574 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.2|4x|666f7277617264206163746564206f78656e +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.3|4|kept +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.4|4|Jaded +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.5|4x|627574206b65707420666f72776172642064726976696e672064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.6|4x|627574206f78656e206163746564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.7|4x|64726976696e67206f78656e +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.8|4x|746865697220717561696e746c79206b6570742064726976696e67206163746564207a6f6d62696573206b657074207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.9|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.0|4x|6163746564207a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.1|4|their +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.2|4x|7468656972207a6f6d62696573207a6f6d626965732064726976696e67206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.3|4x|7468656972207468656972207468656972206b657074 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.4|4x|627574206163746564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.5|4x|4a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.6|4x|616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.7|4x|64726976696e67204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.8|4x|6b657074207468656972206163746564207468656972207a6f6d62696573207a6f6d62696573206b6570742061637465642064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.9|4|but +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.0|2|27 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.1|2|17 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.2|2|6 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.3|2|4 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.4|2|29 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.5|2|1 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.6|2|1 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.7|2|7 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.8|2|28 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.9|2|1 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.6140|66|6140 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.11728|66|11728 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.22397|66|22397 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.22594|66|22594 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.44543|66|44543 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.45508|66|45508 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.47879|66|47879 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.53788|66|53788 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.60442|66|60442 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.65407|66|65407 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.6140|4x|6f78656e20627574206b657074 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.11728|4|oxen +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.22397|4x|7a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.22594|4x|4a6164656420627574206163746564206b657074206b657074207a6f6d62696573204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.44543|4x|64726976696e67204a6164656420666f7277617264204a6164656420627574206f78656e206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.45508|4x|4a61646564206b65707420717561696e746c79206163746564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.47879|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.53788|4x|7a6f6d6269657320627574207468656972204a61646564207a6f6d62696573204a6164656420616374656420627574 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.60442|4x|7468656972206b657074206b657074204a61646564207a6f6d62696573206b65707420627574206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.65407|4x|6275742064726976696e67206163746564206163746564204a61646564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.6140|4x|627574206b657074206b65707420746865697220746865697220717561696e746c7920717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.11728|4x|6b6570742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.22397|4x|64726976696e67204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.22594|4x|717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.44543|4x|6163746564207a6f6d62696573206b657074206b657074207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.45508|4x|74686569722064726976696e672064726976696e67206b657074 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.47879|4x|64726976696e67206163746564207a6f6d6269657320717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.53788|4x|666f7277617264204a61646564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.60442|4x|717561696e746c79206f78656e20717561696e746c79204a61646564206163746564204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.65407|4x|64726976696e67206b65707420746865697220627574207a6f6d62696573204a61646564206f78656e20666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.6140|4|acted +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.11728|4x|64726976696e67207a6f6d62696573206b657074206f78656e206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.22397|4x|6f78656e20717561696e746c79206275742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.22594|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.44543|4x|666f7277617264204a6164656420627574204a61646564204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.45508|4x|64726976696e67206b657074207a6f6d626965732061637465642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.47879|4x|64726976696e672064726976696e67204a6164656420616374656420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.53788|4x|6b6570742064726976696e67206b65707420717561696e746c79204a6164656420627574206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.60442|4x|64726976696e672064726976696e67207a6f6d6269657320746865697220717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.65407|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.6140|4x|746865697220666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.11728|4x|6f78656e2064726976696e6720666f7277617264206b657074206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.22397|4|their +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.22594|4x|666f7277617264206f78656e206b6570742064726976696e67206f78656e204a616465642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.44543|4x|6f78656e20627574206f78656e +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.45508|4x|666f7277617264207a6f6d62696573207a6f6d62696573207468656972206b657074 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.47879|4x|7a6f6d62696573206163746564207a6f6d62696573204a6164656420666f72776172642064726976696e67207a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.53788|4|Jaded +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.60442|4x|717561696e746c79206f78656e20666f72776172642064726976696e67206b657074207a6f6d62696573206163746564206f78656e20627574 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.65407|4x|6163746564207a6f6d626965732064726976696e672061637465642074686569722062757420627574206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.6140|2|9 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.11728|2|31 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.22397|2|13 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.22594|2|4 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.44543|2|20 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.45508|2|11 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.47879|2|16 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.53788|2|10 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.60442|2|16 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.65407|2|8 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.10601|66|10601 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.10959|66|10959 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.12120|66|12120 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.17422|66|17422 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.18052|66|18052 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.22579|66|22579 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.42492|66|42492 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.49819|66|49819 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.52641|66|52641 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.53889|66|53889 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.10601|4|forward +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.10959|4|but +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.12120|4|acted +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.17422|4x|7a6f6d6269657320627574207a6f6d6269657320627574206163746564207468656972 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.18052|4x|4a6164656420666f727761726420666f7277617264206b6570742062757420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.22579|4x|6f78656e206b6570742064726976696e67206f78656e207468656972 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.42492|4x|6f78656e20616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.49819|4x|6163746564206f78656e2062757420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.52641|4x|4a6164656420717561696e746c79206b657074204a61646564206163746564206f78656e20616374656420627574 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.53889|4x|627574207a6f6d6269657320717561696e746c79206f78656e20717561696e746c7920717561696e746c79207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.6.8.0|2|2 +1.3.6.1.4.1.2620.1.6.9.2.0|64x|eba02a17 +1.3.6.1.4.1.2620.1.6.9.3.0|64x|7507646f +1.3.6.1.4.1.2620.1.6.9.4.0|64x|e6a80b6a +1.3.6.1.4.1.2620.1.6.9.5.0|2|16 +1.3.6.1.4.1.2620.1.6.9.6.0|4x|6f78656e207a6f6d62696573204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.6.9.10.0|2|2 +1.3.6.1.4.1.2620.1.6.10.0|2|2 +1.3.6.1.4.1.2620.1.6.11.1.0|4|quaintly +1.3.6.1.4.1.2620.1.6.12.0|2|5 +1.3.6.1.4.1.2620.1.6.13.0|4x|7a6f6d62696573206f78656e20717561696e746c7920627574204a61646564206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.15.0|2|2 +1.3.6.1.4.1.2620.1.6.16.3.0|4|1711BA4008 +1.3.6.1.4.1.2620.1.6.16.7.0|4|Check Point 3200 +1.3.6.1.4.1.2620.1.6.16.9.0|4|CheckPoint +1.3.6.1.4.1.2620.1.6.16.10.0|4|3000 Appliance +1.3.6.1.4.1.2620.1.6.50.1.1.1.566|66|566 +1.3.6.1.4.1.2620.1.6.50.1.1.1.3111|66|3111 +1.3.6.1.4.1.2620.1.6.50.1.1.1.6288|66|6288 +1.3.6.1.4.1.2620.1.6.50.1.1.1.6428|66|6428 +1.3.6.1.4.1.2620.1.6.50.1.1.1.17910|66|17910 +1.3.6.1.4.1.2620.1.6.50.1.1.1.28229|66|28229 +1.3.6.1.4.1.2620.1.6.50.1.1.1.33908|66|33908 +1.3.6.1.4.1.2620.1.6.50.1.1.1.34796|66|34796 +1.3.6.1.4.1.2620.1.6.50.1.1.1.52824|66|52824 +1.3.6.1.4.1.2620.1.6.50.1.1.1.63804|66|63804 +1.3.6.1.4.1.2620.1.6.50.1.1.2.566|2|13 +1.3.6.1.4.1.2620.1.6.50.1.1.2.3111|2|20 +1.3.6.1.4.1.2620.1.6.50.1.1.2.6288|2|15 +1.3.6.1.4.1.2620.1.6.50.1.1.2.6428|2|28 +1.3.6.1.4.1.2620.1.6.50.1.1.2.17910|2|12 +1.3.6.1.4.1.2620.1.6.50.1.1.2.28229|2|24 +1.3.6.1.4.1.2620.1.6.50.1.1.2.33908|2|12 +1.3.6.1.4.1.2620.1.6.50.1.1.2.34796|2|5 +1.3.6.1.4.1.2620.1.6.50.1.1.2.52824|2|22 +1.3.6.1.4.1.2620.1.6.50.1.1.2.63804|2|6 +1.3.6.1.4.1.2620.1.6.50.1.1.3.566|4x|4a6164656420666f7277617264204a61646564206f78656e20746865697220666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.3.3111|4x|6163746564206f78656e20717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.3.6288|4x|64726976696e672061637465642061637465642064726976696e67206f78656e20666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.6.50.1.1.3.6428|4x|616374656420717561696e746c792064726976696e67207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.2620.1.6.50.1.1.3.17910|4x|4a61646564204a61646564206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.3.28229|4x|7a6f6d62696573206b657074206b657074206275742064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.3.33908|4x|6b657074206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.50.1.1.3.34796|4x|64726976696e6720627574206f78656e2064726976696e6720666f7277617264206f78656e206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.3.52824|4x|7a6f6d62696573206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.6.50.1.1.3.63804|4x|616374656420746865697220717561696e746c792064726976696e6720717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.6.50.1.1.4.566|64x|beb85226 +1.3.6.1.4.1.2620.1.6.50.1.1.4.3111|64x|ecea0df3 +1.3.6.1.4.1.2620.1.6.50.1.1.4.6288|64x|1f6a2bf9 +1.3.6.1.4.1.2620.1.6.50.1.1.4.6428|64x|332978a4 +1.3.6.1.4.1.2620.1.6.50.1.1.4.17910|64x|9571b866 +1.3.6.1.4.1.2620.1.6.50.1.1.4.28229|64x|2088a003 +1.3.6.1.4.1.2620.1.6.50.1.1.4.33908|64x|4265a81f +1.3.6.1.4.1.2620.1.6.50.1.1.4.34796|64x|7bfb79b5 +1.3.6.1.4.1.2620.1.6.50.1.1.4.52824|64x|7e06453b +1.3.6.1.4.1.2620.1.6.50.1.1.4.63804|64x|7edf34de +1.3.6.1.4.1.2620.1.6.50.1.1.5.566|64x|505d0e07 +1.3.6.1.4.1.2620.1.6.50.1.1.5.3111|64x|f744d059 +1.3.6.1.4.1.2620.1.6.50.1.1.5.6288|64x|43bb17ad +1.3.6.1.4.1.2620.1.6.50.1.1.5.6428|64x|d78aa43c +1.3.6.1.4.1.2620.1.6.50.1.1.5.17910|64x|0b66bfd8 +1.3.6.1.4.1.2620.1.6.50.1.1.5.28229|64x|4dde8483 +1.3.6.1.4.1.2620.1.6.50.1.1.5.33908|64x|2a3fd155 +1.3.6.1.4.1.2620.1.6.50.1.1.5.34796|64x|6d951b27 +1.3.6.1.4.1.2620.1.6.50.1.1.5.52824|64x|96ea84dc +1.3.6.1.4.1.2620.1.6.50.1.1.5.63804|64x|bffa5e23 +1.3.6.1.4.1.2620.1.6.50.1.1.6.566|2|8 +1.3.6.1.4.1.2620.1.6.50.1.1.6.3111|2|4 +1.3.6.1.4.1.2620.1.6.50.1.1.6.6288|2|4 +1.3.6.1.4.1.2620.1.6.50.1.1.6.6428|2|23 +1.3.6.1.4.1.2620.1.6.50.1.1.6.17910|2|9 +1.3.6.1.4.1.2620.1.6.50.1.1.6.28229|2|31 +1.3.6.1.4.1.2620.1.6.50.1.1.6.33908|2|28 +1.3.6.1.4.1.2620.1.6.50.1.1.6.34796|2|20 +1.3.6.1.4.1.2620.1.6.50.1.1.6.52824|2|18 +1.3.6.1.4.1.2620.1.6.50.1.1.6.63804|2|17 +1.3.6.1.4.1.2620.1.6.50.1.1.7.566|2|10 +1.3.6.1.4.1.2620.1.6.50.1.1.7.3111|2|29 +1.3.6.1.4.1.2620.1.6.50.1.1.7.6288|2|18 +1.3.6.1.4.1.2620.1.6.50.1.1.7.6428|2|14 +1.3.6.1.4.1.2620.1.6.50.1.1.7.17910|2|14 +1.3.6.1.4.1.2620.1.6.50.1.1.7.28229|2|21 +1.3.6.1.4.1.2620.1.6.50.1.1.7.33908|2|5 +1.3.6.1.4.1.2620.1.6.50.1.1.7.34796|2|28 +1.3.6.1.4.1.2620.1.6.50.1.1.7.52824|2|16 +1.3.6.1.4.1.2620.1.6.50.1.1.7.63804|2|19 +1.3.6.1.4.1.2620.1.6.50.1.1.8.566|4x|4a61646564206f78656e20746865697220717561696e746c792064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.50.1.1.8.3111|4x|64726976696e67206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.8.6288|4x|6b657074204a6164656420717561696e746c79206b65707420746865697220666f7277617264 +1.3.6.1.4.1.2620.1.6.50.1.1.8.6428|4x|666f7277617264207468656972206b657074206b6570742064726976696e67206163746564 +1.3.6.1.4.1.2620.1.6.50.1.1.8.17910|4x|4a61646564204a61646564204a6164656420717561696e746c79206f78656e204a6164656420666f727761726420627574 +1.3.6.1.4.1.2620.1.6.50.1.1.8.28229|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.6.50.1.1.8.33908|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.6.50.1.1.8.34796|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.8.52824|4x|717561696e746c79204a61646564206f78656e206b657074206b657074207468656972 +1.3.6.1.4.1.2620.1.6.50.1.1.8.63804|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.6.50.1.1.9.566|4x|717561696e746c792064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.6.50.1.1.9.3111|4x|7a6f6d6269657320666f727761726420616374656420717561696e746c79207a6f6d6269657320717561696e746c792064726976696e67206b657074 +1.3.6.1.4.1.2620.1.6.50.1.1.9.6288|4x|6b657074206b657074204a616465642062757420666f727761726420717561696e746c79204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.50.1.1.9.6428|4x|717561696e746c79206163746564206163746564206f78656e2061637465642074686569722064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.6.50.1.1.9.17910|4x|627574207468656972207468656972206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.9.28229|4x|61637465642061637465642074686569722064726976696e67204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.6.50.1.1.9.33908|4x|64726976696e672064726976696e6720746865697220616374656420627574207a6f6d62696573207468656972206f78656e206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.9.34796|4|kept +1.3.6.1.4.1.2620.1.6.50.1.1.9.52824|4x|4a61646564206163746564206b65707420627574206b657074206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.50.1.1.9.63804|4x|666f7277617264206f78656e207a6f6d62696573206b657074207468656972207468656972204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.10.566|2|17 +1.3.6.1.4.1.2620.1.6.50.1.1.10.3111|2|14 +1.3.6.1.4.1.2620.1.6.50.1.1.10.6288|2|4 +1.3.6.1.4.1.2620.1.6.50.1.1.10.6428|2|8 +1.3.6.1.4.1.2620.1.6.50.1.1.10.17910|2|16 +1.3.6.1.4.1.2620.1.6.50.1.1.10.28229|2|22 +1.3.6.1.4.1.2620.1.6.50.1.1.10.33908|2|15 +1.3.6.1.4.1.2620.1.6.50.1.1.10.34796|2|13 +1.3.6.1.4.1.2620.1.6.50.1.1.10.52824|2|28 +1.3.6.1.4.1.2620.1.6.50.1.1.10.63804|2|12 +1.3.6.1.4.1.2620.1.6.51.1.1.6958|66|6958 +1.3.6.1.4.1.2620.1.6.51.1.1.8421|66|8421 +1.3.6.1.4.1.2620.1.6.51.1.1.18192|66|18192 +1.3.6.1.4.1.2620.1.6.51.1.1.21212|66|21212 +1.3.6.1.4.1.2620.1.6.51.1.1.25554|66|25554 +1.3.6.1.4.1.2620.1.6.51.1.1.56993|66|56993 +1.3.6.1.4.1.2620.1.6.51.1.1.60242|66|60242 +1.3.6.1.4.1.2620.1.6.51.1.1.60407|66|60407 +1.3.6.1.4.1.2620.1.6.51.1.1.64345|66|64345 +1.3.6.1.4.1.2620.1.6.51.1.1.64736|66|64736 +1.3.6.1.4.1.2620.1.6.51.1.2.6958|64x|5c4a33a8 +1.3.6.1.4.1.2620.1.6.51.1.2.8421|64x|af51911b +1.3.6.1.4.1.2620.1.6.51.1.2.18192|64x|4b3a3aa6 +1.3.6.1.4.1.2620.1.6.51.1.2.21212|64x|6715a987 +1.3.6.1.4.1.2620.1.6.51.1.2.25554|64x|ad84330f +1.3.6.1.4.1.2620.1.6.51.1.2.56993|64x|24bbe41b +1.3.6.1.4.1.2620.1.6.51.1.2.60242|64x|e951ef3b +1.3.6.1.4.1.2620.1.6.51.1.2.60407|64x|10067b32 +1.3.6.1.4.1.2620.1.6.51.1.2.64345|64x|73b6c619 +1.3.6.1.4.1.2620.1.6.51.1.2.64736|64x|20f20d94 +1.3.6.1.4.1.2620.1.6.51.1.3.6958|64x|d458ee8c +1.3.6.1.4.1.2620.1.6.51.1.3.8421|64x|535f0254 +1.3.6.1.4.1.2620.1.6.51.1.3.18192|64x|947b6f58 +1.3.6.1.4.1.2620.1.6.51.1.3.21212|64x|6fd60163 +1.3.6.1.4.1.2620.1.6.51.1.3.25554|64x|2c853379 +1.3.6.1.4.1.2620.1.6.51.1.3.56993|64x|506a582b +1.3.6.1.4.1.2620.1.6.51.1.3.60242|64x|658de17e +1.3.6.1.4.1.2620.1.6.51.1.3.60407|64x|b27c7a79 +1.3.6.1.4.1.2620.1.6.51.1.3.64345|64x|9eb81eab +1.3.6.1.4.1.2620.1.6.51.1.3.64736|64x|13e8a7df +1.3.6.1.4.1.2620.1.6.51.1.4.6958|64x|e2e130a0 +1.3.6.1.4.1.2620.1.6.51.1.4.8421|64x|f108d561 +1.3.6.1.4.1.2620.1.6.51.1.4.18192|64x|9527983c +1.3.6.1.4.1.2620.1.6.51.1.4.21212|64x|aa840c0a +1.3.6.1.4.1.2620.1.6.51.1.4.25554|64x|c94e5d9f +1.3.6.1.4.1.2620.1.6.51.1.4.56993|64x|0f2b56bd +1.3.6.1.4.1.2620.1.6.51.1.4.60242|64x|75073968 +1.3.6.1.4.1.2620.1.6.51.1.4.60407|64x|41549f77 +1.3.6.1.4.1.2620.1.6.51.1.4.64345|64x|dcefc97c +1.3.6.1.4.1.2620.1.6.51.1.4.64736|64x|0d6d10ae +1.3.6.1.4.1.2620.1.6.51.1.5.6958|4x|717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.8421|4x|6f78656e20627574204a6164656420627574206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.18192|4x|6b657074206b6570742064726976696e67207468656972204a61646564206b657074 +1.3.6.1.4.1.2620.1.6.51.1.5.21212|4x|6f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.25554|4x|717561696e746c79206f78656e204a616465642062757420627574207468656972206b65707420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.56993|4x|666f72776172642062757420616374656420746865697220746865697220666f727761726420666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.6.51.1.5.60242|4x|7468656972206163746564206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.60407|4x|717561696e746c792074686569722064726976696e67 +1.3.6.1.4.1.2620.1.6.51.1.5.64345|4x|717561696e746c79207468656972204a6164656420627574 +1.3.6.1.4.1.2620.1.6.51.1.5.64736|4|forward +1.3.6.1.4.1.2620.1.6.51.1.6.6958|2|25 +1.3.6.1.4.1.2620.1.6.51.1.6.8421|2|13 +1.3.6.1.4.1.2620.1.6.51.1.6.18192|2|19 +1.3.6.1.4.1.2620.1.6.51.1.6.21212|2|25 +1.3.6.1.4.1.2620.1.6.51.1.6.25554|2|8 +1.3.6.1.4.1.2620.1.6.51.1.6.56993|2|29 +1.3.6.1.4.1.2620.1.6.51.1.6.60242|2|2 +1.3.6.1.4.1.2620.1.6.51.1.6.60407|2|0 +1.3.6.1.4.1.2620.1.6.51.1.6.64345|2|22 +1.3.6.1.4.1.2620.1.6.51.1.6.64736|2|1 +1.3.6.1.4.1.2620.1.6.101.0|2|17 +1.3.6.1.4.1.2620.1.6.102.0|4x|6b657074206b657074206f78656e20717561696e746c792062757420666f7277617264206163746564 +1.3.6.1.4.1.2620.1.6.103.0|4x|6b6570742062757420717561696e746c79 +1.3.6.1.4.1.2620.1.6.999.0|2|20 +1.3.6.1.4.1.2620.1.7.1.0|4x|666f72776172642064726976696e6720666f7277617264206163746564204a616465642064726976696e67207a6f6d6269657320666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.7.2.0|2|13 +1.3.6.1.4.1.2620.1.7.3.0|2|6 +1.3.6.1.4.1.2620.1.7.4.0|2|29 +1.3.6.1.4.1.2620.1.7.5.0|4|kept +1.3.6.1.4.1.2620.1.7.6.0|2|9 +1.3.6.1.4.1.2620.1.7.7.1.1.4793|66|4793 +1.3.6.1.4.1.2620.1.7.7.1.1.16018|66|16018 +1.3.6.1.4.1.2620.1.7.7.1.1.17937|66|17937 +1.3.6.1.4.1.2620.1.7.7.1.1.22118|66|22118 +1.3.6.1.4.1.2620.1.7.7.1.1.29069|66|29069 +1.3.6.1.4.1.2620.1.7.7.1.1.32415|66|32415 +1.3.6.1.4.1.2620.1.7.7.1.1.32468|66|32468 +1.3.6.1.4.1.2620.1.7.7.1.1.40369|66|40369 +1.3.6.1.4.1.2620.1.7.7.1.1.44867|66|44867 +1.3.6.1.4.1.2620.1.7.7.1.1.54964|66|54964 +1.3.6.1.4.1.2620.1.7.7.1.2.4793|4x|746865697220616374656420666f7277617264206163746564206f78656e20666f7277617264206163746564 +1.3.6.1.4.1.2620.1.7.7.1.2.16018|4x|4a616465642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.7.7.1.2.17937|4x|7a6f6d62696573204a61646564207a6f6d626965732074686569722062757420627574207468656972 +1.3.6.1.4.1.2620.1.7.7.1.2.22118|4x|6f78656e20627574206f78656e20746865697220717561696e746c79206f78656e2064726976696e67207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.7.7.1.2.29069|4x|6163746564206163746564204a61646564204a6164656420666f7277617264207a6f6d62696573207468656972206163746564 +1.3.6.1.4.1.2620.1.7.7.1.2.32415|4x|6b65707420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.7.7.1.2.32468|4x|61637465642064726976696e672064726976696e6720717561696e746c79207468656972204a616465642061637465642064726976696e67206b657074 +1.3.6.1.4.1.2620.1.7.7.1.2.40369|4x|717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.7.7.1.2.44867|4x|717561696e746c792074686569722064726976696e67206163746564206163746564204a61646564 +1.3.6.1.4.1.2620.1.7.7.1.2.54964|4x|666f727761726420666f7277617264207a6f6d6269657320666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.7.7.1.3.4793|4x|746865697220717561696e746c79206b657074206163746564206b65707420616374656420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.7.7.1.3.16018|4x|7468656972206f78656e204a616465642064726976696e67206f78656e204a6164656420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.7.7.1.3.17937|4x|717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.7.7.1.3.22118|4x|666f727761726420627574206b65707420717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.7.7.1.3.29069|4x|746865697220666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.7.7.1.3.32415|4x|4a616465642062757420627574206f78656e2061637465642061637465642061637465642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.7.7.1.3.32468|4x|7468656972204a6164656420627574206b65707420616374656420627574 +1.3.6.1.4.1.2620.1.7.7.1.3.40369|4|zombies +1.3.6.1.4.1.2620.1.7.7.1.3.44867|4x|6f78656e204a61646564206f78656e207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2620.1.7.7.1.3.54964|4x|4a61646564206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.7.7.1.4.4793|4|oxen +1.3.6.1.4.1.2620.1.7.7.1.4.16018|4x|7a6f6d62696573206b6570742064726976696e6720627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.7.7.1.4.17937|4x|717561696e746c7920627574206163746564204a61646564207468656972206163746564207a6f6d626965732062757420666f7277617264 +1.3.6.1.4.1.2620.1.7.7.1.4.22118|4x|6b65707420666f72776172642064726976696e6720717561696e746c79207a6f6d62696573206b65707420666f72776172642062757420627574 +1.3.6.1.4.1.2620.1.7.7.1.4.29069|4x|4a6164656420627574206b657074206f78656e206b657074204a61646564206163746564204a61646564204a61646564 +1.3.6.1.4.1.2620.1.7.7.1.4.32415|4|driving +1.3.6.1.4.1.2620.1.7.7.1.4.32468|4x|64726976696e67206b657074204a616465642064726976696e6720717561696e746c7920717561696e746c79207a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.2620.1.7.7.1.4.40369|4x|717561696e746c79207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.7.7.1.4.44867|4x|4a61646564207468656972 +1.3.6.1.4.1.2620.1.7.7.1.4.54964|4x|6b657074206275742064726976696e67 +1.3.6.1.4.1.2620.1.7.7.1.5.4793|4x|627574207a6f6d6269657320717561696e746c7920627574206b65707420717561696e746c7920666f727761726420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.7.7.1.5.16018|4x|6163746564207468656972 +1.3.6.1.4.1.2620.1.7.7.1.5.17937|4x|6f78656e20717561696e746c79206163746564206163746564207468656972204a61646564206163746564206f78656e +1.3.6.1.4.1.2620.1.7.7.1.5.22118|4x|64726976696e672064726976696e67206163746564 +1.3.6.1.4.1.2620.1.7.7.1.5.29069|4x|666f72776172642064726976696e6720616374656420616374656420717561696e746c79206b657074206b657074206b657074 +1.3.6.1.4.1.2620.1.7.7.1.5.32415|4x|717561696e746c79207468656972206b657074207468656972 +1.3.6.1.4.1.2620.1.7.7.1.5.32468|4x|4a6164656420746865697220627574 +1.3.6.1.4.1.2620.1.7.7.1.5.40369|4x|7a6f6d62696573206b657074206b6570742064726976696e67206b657074 +1.3.6.1.4.1.2620.1.7.7.1.5.44867|4x|4a6164656420666f727761726420627574 +1.3.6.1.4.1.2620.1.7.7.1.5.54964|4x|666f727761726420746865697220666f7277617264 +1.3.6.1.4.1.2620.1.7.101.0|2|21 +1.3.6.1.4.1.2620.1.7.102.0|4x|4a6164656420616374656420616374656420746865697220746865697220627574 +1.3.6.1.4.1.2620.1.7.103.0|4|Jaded +1.3.6.1.4.1.2620.1.8.1.0|4x|717561696e746c79204a616465642064726976696e67206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.8.2.0|2|3 +1.3.6.1.4.1.2620.1.8.3.0|2|29 +1.3.6.1.4.1.2620.1.8.4.0|4x|6163746564207a6f6d6269657320746865697220717561696e746c7920717561696e746c79206b657074207a6f6d626965732064726976696e67206b657074 +1.3.6.1.4.1.2620.1.8.5.0|4x|4a61646564207468656972206f78656e206f78656e2064726976696e6720616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.8.6.1.0|2|30 +1.3.6.1.4.1.2620.1.8.6.2.0|2|12 +1.3.6.1.4.1.2620.1.8.7.1.0|4x|64726976696e67206163746564 +1.3.6.1.4.1.2620.1.8.7.2.0|4x|7a6f6d6269657320666f7277617264206f78656e206f78656e206b65707420717561696e746c7920627574207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.8.8.1.0|4x|64726976696e67207a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.8.8.2.0|2|18 +1.3.6.1.4.1.2620.1.8.8.3.0|2|22 +1.3.6.1.4.1.2620.1.8.8.4.0|2|11 +1.3.6.1.4.1.2620.1.8.8.5.0|4|Jaded +1.3.6.1.4.1.2620.1.8.9.1.0|2|2 +1.3.6.1.4.1.2620.1.8.9.2.0|4x|4a61646564206b6570742064726976696e672064726976696e67204a6164656420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.8.101.0|2|6 +1.3.6.1.4.1.2620.1.8.102.0|4x|4a616465642064726976696e67206275742061637465642062757420746865697220717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.8.103.0|4|quaintly +1.3.6.1.4.1.2620.1.9.1.0|4x|64726976696e67204a6164656420616374656420717561696e746c7920717561696e746c792062757420627574207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.9.2.0|2|8 +1.3.6.1.4.1.2620.1.9.3.0|2|20 +1.3.6.1.4.1.2620.1.9.4.0|2|19 +1.3.6.1.4.1.2620.1.9.5.0|2|2 +1.3.6.1.4.1.2620.1.9.101.0|2|27 +1.3.6.1.4.1.2620.1.9.102.0|4x|64726976696e67207a6f6d6269657320666f72776172642062757420616374656420666f72776172642061637465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.9.103.0|4x|6f78656e20666f7277617264206f78656e207468656972206163746564 +1.3.6.1.4.1.2620.1.11.1.0|4x|6f78656e206f78656e207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.11.2.0|2|12 +1.3.6.1.4.1.2620.1.11.3.0|2|25 +1.3.6.1.4.1.2620.1.11.4.0|2|15 +1.3.6.1.4.1.2620.1.11.5.0|2|28 +1.3.6.1.4.1.2620.1.11.7.1.1.741|66|741 +1.3.6.1.4.1.2620.1.11.7.1.1.7546|66|7546 +1.3.6.1.4.1.2620.1.11.7.1.1.26226|66|26226 +1.3.6.1.4.1.2620.1.11.7.1.1.27222|66|27222 +1.3.6.1.4.1.2620.1.11.7.1.1.28924|66|28924 +1.3.6.1.4.1.2620.1.11.7.1.1.35044|66|35044 +1.3.6.1.4.1.2620.1.11.7.1.1.42557|66|42557 +1.3.6.1.4.1.2620.1.11.7.1.1.46132|66|46132 +1.3.6.1.4.1.2620.1.11.7.1.1.48689|66|48689 +1.3.6.1.4.1.2620.1.11.7.1.1.50734|66|50734 +1.3.6.1.4.1.2620.1.11.7.1.2.741|4x|666f72776172642064726976696e67207468656972206b657074206b6570742074686569722064726976696e67207468656972 +1.3.6.1.4.1.2620.1.11.7.1.2.7546|4x|746865697220717561696e746c792061637465642064726976696e67206b657074206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.2.26226|4x|7a6f6d6269657320717561696e746c79206b657074204a6164656420717561696e746c7920627574207468656972 +1.3.6.1.4.1.2620.1.11.7.1.2.27222|4|but +1.3.6.1.4.1.2620.1.11.7.1.2.28924|4x|4a61646564206f78656e20627574206163746564207468656972207a6f6d6269657320717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.11.7.1.2.35044|4x|666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.11.7.1.2.42557|4x|666f727761726420666f7277617264206b6570742062757420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.11.7.1.2.46132|4x|666f72776172642064726976696e67206b6570742064726976696e67206f78656e +1.3.6.1.4.1.2620.1.11.7.1.2.48689|4x|62757420627574206b657074206f78656e204a616465642062757420717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.11.7.1.2.50734|4|acted +1.3.6.1.4.1.2620.1.11.7.1.3.741|4x|6b657074206f78656e206f78656e207a6f6d62696573206163746564204a61646564207a6f6d6269657320717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.11.7.1.3.7546|4x|6f78656e207a6f6d6269657320717561696e746c7920627574 +1.3.6.1.4.1.2620.1.11.7.1.3.26226|4x|64726976696e67206163746564204a6164656420627574207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.11.7.1.3.27222|4|forward +1.3.6.1.4.1.2620.1.11.7.1.3.28924|4x|7a6f6d626965732061637465642074686569722064726976696e6720717561696e746c792064726976696e6720666f7277617264206f78656e206f78656e +1.3.6.1.4.1.2620.1.11.7.1.3.35044|4x|62757420627574206f78656e207468656972206275742064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.3.42557|4x|4a61646564207468656972207a6f6d6269657320627574206275742064726976696e6720666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.11.7.1.3.46132|4x|4a61646564207468656972206163746564 +1.3.6.1.4.1.2620.1.11.7.1.3.48689|4|Jaded +1.3.6.1.4.1.2620.1.11.7.1.3.50734|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.4.741|4x|7468656972207a6f6d6269657320666f7277617264206b65707420627574204a616465642062757420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.11.7.1.4.7546|4|Jaded +1.3.6.1.4.1.2620.1.11.7.1.4.26226|4x|6f78656e206f78656e207468656972204a61646564206163746564 +1.3.6.1.4.1.2620.1.11.7.1.4.27222|4x|4a61646564206b65707420627574207468656972204a61646564207a6f6d6269657320666f72776172642064726976696e67206f78656e +1.3.6.1.4.1.2620.1.11.7.1.4.28924|4x|6275742064726976696e672062757420746865697220717561696e746c7920717561696e746c79206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.4.35044|4x|4a61646564206f78656e207468656972206f78656e2062757420717561696e746c7920717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.11.7.1.4.42557|4x|4a616465642074686569722064726976696e672062757420666f7277617264 +1.3.6.1.4.1.2620.1.11.7.1.4.46132|4x|666f7277617264204a61646564206163746564206b657074 +1.3.6.1.4.1.2620.1.11.7.1.4.48689|4x|64726976696e672062757420717561696e746c7920717561696e746c7920627574206b657074206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.4.50734|4x|6f78656e20616374656420616374656420627574207a6f6d6269657320666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.5.741|4x|6f78656e20627574 +1.3.6.1.4.1.2620.1.11.7.1.5.7546|4x|6275742064726976696e6720717561696e746c79206f78656e207a6f6d62696573206f78656e206f78656e2064726976696e67206b657074 +1.3.6.1.4.1.2620.1.11.7.1.5.26226|4x|4a61646564206f78656e2061637465642064726976696e67206163746564206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.5.27222|4x|74686569722062757420666f7277617264207a6f6d6269657320717561696e746c79204a6164656420627574 +1.3.6.1.4.1.2620.1.11.7.1.5.28924|4x|6b65707420746865697220717561696e746c7920717561696e746c79206f78656e207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.11.7.1.5.35044|4|forward +1.3.6.1.4.1.2620.1.11.7.1.5.42557|4x|6f78656e20717561696e746c79206163746564204a61646564206f78656e +1.3.6.1.4.1.2620.1.11.7.1.5.46132|4x|64726976696e67206163746564 +1.3.6.1.4.1.2620.1.11.7.1.5.48689|4|Jaded +1.3.6.1.4.1.2620.1.11.7.1.5.50734|4x|6f78656e20627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.11.101.0|2|16 +1.3.6.1.4.1.2620.1.11.102.0|4x|7a6f6d626965732064726976696e67204a61646564206f78656e204a61646564 +1.3.6.1.4.1.2620.1.11.103.0|4x|4a61646564206f78656e20666f7277617264207a6f6d62696573207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.16.11.0|2|21 +1.3.6.1.4.1.2620.1.16.12.0|2|6 +1.3.6.1.4.1.2620.1.16.13.0|2|0 +1.3.6.1.4.1.2620.1.16.22.1.1.1.2342|66|2342 +1.3.6.1.4.1.2620.1.16.22.1.1.1.3908|66|3908 +1.3.6.1.4.1.2620.1.16.22.1.1.1.6949|66|6949 +1.3.6.1.4.1.2620.1.16.22.1.1.1.23425|66|23425 +1.3.6.1.4.1.2620.1.16.22.1.1.1.23778|66|23778 +1.3.6.1.4.1.2620.1.16.22.1.1.1.25546|66|25546 +1.3.6.1.4.1.2620.1.16.22.1.1.1.47306|66|47306 +1.3.6.1.4.1.2620.1.16.22.1.1.1.50073|66|50073 +1.3.6.1.4.1.2620.1.16.22.1.1.1.60638|66|60638 +1.3.6.1.4.1.2620.1.16.22.1.1.1.63250|66|63250 +1.3.6.1.4.1.2620.1.16.22.1.1.2.2342|66|35672 +1.3.6.1.4.1.2620.1.16.22.1.1.2.3908|66|44797 +1.3.6.1.4.1.2620.1.16.22.1.1.2.6949|66|31692 +1.3.6.1.4.1.2620.1.16.22.1.1.2.23425|66|6567 +1.3.6.1.4.1.2620.1.16.22.1.1.2.23778|66|39079 +1.3.6.1.4.1.2620.1.16.22.1.1.2.25546|66|43639 +1.3.6.1.4.1.2620.1.16.22.1.1.2.47306|66|63723 +1.3.6.1.4.1.2620.1.16.22.1.1.2.50073|66|20112 +1.3.6.1.4.1.2620.1.16.22.1.1.2.60638|66|50359 +1.3.6.1.4.1.2620.1.16.22.1.1.2.63250|66|42642 +1.3.6.1.4.1.2620.1.16.22.1.1.3.2342|4|driving +1.3.6.1.4.1.2620.1.16.22.1.1.3.3908|4x|627574206b657074206f78656e206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.3.6949|4|forward +1.3.6.1.4.1.2620.1.16.22.1.1.3.23425|4x|666f727761726420616374656420627574207a6f6d62696573206b657074207468656972204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.3.23778|4x|7a6f6d6269657320717561696e746c79207a6f6d6269657320627574206b65707420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.3.25546|4x|7468656972206163746564204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.3.47306|4x|666f7277617264206b657074206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.3.50073|4x|64726976696e67206f78656e20717561696e746c79206f78656e206b657074206f78656e204a61646564206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.3.60638|4x|4a61646564204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.3.63250|4x|6163746564204a616465642064726976696e6720666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.4.2342|4x|64726976696e672064726976696e67206f78656e204a61646564207a6f6d62696573207a6f6d62696573206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.4.3908|4x|6163746564206b65707420627574206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.4.6949|4x|6163746564204a61646564204a61646564206f78656e206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.4.23425|4x|7a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.16.22.1.1.4.23778|4x|6275742064726976696e672064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.4.25546|4x|62757420666f7277617264206b657074206163746564206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.4.47306|4|kept +1.3.6.1.4.1.2620.1.16.22.1.1.4.50073|4x|64726976696e672064726976696e67206b65707420627574 +1.3.6.1.4.1.2620.1.16.22.1.1.4.60638|4x|627574206b657074207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.4.63250|4x|627574206f78656e20616374656420666f7277617264206f78656e204a61646564206163746564206f78656e206163746564 +1.3.6.1.4.1.2620.1.16.22.1.1.5.2342|4x|717561696e746c7920717561696e746c7920616374656420627574 +1.3.6.1.4.1.2620.1.16.22.1.1.5.3908|4|Jaded +1.3.6.1.4.1.2620.1.16.22.1.1.5.6949|4x|6f78656e206163746564206163746564207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.5.23425|4x|746865697220746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.5.23778|4x|627574207468656972206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.5.25546|4x|6b65707420666f72776172642062757420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.5.47306|4x|7a6f6d626965732074686569722064726976696e67207a6f6d62696573204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.5.50073|4x|627574204a6164656420627574 +1.3.6.1.4.1.2620.1.16.22.1.1.5.60638|4x|717561696e746c79206f78656e204a61646564206f78656e206b657074206f78656e206f78656e206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.5.63250|4x|6b657074204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.6.2342|4x|64726976696e67204a61646564206b657074204a61646564206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.6.3908|4|forward +1.3.6.1.4.1.2620.1.16.22.1.1.6.6949|4x|64726976696e67204a6164656420666f7277617264206163746564206f78656e20717561696e746c79206163746564204a61646564204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.6.23425|4x|627574204a6164656420666f7277617264207468656972206b657074206163746564 +1.3.6.1.4.1.2620.1.16.22.1.1.6.23778|4x|7a6f6d62696573207468656972207a6f6d6269657320717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.6.25546|4x|4a61646564206b657074204a6164656420717561696e746c7920666f7277617264207468656972206163746564206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.6.47306|4x|666f727761726420666f727761726420666f727761726420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.6.50073|4x|666f7277617264206b657074204a61646564206b65707420717561696e746c7920666f7277617264204a6164656420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.6.60638|4x|6b6570742064726976696e67206f78656e207a6f6d62696573206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.6.63250|4x|746865697220616374656420717561696e746c7920717561696e746c79204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.7.2342|4x|6b65707420627574 +1.3.6.1.4.1.2620.1.16.22.1.1.7.3908|4x|666f7277617264204a6164656420717561696e746c7920717561696e746c7920666f72776172642064726976696e67206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.7.6949|4x|64726976696e672062757420666f727761726420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.7.23425|4x|62757420717561696e746c79204a616465642064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.16.22.1.1.7.23778|4|quaintly +1.3.6.1.4.1.2620.1.16.22.1.1.7.25546|4x|4a6164656420666f72776172642064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.16.22.1.1.7.47306|4x|6f78656e20666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.7.50073|4x|4a61646564206b657074206163746564204a61646564204a61646564206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.7.60638|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.7.63250|4x|717561696e746c7920717561696e746c7920666f7277617264206b657074204a61646564206b657074207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.8.2342|4|oxen +1.3.6.1.4.1.2620.1.16.22.1.1.8.3908|4x|7a6f6d62696573207a6f6d62696573206b65707420616374656420746865697220717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.16.22.1.1.8.6949|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.8.23425|4x|4a61646564207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.8.23778|4x|4a61646564206b657074206f78656e20746865697220627574206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.8.25546|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.8.47306|4x|666f7277617264206b657074206b6570742064726976696e672064726976696e67207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.8.50073|4x|6f78656e206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.8.60638|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.8.63250|4x|4a61646564206f78656e20666f7277617264206f78656e20717561696e746c792064726976696e67206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.9.2342|4x|61637465642064726976696e672064726976696e6720666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.9.3908|4x|4a61646564206f78656e20717561696e746c7920666f727761726420746865697220746865697220666f72776172642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.9.6949|4x|627574206275742064726976696e67207a6f6d626965732061637465642064726976696e67207a6f6d62696573207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.16.22.1.1.9.23425|4|oxen +1.3.6.1.4.1.2620.1.16.22.1.1.9.23778|4x|6b65707420717561696e746c79206163746564207468656972206b657074206b6570742064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.9.25546|4x|6f78656e2074686569722064726976696e67204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.9.47306|4x|61637465642074686569722064726976696e67206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.9.50073|4x|7a6f6d6269657320627574207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.9.60638|4x|717561696e746c7920746865697220666f7277617264207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.9.63250|4x|717561696e746c79206b65707420627574206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.10.2342|2|14 +1.3.6.1.4.1.2620.1.16.22.1.1.10.3908|2|28 +1.3.6.1.4.1.2620.1.16.22.1.1.10.6949|2|25 +1.3.6.1.4.1.2620.1.16.22.1.1.10.23425|2|9 +1.3.6.1.4.1.2620.1.16.22.1.1.10.23778|2|8 +1.3.6.1.4.1.2620.1.16.22.1.1.10.25546|2|4 +1.3.6.1.4.1.2620.1.16.22.1.1.10.47306|2|20 +1.3.6.1.4.1.2620.1.16.22.1.1.10.50073|2|28 +1.3.6.1.4.1.2620.1.16.22.1.1.10.60638|2|13 +1.3.6.1.4.1.2620.1.16.22.1.1.10.63250|2|10 +1.3.6.1.4.1.2620.1.16.22.2.1.1.531|2|12 +1.3.6.1.4.1.2620.1.16.22.2.1.1.2789|2|28 +1.3.6.1.4.1.2620.1.16.22.2.1.1.8268|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.1.9293|2|17 +1.3.6.1.4.1.2620.1.16.22.2.1.1.13850|2|21 +1.3.6.1.4.1.2620.1.16.22.2.1.1.18224|2|21 +1.3.6.1.4.1.2620.1.16.22.2.1.1.28872|2|8 +1.3.6.1.4.1.2620.1.16.22.2.1.1.36187|2|12 +1.3.6.1.4.1.2620.1.16.22.2.1.1.45779|2|27 +1.3.6.1.4.1.2620.1.16.22.2.1.1.56540|2|2 +1.3.6.1.4.1.2620.1.16.22.2.1.2.531|2|19 +1.3.6.1.4.1.2620.1.16.22.2.1.2.2789|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.2.8268|2|21 +1.3.6.1.4.1.2620.1.16.22.2.1.2.9293|2|21 +1.3.6.1.4.1.2620.1.16.22.2.1.2.13850|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.2.18224|2|26 +1.3.6.1.4.1.2620.1.16.22.2.1.2.28872|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.2.36187|2|18 +1.3.6.1.4.1.2620.1.16.22.2.1.2.45779|2|14 +1.3.6.1.4.1.2620.1.16.22.2.1.2.56540|2|19 +1.3.6.1.4.1.2620.1.16.22.2.1.3.531|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.3.2789|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.3.8268|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.3.9293|2|29 +1.3.6.1.4.1.2620.1.16.22.2.1.3.13850|2|7 +1.3.6.1.4.1.2620.1.16.22.2.1.3.18224|2|18 +1.3.6.1.4.1.2620.1.16.22.2.1.3.28872|2|24 +1.3.6.1.4.1.2620.1.16.22.2.1.3.36187|2|18 +1.3.6.1.4.1.2620.1.16.22.2.1.3.45779|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.3.56540|2|28 +1.3.6.1.4.1.2620.1.16.22.2.1.4.531|2|3 +1.3.6.1.4.1.2620.1.16.22.2.1.4.2789|2|10 +1.3.6.1.4.1.2620.1.16.22.2.1.4.8268|2|26 +1.3.6.1.4.1.2620.1.16.22.2.1.4.9293|2|5 +1.3.6.1.4.1.2620.1.16.22.2.1.4.13850|2|29 +1.3.6.1.4.1.2620.1.16.22.2.1.4.18224|2|9 +1.3.6.1.4.1.2620.1.16.22.2.1.4.28872|2|29 +1.3.6.1.4.1.2620.1.16.22.2.1.4.36187|2|15 +1.3.6.1.4.1.2620.1.16.22.2.1.4.45779|2|12 +1.3.6.1.4.1.2620.1.16.22.2.1.4.56540|2|2 +1.3.6.1.4.1.2620.1.16.22.2.1.5.531|2|3 +1.3.6.1.4.1.2620.1.16.22.2.1.5.2789|2|7 +1.3.6.1.4.1.2620.1.16.22.2.1.5.8268|2|23 +1.3.6.1.4.1.2620.1.16.22.2.1.5.9293|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.5.13850|2|17 +1.3.6.1.4.1.2620.1.16.22.2.1.5.18224|2|11 +1.3.6.1.4.1.2620.1.16.22.2.1.5.28872|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.5.36187|2|3 +1.3.6.1.4.1.2620.1.16.22.2.1.5.45779|2|5 +1.3.6.1.4.1.2620.1.16.22.2.1.5.56540|2|0 +1.3.6.1.4.1.2620.1.16.22.2.1.6.531|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.6.2789|2|28 +1.3.6.1.4.1.2620.1.16.22.2.1.6.8268|2|19 +1.3.6.1.4.1.2620.1.16.22.2.1.6.9293|2|29 +1.3.6.1.4.1.2620.1.16.22.2.1.6.13850|2|3 +1.3.6.1.4.1.2620.1.16.22.2.1.6.18224|2|17 +1.3.6.1.4.1.2620.1.16.22.2.1.6.28872|2|23 +1.3.6.1.4.1.2620.1.16.22.2.1.6.36187|2|17 +1.3.6.1.4.1.2620.1.16.22.2.1.6.45779|2|11 +1.3.6.1.4.1.2620.1.16.22.2.1.6.56540|2|9 +1.3.6.1.4.1.2620.1.16.23.1.1.1.923|2|14 +1.3.6.1.4.1.2620.1.16.23.1.1.1.1098|2|7 +1.3.6.1.4.1.2620.1.16.23.1.1.1.5611|2|21 +1.3.6.1.4.1.2620.1.16.23.1.1.1.5967|2|7 +1.3.6.1.4.1.2620.1.16.23.1.1.1.9349|2|25 +1.3.6.1.4.1.2620.1.16.23.1.1.1.15167|2|1 +1.3.6.1.4.1.2620.1.16.23.1.1.1.28555|2|13 +1.3.6.1.4.1.2620.1.16.23.1.1.1.37907|2|15 +1.3.6.1.4.1.2620.1.16.23.1.1.1.40571|2|27 +1.3.6.1.4.1.2620.1.16.23.1.1.1.65094|2|22 +1.3.6.1.4.1.2620.1.16.23.1.1.2.923|2|17 +1.3.6.1.4.1.2620.1.16.23.1.1.2.1098|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.2.5611|2|29 +1.3.6.1.4.1.2620.1.16.23.1.1.2.5967|2|22 +1.3.6.1.4.1.2620.1.16.23.1.1.2.9349|2|4 +1.3.6.1.4.1.2620.1.16.23.1.1.2.15167|2|26 +1.3.6.1.4.1.2620.1.16.23.1.1.2.28555|2|13 +1.3.6.1.4.1.2620.1.16.23.1.1.2.37907|2|11 +1.3.6.1.4.1.2620.1.16.23.1.1.2.40571|2|6 +1.3.6.1.4.1.2620.1.16.23.1.1.2.65094|2|30 +1.3.6.1.4.1.2620.1.16.23.1.1.3.923|2|22 +1.3.6.1.4.1.2620.1.16.23.1.1.3.1098|2|30 +1.3.6.1.4.1.2620.1.16.23.1.1.3.5611|2|19 +1.3.6.1.4.1.2620.1.16.23.1.1.3.5967|2|20 +1.3.6.1.4.1.2620.1.16.23.1.1.3.9349|2|23 +1.3.6.1.4.1.2620.1.16.23.1.1.3.15167|2|21 +1.3.6.1.4.1.2620.1.16.23.1.1.3.28555|2|5 +1.3.6.1.4.1.2620.1.16.23.1.1.3.37907|2|15 +1.3.6.1.4.1.2620.1.16.23.1.1.3.40571|2|14 +1.3.6.1.4.1.2620.1.16.23.1.1.3.65094|2|5 +1.3.6.1.4.1.2620.1.16.23.1.1.4.923|2|21 +1.3.6.1.4.1.2620.1.16.23.1.1.4.1098|2|18 +1.3.6.1.4.1.2620.1.16.23.1.1.4.5611|2|6 +1.3.6.1.4.1.2620.1.16.23.1.1.4.5967|2|6 +1.3.6.1.4.1.2620.1.16.23.1.1.4.9349|2|26 +1.3.6.1.4.1.2620.1.16.23.1.1.4.15167|2|19 +1.3.6.1.4.1.2620.1.16.23.1.1.4.28555|2|18 +1.3.6.1.4.1.2620.1.16.23.1.1.4.37907|2|20 +1.3.6.1.4.1.2620.1.16.23.1.1.4.40571|2|6 +1.3.6.1.4.1.2620.1.16.23.1.1.4.65094|2|16 +1.3.6.1.4.1.2620.1.16.23.1.1.5.923|4x|7a6f6d6269657320666f72776172642064726976696e67206b657074206b657074207468656972204a61646564206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.5.1098|4x|4a61646564207a6f6d62696573204a616465642064726976696e67207a6f6d6269657320627574206b65707420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.5.5611|4x|6b65707420627574206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.5.5967|4x|6b657074207a6f6d626965732064726976696e67207a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.5.9349|4x|6b65707420666f7277617264206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.5.15167|4x|7468656972206f78656e2064726976696e6720627574206275742074686569722064726976696e67207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.5.28555|4x|746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.5.37907|4x|666f7277617264207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.5.40571|4|kept +1.3.6.1.4.1.2620.1.16.23.1.1.5.65094|4|Jaded +1.3.6.1.4.1.2620.1.16.23.1.1.6.923|4x|4a6164656420717561696e746c79206f78656e2062757420717561696e746c79207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.6.1098|4x|7468656972207468656972204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.6.5611|4x|4a61646564204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.6.5967|4x|4a6164656420717561696e746c79207a6f6d62696573206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.6.9349|4x|6f78656e207a6f6d62696573206163746564207468656972206b657074206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.6.15167|4x|4a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.6.28555|4x|64726976696e67206f78656e206f78656e20666f7277617264206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.6.37907|4x|6b657074204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.6.40571|4x|6f78656e207468656972206b657074206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.6.65094|4x|6b65707420627574206f78656e207a6f6d62696573204a61646564207a6f6d626965732064726976696e67206f78656e207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.7.923|4|zombies +1.3.6.1.4.1.2620.1.16.23.1.1.7.1098|4x|717561696e746c7920746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.7.5611|4x|616374656420627574206b657074206163746564204a6164656420717561696e746c79206f78656e20627574 +1.3.6.1.4.1.2620.1.16.23.1.1.7.5967|4x|6f78656e207468656972206b657074204a61646564206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.7.9349|4|quaintly +1.3.6.1.4.1.2620.1.16.23.1.1.7.15167|4x|4a61646564204a61646564206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.7.28555|4x|7a6f6d6269657320616374656420666f727761726420627574206f78656e206275742062757420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.7.37907|4x|6f78656e20666f727761726420717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.2620.1.16.23.1.1.7.40571|4x|717561696e746c792064726976696e67206b657074206b65707420666f727761726420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.7.65094|4x|62757420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.8.923|4x|6f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.8.1098|4x|717561696e746c7920616374656420616374656420717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.8.5611|4x|627574204a61646564204a6164656420627574206163746564204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.8.5967|4x|627574206b657074204a61646564206163746564 +1.3.6.1.4.1.2620.1.16.23.1.1.8.9349|4x|717561696e746c79204a6164656420627574 +1.3.6.1.4.1.2620.1.16.23.1.1.8.15167|4x|717561696e746c7920666f7277617264204a61646564207468656972204a61646564207a6f6d62696573207468656972204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.8.28555|4x|4a616465642064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.8.37907|4x|627574204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.8.40571|4x|64726976696e6720717561696e746c7920746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.8.65094|4x|64726976696e6720666f7277617264204a61646564206b65707420666f727761726420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.9.923|4x|6b657074204a6164656420666f7277617264204a61646564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.9.1098|4x|74686569722064726976696e6720717561696e746c7920666f7277617264204a616465642064726976696e67206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.9.5611|4|forward +1.3.6.1.4.1.2620.1.16.23.1.1.9.5967|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.9.9349|4x|616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.9.15167|4x|7a6f6d626965732064726976696e672062757420666f7277617264206163746564207468656972206163746564 +1.3.6.1.4.1.2620.1.16.23.1.1.9.28555|4x|74686569722074686569722074686569722064726976696e672062757420666f727761726420717561696e746c7920746865697220627574 +1.3.6.1.4.1.2620.1.16.23.1.1.9.37907|4x|627574206163746564206163746564206f78656e2064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.9.40571|4x|6f78656e206f78656e2064726976696e67206b657074206f78656e204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.9.65094|4x|627574207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.16.23.1.1.10.923|4x|616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.10.1098|4x|7a6f6d6269657320717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.16.23.1.1.10.5611|4x|64726976696e6720627574207a6f6d6269657320666f727761726420666f72776172642064726976696e67206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.10.5967|4x|7a6f6d62696573206163746564207a6f6d62696573207468656972207468656972206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.10.9349|4x|666f72776172642064726976696e67206f78656e20746865697220666f7277617264204a61646564206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.10.15167|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.10.28555|4|their +1.3.6.1.4.1.2620.1.16.23.1.1.10.37907|4x|61637465642064726976696e6720627574 +1.3.6.1.4.1.2620.1.16.23.1.1.10.40571|4x|7a6f6d62696573207a6f6d626965732064726976696e672074686569722062757420627574204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.10.65094|4x|7a6f6d6269657320717561696e746c7920717561696e746c79206f78656e206163746564206b657074206163746564207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.11.923|4x|666f7277617264206163746564204a61646564204a61646564206f78656e20666f7277617264204a61646564207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.11.1098|4x|6163746564207a6f6d62696573206b657074204a61646564206f78656e206b657074206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.11.5611|4x|6b657074206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.11.5967|4x|746865697220666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.11.9349|4x|7a6f6d62696573207468656972204a61646564206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.11.15167|4x|6b65707420627574207468656972206b657074206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.11.28555|4|kept +1.3.6.1.4.1.2620.1.16.23.1.1.11.37907|4x|627574206b657074206b65707420616374656420717561696e746c79207a6f6d62696573206b65707420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.11.40571|4x|6b6570742064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.11.65094|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.12.923|4x|6163746564207468656972206b657074206163746564206f78656e204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.12.1098|4x|666f7277617264207a6f6d62696573204a6164656420666f7277617264207a6f6d62696573207a6f6d6269657320717561696e746c7920616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.12.5611|4x|666f727761726420627574206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.12.5967|4x|666f727761726420627574207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.12.9349|4x|717561696e746c7920717561696e746c79206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.12.15167|4x|7a6f6d62696573206f78656e20717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.12.28555|4x|6b65707420666f727761726420666f7277617264207a6f6d62696573206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.12.37907|4|driving +1.3.6.1.4.1.2620.1.16.23.1.1.12.40571|4x|717561696e746c7920666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.12.65094|4x|7a6f6d626965732064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.16.23.1.1.13.923|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.1098|2|1 +1.3.6.1.4.1.2620.1.16.23.1.1.13.5611|2|1 +1.3.6.1.4.1.2620.1.16.23.1.1.13.5967|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.9349|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.15167|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.28555|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.37907|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.40571|2|1 +1.3.6.1.4.1.2620.1.16.23.1.1.13.65094|2|1 +1.3.6.1.4.1.2620.1.17.1.2.1.1.1.0|2|5 +1.3.6.1.4.1.2620.1.17.1.2.1.1.2.0|2|6 +1.3.6.1.4.1.2620.1.17.1.2.1.1.3.0|2|26 +1.3.6.1.4.1.2620.1.17.1.2.1.1.4.0|2|27 +1.3.6.1.4.1.2620.1.17.1.2.1.1.5.0|2|26 +1.3.6.1.4.1.2620.1.17.1.2.1.2.1.0|2|14 +1.3.6.1.4.1.2620.1.17.1.2.1.2.2.0|2|29 +1.3.6.1.4.1.2620.1.17.1.2.1.3.1.0|2|5 +1.3.6.1.4.1.2620.1.17.1.2.1.3.2.0|2|29 +1.3.6.1.4.1.2620.1.17.1.2.1.3.3.0|2|6 +1.3.6.1.4.1.2620.1.17.1.2.3.1.1.0|2|16 +1.3.6.1.4.1.2620.1.17.1.2.3.2.1.0|2|23 +1.3.6.1.4.1.2620.1.17.1.3.1.1.1.0|2|20 +1.3.6.1.4.1.2620.1.17.1.3.1.2.1.0|2|24 +1.3.6.1.4.1.2620.1.17.1.3.1.2.2.0|2|5 +1.3.6.1.4.1.2620.1.17.1.3.1.2.3.0|2|17 +1.3.6.1.4.1.2620.1.17.1.3.1.3.1.0|2|6 +1.3.6.1.4.1.2620.1.17.1.3.1.4.1.0|2|8 +1.3.6.1.4.1.2620.1.17.1.3.2.1.1.0|2|6 +1.3.6.1.4.1.2620.1.17.1.3.2.2.1.0|2|6 +1.3.6.1.4.1.2620.1.17.1.3.2.3.1.0|2|25 +1.3.6.1.4.1.2620.1.17.1.3.2.4.1.0|2|17 +1.3.6.1.4.1.2620.1.17.1.3.2.5.1.0|2|26 +1.3.6.1.4.1.2620.1.17.1.3.3.1.1.0|2|2 +1.3.6.1.4.1.2620.1.17.1.3.3.2.1.0|2|14 +1.3.6.1.4.1.2620.1.17.1.3.3.3.1.0|2|20 +1.3.6.1.4.1.2620.1.17.1.3.3.4.1.0|2|2 +1.3.6.1.4.1.2620.1.17.1.3.3.5.1.0|2|7 +1.3.6.1.4.1.2620.1.17.1.3.3.6.1.0|2|3 +1.3.6.1.4.1.2620.1.24.1.1.1.1.269|66|269 +1.3.6.1.4.1.2620.1.24.1.1.1.1.1948|66|1948 +1.3.6.1.4.1.2620.1.24.1.1.1.1.3210|66|3210 +1.3.6.1.4.1.2620.1.24.1.1.1.1.5868|66|5868 +1.3.6.1.4.1.2620.1.24.1.1.1.1.6256|66|6256 +1.3.6.1.4.1.2620.1.24.1.1.1.1.14231|66|14231 +1.3.6.1.4.1.2620.1.24.1.1.1.1.26340|66|26340 +1.3.6.1.4.1.2620.1.24.1.1.1.1.28900|66|28900 +1.3.6.1.4.1.2620.1.24.1.1.1.1.34904|66|34904 +1.3.6.1.4.1.2620.1.24.1.1.1.1.62621|66|62621 +1.3.6.1.4.1.2620.1.24.1.1.1.2.269|4x|7a6f6d6269657320666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.1948|4x|7a6f6d6269657320717561696e746c79206b65707420666f7277617264206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.3210|4x|7468656972204a61646564206b65707420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.5868|4x|666f727761726420627574 +1.3.6.1.4.1.2620.1.24.1.1.1.2.6256|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.2.14231|4x|7468656972206b657074207468656972206163746564206b657074207468656972206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.26340|4x|6b657074206b657074207468656972204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.28900|4x|7a6f6d6269657320627574206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.2.34904|4x|627574206b657074204a61646564206f78656e206f78656e +1.3.6.1.4.1.2620.1.24.1.1.1.2.62621|4x|62757420666f727761726420666f7277617264206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.1.1.1.3.269|4x|6f78656e20627574206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.3.1948|4x|717561696e746c7920717561696e746c7920717561696e746c7920666f7277617264207468656972206b65707420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.3.3210|4x|6b6570742061637465642064726976696e6720746865697220746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.3.5868|4x|6b65707420616374656420627574207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.24.1.1.1.3.6256|4x|627574206163746564206f78656e20627574206b657074206f78656e20717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.24.1.1.1.3.14231|4|their +1.3.6.1.4.1.2620.1.24.1.1.1.3.26340|4x|616374656420666f7277617264204a61646564206275742064726976696e67206f78656e2074686569722064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.24.1.1.1.3.28900|4x|6b657074206b6570742064726976696e6720666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.3.34904|4x|6b6570742074686569722062757420746865697220746865697220666f7277617264 +1.3.6.1.4.1.2620.1.24.1.1.1.3.62621|4x|666f727761726420666f72776172642074686569722064726976696e6720616374656420627574 +1.3.6.1.4.1.2620.1.24.1.1.1.4.269|2|21 +1.3.6.1.4.1.2620.1.24.1.1.1.4.1948|2|14 +1.3.6.1.4.1.2620.1.24.1.1.1.4.3210|2|11 +1.3.6.1.4.1.2620.1.24.1.1.1.4.5868|2|25 +1.3.6.1.4.1.2620.1.24.1.1.1.4.6256|2|4 +1.3.6.1.4.1.2620.1.24.1.1.1.4.14231|2|13 +1.3.6.1.4.1.2620.1.24.1.1.1.4.26340|2|16 +1.3.6.1.4.1.2620.1.24.1.1.1.4.28900|2|5 +1.3.6.1.4.1.2620.1.24.1.1.1.4.34904|2|24 +1.3.6.1.4.1.2620.1.24.1.1.1.4.62621|2|20 +1.3.6.1.4.1.2620.1.24.1.1.1.5.269|4x|6b6570742064726976696e6720746865697220627574 +1.3.6.1.4.1.2620.1.24.1.1.1.5.1948|4x|666f7277617264206b65707420616374656420666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.5.3210|4x|6163746564206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.5.5868|4x|717561696e746c792064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.5.6256|4x|4a6164656420666f727761726420666f727761726420627574206163746564206f78656e206f78656e2064726976696e67206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.5.14231|4x|64726976696e6720717561696e746c792064726976696e6720627574207468656972206b6570742074686569722064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.5.26340|4x|627574206f78656e206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.5.28900|4x|6f78656e206275742064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.5.34904|4x|717561696e746c79207468656972206b6570742064726976696e67206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.5.62621|4x|6163746564207a6f6d6269657320666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.6.269|4x|7a6f6d6269657320717561696e746c792061637465642064726976696e67207a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.6.1948|4x|7a6f6d626965732062757420627574 +1.3.6.1.4.1.2620.1.24.1.1.1.6.3210|4x|62757420627574204a61646564206163746564206163746564206b6570742064726976696e6720627574204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.6.5868|4x|666f7277617264207a6f6d62696573207a6f6d62696573206163746564206b657074206f78656e20666f7277617264206163746564206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.6.6256|4x|7a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.1.1.1.6.14231|4x|7a6f6d62696573206163746564207a6f6d6269657320666f7277617264206f78656e206163746564206f78656e +1.3.6.1.4.1.2620.1.24.1.1.1.6.26340|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.6.28900|4x|6163746564206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.6.34904|4x|6163746564206163746564206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.6.62621|4x|6b65707420717561696e746c7920717561696e746c7920717561696e746c79206163746564206163746564204a61646564207468656972 +1.3.6.1.4.1.2620.1.24.1.1.1.7.269|2|2 +1.3.6.1.4.1.2620.1.24.1.1.1.7.1948|2|31 +1.3.6.1.4.1.2620.1.24.1.1.1.7.3210|2|3 +1.3.6.1.4.1.2620.1.24.1.1.1.7.5868|2|24 +1.3.6.1.4.1.2620.1.24.1.1.1.7.6256|2|2 +1.3.6.1.4.1.2620.1.24.1.1.1.7.14231|2|1 +1.3.6.1.4.1.2620.1.24.1.1.1.7.26340|2|9 +1.3.6.1.4.1.2620.1.24.1.1.1.7.28900|2|20 +1.3.6.1.4.1.2620.1.24.1.1.1.7.34904|2|28 +1.3.6.1.4.1.2620.1.24.1.1.1.7.62621|2|1 +1.3.6.1.4.1.2620.1.24.1.1.1.8.269|2|26 +1.3.6.1.4.1.2620.1.24.1.1.1.8.1948|2|29 +1.3.6.1.4.1.2620.1.24.1.1.1.8.3210|2|17 +1.3.6.1.4.1.2620.1.24.1.1.1.8.5868|2|3 +1.3.6.1.4.1.2620.1.24.1.1.1.8.6256|2|31 +1.3.6.1.4.1.2620.1.24.1.1.1.8.14231|2|2 +1.3.6.1.4.1.2620.1.24.1.1.1.8.26340|2|30 +1.3.6.1.4.1.2620.1.24.1.1.1.8.28900|2|29 +1.3.6.1.4.1.2620.1.24.1.1.1.8.34904|2|2 +1.3.6.1.4.1.2620.1.24.1.1.1.8.62621|2|21 +1.3.6.1.4.1.2620.1.24.1.1.1.9.269|4x|627574207468656972204a61646564207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.24.1.1.1.9.1948|4x|717561696e746c792064726976696e67207468656972204a6164656420666f72776172642064726976696e67206b65707420746865697220627574 +1.3.6.1.4.1.2620.1.24.1.1.1.9.3210|4x|7a6f6d62696573206f78656e2064726976696e67206163746564206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.9.5868|4x|64726976696e67206275742064726976696e6720717561696e746c7920666f7277617264207a6f6d62696573206f78656e206f78656e206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.9.6256|4|acted +1.3.6.1.4.1.2620.1.24.1.1.1.9.14231|4x|666f7277617264206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.9.26340|4x|717561696e746c7920666f7277617264206b657074204a6164656420627574204a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.1.1.1.9.28900|4x|627574206f78656e +1.3.6.1.4.1.2620.1.24.1.1.1.9.34904|4x|746865697220666f727761726420717561696e746c79206f78656e204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.9.62621|4x|717561696e746c79207a6f6d62696573206f78656e2064726976696e67207468656972207468656972 +1.3.6.1.4.1.2620.1.24.1.1.1.10.269|4x|6275742064726976696e67207468656972206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.10.1948|4x|64726976696e672062757420746865697220666f727761726420627574 +1.3.6.1.4.1.2620.1.24.1.1.1.10.3210|4x|6163746564207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.10.5868|4x|64726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.10.6256|4x|4a616465642064726976696e6720627574 +1.3.6.1.4.1.2620.1.24.1.1.1.10.14231|4x|6b657074204a61646564206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.10.26340|4x|64726976696e67206275742064726976696e67207a6f6d6269657320717561696e746c79206163746564206f78656e +1.3.6.1.4.1.2620.1.24.1.1.1.10.28900|4x|6b65707420717561696e746c7920666f727761726420627574206f78656e2064726976696e672062757420717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.10.34904|4x|7a6f6d62696573206b657074204a61646564207468656972206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.10.62621|4x|7a6f6d62696573204a6164656420666f7277617264207468656972204a61646564 +1.3.6.1.4.1.2620.1.24.2.1.1.1.11582|66|11582 +1.3.6.1.4.1.2620.1.24.2.1.1.1.17656|66|17656 +1.3.6.1.4.1.2620.1.24.2.1.1.1.17770|66|17770 +1.3.6.1.4.1.2620.1.24.2.1.1.1.20110|66|20110 +1.3.6.1.4.1.2620.1.24.2.1.1.1.24937|66|24937 +1.3.6.1.4.1.2620.1.24.2.1.1.1.27263|66|27263 +1.3.6.1.4.1.2620.1.24.2.1.1.1.27879|66|27879 +1.3.6.1.4.1.2620.1.24.2.1.1.1.34522|66|34522 +1.3.6.1.4.1.2620.1.24.2.1.1.1.39350|66|39350 +1.3.6.1.4.1.2620.1.24.2.1.1.1.56551|66|56551 +1.3.6.1.4.1.2620.1.24.2.1.1.2.11582|4x|62757420627574 +1.3.6.1.4.1.2620.1.24.2.1.1.2.17656|4x|6f78656e20666f7277617264206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.24.2.1.1.2.17770|4x|7a6f6d62696573206f78656e206163746564204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.24.2.1.1.2.20110|4x|627574207a6f6d62696573207468656972206163746564206b65707420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.24.2.1.1.2.24937|4x|666f7277617264206b657074204a6164656420666f727761726420616374656420616374656420616374656420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.24.2.1.1.2.27263|4x|7468656972206b65707420746865697220666f7277617264204a6164656420746865697220746865697220627574 +1.3.6.1.4.1.2620.1.24.2.1.1.2.27879|4x|717561696e746c792062757420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.2.1.1.2.34522|4x|4a61646564207468656972206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.24.2.1.1.2.39350|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.24.2.1.1.2.56551|4x|7468656972206f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.2.1.1.3.11582|2|25 +1.3.6.1.4.1.2620.1.24.2.1.1.3.17656|2|25 +1.3.6.1.4.1.2620.1.24.2.1.1.3.17770|2|7 +1.3.6.1.4.1.2620.1.24.2.1.1.3.20110|2|1 +1.3.6.1.4.1.2620.1.24.2.1.1.3.24937|2|20 +1.3.6.1.4.1.2620.1.24.2.1.1.3.27263|2|27 +1.3.6.1.4.1.2620.1.24.2.1.1.3.27879|2|3 +1.3.6.1.4.1.2620.1.24.2.1.1.3.34522|2|25 +1.3.6.1.4.1.2620.1.24.2.1.1.3.39350|2|6 +1.3.6.1.4.1.2620.1.24.2.1.1.3.56551|2|10 +1.3.6.1.4.1.2620.1.24.3.1.1.1.16028|66|16028 +1.3.6.1.4.1.2620.1.24.3.1.1.1.16615|66|16615 +1.3.6.1.4.1.2620.1.24.3.1.1.1.17531|66|17531 +1.3.6.1.4.1.2620.1.24.3.1.1.1.27810|66|27810 +1.3.6.1.4.1.2620.1.24.3.1.1.1.29253|66|29253 +1.3.6.1.4.1.2620.1.24.3.1.1.1.31826|66|31826 +1.3.6.1.4.1.2620.1.24.3.1.1.1.46978|66|46978 +1.3.6.1.4.1.2620.1.24.3.1.1.1.53043|66|53043 +1.3.6.1.4.1.2620.1.24.3.1.1.1.53046|66|53046 +1.3.6.1.4.1.2620.1.24.3.1.1.1.54627|66|54627 +1.3.6.1.4.1.2620.1.24.3.1.1.2.16028|4x|627574206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.3.1.1.2.16615|4x|666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.24.3.1.1.2.17531|4x|7a6f6d62696573206b657074206163746564206f78656e20627574204a61646564206163746564 +1.3.6.1.4.1.2620.1.24.3.1.1.2.27810|4x|6b657074206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.24.3.1.1.2.29253|4x|666f727761726420666f727761726420616374656420627574206b657074204a61646564207a6f6d62696573207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.24.3.1.1.2.31826|4x|6163746564204a6164656420627574206b657074206b657074206163746564204a61646564204a61646564 +1.3.6.1.4.1.2620.1.24.3.1.1.2.46978|4x|7468656972207a6f6d62696573206b6570742064726976696e672064726976696e67206f78656e +1.3.6.1.4.1.2620.1.24.3.1.1.2.53043|4x|62757420666f7277617264206f78656e207468656972204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.24.3.1.1.2.53046|4x|7a6f6d6269657320666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.24.3.1.1.2.54627|4x|6f78656e20717561696e746c79206f78656e206163746564207a6f6d62696573206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.24.3.1.1.3.16028|2|23 +1.3.6.1.4.1.2620.1.24.3.1.1.3.16615|2|0 +1.3.6.1.4.1.2620.1.24.3.1.1.3.17531|2|22 +1.3.6.1.4.1.2620.1.24.3.1.1.3.27810|2|6 +1.3.6.1.4.1.2620.1.24.3.1.1.3.29253|2|30 +1.3.6.1.4.1.2620.1.24.3.1.1.3.31826|2|18 +1.3.6.1.4.1.2620.1.24.3.1.1.3.46978|2|4 +1.3.6.1.4.1.2620.1.24.3.1.1.3.53043|2|20 +1.3.6.1.4.1.2620.1.24.3.1.1.3.53046|2|2 +1.3.6.1.4.1.2620.1.24.3.1.1.3.54627|2|7 +1.3.6.1.4.1.2620.1.24.4.1.1.0|2|30 +1.3.6.1.4.1.2620.1.24.4.1.2.0|4x|6f78656e2064726976696e67207a6f6d6269657320717561696e746c79207468656972206163746564 +1.3.6.1.4.1.2620.1.24.4.1.3.0|2|3 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.546|66|546 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.7578|66|7578 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.9598|66|9598 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.14834|66|14834 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.17795|66|17795 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.18694|66|18694 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.45179|66|45179 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.51066|66|51066 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.54735|66|54735 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.57938|66|57938 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.546|4x|746865697220627574207468656972206163746564207468656972204a61646564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.7578|4x|6163746564206b657074204a61646564207a6f6d6269657320717561696e746c7920627574206163746564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.9598|4x|62757420666f727761726420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.14834|4x|7a6f6d626965732062757420746865697220666f7277617264 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.17795|4x|74686569722064726976696e672064726976696e6720627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.18694|4x|6b657074204a6164656420717561696e746c79206b657074207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.45179|4x|717561696e746c79206163746564204a61646564204a61646564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.51066|4x|616374656420616374656420616374656420666f7277617264207468656972206f78656e206f78656e206163746564206163746564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.54735|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.57938|4x|4a61646564206f78656e20717561696e746c79206163746564206b65707420616374656420717561696e746c7920627574206f78656e +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.546|2|3 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.7578|2|0 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.9598|2|4 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.14834|2|24 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.17795|2|26 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.18694|2|21 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.45179|2|21 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.51066|2|9 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.54735|2|10 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.57938|2|20 +1.3.6.1.4.1.2620.1.24.4.2.1.0|2|29 +1.3.6.1.4.1.2620.1.24.4.2.2.0|4|oxen +1.3.6.1.4.1.2620.1.24.4.2.3.0|2|9 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.283|66|283 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.6462|66|6462 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.8564|66|8564 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.18811|66|18811 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.28827|66|28827 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.33621|66|33621 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.42149|66|42149 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.45968|66|45968 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.55142|66|55142 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.55860|66|55860 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.283|4|quaintly +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.6462|4|acted +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.8564|4x|6f78656e20717561696e746c79206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.18811|4x|61637465642062757420627574206f78656e207468656972207468656972206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.28827|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.33621|4x|64726976696e6720717561696e746c79204a616465642064726976696e67206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.42149|4x|64726976696e672064726976696e67206f78656e207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.45968|4x|7468656972206f78656e20746865697220666f7277617264206f78656e206b65707420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.55142|4x|6f78656e207468656972206275742064726976696e672064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.55860|4x|616374656420717561696e746c7920717561696e746c79206f78656e2064726976696e6720717561696e746c79206f78656e206163746564 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.283|2|26 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.6462|2|29 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.8564|2|17 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.18811|2|12 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.28827|2|31 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.33621|2|5 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.42149|2|20 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.45968|2|31 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.55142|2|13 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.55860|2|31 +1.3.6.1.4.1.2620.1.24.4.3.1.0|2|13 +1.3.6.1.4.1.2620.1.24.4.3.2.0|4x|746865697220717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.24.4.3.3.0|2|18 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.2572|66|2572 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.2835|66|2835 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.7698|66|7698 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.24801|66|24801 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.25948|66|25948 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.25997|66|25997 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.52762|66|52762 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.55152|66|55152 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.56667|66|56667 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.61890|66|61890 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.2572|4x|6b657074206f78656e206b65707420666f7277617264206275742064726976696e6720627574 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.2835|4|acted +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.7698|4x|7468656972204a616465642062757420616374656420627574204a61646564207a6f6d62696573204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.24801|4|acted +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.25948|4|quaintly +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.25997|4x|4a6164656420666f727761726420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.52762|4|forward +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.55152|4x|6f78656e206b65707420627574206f78656e206f78656e2064726976696e67206163746564 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.56667|4x|6f78656e207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.61890|4x|616374656420717561696e746c79206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.2572|2|19 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.2835|2|27 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.7698|2|11 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.24801|2|5 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.25948|2|3 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.25997|2|10 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.52762|2|26 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.55152|2|23 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.56667|2|7 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.61890|2|27 +1.3.6.1.4.1.2620.1.24.4.4.1.0|2|10 +1.3.6.1.4.1.2620.1.24.4.4.2.0|4x|6b65707420717561696e746c792064726976696e6720717561696e746c7920717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.24.4.4.3.0|2|26 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.2664|66|2664 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.5962|66|5962 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.8559|66|8559 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.14790|66|14790 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.31680|66|31680 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.41368|66|41368 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.42943|66|42943 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.55415|66|55415 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.57778|66|57778 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.61103|66|61103 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.2664|4x|616374656420717561696e746c79206f78656e207468656972 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.5962|4x|717561696e746c79204a61646564204a61646564207468656972 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.8559|4x|7a6f6d626965732074686569722064726976696e67207468656972204a61646564 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.14790|4x|7a6f6d6269657320666f7277617264206b657074206163746564206f78656e +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.31680|4x|666f727761726420666f727761726420717561696e746c7920717561696e746c79204a6164656420627574207a6f6d62696573207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.41368|4x|666f7277617264206f78656e20717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.42943|4x|6163746564207a6f6d62696573206b65707420627574206f78656e20666f727761726420627574206163746564 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.55415|4x|6275742064726976696e67207a6f6d62696573204a61646564204a6164656420717561696e746c79207a6f6d62696573206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.57778|4x|616374656420717561696e746c79206b657074206275742064726976696e67 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.61103|4x|6163746564206163746564 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.2664|2|9 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.5962|2|18 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.8559|2|26 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.14790|2|16 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.31680|2|10 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.41368|2|1 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.42943|2|28 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.55415|2|8 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.57778|2|22 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.61103|2|20 +1.3.6.1.4.1.2620.1.24.101.0|2|28 +1.3.6.1.4.1.2620.1.24.102.0|4x|4a6164656420746865697220717561696e746c7920666f727761726420627574206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.103.0|4x|666f72776172642064726976696e6720666f727761726420616374656420627574206163746564 +1.3.6.1.4.1.2620.1.25.1.1.0|2|6 +1.3.6.1.4.1.2620.1.25.1.2.0|2|18 +1.3.6.1.4.1.2620.1.25.1.3.0|2|31 +1.3.6.1.4.1.2620.1.25.1.4.0|4x|7468656972206f78656e206275742062757420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.25.1.5.0|4|acted +1.3.6.1.4.1.2620.1.25.1.6.0|4x|717561696e746c79206163746564206f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.25.1.7.0|2|14 +1.3.6.1.4.1.2620.1.25.1.8.0|4x|6b65707420627574204a6164656420717561696e746c792064726976696e6720717561696e746c7920666f727761726420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.1.7705|66|7705 +1.3.6.1.4.1.2620.1.25.1.9.1.1.11293|66|11293 +1.3.6.1.4.1.2620.1.25.1.9.1.1.16671|66|16671 +1.3.6.1.4.1.2620.1.25.1.9.1.1.18079|66|18079 +1.3.6.1.4.1.2620.1.25.1.9.1.1.25138|66|25138 +1.3.6.1.4.1.2620.1.25.1.9.1.1.27306|66|27306 +1.3.6.1.4.1.2620.1.25.1.9.1.1.30860|66|30860 +1.3.6.1.4.1.2620.1.25.1.9.1.1.33843|66|33843 +1.3.6.1.4.1.2620.1.25.1.9.1.1.48121|66|48121 +1.3.6.1.4.1.2620.1.25.1.9.1.1.62988|66|62988 +1.3.6.1.4.1.2620.1.25.1.9.1.2.7705|4x|7468656972206163746564204a616465642062757420666f72776172642064726976696e672064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.1.9.1.2.11293|4x|6b65707420666f7277617264207a6f6d6269657320627574207a6f6d62696573207468656972204a61646564 +1.3.6.1.4.1.2620.1.25.1.9.1.2.16671|4x|6f78656e2064726976696e67204a6164656420717561696e746c792061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.2.18079|4x|64726976696e67207468656972204a616465642064726976696e67207a6f6d62696573207468656972206163746564 +1.3.6.1.4.1.2620.1.25.1.9.1.2.25138|4|forward +1.3.6.1.4.1.2620.1.25.1.9.1.2.27306|4x|746865697220627574204a616465642064726976696e67204a61646564207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.1.9.1.2.30860|4x|627574206f78656e206f78656e206f78656e2061637465642061637465642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.25.1.9.1.2.33843|4x|717561696e746c7920746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.2.48121|4x|717561696e746c79206f78656e207468656972206f78656e206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.1.9.1.2.62988|4x|627574206f78656e +1.3.6.1.4.1.2620.1.25.1.9.1.3.7705|4x|4a61646564206163746564206275742064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.25.1.9.1.3.11293|4x|717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.25.1.9.1.3.16671|4|forward +1.3.6.1.4.1.2620.1.25.1.9.1.3.18079|4x|7a6f6d62696573206b65707420746865697220616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.3.25138|4x|666f72776172642064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.25.1.9.1.3.27306|4x|4a616465642062757420717561696e746c7920627574207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.3.30860|4x|7468656972207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.2620.1.25.1.9.1.3.33843|4x|6f78656e207a6f6d626965732062757420666f7277617264206f78656e207468656972206b65707420627574 +1.3.6.1.4.1.2620.1.25.1.9.1.3.48121|4x|6b657074204a61646564207a6f6d6269657320746865697220666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.3.62988|4x|6275742064726976696e67206163746564204a61646564206b65707420627574 +1.3.6.1.4.1.2620.1.25.1.9.1.4.7705|2|2 +1.3.6.1.4.1.2620.1.25.1.9.1.4.11293|2|26 +1.3.6.1.4.1.2620.1.25.1.9.1.4.16671|2|22 +1.3.6.1.4.1.2620.1.25.1.9.1.4.18079|2|11 +1.3.6.1.4.1.2620.1.25.1.9.1.4.25138|2|8 +1.3.6.1.4.1.2620.1.25.1.9.1.4.27306|2|2 +1.3.6.1.4.1.2620.1.25.1.9.1.4.30860|2|13 +1.3.6.1.4.1.2620.1.25.1.9.1.4.33843|2|2 +1.3.6.1.4.1.2620.1.25.1.9.1.4.48121|2|19 +1.3.6.1.4.1.2620.1.25.1.9.1.4.62988|2|27 +1.3.6.1.4.1.2620.1.25.1.9.1.5.7705|2|9 +1.3.6.1.4.1.2620.1.25.1.9.1.5.11293|2|23 +1.3.6.1.4.1.2620.1.25.1.9.1.5.16671|2|5 +1.3.6.1.4.1.2620.1.25.1.9.1.5.18079|2|4 +1.3.6.1.4.1.2620.1.25.1.9.1.5.25138|2|13 +1.3.6.1.4.1.2620.1.25.1.9.1.5.27306|2|4 +1.3.6.1.4.1.2620.1.25.1.9.1.5.30860|2|6 +1.3.6.1.4.1.2620.1.25.1.9.1.5.33843|2|7 +1.3.6.1.4.1.2620.1.25.1.9.1.5.48121|2|0 +1.3.6.1.4.1.2620.1.25.1.9.1.5.62988|2|1 +1.3.6.1.4.1.2620.1.25.1.10.0|2|24 +1.3.6.1.4.1.2620.1.25.1.101.0|2|27 +1.3.6.1.4.1.2620.1.25.1.102.0|4x|717561696e746c79206f78656e206b65707420717561696e746c79204a616465642061637465642062757420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.103.0|4x|4a6164656420627574206f78656e207468656972 +1.3.6.1.4.1.2620.1.25.2.1.0|2|18 +1.3.6.1.4.1.2620.1.25.2.2.0|2|8 +1.3.6.1.4.1.2620.1.25.2.3.0|4x|6f78656e2064726976696e6720746865697220666f7277617264204a616465642062757420616374656420627574206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.1.448|66|448 +1.3.6.1.4.1.2620.1.25.2.4.1.1.6521|66|6521 +1.3.6.1.4.1.2620.1.25.2.4.1.1.6638|66|6638 +1.3.6.1.4.1.2620.1.25.2.4.1.1.11103|66|11103 +1.3.6.1.4.1.2620.1.25.2.4.1.1.13775|66|13775 +1.3.6.1.4.1.2620.1.25.2.4.1.1.28356|66|28356 +1.3.6.1.4.1.2620.1.25.2.4.1.1.36624|66|36624 +1.3.6.1.4.1.2620.1.25.2.4.1.1.49289|66|49289 +1.3.6.1.4.1.2620.1.25.2.4.1.1.52103|66|52103 +1.3.6.1.4.1.2620.1.25.2.4.1.1.54649|66|54649 +1.3.6.1.4.1.2620.1.25.2.4.1.2.448|4x|61637465642062757420666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.2.6521|4|oxen +1.3.6.1.4.1.2620.1.25.2.4.1.2.6638|4x|717561696e746c79207a6f6d62696573204a61646564206f78656e20666f7277617264206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.2.11103|4x|666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.2.13775|4|kept +1.3.6.1.4.1.2620.1.25.2.4.1.2.28356|4x|7a6f6d6269657320717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.2.36624|4x|6b657074206f78656e2064726976696e67206b65707420717561696e746c79206163746564207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.2.49289|4x|717561696e746c79207468656972204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.2.52103|4x|6b657074206f78656e20666f7277617264206f78656e206f78656e2064726976696e672062757420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.2.54649|4x|7468656972204a61646564206f78656e20717561696e746c79204a61646564207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.3.448|4x|4a616465642074686569722064726976696e6720666f7277617264206f78656e20666f7277617264207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.3.6521|4x|627574206275742064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.3.6638|4x|6163746564207468656972204a61646564206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.3.11103|4x|746865697220616374656420717561696e746c79204a61646564206275742062757420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.3.13775|4x|717561696e746c79204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.3.28356|4x|666f7277617264207a6f6d62696573204a61646564207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.3.36624|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.3.49289|4x|627574206f78656e20627574206f78656e2062757420666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.3.52103|4|oxen +1.3.6.1.4.1.2620.1.25.2.4.1.3.54649|4|driving +1.3.6.1.4.1.2620.1.25.2.4.1.4.448|4x|666f727761726420717561696e746c79206163746564206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.4.6521|4x|7a6f6d62696573207a6f6d62696573206b657074206b6570742064726976696e6720616374656420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.4.6638|4x|64726976696e672064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.4.11103|4x|62757420627574204a6164656420666f727761726420666f72776172642062757420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.4.13775|4x|64726976696e672064726976696e67207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.4.28356|4x|6163746564206f78656e20717561696e746c792064726976696e67207a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.4.36624|4x|717561696e746c7920717561696e746c79207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.4.49289|4x|627574207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.4.52103|4x|62757420666f727761726420616374656420666f7277617264206f78656e20717561696e746c7920616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.4.54649|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2620.1.25.2.4.1.5.448|2|13 +1.3.6.1.4.1.2620.1.25.2.4.1.5.6521|2|25 +1.3.6.1.4.1.2620.1.25.2.4.1.5.6638|2|6 +1.3.6.1.4.1.2620.1.25.2.4.1.5.11103|2|27 +1.3.6.1.4.1.2620.1.25.2.4.1.5.13775|2|20 +1.3.6.1.4.1.2620.1.25.2.4.1.5.28356|2|31 +1.3.6.1.4.1.2620.1.25.2.4.1.5.36624|2|1 +1.3.6.1.4.1.2620.1.25.2.4.1.5.49289|2|25 +1.3.6.1.4.1.2620.1.25.2.4.1.5.52103|2|0 +1.3.6.1.4.1.2620.1.25.2.4.1.5.54649|2|26 +1.3.6.1.4.1.2620.1.25.2.4.1.6.448|4|oxen +1.3.6.1.4.1.2620.1.25.2.4.1.6.6521|4x|4a6164656420746865697220627574206f78656e204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.6.6638|4x|6163746564207a6f6d626965732074686569722064726976696e67206b6570742064726976696e67206f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.6.11103|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.6.13775|4x|6b657074206b657074206b65707420746865697220627574206b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.6.28356|4x|6f78656e206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.6.36624|4x|627574206b65707420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.6.49289|4|kept +1.3.6.1.4.1.2620.1.25.2.4.1.6.52103|4x|717561696e746c7920717561696e746c79207a6f6d6269657320717561696e746c792062757420746865697220717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.6.54649|4x|4a61646564204a6164656420666f727761726420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.7.448|4|oxen +1.3.6.1.4.1.2620.1.25.2.4.1.7.6521|4x|6f78656e20717561696e746c7920717561696e746c792064726976696e67206b657074204a61646564 +1.3.6.1.4.1.2620.1.25.2.4.1.7.6638|4x|4a6164656420717561696e746c792074686569722064726976696e67207a6f6d626965732064726976696e672064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.7.11103|4x|746865697220717561696e746c792064726976696e6720616374656420717561696e746c792062757420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.7.13775|4x|6f78656e20616374656420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.7.28356|4x|64726976696e67207a6f6d62696573207468656972206b6570742061637465642062757420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.7.36624|4x|7a6f6d626965732064726976696e672062757420717561696e746c79204a616465642064726976696e67207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.7.49289|4x|64726976696e672064726976696e6720666f7277617264207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.7.52103|4x|666f7277617264204a61646564206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.7.54649|4x|6f78656e2064726976696e672064726976696e67206f78656e20616374656420746865697220616374656420666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.8.448|2|26 +1.3.6.1.4.1.2620.1.25.2.4.1.8.6521|2|8 +1.3.6.1.4.1.2620.1.25.2.4.1.8.6638|2|25 +1.3.6.1.4.1.2620.1.25.2.4.1.8.11103|2|4 +1.3.6.1.4.1.2620.1.25.2.4.1.8.13775|2|31 +1.3.6.1.4.1.2620.1.25.2.4.1.8.28356|2|31 +1.3.6.1.4.1.2620.1.25.2.4.1.8.36624|2|26 +1.3.6.1.4.1.2620.1.25.2.4.1.8.49289|2|22 +1.3.6.1.4.1.2620.1.25.2.4.1.8.52103|2|31 +1.3.6.1.4.1.2620.1.25.2.4.1.8.54649|2|14 +1.3.6.1.4.1.2620.1.25.2.4.1.9.448|4x|7468656972204a61646564206b65707420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.9.6521|4x|7a6f6d626965732062757420666f727761726420627574204a61646564204a61646564207468656972204a61646564207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.9.6638|4x|74686569722064726976696e67206f78656e204a61646564206f78656e206f78656e204a61646564206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.9.11103|4x|666f7277617264206b657074206f78656e20666f7277617264206b6570742061637465642064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.9.13775|4|driving +1.3.6.1.4.1.2620.1.25.2.4.1.9.28356|4x|6f78656e20616374656420666f727761726420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.9.36624|4x|7a6f6d62696573206163746564207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.9.49289|4x|6b6570742064726976696e67206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.9.52103|4x|61637465642064726976696e6720717561696e746c7920627574206b657074204a61646564204a61646564204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.9.54649|4|but +1.3.6.1.4.1.2620.1.25.2.4.1.10.448|4x|4a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.10.6521|4x|62757420666f72776172642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.10.6638|4x|666f727761726420717561696e746c79206163746564204a616465642062757420717561696e746c79204a61646564207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.25.2.4.1.10.11103|4x|746865697220666f7277617264206163746564207468656972207468656972206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.10.13775|4x|6b657074206f78656e20627574204a61646564206b657074204a6164656420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.10.28356|4x|717561696e746c7920746865697220666f727761726420717561696e746c79207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.10.36624|4x|74686569722064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.10.49289|4x|7468656972206f78656e207a6f6d62696573206b657074204a61646564207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.10.52103|4x|627574206b65707420666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.10.54649|4x|717561696e746c7920616374656420746865697220666f7277617264204a616465642064726976696e672074686569722064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.11.448|4x|6f78656e20666f727761726420717561696e746c79206f78656e206b65707420717561696e746c792062757420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.11.6521|4x|666f72776172642064726976696e67207468656972207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.11.6638|4x|64726976696e67206b65707420717561696e746c7920717561696e746c7920666f72776172642064726976696e67206b65707420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.11.11103|4x|61637465642061637465642062757420717561696e746c79204a61646564206b657074206163746564204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.11.13775|4x|4a616465642064726976696e67206f78656e206f78656e206b65707420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.11.28356|4x|6b657074206163746564204a61646564204a6164656420666f727761726420717561696e746c792064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.11.36624|4|but +1.3.6.1.4.1.2620.1.25.2.4.1.11.49289|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.11.52103|4x|4a61646564204a616465642064726976696e67207468656972204a61646564 +1.3.6.1.4.1.2620.1.25.2.4.1.11.54649|4x|4a61646564204a61646564 +1.3.6.1.4.1.2620.1.25.2.4.1.12.448|4x|717561696e746c79207a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.12.6521|4x|6f78656e206163746564206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.12.6638|4x|6163746564206163746564206b65707420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.12.11103|4x|64726976696e6720746865697220717561696e746c7920627574204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.12.13775|4|but +1.3.6.1.4.1.2620.1.25.2.4.1.12.28356|4x|62757420717561696e746c7920627574206f78656e206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.12.36624|4x|627574206f78656e207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.25.2.4.1.12.49289|4x|6f78656e204a61646564206b657074206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.12.52103|4x|6f78656e204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.12.54649|4x|4a616465642064726976696e672064726976696e672064726976696e67206b657074206f78656e206b65707420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.13.448|4x|6f78656e20666f7277617264206b65707420717561696e746c792074686569722061637465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.13.6521|4x|6275742064726976696e672062757420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.25.2.4.1.13.6638|4x|6b657074206f78656e206275742064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.13.11103|4|but +1.3.6.1.4.1.2620.1.25.2.4.1.13.13775|4x|717561696e746c7920717561696e746c79206163746564207a6f6d6269657320717561696e746c7920616374656420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.13.28356|4x|7a6f6d62696573206f78656e20627574206163746564206f78656e2064726976696e67206b657074204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.13.36624|4|Jaded +1.3.6.1.4.1.2620.1.25.2.4.1.13.49289|4x|61637465642064726976696e67206b65707420717561696e746c792064726976696e67204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.13.52103|4x|64726976696e6720627574206b657074206b657074206b657074206b65707420746865697220627574206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.13.54649|4x|4a6164656420717561696e746c79206f78656e20717561696e746c792064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.25.2.5.0|2|0 +1.3.6.1.4.1.2620.1.25.2.101.0|2|2 +1.3.6.1.4.1.2620.1.25.2.102.0|4x|6f78656e2062757420627574206163746564207a6f6d62696573206f78656e206b6570742064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.25.2.103.0|4x|6f78656e206b657074206f78656e20627574207468656972206163746564206f78656e206f78656e +1.3.6.1.4.1.2620.1.29.1.1.0|4x|6f78656e206f78656e20666f7277617264207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.2620.1.29.1.2.0|4x|6b657074206275742064726976696e67206f78656e20717561696e746c79207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.29.1.3.0|2|21 +1.3.6.1.4.1.2620.1.29.1.4.0|2|22 +1.3.6.1.4.1.2620.1.29.1.5.0|4x|666f727761726420717561696e746c79207468656972206b65707420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.1.6.0|2|8 +1.3.6.1.4.1.2620.1.29.1.7.0|4x|6f78656e207a6f6d62696573207468656972206163746564 +1.3.6.1.4.1.2620.1.29.1.8.0|4|kept +1.3.6.1.4.1.2620.1.29.2.1.0|4x|6f78656e207a6f6d6269657320666f727761726420666f7277617264204a61646564206163746564206163746564206163746564207468656972 +1.3.6.1.4.1.2620.1.29.2.2.0|2|29 +1.3.6.1.4.1.2620.1.29.2.3.0|2|30 +1.3.6.1.4.1.2620.1.29.2.4.1.1.5075|66|5075 +1.3.6.1.4.1.2620.1.29.2.4.1.1.5335|66|5335 +1.3.6.1.4.1.2620.1.29.2.4.1.1.14249|66|14249 +1.3.6.1.4.1.2620.1.29.2.4.1.1.15114|66|15114 +1.3.6.1.4.1.2620.1.29.2.4.1.1.34138|66|34138 +1.3.6.1.4.1.2620.1.29.2.4.1.1.35579|66|35579 +1.3.6.1.4.1.2620.1.29.2.4.1.1.40308|66|40308 +1.3.6.1.4.1.2620.1.29.2.4.1.1.56464|66|56464 +1.3.6.1.4.1.2620.1.29.2.4.1.1.58518|66|58518 +1.3.6.1.4.1.2620.1.29.2.4.1.1.63005|66|63005 +1.3.6.1.4.1.2620.1.29.2.4.1.2.5075|4x|64726976696e67206f78656e +1.3.6.1.4.1.2620.1.29.2.4.1.2.5335|4x|64726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.2.4.1.2.14249|4x|717561696e746c79206b65707420627574204a61646564206f78656e20616374656420666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.2620.1.29.2.4.1.2.15114|4x|6163746564204a6164656420746865697220746865697220616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.29.2.4.1.2.34138|4x|6163746564207468656972206163746564206b657074204a616465642074686569722064726976696e67206163746564206b657074 +1.3.6.1.4.1.2620.1.29.2.4.1.2.35579|4x|627574206f78656e207468656972206b657074204a6164656420616374656420627574206f78656e +1.3.6.1.4.1.2620.1.29.2.4.1.2.40308|4x|4a61646564204a6164656420717561696e746c7920666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.2620.1.29.2.4.1.2.56464|4x|666f7277617264206163746564206f78656e20627574206f78656e +1.3.6.1.4.1.2620.1.29.2.4.1.2.58518|4x|4a61646564207a6f6d626965732064726976696e67207468656972207468656972207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.29.2.4.1.2.63005|4x|6163746564204a61646564207a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.2620.1.29.2.4.1.3.5075|2|6 +1.3.6.1.4.1.2620.1.29.2.4.1.3.5335|2|2 +1.3.6.1.4.1.2620.1.29.2.4.1.3.14249|2|26 +1.3.6.1.4.1.2620.1.29.2.4.1.3.15114|2|8 +1.3.6.1.4.1.2620.1.29.2.4.1.3.34138|2|4 +1.3.6.1.4.1.2620.1.29.2.4.1.3.35579|2|3 +1.3.6.1.4.1.2620.1.29.2.4.1.3.40308|2|17 +1.3.6.1.4.1.2620.1.29.2.4.1.3.56464|2|12 +1.3.6.1.4.1.2620.1.29.2.4.1.3.58518|2|3 +1.3.6.1.4.1.2620.1.29.2.4.1.3.63005|2|23 +1.3.6.1.4.1.2620.1.29.2.5.1.1.3081|66|3081 +1.3.6.1.4.1.2620.1.29.2.5.1.1.10884|66|10884 +1.3.6.1.4.1.2620.1.29.2.5.1.1.25000|66|25000 +1.3.6.1.4.1.2620.1.29.2.5.1.1.32193|66|32193 +1.3.6.1.4.1.2620.1.29.2.5.1.1.35623|66|35623 +1.3.6.1.4.1.2620.1.29.2.5.1.1.35896|66|35896 +1.3.6.1.4.1.2620.1.29.2.5.1.1.37267|66|37267 +1.3.6.1.4.1.2620.1.29.2.5.1.1.43307|66|43307 +1.3.6.1.4.1.2620.1.29.2.5.1.1.57336|66|57336 +1.3.6.1.4.1.2620.1.29.2.5.1.1.65128|66|65128 +1.3.6.1.4.1.2620.1.29.2.5.1.2.3081|4x|64726976696e67207468656972 +1.3.6.1.4.1.2620.1.29.2.5.1.2.10884|4x|616374656420616374656420627574206f78656e20666f72776172642064726976696e672064726976696e67206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.29.2.5.1.2.25000|4x|666f7277617264204a6164656420666f7277617264207468656972 +1.3.6.1.4.1.2620.1.29.2.5.1.2.32193|4x|627574204a6164656420627574206f78656e20666f7277617264206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.29.2.5.1.2.35623|4x|717561696e746c792064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.29.2.5.1.2.35896|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.2.5.1.2.37267|4x|61637465642064726976696e67 +1.3.6.1.4.1.2620.1.29.2.5.1.2.43307|4x|616374656420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.29.2.5.1.2.57336|4x|666f7277617264206f78656e207468656972204a61646564 +1.3.6.1.4.1.2620.1.29.2.5.1.2.65128|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.29.2.5.1.3.3081|2|19 +1.3.6.1.4.1.2620.1.29.2.5.1.3.10884|2|15 +1.3.6.1.4.1.2620.1.29.2.5.1.3.25000|2|17 +1.3.6.1.4.1.2620.1.29.2.5.1.3.32193|2|30 +1.3.6.1.4.1.2620.1.29.2.5.1.3.35623|2|10 +1.3.6.1.4.1.2620.1.29.2.5.1.3.35896|2|23 +1.3.6.1.4.1.2620.1.29.2.5.1.3.37267|2|15 +1.3.6.1.4.1.2620.1.29.2.5.1.3.43307|2|2 +1.3.6.1.4.1.2620.1.29.2.5.1.3.57336|2|6 +1.3.6.1.4.1.2620.1.29.2.5.1.3.65128|2|7 +1.3.6.1.4.1.2620.1.29.2.6.1.1.5410|66|5410 +1.3.6.1.4.1.2620.1.29.2.6.1.1.16133|66|16133 +1.3.6.1.4.1.2620.1.29.2.6.1.1.16492|66|16492 +1.3.6.1.4.1.2620.1.29.2.6.1.1.23752|66|23752 +1.3.6.1.4.1.2620.1.29.2.6.1.1.29115|66|29115 +1.3.6.1.4.1.2620.1.29.2.6.1.1.33833|66|33833 +1.3.6.1.4.1.2620.1.29.2.6.1.1.42488|66|42488 +1.3.6.1.4.1.2620.1.29.2.6.1.1.46703|66|46703 +1.3.6.1.4.1.2620.1.29.2.6.1.1.52016|66|52016 +1.3.6.1.4.1.2620.1.29.2.6.1.1.52622|66|52622 +1.3.6.1.4.1.2620.1.29.2.6.1.2.5410|4|quaintly +1.3.6.1.4.1.2620.1.29.2.6.1.2.16133|4x|62757420746865697220616374656420717561696e746c792064726976696e67207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.2620.1.29.2.6.1.2.16492|4x|746865697220717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.29.2.6.1.2.23752|4x|6b657074204a61646564207a6f6d62696573207a6f6d6269657320616374656420666f7277617264207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.29.2.6.1.2.29115|4x|666f727761726420717561696e746c79206b65707420666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.29.2.6.1.2.33833|4x|7a6f6d62696573206163746564206b65707420666f7277617264206f78656e204a616465642064726976696e67207468656972206163746564 +1.3.6.1.4.1.2620.1.29.2.6.1.2.42488|4x|4a61646564204a6164656420717561696e746c79207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.2620.1.29.2.6.1.2.46703|4x|746865697220627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.2.6.1.2.52016|4x|4a61646564206163746564206f78656e204a6164656420717561696e746c79204a61646564204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.29.2.6.1.2.52622|4x|717561696e746c79206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.2.6.1.3.5410|2|12 +1.3.6.1.4.1.2620.1.29.2.6.1.3.16133|2|27 +1.3.6.1.4.1.2620.1.29.2.6.1.3.16492|2|11 +1.3.6.1.4.1.2620.1.29.2.6.1.3.23752|2|26 +1.3.6.1.4.1.2620.1.29.2.6.1.3.29115|2|29 +1.3.6.1.4.1.2620.1.29.2.6.1.3.33833|2|19 +1.3.6.1.4.1.2620.1.29.2.6.1.3.42488|2|27 +1.3.6.1.4.1.2620.1.29.2.6.1.3.46703|2|16 +1.3.6.1.4.1.2620.1.29.2.6.1.3.52016|2|23 +1.3.6.1.4.1.2620.1.29.2.6.1.3.52622|2|6 +1.3.6.1.4.1.2620.1.29.101.0|2|24 +1.3.6.1.4.1.2620.1.29.102.0|4x|6163746564207a6f6d6269657320666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.103.0|4x|64726976696e6720616374656420717561696e746c7920616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.30.1.0|4x|4a61646564206b657074207468656972206b657074 +1.3.6.1.4.1.2620.1.30.2.0|2|21 +1.3.6.1.4.1.2620.1.30.3.0|2|6 +1.3.6.1.4.1.2620.1.30.4.0|2|22 +1.3.6.1.4.1.2620.1.30.5.0|4x|6b65707420616374656420616374656420627574204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2620.1.30.6.1.0|2|30 +1.3.6.1.4.1.2620.1.30.6.2.0|2|18 +1.3.6.1.4.1.2620.1.30.6.3.0|2|8 +1.3.6.1.4.1.2620.1.30.6.4.1.0|2|21 +1.3.6.1.4.1.2620.1.30.6.4.2.0|2|12 +1.3.6.1.4.1.2620.1.30.6.4.3.0|2|12 +1.3.6.1.4.1.2620.1.30.6.4.4.0|2|20 +1.3.6.1.4.1.2620.1.30.6.4.5.0|2|12 +1.3.6.1.4.1.2620.1.30.6.4.6.0|2|6 +1.3.6.1.4.1.2620.1.30.7.0|4|but +1.3.6.1.4.1.2620.1.30.8.0|4x|64726976696e672064726976696e6720666f7277617264206f78656e +1.3.6.1.4.1.2620.1.30.9.0|2|19 +1.3.6.1.4.1.2620.1.30.101.0|2|21 +1.3.6.1.4.1.2620.1.30.102.0|4x|6b6570742064726976696e67206b65707420666f7277617264206b657074206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.30.103.0|4x|717561696e746c79204a61646564206f78656e204a6164656420717561696e746c79207a6f6d6269657320717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.2620.1.30.999.0|4x|61637465642064726976696e67207a6f6d6269657320627574204a61646564206f78656e20627574 +1.3.6.1.4.1.2620.1.31.1.0|4|forward +1.3.6.1.4.1.2620.1.31.2.0|2|14 +1.3.6.1.4.1.2620.1.31.3.0|2|12 +1.3.6.1.4.1.2620.1.31.4.0|2|23 +1.3.6.1.4.1.2620.1.31.5.0|4x|62757420717561696e746c792064726976696e67207468656972206163746564207a6f6d6269657320666f7277617264204a61646564206163746564 +1.3.6.1.4.1.2620.1.31.6.1.1.1.0|2|29 +1.3.6.1.4.1.2620.1.31.6.1.1.2.0|2|3 +1.3.6.1.4.1.2620.1.31.6.1.1.3.0|2|22 +1.3.6.1.4.1.2620.1.31.6.1.1.4.0|2|30 +1.3.6.1.4.1.2620.1.31.6.1.1.5.0|2|7 +1.3.6.1.4.1.2620.1.31.6.1.1.6.0|2|22 +1.3.6.1.4.1.2620.1.31.6.1.1.7.0|2|3 +1.3.6.1.4.1.2620.1.31.6.1.1.8.0|2|30 +1.3.6.1.4.1.2620.1.31.6.1.1.9.0|2|30 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.18771|66|18771 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.23703|66|23703 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.26748|66|26748 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.28073|66|28073 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.41070|66|41070 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.41715|66|41715 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.45587|66|45587 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.52887|66|52887 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.57867|66|57867 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.60573|66|60573 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.18771|2|19 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.23703|2|28 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.26748|2|4 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.28073|2|29 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.41070|2|18 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.41715|2|23 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.45587|2|0 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.52887|2|15 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.57867|2|8 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.60573|2|8 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.18771|2|22 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.23703|2|29 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.26748|2|0 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.28073|2|15 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.41070|2|1 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.41715|2|15 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.45587|2|1 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.52887|2|13 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.57867|2|16 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.60573|2|12 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.18771|2|9 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.23703|2|26 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.26748|2|29 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.28073|2|5 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.41070|2|22 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.41715|2|20 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.45587|2|8 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.52887|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.57867|2|30 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.60573|2|15 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.18771|2|16 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.23703|2|29 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.26748|2|13 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.28073|2|4 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.41070|2|10 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.41715|2|5 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.45587|2|23 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.52887|2|12 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.57867|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.60573|2|7 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.18771|2|22 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.23703|2|27 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.26748|2|18 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.28073|2|13 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.41070|2|24 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.41715|2|27 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.45587|2|16 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.52887|2|27 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.57867|2|4 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.60573|2|11 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.18771|2|28 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.23703|2|26 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.26748|2|5 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.28073|2|4 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.41070|2|10 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.41715|2|0 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.45587|2|17 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.52887|2|23 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.57867|2|8 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.60573|2|16 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.18771|2|20 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.23703|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.26748|2|28 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.28073|2|3 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.41070|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.41715|2|23 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.45587|2|20 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.52887|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.57867|2|9 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.60573|2|3 +1.3.6.1.4.1.2620.1.31.7.1.1.0|2|29 +1.3.6.1.4.1.2620.1.31.7.1.2.0|2|23 +1.3.6.1.4.1.2620.1.31.101.0|2|24 +1.3.6.1.4.1.2620.1.31.102.0|4x|6b657074204a6164656420666f7277617264207a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.31.103.0|4x|616374656420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.31.999.0|4|kept +1.3.6.1.4.1.2620.1.36.1.1.0|2|0 +1.3.6.1.4.1.2620.1.36.1.2.0|2|7 +1.3.6.1.4.1.2620.1.36.1.3.0|2|26 +1.3.6.1.4.1.2620.1.36.1.4.0|2|19 +1.3.6.1.4.1.2620.1.38.1.0|4x|7a6f6d6269657320717561696e746c7920717561696e746c792061637465642062757420746865697220616374656420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.38.2.0|2|8 +1.3.6.1.4.1.2620.1.38.3.0|2|26 +1.3.6.1.4.1.2620.1.38.4.0|2|16 +1.3.6.1.4.1.2620.1.38.5.0|2|8 +1.3.6.1.4.1.2620.1.38.6.0|2|4 +1.3.6.1.4.1.2620.1.38.7.0|2|5 +1.3.6.1.4.1.2620.1.38.8.0|2|9 +1.3.6.1.4.1.2620.1.38.9.0|2|7 +1.3.6.1.4.1.2620.1.38.10.0|2|9 +1.3.6.1.4.1.2620.1.38.11.0|2|31 +1.3.6.1.4.1.2620.1.38.12.0|2|11 +1.3.6.1.4.1.2620.1.38.13.0|2|4 +1.3.6.1.4.1.2620.1.38.14.0|2|19 +1.3.6.1.4.1.2620.1.38.15.0|2|26 +1.3.6.1.4.1.2620.1.38.16.0|2|3 +1.3.6.1.4.1.2620.1.38.17.0|2|18 +1.3.6.1.4.1.2620.1.38.18.0|2|13 +1.3.6.1.4.1.2620.1.38.19.0|2|29 +1.3.6.1.4.1.2620.1.38.20.0|2|25 +1.3.6.1.4.1.2620.1.38.21.0|2|9 +1.3.6.1.4.1.2620.1.38.22.0|2|25 +1.3.6.1.4.1.2620.1.38.23.0|2|12 +1.3.6.1.4.1.2620.1.38.24.1.1.3528|66|3528 +1.3.6.1.4.1.2620.1.38.24.1.1.11783|66|11783 +1.3.6.1.4.1.2620.1.38.24.1.1.11814|66|11814 +1.3.6.1.4.1.2620.1.38.24.1.1.16655|66|16655 +1.3.6.1.4.1.2620.1.38.24.1.1.27954|66|27954 +1.3.6.1.4.1.2620.1.38.24.1.1.30506|66|30506 +1.3.6.1.4.1.2620.1.38.24.1.1.32554|66|32554 +1.3.6.1.4.1.2620.1.38.24.1.1.38664|66|38664 +1.3.6.1.4.1.2620.1.38.24.1.1.48679|66|48679 +1.3.6.1.4.1.2620.1.38.24.1.1.61929|66|61929 +1.3.6.1.4.1.2620.1.38.24.1.2.3528|4x|6275742061637465642064726976696e672074686569722064726976696e6720627574206b657074206163746564 +1.3.6.1.4.1.2620.1.38.24.1.2.11783|4x|7a6f6d62696573204a61646564206f78656e +1.3.6.1.4.1.2620.1.38.24.1.2.11814|4x|666f727761726420616374656420746865697220717561696e746c7920746865697220616374656420666f7277617264 +1.3.6.1.4.1.2620.1.38.24.1.2.16655|4|kept +1.3.6.1.4.1.2620.1.38.24.1.2.27954|4x|6b657074206f78656e2064726976696e6720666f7277617264206f78656e204a61646564204a616465642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.38.24.1.2.30506|4x|7a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.38.24.1.2.32554|4x|7a6f6d6269657320627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.38.24.1.2.38664|4x|6163746564206b657074206275742064726976696e67207a6f6d6269657320717561696e746c79206163746564206163746564206163746564 +1.3.6.1.4.1.2620.1.38.24.1.2.48679|4x|616374656420627574206163746564206163746564206f78656e20666f72776172642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.38.24.1.2.61929|4x|4a61646564207468656972206f78656e2064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.38.24.1.3.3528|2|30 +1.3.6.1.4.1.2620.1.38.24.1.3.11783|2|3 +1.3.6.1.4.1.2620.1.38.24.1.3.11814|2|6 +1.3.6.1.4.1.2620.1.38.24.1.3.16655|2|22 +1.3.6.1.4.1.2620.1.38.24.1.3.27954|2|21 +1.3.6.1.4.1.2620.1.38.24.1.3.30506|2|7 +1.3.6.1.4.1.2620.1.38.24.1.3.32554|2|5 +1.3.6.1.4.1.2620.1.38.24.1.3.38664|2|15 +1.3.6.1.4.1.2620.1.38.24.1.3.48679|2|29 +1.3.6.1.4.1.2620.1.38.24.1.3.61929|2|11 +1.3.6.1.4.1.2620.1.38.24.1.4.3528|2|22 +1.3.6.1.4.1.2620.1.38.24.1.4.11783|2|10 +1.3.6.1.4.1.2620.1.38.24.1.4.11814|2|27 +1.3.6.1.4.1.2620.1.38.24.1.4.16655|2|13 +1.3.6.1.4.1.2620.1.38.24.1.4.27954|2|0 +1.3.6.1.4.1.2620.1.38.24.1.4.30506|2|16 +1.3.6.1.4.1.2620.1.38.24.1.4.32554|2|28 +1.3.6.1.4.1.2620.1.38.24.1.4.38664|2|6 +1.3.6.1.4.1.2620.1.38.24.1.4.48679|2|28 +1.3.6.1.4.1.2620.1.38.24.1.4.61929|2|8 +1.3.6.1.4.1.2620.1.38.24.1.5.3528|2|1 +1.3.6.1.4.1.2620.1.38.24.1.5.11783|2|10 +1.3.6.1.4.1.2620.1.38.24.1.5.11814|2|29 +1.3.6.1.4.1.2620.1.38.24.1.5.16655|2|25 +1.3.6.1.4.1.2620.1.38.24.1.5.27954|2|18 +1.3.6.1.4.1.2620.1.38.24.1.5.30506|2|13 +1.3.6.1.4.1.2620.1.38.24.1.5.32554|2|13 +1.3.6.1.4.1.2620.1.38.24.1.5.38664|2|11 +1.3.6.1.4.1.2620.1.38.24.1.5.48679|2|22 +1.3.6.1.4.1.2620.1.38.24.1.5.61929|2|28 +1.3.6.1.4.1.2620.1.38.24.1.6.3528|2|10 +1.3.6.1.4.1.2620.1.38.24.1.6.11783|2|7 +1.3.6.1.4.1.2620.1.38.24.1.6.11814|2|30 +1.3.6.1.4.1.2620.1.38.24.1.6.16655|2|26 +1.3.6.1.4.1.2620.1.38.24.1.6.27954|2|28 +1.3.6.1.4.1.2620.1.38.24.1.6.30506|2|28 +1.3.6.1.4.1.2620.1.38.24.1.6.32554|2|20 +1.3.6.1.4.1.2620.1.38.24.1.6.38664|2|3 +1.3.6.1.4.1.2620.1.38.24.1.6.48679|2|11 +1.3.6.1.4.1.2620.1.38.24.1.6.61929|2|28 +1.3.6.1.4.1.2620.1.38.25.1.1.1484|66|1484 +1.3.6.1.4.1.2620.1.38.25.1.1.4399|66|4399 +1.3.6.1.4.1.2620.1.38.25.1.1.17141|66|17141 +1.3.6.1.4.1.2620.1.38.25.1.1.25207|66|25207 +1.3.6.1.4.1.2620.1.38.25.1.1.30563|66|30563 +1.3.6.1.4.1.2620.1.38.25.1.1.31488|66|31488 +1.3.6.1.4.1.2620.1.38.25.1.1.51584|66|51584 +1.3.6.1.4.1.2620.1.38.25.1.1.57051|66|57051 +1.3.6.1.4.1.2620.1.38.25.1.1.58915|66|58915 +1.3.6.1.4.1.2620.1.38.25.1.1.64779|66|64779 +1.3.6.1.4.1.2620.1.38.25.1.2.1484|2|23 +1.3.6.1.4.1.2620.1.38.25.1.2.4399|2|1 +1.3.6.1.4.1.2620.1.38.25.1.2.17141|2|20 +1.3.6.1.4.1.2620.1.38.25.1.2.25207|2|18 +1.3.6.1.4.1.2620.1.38.25.1.2.30563|2|27 +1.3.6.1.4.1.2620.1.38.25.1.2.31488|2|14 +1.3.6.1.4.1.2620.1.38.25.1.2.51584|2|25 +1.3.6.1.4.1.2620.1.38.25.1.2.57051|2|30 +1.3.6.1.4.1.2620.1.38.25.1.2.58915|2|2 +1.3.6.1.4.1.2620.1.38.25.1.2.64779|2|18 +1.3.6.1.4.1.2620.1.38.25.1.3.1484|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.38.25.1.3.4399|4x|6f78656e207468656972206f78656e204a61646564206b65707420666f72776172642064726976696e67206b657074206f78656e +1.3.6.1.4.1.2620.1.38.25.1.3.17141|4x|64726976696e67204a61646564206f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.38.25.1.3.25207|4x|7468656972204a61646564 +1.3.6.1.4.1.2620.1.38.25.1.3.30563|4x|7a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.38.25.1.3.31488|4x|4a6164656420616374656420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.38.25.1.3.51584|4x|6f78656e207a6f6d62696573207468656972204a61646564 +1.3.6.1.4.1.2620.1.38.25.1.3.57051|4x|7a6f6d626965732061637465642064726976696e672062757420666f7277617264 +1.3.6.1.4.1.2620.1.38.25.1.3.58915|4x|717561696e746c79206f78656e20666f727761726420666f727761726420666f727761726420746865697220627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.38.25.1.3.64779|4x|7a6f6d62696573206f78656e204a61646564207a6f6d626965732064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.38.25.1.4.1484|64x|8902d6ed +1.3.6.1.4.1.2620.1.38.25.1.4.4399|64x|adb5424a +1.3.6.1.4.1.2620.1.38.25.1.4.17141|64x|024dfb05 +1.3.6.1.4.1.2620.1.38.25.1.4.25207|64x|bde38fdd +1.3.6.1.4.1.2620.1.38.25.1.4.30563|64x|d63520f8 +1.3.6.1.4.1.2620.1.38.25.1.4.31488|64x|3e4f537b +1.3.6.1.4.1.2620.1.38.25.1.4.51584|64x|26b6ee49 +1.3.6.1.4.1.2620.1.38.25.1.4.57051|64x|8b7db7b4 +1.3.6.1.4.1.2620.1.38.25.1.4.58915|64x|615518e3 +1.3.6.1.4.1.2620.1.38.25.1.4.64779|64x|6599a7ac +1.3.6.1.4.1.2620.1.38.25.1.5.1484|2|20 +1.3.6.1.4.1.2620.1.38.25.1.5.4399|2|1 +1.3.6.1.4.1.2620.1.38.25.1.5.17141|2|20 +1.3.6.1.4.1.2620.1.38.25.1.5.25207|2|4 +1.3.6.1.4.1.2620.1.38.25.1.5.30563|2|23 +1.3.6.1.4.1.2620.1.38.25.1.5.31488|2|7 +1.3.6.1.4.1.2620.1.38.25.1.5.51584|2|9 +1.3.6.1.4.1.2620.1.38.25.1.5.57051|2|20 +1.3.6.1.4.1.2620.1.38.25.1.5.58915|2|29 +1.3.6.1.4.1.2620.1.38.25.1.5.64779|2|4 +1.3.6.1.4.1.2620.1.38.101.0|2|27 +1.3.6.1.4.1.2620.1.38.102.0|4x|746865697220666f7277617264206163746564 +1.3.6.1.4.1.2620.1.38.103.0|4x|64726976696e6720666f72776172642064726976696e67206163746564206163746564 +1.3.6.1.4.1.2620.1.39.1.1.0|4x|64726976696e67206f78656e2064726976696e672062757420627574206163746564207468656972 +1.3.6.1.4.1.2620.1.39.1.2.0|4x|616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.39.1.3.0|4x|64726976696e672062757420717561696e746c79207a6f6d6269657320627574206b65707420666f727761726420666f7277617264207468656972 +1.3.6.1.4.1.2620.1.39.2.1.0|4x|666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.39.2.2.0|4x|717561696e746c7920627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.39.2.3.0|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.1.39.2.4.0|4x|666f7277617264206b657074 +1.3.6.1.4.1.2620.1.39.101.0|2|28 +1.3.6.1.4.1.2620.1.39.102.0|4x|6f78656e20666f7277617264206b6570742064726976696e67206b657074206f78656e +1.3.6.1.4.1.2620.1.39.103.0|4x|6b657074206b65707420627574204a61646564207a6f6d62696573204a61646564206b657074206f78656e +1.3.6.1.4.1.2620.1.42.1.0|4x|616374656420666f7277617264207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.42.2.0|2|10 +1.3.6.1.4.1.2620.1.42.3.0|4x|666f7277617264206f78656e20627574206163746564204a6164656420627574206f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.42.4.0|2|19 +1.3.6.1.4.1.2620.1.42.5.0|2|26 +1.3.6.1.4.1.2620.1.42.6.0|2|21 +1.3.6.1.4.1.2620.1.42.7.1.1.8496|66|8496 +1.3.6.1.4.1.2620.1.42.7.1.1.19506|66|19506 +1.3.6.1.4.1.2620.1.42.7.1.1.21368|66|21368 +1.3.6.1.4.1.2620.1.42.7.1.1.23320|66|23320 +1.3.6.1.4.1.2620.1.42.7.1.1.23813|66|23813 +1.3.6.1.4.1.2620.1.42.7.1.1.27519|66|27519 +1.3.6.1.4.1.2620.1.42.7.1.1.30558|66|30558 +1.3.6.1.4.1.2620.1.42.7.1.1.35854|66|35854 +1.3.6.1.4.1.2620.1.42.7.1.1.38212|66|38212 +1.3.6.1.4.1.2620.1.42.7.1.1.60129|66|60129 +1.3.6.1.4.1.2620.1.42.7.1.2.8496|4x|746865697220746865697220717561696e746c79206163746564206f78656e +1.3.6.1.4.1.2620.1.42.7.1.2.19506|4x|7468656972206b657074206b657074207a6f6d626965732064726976696e67206b657074206b657074 +1.3.6.1.4.1.2620.1.42.7.1.2.21368|4|zombies +1.3.6.1.4.1.2620.1.42.7.1.2.23320|4x|666f7277617264206b657074206f78656e206163746564204a61646564207a6f6d62696573206f78656e20746865697220627574 +1.3.6.1.4.1.2620.1.42.7.1.2.23813|4x|666f72776172642064726976696e6720666f7277617264206b6570742064726976696e6720627574207468656972206f78656e206163746564 +1.3.6.1.4.1.2620.1.42.7.1.2.27519|4x|616374656420616374656420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.42.7.1.2.30558|4|acted +1.3.6.1.4.1.2620.1.42.7.1.2.35854|4|oxen +1.3.6.1.4.1.2620.1.42.7.1.2.38212|4x|7468656972204a61646564207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.42.7.1.2.60129|4x|6b65707420616374656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.3.8496|4x|627574206f78656e204a616465642064726976696e672062757420627574 +1.3.6.1.4.1.2620.1.42.7.1.3.19506|4x|666f72776172642064726976696e67206275742064726976696e67204a6164656420666f727761726420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.42.7.1.3.21368|4x|666f727761726420616374656420666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.3.23320|4x|64726976696e6720627574 +1.3.6.1.4.1.2620.1.42.7.1.3.23813|4x|6f78656e206b657074206f78656e +1.3.6.1.4.1.2620.1.42.7.1.3.27519|4x|6b657074207a6f6d62696573207a6f6d62696573207468656972206f78656e +1.3.6.1.4.1.2620.1.42.7.1.3.30558|4|oxen +1.3.6.1.4.1.2620.1.42.7.1.3.35854|4x|61637465642064726976696e67 +1.3.6.1.4.1.2620.1.42.7.1.3.38212|4x|7a6f6d6269657320616374656420666f72776172642064726976696e67207a6f6d62696573207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.3.60129|4|but +1.3.6.1.4.1.2620.1.42.7.1.4.8496|2|14 +1.3.6.1.4.1.2620.1.42.7.1.4.19506|2|17 +1.3.6.1.4.1.2620.1.42.7.1.4.21368|2|16 +1.3.6.1.4.1.2620.1.42.7.1.4.23320|2|13 +1.3.6.1.4.1.2620.1.42.7.1.4.23813|2|19 +1.3.6.1.4.1.2620.1.42.7.1.4.27519|2|0 +1.3.6.1.4.1.2620.1.42.7.1.4.30558|2|0 +1.3.6.1.4.1.2620.1.42.7.1.4.35854|2|25 +1.3.6.1.4.1.2620.1.42.7.1.4.38212|2|4 +1.3.6.1.4.1.2620.1.42.7.1.4.60129|2|29 +1.3.6.1.4.1.2620.1.42.7.1.5.8496|4x|4a61646564204a6164656420746865697220616374656420717561696e746c79206f78656e206b657074206f78656e20627574 +1.3.6.1.4.1.2620.1.42.7.1.5.19506|4x|6b657074206f78656e +1.3.6.1.4.1.2620.1.42.7.1.5.21368|4x|64726976696e67206f78656e20717561696e746c79206f78656e20666f7277617264206b6570742064726976696e67206b657074 +1.3.6.1.4.1.2620.1.42.7.1.5.23320|4x|64726976696e67206f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.42.7.1.5.23813|4x|627574206f78656e20717561696e746c79207a6f6d6269657320616374656420616374656420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.42.7.1.5.27519|4x|666f727761726420746865697220717561696e746c7920616374656420666f72776172642062757420627574204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.5.30558|4x|7a6f6d6269657320666f72776172642064726976696e672064726976696e6720616374656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.5.35854|4x|666f727761726420666f7277617264206163746564206b6570742064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.5.38212|4x|61637465642064726976696e6720666f7277617264206b657074206163746564206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.42.7.1.5.60129|4x|627574206b65707420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.6.8496|4x|717561696e746c79204a61646564206b657074207a6f6d62696573207468656972206163746564206f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.42.7.1.6.19506|4x|6f78656e20616374656420717561696e746c7920717561696e746c792064726976696e67206b65707420746865697220666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.42.7.1.6.21368|4x|717561696e746c7920666f727761726420627574206b657074204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.6.23320|4x|4a61646564207a6f6d6269657320627574204a616465642062757420666f7277617264207a6f6d626965732064726976696e6720627574 +1.3.6.1.4.1.2620.1.42.7.1.6.23813|4x|666f7277617264206163746564206b657074206163746564206f78656e20627574206f78656e204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.6.27519|4x|7468656972206f78656e2074686569722064726976696e67207a6f6d62696573206f78656e20746865697220717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.6.30558|4x|7468656972206f78656e2062757420717561696e746c79204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.6.35854|4x|6f78656e204a6164656420666f7277617264204a61646564206b657074 +1.3.6.1.4.1.2620.1.42.7.1.6.38212|4x|4a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2620.1.42.7.1.6.60129|4x|666f7277617264206f78656e +1.3.6.1.4.1.2620.1.42.7.1.7.8496|4x|7a6f6d626965732064726976696e67206b65707420746865697220666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.7.19506|4x|64726976696e6720746865697220627574206163746564204a61646564206b65707420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.7.21368|4x|7a6f6d62696573206b65707420717561696e746c7920717561696e746c792064726976696e67206b657074207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.42.7.1.7.23320|4x|74686569722062757420666f727761726420666f72776172642064726976696e6720666f727761726420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.42.7.1.7.23813|4|quaintly +1.3.6.1.4.1.2620.1.42.7.1.7.27519|4x|6f78656e206163746564207468656972 +1.3.6.1.4.1.2620.1.42.7.1.7.30558|4x|666f7277617264206b657074206f78656e +1.3.6.1.4.1.2620.1.42.7.1.7.35854|4|driving +1.3.6.1.4.1.2620.1.42.7.1.7.38212|4x|7a6f6d62696573204a61646564204a61646564207a6f6d6269657320616374656420746865697220717561696e746c79206b657074206163746564 +1.3.6.1.4.1.2620.1.42.7.1.7.60129|4|zombies +1.3.6.1.4.1.2620.1.42.7.1.8.8496|4|quaintly +1.3.6.1.4.1.2620.1.42.7.1.8.19506|4x|6b6570742064726976696e672062757420746865697220746865697220627574206f78656e +1.3.6.1.4.1.2620.1.42.7.1.8.21368|4x|7468656972206f78656e20717561696e746c792074686569722074686569722064726976696e67204a6164656420627574 +1.3.6.1.4.1.2620.1.42.7.1.8.23320|4x|64726976696e67206163746564206b657074207468656972206b65707420666f7277617264206f78656e206b657074207468656972 +1.3.6.1.4.1.2620.1.42.7.1.8.23813|4x|4a61646564204a6164656420717561696e746c7920666f727761726420616374656420717561696e746c792064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.8.27519|4x|6163746564206f78656e20666f72776172642064726976696e672064726976696e67207468656972207468656972207468656972 +1.3.6.1.4.1.2620.1.42.7.1.8.30558|4x|616374656420717561696e746c7920666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.8.35854|4x|746865697220627574207468656972204a61646564204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.42.7.1.8.38212|4x|717561696e746c792064726976696e672064726976696e672074686569722064726976696e67 +1.3.6.1.4.1.2620.1.42.7.1.8.60129|4x|6f78656e20616374656420666f7277617264204a61646564206163746564 +1.3.6.1.4.1.2620.1.42.8.1.1.20313|66|20313 +1.3.6.1.4.1.2620.1.42.8.1.1.29903|66|29903 +1.3.6.1.4.1.2620.1.42.8.1.1.30761|66|30761 +1.3.6.1.4.1.2620.1.42.8.1.1.32365|66|32365 +1.3.6.1.4.1.2620.1.42.8.1.1.47436|66|47436 +1.3.6.1.4.1.2620.1.42.8.1.1.49361|66|49361 +1.3.6.1.4.1.2620.1.42.8.1.1.52713|66|52713 +1.3.6.1.4.1.2620.1.42.8.1.1.57160|66|57160 +1.3.6.1.4.1.2620.1.42.8.1.1.59523|66|59523 +1.3.6.1.4.1.2620.1.42.8.1.1.60699|66|60699 +1.3.6.1.4.1.2620.1.42.8.1.2.20313|4x|6b657074206b6570742061637465642064726976696e67207468656972206b657074207468656972207468656972206b657074 +1.3.6.1.4.1.2620.1.42.8.1.2.29903|4x|7468656972206163746564206f78656e206163746564206163746564207468656972 +1.3.6.1.4.1.2620.1.42.8.1.2.30761|4x|6275742062757420666f7277617264204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.42.8.1.2.32365|4x|6f78656e204a6164656420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.42.8.1.2.47436|4|forward +1.3.6.1.4.1.2620.1.42.8.1.2.49361|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.2.52713|4x|7a6f6d626965732062757420717561696e746c79206b657074206f78656e20627574 +1.3.6.1.4.1.2620.1.42.8.1.2.57160|4x|7468656972206f78656e20717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.42.8.1.2.59523|4x|666f72776172642064726976696e6720717561696e746c792062757420717561696e746c79207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2620.1.42.8.1.2.60699|4x|6275742074686569722064726976696e672061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.42.8.1.3.20313|4|forward +1.3.6.1.4.1.2620.1.42.8.1.3.29903|4|but +1.3.6.1.4.1.2620.1.42.8.1.3.30761|4x|666f727761726420717561696e746c7920627574207468656972206275742064726976696e672064726976696e67206f78656e +1.3.6.1.4.1.2620.1.42.8.1.3.32365|4x|616374656420616374656420717561696e746c7920746865697220627574 +1.3.6.1.4.1.2620.1.42.8.1.3.47436|4|acted +1.3.6.1.4.1.2620.1.42.8.1.3.49361|4x|6b6570742064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.3.52713|4x|746865697220666f7277617264206b657074206f78656e206b657074 +1.3.6.1.4.1.2620.1.42.8.1.3.57160|4x|6b657074206b657074207a6f6d626965732064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.42.8.1.3.59523|4x|717561696e746c79206b657074206f78656e20627574206b65707420666f727761726420616374656420666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.42.8.1.3.60699|4x|4a61646564204a61646564206f78656e +1.3.6.1.4.1.2620.1.42.8.1.4.20313|2|14 +1.3.6.1.4.1.2620.1.42.8.1.4.29903|2|23 +1.3.6.1.4.1.2620.1.42.8.1.4.30761|2|2 +1.3.6.1.4.1.2620.1.42.8.1.4.32365|2|25 +1.3.6.1.4.1.2620.1.42.8.1.4.47436|2|31 +1.3.6.1.4.1.2620.1.42.8.1.4.49361|2|12 +1.3.6.1.4.1.2620.1.42.8.1.4.52713|2|27 +1.3.6.1.4.1.2620.1.42.8.1.4.57160|2|1 +1.3.6.1.4.1.2620.1.42.8.1.4.59523|2|16 +1.3.6.1.4.1.2620.1.42.8.1.4.60699|2|23 +1.3.6.1.4.1.2620.1.42.8.1.5.20313|4x|6b657074204a61646564 +1.3.6.1.4.1.2620.1.42.8.1.5.29903|4x|7a6f6d626965732062757420717561696e746c79 +1.3.6.1.4.1.2620.1.42.8.1.5.30761|4x|6f78656e20666f727761726420746865697220627574206b657074204a6164656420717561696e746c79206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.5.32365|4x|64726976696e6720666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.5.47436|4x|6b657074206f78656e2062757420717561696e746c79204a61646564206f78656e206b65707420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.42.8.1.5.49361|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.5.52713|4x|666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.42.8.1.5.57160|4x|666f7277617264204a6164656420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.42.8.1.5.59523|4x|6163746564204a61646564206163746564207468656972 +1.3.6.1.4.1.2620.1.42.8.1.5.60699|4x|6b657074204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.42.8.1.6.20313|2|15 +1.3.6.1.4.1.2620.1.42.8.1.6.29903|2|28 +1.3.6.1.4.1.2620.1.42.8.1.6.30761|2|8 +1.3.6.1.4.1.2620.1.42.8.1.6.32365|2|31 +1.3.6.1.4.1.2620.1.42.8.1.6.47436|2|21 +1.3.6.1.4.1.2620.1.42.8.1.6.49361|2|19 +1.3.6.1.4.1.2620.1.42.8.1.6.52713|2|21 +1.3.6.1.4.1.2620.1.42.8.1.6.57160|2|13 +1.3.6.1.4.1.2620.1.42.8.1.6.59523|2|17 +1.3.6.1.4.1.2620.1.42.8.1.6.60699|2|27 +1.3.6.1.4.1.2620.1.42.9.1.1.3560|66|3560 +1.3.6.1.4.1.2620.1.42.9.1.1.3851|66|3851 +1.3.6.1.4.1.2620.1.42.9.1.1.5012|66|5012 +1.3.6.1.4.1.2620.1.42.9.1.1.21820|66|21820 +1.3.6.1.4.1.2620.1.42.9.1.1.24307|66|24307 +1.3.6.1.4.1.2620.1.42.9.1.1.40285|66|40285 +1.3.6.1.4.1.2620.1.42.9.1.1.52436|66|52436 +1.3.6.1.4.1.2620.1.42.9.1.1.57839|66|57839 +1.3.6.1.4.1.2620.1.42.9.1.1.58995|66|58995 +1.3.6.1.4.1.2620.1.42.9.1.1.63227|66|63227 +1.3.6.1.4.1.2620.1.42.9.1.2.3560|4x|6f78656e2062757420717561696e746c79207468656972204a61646564207468656972 +1.3.6.1.4.1.2620.1.42.9.1.2.3851|4x|6b657074207468656972206b657074206b657074207a6f6d6269657320627574206f78656e207468656972 +1.3.6.1.4.1.2620.1.42.9.1.2.5012|4x|6f78656e20746865697220746865697220666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.2.21820|4x|4a61646564206f78656e2062757420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.42.9.1.2.24307|4x|4a61646564204a6164656420627574206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.2.40285|4x|7a6f6d62696573206b65707420616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.2.52436|4x|666f7277617264204a61646564206b657074206f78656e206163746564207a6f6d6269657320666f72776172642064726976696e6720627574 +1.3.6.1.4.1.2620.1.42.9.1.2.57839|4x|6f78656e207a6f6d62696573207a6f6d62696573207468656972206f78656e207a6f6d62696573206163746564204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.2.58995|4x|6f78656e204a6164656420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.2.63227|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.3.3560|4|but +1.3.6.1.4.1.2620.1.42.9.1.3.3851|4x|616374656420666f727761726420627574204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.42.9.1.3.5012|4|zombies +1.3.6.1.4.1.2620.1.42.9.1.3.21820|4x|717561696e746c7920746865697220666f7277617264207468656972204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.3.24307|4x|666f7277617264206b657074204a61646564207468656972 +1.3.6.1.4.1.2620.1.42.9.1.3.40285|4x|7468656972206275742064726976696e6720627574 +1.3.6.1.4.1.2620.1.42.9.1.3.52436|4x|4a61646564207468656972207a6f6d62696573204a61646564206f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.42.9.1.3.57839|4x|627574206275742074686569722062757420666f72776172642064726976696e67204a61646564207468656972204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.3.58995|4x|717561696e746c7920717561696e746c79206b657074207468656972206f78656e204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.3.63227|4x|6b657074206b6570742064726976696e67206f78656e206163746564 +1.3.6.1.4.1.2620.1.42.9.1.4.3560|4x|616374656420746865697220627574207a6f6d62696573207a6f6d6269657320746865697220717561696e746c792064726976696e67206b657074 +1.3.6.1.4.1.2620.1.42.9.1.4.3851|4|forward +1.3.6.1.4.1.2620.1.42.9.1.4.5012|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.42.9.1.4.21820|4x|6f78656e2074686569722064726976696e6720627574206b657074206f78656e206163746564 +1.3.6.1.4.1.2620.1.42.9.1.4.24307|4x|666f7277617264207468656972206b657074207a6f6d62696573206275742074686569722064726976696e672064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.42.9.1.4.40285|4x|7468656972206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.4.52436|4x|717561696e746c7920627574207a6f6d6269657320627574204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.42.9.1.4.57839|4x|6b657074206f78656e207468656972206163746564206163746564 +1.3.6.1.4.1.2620.1.42.9.1.4.58995|4x|717561696e746c792064726976696e67206f78656e20666f727761726420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.42.9.1.4.63227|4x|7a6f6d626965732062757420717561696e746c79206163746564206163746564 +1.3.6.1.4.1.2620.1.42.9.1.5.3560|4x|7a6f6d626965732064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.5.3851|4x|6b657074206163746564206f78656e20717561696e746c7920717561696e746c79206f78656e20627574207468656972 +1.3.6.1.4.1.2620.1.42.9.1.5.5012|4x|666f727761726420666f72776172642064726976696e67206f78656e206b657074 +1.3.6.1.4.1.2620.1.42.9.1.5.21820|4|their +1.3.6.1.4.1.2620.1.42.9.1.5.24307|4x|6b6570742062757420616374656420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.42.9.1.5.40285|4|zombies +1.3.6.1.4.1.2620.1.42.9.1.5.52436|4x|4a61646564206f78656e20666f7277617264206b65707420627574206b657074 +1.3.6.1.4.1.2620.1.42.9.1.5.57839|4x|666f7277617264207a6f6d626965732064726976696e67206b65707420717561696e746c7920666f7277617264206f78656e206b657074204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.5.58995|4x|4a6164656420717561696e746c792064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.42.9.1.5.63227|4|their +1.3.6.1.4.1.2620.1.43.1.1.0|4x|61637465642074686569722074686569722061637465642064726976696e6720627574 +1.3.6.1.4.1.2620.1.43.1.2.0|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.43.1.3.0|4x|64726976696e6720717561696e746c79204a6164656420746865697220717561696e746c7920746865697220666f7277617264207468656972206b657074 +1.3.6.1.4.1.2620.1.43.2.1.0|4x|717561696e746c7920666f7277617264206b657074206f78656e204a616465642064726976696e67204a61646564204a61646564207468656972 +1.3.6.1.4.1.2620.1.43.2.2.0|4x|717561696e746c79206b6570742064726976696e6720666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.43.2.3.0|4x|64726976696e6720666f7277617264207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.43.2.4.0|4x|666f7277617264206f78656e2062757420717561696e746c79207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.43.3.1.0|2|1 +1.3.6.1.4.1.2620.1.43.3.2.0|4x|6f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.43.101.0|2|3 +1.3.6.1.4.1.2620.1.43.102.0|4x|62757420666f7277617264 +1.3.6.1.4.1.2620.1.43.103.0|4x|717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.1.2213|66|2213 +1.3.6.1.4.1.2620.1.44.1.1.1.1.9576|66|9576 +1.3.6.1.4.1.2620.1.44.1.1.1.1.9685|66|9685 +1.3.6.1.4.1.2620.1.44.1.1.1.1.30366|66|30366 +1.3.6.1.4.1.2620.1.44.1.1.1.1.30757|66|30757 +1.3.6.1.4.1.2620.1.44.1.1.1.1.40292|66|40292 +1.3.6.1.4.1.2620.1.44.1.1.1.1.45039|66|45039 +1.3.6.1.4.1.2620.1.44.1.1.1.1.51637|66|51637 +1.3.6.1.4.1.2620.1.44.1.1.1.1.62524|66|62524 +1.3.6.1.4.1.2620.1.44.1.1.1.1.62847|66|62847 +1.3.6.1.4.1.2620.1.44.1.1.1.2.2213|4x|6163746564204a61646564204a616465642064726976696e67207468656972206f78656e206b65707420746865697220627574 +1.3.6.1.4.1.2620.1.44.1.1.1.2.9576|4x|6f78656e20717561696e746c79206b657074206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.2.9685|4x|64726976696e67206f78656e2064726976696e6720746865697220627574204a6164656420627574207468656972206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.2.30366|4x|746865697220666f7277617264206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.2.30757|4x|6b657074206b657074206f78656e20616374656420717561696e746c7920717561696e746c79207a6f6d6269657320746865697220627574 +1.3.6.1.4.1.2620.1.44.1.1.1.2.40292|4x|7468656972207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.44.1.1.1.2.45039|4x|64726976696e67206f78656e204a61646564204a616465642062757420627574206275742064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.2.51637|4|driving +1.3.6.1.4.1.2620.1.44.1.1.1.2.62524|4x|627574206f78656e20627574206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.2.62847|4x|7468656972206b65707420627574 +1.3.6.1.4.1.2620.1.44.1.1.1.3.2213|4x|7468656972206f78656e204a616465642074686569722062757420666f7277617264207468656972206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.3.9576|4x|7a6f6d62696573207468656972206275742064726976696e67204a61646564206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.3.9685|4x|64726976696e6720746865697220746865697220627574207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.3.30366|4x|64726976696e672061637465642061637465642064726976696e6720746865697220717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.3.30757|4|zombies +1.3.6.1.4.1.2620.1.44.1.1.1.3.40292|4x|6f78656e20746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.3.45039|4|oxen +1.3.6.1.4.1.2620.1.44.1.1.1.3.51637|4x|64726976696e67207a6f6d62696573207a6f6d62696573204a6164656420666f727761726420627574206b657074207468656972 +1.3.6.1.4.1.2620.1.44.1.1.1.3.62524|4x|4a6164656420616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.3.62847|4x|717561696e746c79206b657074206163746564204a61646564206163746564207a6f6d62696573207468656972204a61646564206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.4.2213|2|12 +1.3.6.1.4.1.2620.1.44.1.1.1.4.9576|2|20 +1.3.6.1.4.1.2620.1.44.1.1.1.4.9685|2|17 +1.3.6.1.4.1.2620.1.44.1.1.1.4.30366|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.4.30757|2|23 +1.3.6.1.4.1.2620.1.44.1.1.1.4.40292|2|10 +1.3.6.1.4.1.2620.1.44.1.1.1.4.45039|2|4 +1.3.6.1.4.1.2620.1.44.1.1.1.4.51637|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.4.62524|2|0 +1.3.6.1.4.1.2620.1.44.1.1.1.4.62847|2|24 +1.3.6.1.4.1.2620.1.44.1.1.1.5.2213|2|0 +1.3.6.1.4.1.2620.1.44.1.1.1.5.9576|2|14 +1.3.6.1.4.1.2620.1.44.1.1.1.5.9685|2|27 +1.3.6.1.4.1.2620.1.44.1.1.1.5.30366|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.5.30757|2|31 +1.3.6.1.4.1.2620.1.44.1.1.1.5.40292|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.5.45039|2|23 +1.3.6.1.4.1.2620.1.44.1.1.1.5.51637|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.5.62524|2|25 +1.3.6.1.4.1.2620.1.44.1.1.1.5.62847|2|30 +1.3.6.1.4.1.2620.1.44.1.1.1.6.2213|2|24 +1.3.6.1.4.1.2620.1.44.1.1.1.6.9576|2|17 +1.3.6.1.4.1.2620.1.44.1.1.1.6.9685|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.6.30366|2|28 +1.3.6.1.4.1.2620.1.44.1.1.1.6.30757|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.6.40292|2|7 +1.3.6.1.4.1.2620.1.44.1.1.1.6.45039|2|15 +1.3.6.1.4.1.2620.1.44.1.1.1.6.51637|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.6.62524|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.6.62847|2|15 +1.3.6.1.4.1.2620.1.44.1.1.1.7.2213|2|15 +1.3.6.1.4.1.2620.1.44.1.1.1.7.9576|2|30 +1.3.6.1.4.1.2620.1.44.1.1.1.7.9685|2|6 +1.3.6.1.4.1.2620.1.44.1.1.1.7.30366|2|5 +1.3.6.1.4.1.2620.1.44.1.1.1.7.30757|2|25 +1.3.6.1.4.1.2620.1.44.1.1.1.7.40292|2|7 +1.3.6.1.4.1.2620.1.44.1.1.1.7.45039|2|9 +1.3.6.1.4.1.2620.1.44.1.1.1.7.51637|2|3 +1.3.6.1.4.1.2620.1.44.1.1.1.7.62524|2|11 +1.3.6.1.4.1.2620.1.44.1.1.1.7.62847|2|24 +1.3.6.1.4.1.2620.1.44.1.1.1.8.2213|2|27 +1.3.6.1.4.1.2620.1.44.1.1.1.8.9576|2|9 +1.3.6.1.4.1.2620.1.44.1.1.1.8.9685|2|6 +1.3.6.1.4.1.2620.1.44.1.1.1.8.30366|2|30 +1.3.6.1.4.1.2620.1.44.1.1.1.8.30757|2|4 +1.3.6.1.4.1.2620.1.44.1.1.1.8.40292|2|29 +1.3.6.1.4.1.2620.1.44.1.1.1.8.45039|2|4 +1.3.6.1.4.1.2620.1.44.1.1.1.8.51637|2|20 +1.3.6.1.4.1.2620.1.44.1.1.1.8.62524|2|11 +1.3.6.1.4.1.2620.1.44.1.1.1.8.62847|2|2 +1.3.6.1.4.1.2620.1.44.1.1.1.9.2213|2|16 +1.3.6.1.4.1.2620.1.44.1.1.1.9.9576|2|18 +1.3.6.1.4.1.2620.1.44.1.1.1.9.9685|2|21 +1.3.6.1.4.1.2620.1.44.1.1.1.9.30366|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.9.30757|2|5 +1.3.6.1.4.1.2620.1.44.1.1.1.9.40292|2|31 +1.3.6.1.4.1.2620.1.44.1.1.1.9.45039|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.9.51637|2|3 +1.3.6.1.4.1.2620.1.44.1.1.1.9.62524|2|10 +1.3.6.1.4.1.2620.1.44.1.1.1.9.62847|2|12 +1.3.6.1.4.1.2620.1.44.1.1.1.10.2213|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.10.9576|2|10 +1.3.6.1.4.1.2620.1.44.1.1.1.10.9685|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.10.30366|2|11 +1.3.6.1.4.1.2620.1.44.1.1.1.10.30757|2|29 +1.3.6.1.4.1.2620.1.44.1.1.1.10.40292|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.10.45039|2|4 +1.3.6.1.4.1.2620.1.44.1.1.1.10.51637|2|15 +1.3.6.1.4.1.2620.1.44.1.1.1.10.62524|2|27 +1.3.6.1.4.1.2620.1.44.1.1.1.10.62847|2|8 +1.3.6.1.4.1.2620.1.44.1.1.1.11.2213|4x|616374656420616374656420746865697220746865697220616374656420666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.11.9576|4x|666f727761726420627574207a6f6d62696573206f78656e206163746564206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.11.9685|4|kept +1.3.6.1.4.1.2620.1.44.1.1.1.11.30366|4x|4a616465642061637465642064726976696e672062757420746865697220666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.11.30757|4x|6b657074207468656972206f78656e206f78656e2064726976696e67206163746564204a61646564207468656972204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.11.40292|4x|627574204a61646564206f78656e206b65707420627574206163746564206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.11.45039|4x|6b657074207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.2620.1.44.1.1.1.11.51637|4x|6163746564206163746564207a6f6d62696573204a61646564204a61646564204a61646564206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.11.62524|4x|61637465642064726976696e67204a6164656420627574206163746564206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.11.62847|4x|717561696e746c7920717561696e746c79207468656972206163746564206b6570742064726976696e67206163746564204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.12.2213|4x|6b657074206f78656e2064726976696e67206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.12.9576|4x|74686569722062757420666f727761726420627574 +1.3.6.1.4.1.2620.1.44.1.1.1.12.9685|4x|7a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.12.30366|4x|666f72776172642064726976696e6720666f7277617264204a6164656420717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.12.30757|4x|6b657074207468656972206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.12.40292|4x|7468656972206163746564206f78656e20666f72776172642064726976696e6720666f7277617264206b65707420666f727761726420627574 +1.3.6.1.4.1.2620.1.44.1.1.1.12.45039|4x|627574207468656972206163746564207a6f6d62696573206163746564207468656972 +1.3.6.1.4.1.2620.1.44.1.1.1.12.51637|4x|717561696e746c7920746865697220666f727761726420717561696e746c79206f78656e206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.12.62524|4|quaintly +1.3.6.1.4.1.2620.1.44.1.1.1.12.62847|4|oxen +1.3.6.1.4.1.2620.1.44.1.1.1.13.2213|4x|717561696e746c79206f78656e207a6f6d62696573206163746564206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.13.9576|4|Jaded +1.3.6.1.4.1.2620.1.44.1.1.1.13.9685|4x|6b65707420717561696e746c792074686569722064726976696e67204a6164656420627574206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.13.30366|4x|6f78656e2062757420717561696e746c7920717561696e746c79206f78656e20746865697220717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.13.30757|4x|64726976696e672064726976696e6720666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.13.40292|4x|7a6f6d62696573207a6f6d62696573206f78656e207a6f6d62696573206f78656e20627574206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.13.45039|4x|7a6f6d6269657320666f7277617264207a6f6d62696573204a61646564206f78656e20666f7277617264207468656972206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.13.51637|4x|627574204a616465642064726976696e6720717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.13.62524|4x|666f7277617264204a616465642064726976696e67206f78656e206f78656e206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.13.62847|4|but +1.3.6.1.4.1.2620.1.44.1.1.1.14.2213|4x|7468656972204a61646564207468656972206163746564204a6164656420627574 +1.3.6.1.4.1.2620.1.44.1.1.1.14.9576|4x|6b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.14.9685|4x|746865697220666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.14.30366|4x|7a6f6d6269657320666f727761726420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.14.30757|4x|7a6f6d62696573206f78656e207468656972206b657074204a61646564206f78656e20717561696e746c7920666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.14.40292|4x|717561696e746c79207468656972207a6f6d6269657320666f727761726420666f7277617264206f78656e20666f727761726420627574206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.14.45039|4x|62757420666f7277617264204a6164656420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.14.51637|4x|4a61646564206b6570742064726976696e672064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.14.62524|4x|4a61646564206f78656e2064726976696e6720717561696e746c79207a6f6d62696573206b657074206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.14.62847|4x|717561696e746c7920627574 +1.3.6.1.4.1.2620.1.44.1.1.1.15.2213|4x|64726976696e67204a61646564207468656972207a6f6d626965732064726976696e67206163746564206b657074207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.44.1.1.1.15.9576|4x|666f7277617264204a61646564206f78656e20616374656420666f7277617264204a616465642064726976696e6720627574 +1.3.6.1.4.1.2620.1.44.1.1.1.15.9685|4x|64726976696e67207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.15.30366|4x|717561696e746c7920746865697220717561696e746c79206f78656e20666f72776172642064726976696e67206b657074206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.15.30757|4|driving +1.3.6.1.4.1.2620.1.44.1.1.1.15.40292|4x|7a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.15.45039|4x|64726976696e67206163746564206163746564204a6164656420627574206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.15.51637|4x|627574206163746564207a6f6d62696573207a6f6d62696573206163746564207a6f6d62696573207468656972206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.15.62524|4x|6f78656e20627574206f78656e20717561696e746c7920717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.2620.1.44.1.1.1.15.62847|4x|6f78656e20717561696e746c79206b657074206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.16.2213|2|9 +1.3.6.1.4.1.2620.1.44.1.1.1.16.9576|2|27 +1.3.6.1.4.1.2620.1.44.1.1.1.16.9685|2|7 +1.3.6.1.4.1.2620.1.44.1.1.1.16.30366|2|20 +1.3.6.1.4.1.2620.1.44.1.1.1.16.30757|2|29 +1.3.6.1.4.1.2620.1.44.1.1.1.16.40292|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.16.45039|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.16.51637|2|11 +1.3.6.1.4.1.2620.1.44.1.1.1.16.62524|2|25 +1.3.6.1.4.1.2620.1.44.1.1.1.16.62847|2|7 +1.3.6.1.4.1.2620.1.44.11.0|4x|717561696e746c79204a6164656420627574206b657074 +1.3.6.1.4.1.2620.1.44.12.0|4x|6f78656e206163746564207468656972207468656972 +1.3.6.1.4.1.2620.1.44.13.0|4x|717561696e746c792064726976696e6720746865697220627574206f78656e2064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2620.1.44.14.0|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.44.15.0|4x|4a61646564207468656972206f78656e207a6f6d626965732064726976696e67207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.2620.1.44.16.0|4x|62757420717561696e746c7920666f7277617264206f78656e2074686569722062757420746865697220666f727761726420627574 +1.3.6.1.4.1.2620.1.44.17.0|4x|7a6f6d6269657320627574206f78656e +1.3.6.1.4.1.2620.1.44.18.0|2|16 +1.3.6.1.4.1.2620.1.44.19.0|2|8 +1.3.6.1.4.1.2620.1.44.20.0|4x|666f7277617264206163746564207468656972206275742064726976696e67 +1.3.6.1.4.1.2620.1.44.21.0|4x|61637465642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.44.22.0|4x|62757420616374656420666f727761726420666f727761726420746865697220666f7277617264206163746564 +1.3.6.1.4.1.2620.1.44.23.0|2|28 +1.3.6.1.4.1.2620.1.44.24.0|2|22 +1.3.6.1.4.1.2620.1.44.25.0|2|3 +1.3.6.1.4.1.2620.1.44.26.0|2|0 +1.3.6.1.4.1.2620.1.44.27.0|2|15 +1.3.6.1.4.1.2620.1.44.28.0|4x|4a6164656420717561696e746c7920627574207a6f6d62696573207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.44.29.0|4x|64726976696e6720666f727761726420666f7277617264207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.44.30.0|4x|64726976696e67207a6f6d626965732064726976696e672064726976696e6720666f727761726420666f72776172642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.44.31.0|4x|7a6f6d626965732064726976696e6720627574 +1.3.6.1.4.1.2620.1.44.32.0|4x|64726976696e67207a6f6d62696573206f78656e206b657074206b6570742064726976696e672064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.44.33.0|4x|64726976696e672064726976696e67204a6164656420717561696e746c79204a61646564207a6f6d626965732062757420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.44.34.0|4x|6163746564206f78656e206b657074 +1.3.6.1.4.1.2620.1.44.35.0|4x|6f78656e206b6570742064726976696e6720746865697220746865697220627574207468656972 +1.3.6.1.4.1.2620.1.44.36.0|4x|64726976696e67206163746564206f78656e +1.3.6.1.4.1.2620.1.44.37.0|2|22 +1.3.6.1.4.1.2620.1.44.38.0|4|acted +1.3.6.1.4.1.2620.1.44.101.0|2|31 +1.3.6.1.4.1.2620.1.44.102.0|4x|4a61646564207468656972206f78656e204a61646564206b65707420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.44.103.0|4x|717561696e746c7920717561696e746c7920627574206b657074206f78656e +1.3.6.1.4.1.2620.1.46.1.1.0|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.46.1.2.0|4|forward +1.3.6.1.4.1.2620.1.46.1.3.0|4x|62757420627574206163746564207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.46.1.4.0|4x|6f78656e206f78656e207a6f6d62696573207468656972206f78656e +1.3.6.1.4.1.2620.1.46.2.1.0|4x|6163746564206f78656e2062757420627574206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2620.1.46.2.2.0|4x|7a6f6d6269657320666f727761726420666f727761726420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.46.2.3.0|4x|7a6f6d62696573207a6f6d62696573207a6f6d62696573207a6f6d62696573206163746564206f78656e206b657074 +1.3.6.1.4.1.2620.1.46.3.1.0|4x|666f727761726420666f7277617264206b65707420717561696e746c79206f78656e206f78656e206f78656e206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.46.3.2.0|4x|6b657074207a6f6d62696573207a6f6d6269657320666f7277617264207468656972 +1.3.6.1.4.1.2620.1.46.3.3.0|4x|6b65707420616374656420627574206b657074 +1.3.6.1.4.1.2620.1.46.4.1.0|4x|627574206b65707420717561696e746c7920666f727761726420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.46.4.2.0|4x|74686569722064726976696e6720666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.46.4.3.0|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.46.5.1.0|4|Jaded +1.3.6.1.4.1.2620.1.46.5.2.0|4x|6f78656e2062757420627574207468656972207468656972 +1.3.6.1.4.1.2620.1.46.5.3.0|4x|666f7277617264204a61646564206163746564 +1.3.6.1.4.1.2620.1.46.5.4.0|4x|4a61646564204a61646564 +1.3.6.1.4.1.2620.1.46.101.0|2|23 +1.3.6.1.4.1.2620.1.46.102.0|4x|6b657074206f78656e20616374656420666f727761726420717561696e746c79206163746564207a6f6d62696573207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.46.103.0|4x|6b65707420627574207a6f6d6269657320717561696e746c79207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.49.16.0|4x|64726976696e67207a6f6d62696573204a6164656420717561696e746c792061637465642062757420666f7277617264206f78656e207468656972 +1.3.6.1.4.1.2620.1.49.17.0|4x|6b65707420627574 +1.3.6.1.4.1.2620.1.49.20.0|4x|717561696e746c79206b65707420616374656420627574206163746564207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.49.25.0|4x|6f78656e20627574204a61646564206b657074 +1.3.6.1.4.1.2620.1.49.26.0|4x|4a61646564206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.49.27.0|4x|666f72776172642064726976696e67206f78656e204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.49.101.0|2|14 +1.3.6.1.4.1.2620.1.49.102.0|4x|6f78656e204a61646564206f78656e207a6f6d6269657320717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.49.103.0|4x|717561696e746c79206275742064726976696e6720666f7277617264206f78656e206b65707420666f7277617264206163746564 +1.3.6.1.4.1.2620.500.9000.1.1.33.199.227.196|64x|21c7e3c4 +1.3.6.1.4.1.2620.500.9000.1.1.46.126.175.232|64x|2e7eafe8 +1.3.6.1.4.1.2620.500.9000.1.1.66.212.142.154|64x|42d48e9a +1.3.6.1.4.1.2620.500.9000.1.1.108.69.23.40|64x|6c451728 +1.3.6.1.4.1.2620.500.9000.1.1.118.248.172.83|64x|76f8ac53 +1.3.6.1.4.1.2620.500.9000.1.1.120.227.215.77|64x|78e3d74d +1.3.6.1.4.1.2620.500.9000.1.1.129.43.253.78|64x|812bfd4e +1.3.6.1.4.1.2620.500.9000.1.1.167.222.155.98|64x|a7de9b62 +1.3.6.1.4.1.2620.500.9000.1.1.210.189.204.118|64x|d2bdcc76 +1.3.6.1.4.1.2620.500.9000.1.1.249.167.247.111|64x|f9a7f76f +1.3.6.1.4.1.2620.500.9000.1.19.33.199.227.196|64x|f0a40c77 +1.3.6.1.4.1.2620.500.9000.1.19.46.126.175.232|64x|01cb5596 +1.3.6.1.4.1.2620.500.9000.1.19.66.212.142.154|64x|0f88f65b +1.3.6.1.4.1.2620.500.9000.1.19.108.69.23.40|64x|c47c0707 +1.3.6.1.4.1.2620.500.9000.1.19.118.248.172.83|64x|93959791 +1.3.6.1.4.1.2620.500.9000.1.19.120.227.215.77|64x|799f1b66 +1.3.6.1.4.1.2620.500.9000.1.19.129.43.253.78|64x|ff1c4886 +1.3.6.1.4.1.2620.500.9000.1.19.167.222.155.98|64x|929de240 +1.3.6.1.4.1.2620.500.9000.1.19.210.189.204.118|64x|53ca368f +1.3.6.1.4.1.2620.500.9000.1.19.249.167.247.111|64x|ca4be6d9 +1.3.6.1.4.1.2620.500.9000.1.20.33.199.227.196|2|3 +1.3.6.1.4.1.2620.500.9000.1.20.46.126.175.232|2|3 +1.3.6.1.4.1.2620.500.9000.1.20.66.212.142.154|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.108.69.23.40|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.118.248.172.83|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.120.227.215.77|2|3 +1.3.6.1.4.1.2620.500.9000.1.20.129.43.253.78|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.167.222.155.98|2|3 +1.3.6.1.4.1.2620.500.9000.1.20.210.189.204.118|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.249.167.247.111|2|3 +1.3.6.1.4.1.2620.500.9000.1.21.33.199.227.196|2|25 +1.3.6.1.4.1.2620.500.9000.1.21.46.126.175.232|2|5 +1.3.6.1.4.1.2620.500.9000.1.21.66.212.142.154|2|31 +1.3.6.1.4.1.2620.500.9000.1.21.108.69.23.40|2|0 +1.3.6.1.4.1.2620.500.9000.1.21.118.248.172.83|2|10 +1.3.6.1.4.1.2620.500.9000.1.21.120.227.215.77|2|4 +1.3.6.1.4.1.2620.500.9000.1.21.129.43.253.78|2|2 +1.3.6.1.4.1.2620.500.9000.1.21.167.222.155.98|2|3 +1.3.6.1.4.1.2620.500.9000.1.21.210.189.204.118|2|23 +1.3.6.1.4.1.2620.500.9000.1.21.249.167.247.111|2|2 +1.3.6.1.4.1.2620.500.9000.1.22.33.199.227.196|2|25 +1.3.6.1.4.1.2620.500.9000.1.22.46.126.175.232|2|15 +1.3.6.1.4.1.2620.500.9000.1.22.66.212.142.154|2|13 +1.3.6.1.4.1.2620.500.9000.1.22.108.69.23.40|2|26 +1.3.6.1.4.1.2620.500.9000.1.22.118.248.172.83|2|8 +1.3.6.1.4.1.2620.500.9000.1.22.120.227.215.77|2|26 +1.3.6.1.4.1.2620.500.9000.1.22.129.43.253.78|2|20 +1.3.6.1.4.1.2620.500.9000.1.22.167.222.155.98|2|7 +1.3.6.1.4.1.2620.500.9000.1.22.210.189.204.118|2|10 +1.3.6.1.4.1.2620.500.9000.1.22.249.167.247.111|2|19 +1.3.6.1.4.1.2620.500.9000.1.23.33.199.227.196|2|22 +1.3.6.1.4.1.2620.500.9000.1.23.46.126.175.232|2|17 +1.3.6.1.4.1.2620.500.9000.1.23.66.212.142.154|2|20 +1.3.6.1.4.1.2620.500.9000.1.23.108.69.23.40|2|22 +1.3.6.1.4.1.2620.500.9000.1.23.118.248.172.83|2|28 +1.3.6.1.4.1.2620.500.9000.1.23.120.227.215.77|2|15 +1.3.6.1.4.1.2620.500.9000.1.23.129.43.253.78|2|3 +1.3.6.1.4.1.2620.500.9000.1.23.167.222.155.98|2|8 +1.3.6.1.4.1.2620.500.9000.1.23.210.189.204.118|2|10 +1.3.6.1.4.1.2620.500.9000.1.23.249.167.247.111|2|0 +1.3.6.1.4.1.2620.500.9000.1.24.33.199.227.196|2|4 +1.3.6.1.4.1.2620.500.9000.1.24.46.126.175.232|2|13 +1.3.6.1.4.1.2620.500.9000.1.24.66.212.142.154|2|27 +1.3.6.1.4.1.2620.500.9000.1.24.108.69.23.40|2|29 +1.3.6.1.4.1.2620.500.9000.1.24.118.248.172.83|2|15 +1.3.6.1.4.1.2620.500.9000.1.24.120.227.215.77|2|2 +1.3.6.1.4.1.2620.500.9000.1.24.129.43.253.78|2|0 +1.3.6.1.4.1.2620.500.9000.1.24.167.222.155.98|2|13 +1.3.6.1.4.1.2620.500.9000.1.24.210.189.204.118|2|25 +1.3.6.1.4.1.2620.500.9000.1.24.249.167.247.111|2|18 +1.3.6.1.4.1.2620.500.9000.1.25.33.199.227.196|2|19 +1.3.6.1.4.1.2620.500.9000.1.25.46.126.175.232|2|19 +1.3.6.1.4.1.2620.500.9000.1.25.66.212.142.154|2|17 +1.3.6.1.4.1.2620.500.9000.1.25.108.69.23.40|2|26 +1.3.6.1.4.1.2620.500.9000.1.25.118.248.172.83|2|19 +1.3.6.1.4.1.2620.500.9000.1.25.120.227.215.77|2|20 +1.3.6.1.4.1.2620.500.9000.1.25.129.43.253.78|2|30 +1.3.6.1.4.1.2620.500.9000.1.25.167.222.155.98|2|26 +1.3.6.1.4.1.2620.500.9000.1.25.210.189.204.118|2|10 +1.3.6.1.4.1.2620.500.9000.1.25.249.167.247.111|2|31 +1.3.6.1.4.1.2620.500.9000.1.26.33.199.227.196|4x|4a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.2620.500.9000.1.26.46.126.175.232|4x|627574207468656972204a61646564 +1.3.6.1.4.1.2620.500.9000.1.26.66.212.142.154|4x|61637465642064726976696e6720666f72776172642064726976696e67207a6f6d62696573206163746564206163746564206f78656e +1.3.6.1.4.1.2620.500.9000.1.26.108.69.23.40|4x|7a6f6d62696573204a6164656420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.2620.500.9000.1.26.118.248.172.83|4x|64726976696e67207a6f6d626965732064726976696e6720666f72776172642062757420746865697220627574207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.500.9000.1.26.120.227.215.77|4x|6b6570742061637465642064726976696e6720666f727761726420717561696e746c79206b65707420666f7277617264 +1.3.6.1.4.1.2620.500.9000.1.26.129.43.253.78|4x|627574207468656972206f78656e20666f7277617264206b657074 +1.3.6.1.4.1.2620.500.9000.1.26.167.222.155.98|4x|6b657074206b657074 +1.3.6.1.4.1.2620.500.9000.1.26.210.189.204.118|4x|6163746564207a6f6d626965732062757420627574206f78656e +1.3.6.1.4.1.2620.500.9000.1.26.249.167.247.111|4x|7468656972204a61646564 +1.3.6.1.4.1.2620.500.9000.1.27.33.199.227.196|2|9 +1.3.6.1.4.1.2620.500.9000.1.27.46.126.175.232|2|2 +1.3.6.1.4.1.2620.500.9000.1.27.66.212.142.154|2|5 +1.3.6.1.4.1.2620.500.9000.1.27.108.69.23.40|2|7 +1.3.6.1.4.1.2620.500.9000.1.27.118.248.172.83|2|5 +1.3.6.1.4.1.2620.500.9000.1.27.120.227.215.77|2|9 +1.3.6.1.4.1.2620.500.9000.1.27.129.43.253.78|2|9 +1.3.6.1.4.1.2620.500.9000.1.27.167.222.155.98|2|9 +1.3.6.1.4.1.2620.500.9000.1.27.210.189.204.118|2|2 +1.3.6.1.4.1.2620.500.9000.1.27.249.167.247.111|2|2 +1.3.6.1.4.1.2620.500.9000.1.28.33.199.227.196|2|4 +1.3.6.1.4.1.2620.500.9000.1.28.46.126.175.232|2|4 +1.3.6.1.4.1.2620.500.9000.1.28.66.212.142.154|2|3 +1.3.6.1.4.1.2620.500.9000.1.28.108.69.23.40|2|2 +1.3.6.1.4.1.2620.500.9000.1.28.118.248.172.83|2|3 +1.3.6.1.4.1.2620.500.9000.1.28.120.227.215.77|2|4 +1.3.6.1.4.1.2620.500.9000.1.28.129.43.253.78|2|3 +1.3.6.1.4.1.2620.500.9000.1.28.167.222.155.98|2|1 +1.3.6.1.4.1.2620.500.9000.1.28.210.189.204.118|2|2 +1.3.6.1.4.1.2620.500.9000.1.28.249.167.247.111|2|5 +1.3.6.1.4.1.2620.500.9000.1.29.33.199.227.196|2|9 +1.3.6.1.4.1.2620.500.9000.1.29.46.126.175.232|2|26 +1.3.6.1.4.1.2620.500.9000.1.29.66.212.142.154|2|22 +1.3.6.1.4.1.2620.500.9000.1.29.108.69.23.40|2|17 +1.3.6.1.4.1.2620.500.9000.1.29.118.248.172.83|2|0 +1.3.6.1.4.1.2620.500.9000.1.29.120.227.215.77|2|17 +1.3.6.1.4.1.2620.500.9000.1.29.129.43.253.78|2|8 +1.3.6.1.4.1.2620.500.9000.1.29.167.222.155.98|2|6 +1.3.6.1.4.1.2620.500.9000.1.29.210.189.204.118|2|14 +1.3.6.1.4.1.2620.500.9000.1.29.249.167.247.111|2|17 +1.3.6.1.4.1.2620.500.9002.1.1.3.29.123.204|64x|031d7bcc +1.3.6.1.4.1.2620.500.9002.1.1.9.35.229.234|64x|0923e5ea +1.3.6.1.4.1.2620.500.9002.1.1.40.82.179.97|64x|2852b361 +1.3.6.1.4.1.2620.500.9002.1.1.43.214.97.166|64x|2bd661a6 +1.3.6.1.4.1.2620.500.9002.1.1.76.230.249.240|64x|4ce6f9f0 +1.3.6.1.4.1.2620.500.9002.1.1.79.28.104.141|64x|4f1c688d +1.3.6.1.4.1.2620.500.9002.1.1.87.46.179.8|64x|572eb308 +1.3.6.1.4.1.2620.500.9002.1.1.129.155.25.70|64x|819b1946 +1.3.6.1.4.1.2620.500.9002.1.1.135.75.254.24|64x|874bfe18 +1.3.6.1.4.1.2620.500.9002.1.1.162.208.10.5|64x|a2d00a05 +1.3.6.1.4.1.2620.500.9002.1.2.3.29.123.204|4x|717561696e746c79206b657074207a6f6d6269657320666f7277617264204a61646564206b657074 +1.3.6.1.4.1.2620.500.9002.1.2.9.35.229.234|4x|616374656420666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.2.40.82.179.97|4x|746865697220627574207a6f6d62696573207468656972206f78656e +1.3.6.1.4.1.2620.500.9002.1.2.43.214.97.166|4x|62757420616374656420717561696e746c7920627574206163746564207468656972204a61646564 +1.3.6.1.4.1.2620.500.9002.1.2.76.230.249.240|4x|6f78656e204a61646564206b6570742062757420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.500.9002.1.2.79.28.104.141|4x|6f78656e207468656972 +1.3.6.1.4.1.2620.500.9002.1.2.87.46.179.8|4x|7a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.2.129.155.25.70|4x|7a6f6d62696573206b65707420717561696e746c79207468656972 +1.3.6.1.4.1.2620.500.9002.1.2.135.75.254.24|4x|62757420717561696e746c79 +1.3.6.1.4.1.2620.500.9002.1.2.162.208.10.5|4x|666f7277617264206b657074206163746564206275742062757420627574206b657074206f78656e20666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.3.3.29.123.204|2|4 +1.3.6.1.4.1.2620.500.9002.1.3.9.35.229.234|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.40.82.179.97|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.43.214.97.166|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.76.230.249.240|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.79.28.104.141|2|4 +1.3.6.1.4.1.2620.500.9002.1.3.87.46.179.8|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.129.155.25.70|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.135.75.254.24|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.162.208.10.5|2|3 +1.3.6.1.4.1.2620.500.9002.1.4.3.29.123.204|4x|4a61646564206b6570742074686569722064726976696e67 +1.3.6.1.4.1.2620.500.9002.1.4.9.35.229.234|4x|6163746564206b657074207468656972206f78656e206f78656e206b657074207468656972 +1.3.6.1.4.1.2620.500.9002.1.4.40.82.179.97|4x|74686569722064726976696e67204a61646564207a6f6d62696573206b657074204a61646564206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.4.43.214.97.166|4x|717561696e746c7920666f727761726420616374656420627574206b657074204a61646564206163746564207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.500.9002.1.4.76.230.249.240|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.2620.500.9002.1.4.79.28.104.141|4|driving +1.3.6.1.4.1.2620.500.9002.1.4.87.46.179.8|4x|62757420717561696e746c79207a6f6d6269657320666f727761726420666f7277617264207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.500.9002.1.4.129.155.25.70|4x|717561696e746c79207468656972 +1.3.6.1.4.1.2620.500.9002.1.4.135.75.254.24|4x|666f727761726420627574 +1.3.6.1.4.1.2620.500.9002.1.4.162.208.10.5|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.2620.500.9002.1.5.3.29.123.204|64x|bcb0ee9f +1.3.6.1.4.1.2620.500.9002.1.5.9.35.229.234|64x|461ddd83 +1.3.6.1.4.1.2620.500.9002.1.5.40.82.179.97|64x|d4a23bd8 +1.3.6.1.4.1.2620.500.9002.1.5.43.214.97.166|64x|f512c661 +1.3.6.1.4.1.2620.500.9002.1.5.76.230.249.240|64x|0e7f11ba +1.3.6.1.4.1.2620.500.9002.1.5.79.28.104.141|64x|35bd9d4a +1.3.6.1.4.1.2620.500.9002.1.5.87.46.179.8|64x|0da67bf2 +1.3.6.1.4.1.2620.500.9002.1.5.129.155.25.70|64x|1241299b +1.3.6.1.4.1.2620.500.9002.1.5.135.75.254.24|64x|bdef3db0 +1.3.6.1.4.1.2620.500.9002.1.5.162.208.10.5|64x|fd93a4ac +1.3.6.1.4.1.2620.500.9002.1.6.3.29.123.204|4x|616374656420717561696e746c79207468656972206f78656e20627574 +1.3.6.1.4.1.2620.500.9002.1.6.9.35.229.234|4x|717561696e746c792064726976696e6720666f72776172642062757420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.500.9002.1.6.40.82.179.97|4|driving +1.3.6.1.4.1.2620.500.9002.1.6.43.214.97.166|4|zombies +1.3.6.1.4.1.2620.500.9002.1.6.76.230.249.240|4x|4a61646564206b65707420666f7277617264204a61646564206f78656e206f78656e20717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.2620.500.9002.1.6.79.28.104.141|4x|4a61646564207468656972206f78656e207468656972206163746564206f78656e207468656972 +1.3.6.1.4.1.2620.500.9002.1.6.87.46.179.8|4x|6b657074206163746564 +1.3.6.1.4.1.2620.500.9002.1.6.129.155.25.70|4x|717561696e746c79206f78656e204a6164656420666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.6.135.75.254.24|4x|6f78656e207a6f6d62696573207468656972206b657074207468656972 +1.3.6.1.4.1.2620.500.9002.1.6.162.208.10.5|4x|6b65707420666f7277617264207468656972 +1.3.6.1.4.1.2620.500.9002.1.7.3.29.123.204|64x|8c5c3e90 +1.3.6.1.4.1.2620.500.9002.1.7.9.35.229.234|64x|419c0d50 +1.3.6.1.4.1.2620.500.9002.1.7.40.82.179.97|64x|616d486b +1.3.6.1.4.1.2620.500.9002.1.7.43.214.97.166|64x|3e4888f1 +1.3.6.1.4.1.2620.500.9002.1.7.76.230.249.240|64x|eafc19b1 +1.3.6.1.4.1.2620.500.9002.1.7.79.28.104.141|64x|0627affd +1.3.6.1.4.1.2620.500.9002.1.7.87.46.179.8|64x|2e3692d5 +1.3.6.1.4.1.2620.500.9002.1.7.129.155.25.70|64x|97f97807 +1.3.6.1.4.1.2620.500.9002.1.7.135.75.254.24|64x|576f580f +1.3.6.1.4.1.2620.500.9002.1.7.162.208.10.5|64x|3d1dcf86 +1.3.6.1.4.1.2620.500.9002.1.8.3.29.123.204|2|0 +1.3.6.1.4.1.2620.500.9002.1.8.9.35.229.234|2|0 +1.3.6.1.4.1.2620.500.9002.1.8.40.82.179.97|2|1 +1.3.6.1.4.1.2620.500.9002.1.8.43.214.97.166|2|0 +1.3.6.1.4.1.2620.500.9002.1.8.76.230.249.240|2|2 +1.3.6.1.4.1.2620.500.9002.1.8.79.28.104.141|2|0 +1.3.6.1.4.1.2620.500.9002.1.8.87.46.179.8|2|2 +1.3.6.1.4.1.2620.500.9002.1.8.129.155.25.70|2|2 +1.3.6.1.4.1.2620.500.9002.1.8.135.75.254.24|2|2 +1.3.6.1.4.1.2620.500.9002.1.8.162.208.10.5|2|2 +1.3.6.1.4.1.2620.500.9002.1.9.3.29.123.204|2|2 +1.3.6.1.4.1.2620.500.9002.1.9.9.35.229.234|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.40.82.179.97|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.43.214.97.166|2|2 +1.3.6.1.4.1.2620.500.9002.1.9.76.230.249.240|2|2 +1.3.6.1.4.1.2620.500.9002.1.9.79.28.104.141|2|1 +1.3.6.1.4.1.2620.500.9002.1.9.87.46.179.8|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.129.155.25.70|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.135.75.254.24|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.162.208.10.5|2|0 +1.3.6.1.4.1.2620.500.9002.1.10.3.29.123.204|2|3 +1.3.6.1.4.1.2620.500.9002.1.10.9.35.229.234|2|1 +1.3.6.1.4.1.2620.500.9002.1.10.40.82.179.97|2|2 +1.3.6.1.4.1.2620.500.9002.1.10.43.214.97.166|2|3 +1.3.6.1.4.1.2620.500.9002.1.10.76.230.249.240|2|3 +1.3.6.1.4.1.2620.500.9002.1.10.79.28.104.141|2|1 +1.3.6.1.4.1.2620.500.9002.1.10.87.46.179.8|2|3 +1.3.6.1.4.1.2620.500.9002.1.10.129.155.25.70|2|1 +1.3.6.1.4.1.2620.500.9002.1.10.135.75.254.24|2|2 +1.3.6.1.4.1.2620.500.9002.1.10.162.208.10.5|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.3.29.123.204|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.9.35.229.234|2|2 +1.3.6.1.4.1.2620.500.9002.1.11.40.82.179.97|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.43.214.97.166|2|2 +1.3.6.1.4.1.2620.500.9002.1.11.76.230.249.240|2|2 +1.3.6.1.4.1.2620.500.9002.1.11.79.28.104.141|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.87.46.179.8|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.129.155.25.70|2|2 +1.3.6.1.4.1.2620.500.9002.1.11.135.75.254.24|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.162.208.10.5|2|1 +1.3.6.1.4.1.2620.500.9003.1.1.38.64.229.219|64x|2640e5db +1.3.6.1.4.1.2620.500.9003.1.1.41.203.72.238|64x|29cb48ee +1.3.6.1.4.1.2620.500.9003.1.1.54.78.86.56|64x|364e5638 +1.3.6.1.4.1.2620.500.9003.1.1.55.152.115.196|64x|379873c4 +1.3.6.1.4.1.2620.500.9003.1.1.60.242.137.213|64x|3cf289d5 +1.3.6.1.4.1.2620.500.9003.1.1.98.19.200.197|64x|6213c8c5 +1.3.6.1.4.1.2620.500.9003.1.1.139.251.136.61|64x|8bfb883d +1.3.6.1.4.1.2620.500.9003.1.1.147.118.185.135|64x|9376b987 +1.3.6.1.4.1.2620.500.9003.1.1.199.246.13.174|64x|c7f60dae +1.3.6.1.4.1.2620.500.9003.1.1.241.64.12.155|64x|f1400c9b +1.3.6.1.4.1.2620.500.9003.1.2.38.64.229.219|4x|717561696e746c7920616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.500.9003.1.2.41.203.72.238|4x|7468656972206f78656e206f78656e20666f7277617264204a6164656420666f7277617264 +1.3.6.1.4.1.2620.500.9003.1.2.54.78.86.56|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.2620.500.9003.1.2.55.152.115.196|4x|7468656972207a6f6d62696573206f78656e20746865697220717561696e746c7920717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.2620.500.9003.1.2.60.242.137.213|4|but +1.3.6.1.4.1.2620.500.9003.1.2.98.19.200.197|4x|6f78656e206f78656e2064726976696e6720717561696e746c79206b657074 +1.3.6.1.4.1.2620.500.9003.1.2.139.251.136.61|4x|7a6f6d6269657320666f727761726420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.2620.500.9003.1.2.147.118.185.135|4|zombies +1.3.6.1.4.1.2620.500.9003.1.2.199.246.13.174|4x|666f7277617264207a6f6d62696573206f78656e2064726976696e6720666f72776172642074686569722064726976696e67207468656972206163746564 +1.3.6.1.4.1.2620.500.9003.1.2.241.64.12.155|4|Jaded +1.3.6.1.4.1.2620.500.9003.1.3.38.64.229.219|2|3 +1.3.6.1.4.1.2620.500.9003.1.3.41.203.72.238|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.54.78.86.56|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.55.152.115.196|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.60.242.137.213|2|3 +1.3.6.1.4.1.2620.500.9003.1.3.98.19.200.197|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.139.251.136.61|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.147.118.185.135|2|3 +1.3.6.1.4.1.2620.500.9003.1.3.199.246.13.174|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.241.64.12.155|2|3 +1.3.6.1.4.1.2620.500.9003.1.4.38.64.229.219|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.500.9003.1.4.41.203.72.238|4x|666f7277617264204a6164656420666f727761726420666f727761726420666f727761726420746865697220627574207468656972 +1.3.6.1.4.1.2620.500.9003.1.4.54.78.86.56|4x|4a616465642064726976696e67 +1.3.6.1.4.1.2620.500.9003.1.4.55.152.115.196|4x|6f78656e20717561696e746c79204a61646564204a61646564 +1.3.6.1.4.1.2620.500.9003.1.4.60.242.137.213|4x|7468656972207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.2620.500.9003.1.4.98.19.200.197|4x|61637465642064726976696e672064726976696e6720717561696e746c79206f78656e +1.3.6.1.4.1.2620.500.9003.1.4.139.251.136.61|4|oxen +1.3.6.1.4.1.2620.500.9003.1.4.147.118.185.135|4x|64726976696e67206f78656e204a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.500.9003.1.4.199.246.13.174|4x|6b6570742064726976696e67207468656972206275742074686569722064726976696e67206163746564207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.500.9003.1.4.241.64.12.155|4x|746865697220666f7277617264207a6f6d62696573206f78656e2064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.500.9003.1.5.38.64.229.219|64x|93de6caa +1.3.6.1.4.1.2620.500.9003.1.5.41.203.72.238|64x|e3b44887 +1.3.6.1.4.1.2620.500.9003.1.5.54.78.86.56|64x|27783acb +1.3.6.1.4.1.2620.500.9003.1.5.55.152.115.196|64x|a34d81f8 +1.3.6.1.4.1.2620.500.9003.1.5.60.242.137.213|64x|d3a249a7 +1.3.6.1.4.1.2620.500.9003.1.5.98.19.200.197|64x|90c677a2 +1.3.6.1.4.1.2620.500.9003.1.5.139.251.136.61|64x|6bf0648c +1.3.6.1.4.1.2620.500.9003.1.5.147.118.185.135|64x|f9e143b5 +1.3.6.1.4.1.2620.500.9003.1.5.199.246.13.174|64x|1c647dc8 +1.3.6.1.4.1.2620.500.9003.1.5.241.64.12.155|64x|3399b278 +1.3.6.1.4.1.2620.500.9003.1.6.38.64.229.219|64x|927b89e9 +1.3.6.1.4.1.2620.500.9003.1.6.41.203.72.238|64x|06f4c3cf +1.3.6.1.4.1.2620.500.9003.1.6.54.78.86.56|64x|e3a4ea53 +1.3.6.1.4.1.2620.500.9003.1.6.55.152.115.196|64x|7acc51ea +1.3.6.1.4.1.2620.500.9003.1.6.60.242.137.213|64x|db022351 +1.3.6.1.4.1.2620.500.9003.1.6.98.19.200.197|64x|5525f43a +1.3.6.1.4.1.2620.500.9003.1.6.139.251.136.61|64x|3a2b1365 +1.3.6.1.4.1.2620.500.9003.1.6.147.118.185.135|64x|c773a393 +1.3.6.1.4.1.2620.500.9003.1.6.199.246.13.174|64x|ea50f047 +1.3.6.1.4.1.2620.500.9003.1.6.241.64.12.155|64x|7e70e950 +1.3.6.1.4.1.2620.500.9003.1.7.38.64.229.219|64x|3ae9f0cb +1.3.6.1.4.1.2620.500.9003.1.7.41.203.72.238|64x|9ea57746 +1.3.6.1.4.1.2620.500.9003.1.7.54.78.86.56|64x|dc35e3f7 +1.3.6.1.4.1.2620.500.9003.1.7.55.152.115.196|64x|56112b40 +1.3.6.1.4.1.2620.500.9003.1.7.60.242.137.213|64x|65a8cd28 +1.3.6.1.4.1.2620.500.9003.1.7.98.19.200.197|64x|4c9cda64 +1.3.6.1.4.1.2620.500.9003.1.7.139.251.136.61|64x|01667af4 +1.3.6.1.4.1.2620.500.9003.1.7.147.118.185.135|64x|597d8c0b +1.3.6.1.4.1.2620.500.9003.1.7.199.246.13.174|64x|cf609e29 +1.3.6.1.4.1.2620.500.9003.1.7.241.64.12.155|64x|cbd61c34 +1.3.6.1.4.1.2620.500.9003.1.8.38.64.229.219|2|2 +1.3.6.1.4.1.2620.500.9003.1.8.41.203.72.238|2|0 +1.3.6.1.4.1.2620.500.9003.1.8.54.78.86.56|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.55.152.115.196|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.60.242.137.213|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.98.19.200.197|2|2 +1.3.6.1.4.1.2620.500.9003.1.8.139.251.136.61|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.147.118.185.135|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.199.246.13.174|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.241.64.12.155|2|2 +1.3.6.1.4.1.2620.500.9003.1.9.38.64.229.219|2|0 +1.3.6.1.4.1.2620.500.9003.1.9.41.203.72.238|2|2 +1.3.6.1.4.1.2620.500.9003.1.9.54.78.86.56|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.55.152.115.196|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.60.242.137.213|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.98.19.200.197|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.139.251.136.61|2|0 +1.3.6.1.4.1.2620.500.9003.1.9.147.118.185.135|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.199.246.13.174|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.241.64.12.155|2|2 +1.3.6.1.4.1.2620.500.9003.1.10.38.64.229.219|2|2 +1.3.6.1.4.1.2620.500.9003.1.10.41.203.72.238|2|2 +1.3.6.1.4.1.2620.500.9003.1.10.54.78.86.56|2|3 +1.3.6.1.4.1.2620.500.9003.1.10.55.152.115.196|2|3 +1.3.6.1.4.1.2620.500.9003.1.10.60.242.137.213|2|3 +1.3.6.1.4.1.2620.500.9003.1.10.98.19.200.197|2|3 +1.3.6.1.4.1.2620.500.9003.1.10.139.251.136.61|2|1 +1.3.6.1.4.1.2620.500.9003.1.10.147.118.185.135|2|2 +1.3.6.1.4.1.2620.500.9003.1.10.199.246.13.174|2|1 +1.3.6.1.4.1.2620.500.9003.1.10.241.64.12.155|2|2 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-asa-5525.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-asa-5525.snmprec new file mode 100644 index 0000000000000..8184c651523c9 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-asa-5525.snmprec @@ -0,0 +1,1478 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.1408 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.5.0|4|kept +1.3.6.1.2.1.2.2.1.1.11|2|11 +1.3.6.1.2.1.2.2.1.2.11|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.3.11|2|29 +1.3.6.1.2.1.2.2.1.4.11|2|10 +1.3.6.1.2.1.2.2.1.5.11|66|842689539 +1.3.6.1.2.1.2.2.1.6.11|4x|00 +1.3.6.1.2.1.2.2.1.7.11|2|2 +1.3.6.1.2.1.2.2.1.8.11|2|7 +1.3.6.1.2.1.2.2.1.9.11|67|4043941980 +1.3.6.1.2.1.2.2.1.10.11|65|2268799121 +1.3.6.1.2.1.2.2.1.11.11|65|1358081555 +1.3.6.1.2.1.2.2.1.12.11|65|2804916297 +1.3.6.1.2.1.2.2.1.13.11|65|1953269825 +1.3.6.1.2.1.2.2.1.14.11|65|3659465164 +1.3.6.1.2.1.2.2.1.15.11|65|3028473442 +1.3.6.1.2.1.2.2.1.16.11|65|2204618213 +1.3.6.1.2.1.2.2.1.17.11|65|3659357157 +1.3.6.1.2.1.2.2.1.18.11|65|1946069301 +1.3.6.1.2.1.2.2.1.19.11|65|1976763204 +1.3.6.1.2.1.2.2.1.20.11|65|1287028500 +1.3.6.1.2.1.2.2.1.21.11|66|3693484051 +1.3.6.1.2.1.6.5.0|65|2858992486 +1.3.6.1.2.1.6.6.0|65|4156312381 +1.3.6.1.2.1.6.7.0|65|2022233107 +1.3.6.1.2.1.6.8.0|65|2434846008 +1.3.6.1.2.1.6.9.0|66|3859114747 +1.3.6.1.2.1.6.10.0|65|443704958 +1.3.6.1.2.1.6.11.0|65|761536386 +1.3.6.1.2.1.6.12.0|65|3742055603 +1.3.6.1.2.1.6.13.1.1.23.177.97.199.10.151.211.52.249.28|2|12 +1.3.6.1.2.1.6.13.1.1.113.156.27.12.6.103.49.217.167.25|2|8 +1.3.6.1.2.1.6.13.1.1.122.61.54.190.29.172.169.37.170.22|2|5 +1.3.6.1.2.1.6.13.1.1.148.215.184.93.3.18.135.204.247.11|2|9 +1.3.6.1.2.1.6.13.1.1.192.71.88.207.22.184.150.214.61.14|2|12 +1.3.6.1.2.1.6.13.1.1.215.10.127.204.23.126.210.252.1.27|2|7 +1.3.6.1.2.1.6.13.1.1.223.16.55.201.31.104.212.252.181.5|2|9 +1.3.6.1.2.1.6.13.1.1.223.54.125.172.16.159.226.236.17.1|2|5 +1.3.6.1.2.1.6.13.1.1.227.50.96.2.2.215.88.85.244.22|2|3 +1.3.6.1.2.1.6.13.1.1.254.4.140.40.29.214.201.146.122.0|2|1 +1.3.6.1.2.1.6.13.1.2.23.177.97.199.10.151.211.52.249.28|64x|17b161c7 +1.3.6.1.2.1.6.13.1.2.113.156.27.12.6.103.49.217.167.25|64x|719c1b0c +1.3.6.1.2.1.6.13.1.2.122.61.54.190.29.172.169.37.170.22|64x|7a3d36be +1.3.6.1.2.1.6.13.1.2.148.215.184.93.3.18.135.204.247.11|64x|94d7b85d +1.3.6.1.2.1.6.13.1.2.192.71.88.207.22.184.150.214.61.14|64x|c04758cf +1.3.6.1.2.1.6.13.1.2.215.10.127.204.23.126.210.252.1.27|64x|d70a7fcc +1.3.6.1.2.1.6.13.1.2.223.16.55.201.31.104.212.252.181.5|64x|df1037c9 +1.3.6.1.2.1.6.13.1.2.223.54.125.172.16.159.226.236.17.1|64x|df367dac +1.3.6.1.2.1.6.13.1.2.227.50.96.2.2.215.88.85.244.22|64x|e3326002 +1.3.6.1.2.1.6.13.1.2.254.4.140.40.29.214.201.146.122.0|64x|fe048c28 +1.3.6.1.2.1.6.13.1.3.23.177.97.199.10.151.211.52.249.28|2|10 +1.3.6.1.2.1.6.13.1.3.113.156.27.12.6.103.49.217.167.25|2|6 +1.3.6.1.2.1.6.13.1.3.122.61.54.190.29.172.169.37.170.22|2|29 +1.3.6.1.2.1.6.13.1.3.148.215.184.93.3.18.135.204.247.11|2|3 +1.3.6.1.2.1.6.13.1.3.192.71.88.207.22.184.150.214.61.14|2|22 +1.3.6.1.2.1.6.13.1.3.215.10.127.204.23.126.210.252.1.27|2|23 +1.3.6.1.2.1.6.13.1.3.223.16.55.201.31.104.212.252.181.5|2|31 +1.3.6.1.2.1.6.13.1.3.223.54.125.172.16.159.226.236.17.1|2|16 +1.3.6.1.2.1.6.13.1.3.227.50.96.2.2.215.88.85.244.22|2|2 +1.3.6.1.2.1.6.13.1.3.254.4.140.40.29.214.201.146.122.0|2|29 +1.3.6.1.2.1.6.13.1.4.23.177.97.199.10.151.211.52.249.28|64x|97d334f9 +1.3.6.1.2.1.6.13.1.4.113.156.27.12.6.103.49.217.167.25|64x|6731d9a7 +1.3.6.1.2.1.6.13.1.4.122.61.54.190.29.172.169.37.170.22|64x|aca925aa +1.3.6.1.2.1.6.13.1.4.148.215.184.93.3.18.135.204.247.11|64x|1287ccf7 +1.3.6.1.2.1.6.13.1.4.192.71.88.207.22.184.150.214.61.14|64x|b896d63d +1.3.6.1.2.1.6.13.1.4.215.10.127.204.23.126.210.252.1.27|64x|7ed2fc01 +1.3.6.1.2.1.6.13.1.4.223.16.55.201.31.104.212.252.181.5|64x|68d4fcb5 +1.3.6.1.2.1.6.13.1.4.223.54.125.172.16.159.226.236.17.1|64x|9fe2ec11 +1.3.6.1.2.1.6.13.1.4.227.50.96.2.2.215.88.85.244.22|64x|d75855f4 +1.3.6.1.2.1.6.13.1.4.254.4.140.40.29.214.201.146.122.0|64x|d6c9927a +1.3.6.1.2.1.6.13.1.5.23.177.97.199.10.151.211.52.249.28|2|28 +1.3.6.1.2.1.6.13.1.5.113.156.27.12.6.103.49.217.167.25|2|25 +1.3.6.1.2.1.6.13.1.5.122.61.54.190.29.172.169.37.170.22|2|22 +1.3.6.1.2.1.6.13.1.5.148.215.184.93.3.18.135.204.247.11|2|11 +1.3.6.1.2.1.6.13.1.5.192.71.88.207.22.184.150.214.61.14|2|14 +1.3.6.1.2.1.6.13.1.5.215.10.127.204.23.126.210.252.1.27|2|27 +1.3.6.1.2.1.6.13.1.5.223.16.55.201.31.104.212.252.181.5|2|5 +1.3.6.1.2.1.6.13.1.5.223.54.125.172.16.159.226.236.17.1|2|1 +1.3.6.1.2.1.6.13.1.5.227.50.96.2.2.215.88.85.244.22|2|22 +1.3.6.1.2.1.6.13.1.5.254.4.140.40.29.214.201.146.122.0|2|0 +1.3.6.1.2.1.6.14.0|65|2935824574 +1.3.6.1.2.1.6.15.0|65|1544900307 +1.3.6.1.2.1.6.17.0|70|16581522528925471079 +1.3.6.1.2.1.6.18.0|70|3369991573516953990 +1.3.6.1.2.1.7.2.0|65|3998586035 +1.3.6.1.2.1.7.3.0|65|3549343151 +1.3.6.1.2.1.7.4.0|65|2404484755 +1.3.6.1.2.1.7.5.1.1.2.141.239.85.23|64x|028def55 +1.3.6.1.2.1.7.5.1.1.20.60.66.67.23|64x|143c4243 +1.3.6.1.2.1.7.5.1.1.42.145.113.188.16|64x|2a9171bc +1.3.6.1.2.1.7.5.1.1.78.118.31.86.2|64x|4e761f56 +1.3.6.1.2.1.7.5.1.1.85.153.183.119.31|64x|5599b777 +1.3.6.1.2.1.7.5.1.1.87.237.140.144.26|64x|57ed8c90 +1.3.6.1.2.1.7.5.1.1.145.214.51.243.3|64x|91d633f3 +1.3.6.1.2.1.7.5.1.1.169.8.79.103.26|64x|a9084f67 +1.3.6.1.2.1.7.5.1.1.172.6.61.73.19|64x|ac063d49 +1.3.6.1.2.1.7.5.1.1.209.91.67.71.4|64x|d15b4347 +1.3.6.1.2.1.7.5.1.2.2.141.239.85.23|2|23 +1.3.6.1.2.1.7.5.1.2.20.60.66.67.23|2|23 +1.3.6.1.2.1.7.5.1.2.42.145.113.188.16|2|16 +1.3.6.1.2.1.7.5.1.2.78.118.31.86.2|2|2 +1.3.6.1.2.1.7.5.1.2.85.153.183.119.31|2|31 +1.3.6.1.2.1.7.5.1.2.87.237.140.144.26|2|26 +1.3.6.1.2.1.7.5.1.2.145.214.51.243.3|2|3 +1.3.6.1.2.1.7.5.1.2.169.8.79.103.26|2|26 +1.3.6.1.2.1.7.5.1.2.172.6.61.73.19|2|19 +1.3.6.1.2.1.7.5.1.2.209.91.67.71.4|2|4 +1.3.6.1.2.1.7.7.1.1.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|2|0 +1.3.6.1.2.1.7.7.1.1.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|2|0 +1.3.6.1.2.1.7.7.1.1.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|2|1 +1.3.6.1.2.1.7.7.1.1.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|2|2 +1.3.6.1.2.1.7.7.1.1.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|2|2 +1.3.6.1.2.1.7.7.1.1.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|2|2 +1.3.6.1.2.1.7.7.1.1.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|2|2 +1.3.6.1.2.1.7.7.1.1.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|2|3 +1.3.6.1.2.1.7.7.1.1.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|2|4 +1.3.6.1.2.1.7.7.1.1.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|2|4 +1.3.6.1.2.1.7.7.1.2.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|4|their +1.3.6.1.2.1.7.7.1.2.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|4x|4a61646564206b65707420627574206b657074 +1.3.6.1.2.1.7.7.1.2.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|4x|717561696e746c79206b6570742064726976696e67206b6570742074686569722062757420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|4x|746865697220666f7277617264204a61646564 +1.3.6.1.2.1.7.7.1.2.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|4x|627574206163746564206b65707420627574206f78656e207468656972 +1.3.6.1.2.1.7.7.1.2.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|4x|666f727761726420666f727761726420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|4x|64726976696e67207468656972206b657074206163746564204a61646564207a6f6d62696573206163746564206b657074 +1.3.6.1.2.1.7.7.1.2.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|4x|717561696e746c79207a6f6d626965732062757420627574206b657074 +1.3.6.1.2.1.7.7.1.2.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|4x|4a61646564204a6164656420717561696e746c79206f78656e206f78656e204a6164656420627574206163746564 +1.3.6.1.2.1.7.7.1.2.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|4x|717561696e746c7920666f727761726420627574207a6f6d626965732064726976696e67204a61646564207a6f6d62696573 +1.3.6.1.2.1.7.7.1.3.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|59995 +1.3.6.1.2.1.7.7.1.3.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|13615 +1.3.6.1.2.1.7.7.1.3.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|17513 +1.3.6.1.2.1.7.7.1.3.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|2480 +1.3.6.1.2.1.7.7.1.3.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|37036 +1.3.6.1.2.1.7.7.1.3.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|20490 +1.3.6.1.2.1.7.7.1.3.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|30354 +1.3.6.1.2.1.7.7.1.3.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|6240 +1.3.6.1.2.1.7.7.1.3.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|29265 +1.3.6.1.2.1.7.7.1.3.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|27397 +1.3.6.1.2.1.7.7.1.4.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|2|0 +1.3.6.1.2.1.7.7.1.4.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|2|2 +1.3.6.1.2.1.7.7.1.4.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|2|16 +1.3.6.1.2.1.7.7.1.4.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|2|0 +1.3.6.1.2.1.7.7.1.4.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|2|3 +1.3.6.1.2.1.7.7.1.4.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|2|16 +1.3.6.1.2.1.7.7.1.4.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|2|3 +1.3.6.1.2.1.7.7.1.4.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|2|4 +1.3.6.1.2.1.7.7.1.4.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|2|1 +1.3.6.1.2.1.7.7.1.4.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|2|3 +1.3.6.1.2.1.7.7.1.5.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|4x|6163746564207a6f6d62696573207468656972204a61646564206b657074 +1.3.6.1.2.1.7.7.1.5.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|4x|7a6f6d62696573207a6f6d62696573206b65707420666f7277617264206b657074206b657074204a6164656420627574207468656972 +1.3.6.1.2.1.7.7.1.5.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|4x|666f7277617264206f78656e204a61646564 +1.3.6.1.2.1.7.7.1.5.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|4x|4a616465642064726976696e6720616374656420616374656420627574204a61646564207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|4x|64726976696e67206f78656e206b65707420717561696e746c79207468656972207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|4x|717561696e746c79206163746564 +1.3.6.1.2.1.7.7.1.5.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|4x|6275742074686569722062757420717561696e746c79206b657074 +1.3.6.1.2.1.7.7.1.5.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|4|their +1.3.6.1.2.1.7.7.1.5.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|4x|7a6f6d626965732074686569722064726976696e672062757420717561696e746c79207a6f6d626965732074686569722064726976696e67207468656972 +1.3.6.1.2.1.7.7.1.5.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|4x|62757420666f7277617264 +1.3.6.1.2.1.7.7.1.6.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|55726 +1.3.6.1.2.1.7.7.1.6.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|28531 +1.3.6.1.2.1.7.7.1.6.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|11079 +1.3.6.1.2.1.7.7.1.6.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|36798 +1.3.6.1.2.1.7.7.1.6.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|16811 +1.3.6.1.2.1.7.7.1.6.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|48634 +1.3.6.1.2.1.7.7.1.6.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|47173 +1.3.6.1.2.1.7.7.1.6.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|64624 +1.3.6.1.2.1.7.7.1.6.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|50219 +1.3.6.1.2.1.7.7.1.6.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|29145 +1.3.6.1.2.1.7.7.1.7.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|774 +1.3.6.1.2.1.7.7.1.7.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|32766 +1.3.6.1.2.1.7.7.1.7.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|42521 +1.3.6.1.2.1.7.7.1.7.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|62779 +1.3.6.1.2.1.7.7.1.7.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|47504 +1.3.6.1.2.1.7.7.1.7.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|55881 +1.3.6.1.2.1.7.7.1.7.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|30456 +1.3.6.1.2.1.7.7.1.7.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|29068 +1.3.6.1.2.1.7.7.1.7.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|30734 +1.3.6.1.2.1.7.7.1.7.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|33093 +1.3.6.1.2.1.7.7.1.8.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|22659 +1.3.6.1.2.1.7.7.1.8.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|19353 +1.3.6.1.2.1.7.7.1.8.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|61976 +1.3.6.1.2.1.7.7.1.8.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|61206 +1.3.6.1.2.1.7.7.1.8.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|14129 +1.3.6.1.2.1.7.7.1.8.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|59181 +1.3.6.1.2.1.7.7.1.8.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|15936 +1.3.6.1.2.1.7.7.1.8.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|5023 +1.3.6.1.2.1.7.7.1.8.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|22219 +1.3.6.1.2.1.7.7.1.8.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|45286 +1.3.6.1.2.1.7.8.0|70|6116206687099577350 +1.3.6.1.2.1.7.9.0|70|60548728080473664 +1.3.6.1.2.1.31.1.1.1.1.11|4x|65746830 +1.3.6.1.2.1.31.1.1.1.2.11|65|3971642957 +1.3.6.1.2.1.31.1.1.1.3.11|65|3271801795 +1.3.6.1.2.1.31.1.1.1.4.11|65|3342364789 +1.3.6.1.2.1.31.1.1.1.5.11|65|3388467146 +1.3.6.1.2.1.31.1.1.1.6.11|70|14670660891743438939 +1.3.6.1.2.1.31.1.1.1.7.11|70|10886984631120028416 +1.3.6.1.2.1.31.1.1.1.8.11|70|17994136813414766052 +1.3.6.1.2.1.31.1.1.1.9.11|70|10439183159610289289 +1.3.6.1.2.1.31.1.1.1.10.11|70|2583386891169315520 +1.3.6.1.2.1.31.1.1.1.11.11|70|8885889412380302445 +1.3.6.1.2.1.31.1.1.1.12.11|70|10885548970511406028 +1.3.6.1.2.1.31.1.1.1.13.11|70|10028224865574503284 +1.3.6.1.2.1.31.1.1.1.15.11|66|31298329 +1.3.6.1.2.1.99.1.1.1.1.31|2|9 +1.3.6.1.2.1.99.1.1.1.2.31|2|3 +1.3.6.1.2.1.99.1.1.1.3.31|2|6 +1.3.6.1.2.1.99.1.1.1.4.31|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.1.8|2|8 +1.3.6.1.4.1.9.9.13.1.3.1.1.11|2|11 +1.3.6.1.4.1.9.9.13.1.3.1.1.13|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.1.14|2|14 +1.3.6.1.4.1.9.9.13.1.3.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.3.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.3.1.2.3|4x|7468656972207a6f6d62696573207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.13.1.3.1.2.6|4x|64726976696e672064726976696e67206b657074206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.8|4x|7a6f6d626965732062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.11|4x|61637465642064726976696e67204a61646564206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.13|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.14|4|oxen +1.3.6.1.4.1.9.9.13.1.3.1.2.20|4x|6b657074206f78656e +1.3.6.1.4.1.9.9.13.1.3.1.2.21|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.13.1.3.1.2.31|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.3.3|66|3930379735 +1.3.6.1.4.1.9.9.13.1.3.1.3.6|66|2258658671 +1.3.6.1.4.1.9.9.13.1.3.1.3.8|66|3213289584 +1.3.6.1.4.1.9.9.13.1.3.1.3.11|66|978410705 +1.3.6.1.4.1.9.9.13.1.3.1.3.13|66|2328456073 +1.3.6.1.4.1.9.9.13.1.3.1.3.14|66|952183581 +1.3.6.1.4.1.9.9.13.1.3.1.3.20|66|2877883263 +1.3.6.1.4.1.9.9.13.1.3.1.3.21|66|3953080519 +1.3.6.1.4.1.9.9.13.1.3.1.3.31|66|414726588 +1.3.6.1.4.1.9.9.13.1.3.1.4.3|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.4.6|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.4.8|2|1 +1.3.6.1.4.1.9.9.13.1.3.1.4.11|2|29 +1.3.6.1.4.1.9.9.13.1.3.1.4.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.4.14|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.4.20|2|23 +1.3.6.1.4.1.9.9.13.1.3.1.4.21|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.4.31|2|5 +1.3.6.1.4.1.9.9.13.1.3.1.5.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.5.6|2|7 +1.3.6.1.4.1.9.9.13.1.3.1.5.8|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.5.11|2|26 +1.3.6.1.4.1.9.9.13.1.3.1.5.13|2|30 +1.3.6.1.4.1.9.9.13.1.3.1.5.14|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.5.20|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.5.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.5.31|2|28 +1.3.6.1.4.1.9.9.13.1.3.1.6.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.8|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.11|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.14|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.20|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.21|2|4 +1.3.6.1.4.1.9.9.13.1.3.1.6.31|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.1.4|2|4 +1.3.6.1.4.1.9.9.13.1.4.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.1.7|2|7 +1.3.6.1.4.1.9.9.13.1.4.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.4.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.4.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.4.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.4.1.1.27|2|27 +1.3.6.1.4.1.9.9.13.1.4.1.1.30|2|30 +1.3.6.1.4.1.9.9.13.1.4.1.2.4|4|fan_1 +1.3.6.1.4.1.9.9.13.1.4.1.2.6|4|fan_2 +1.3.6.1.4.1.9.9.13.1.4.1.2.7|4|fan_3 +1.3.6.1.4.1.9.9.13.1.4.1.2.16|4|fan_4 +1.3.6.1.4.1.9.9.13.1.4.1.2.22|4|fan_5 +1.3.6.1.4.1.9.9.13.1.4.1.2.25|4|fan_6 +1.3.6.1.4.1.9.9.13.1.4.1.2.27|4|fan_7 +1.3.6.1.4.1.9.9.13.1.4.1.2.30|4|fan_8 +1.3.6.1.4.1.9.9.13.1.4.1.3.4|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.7|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.16|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.21|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.22|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.27|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.30|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.1.0|2|0 +1.3.6.1.4.1.9.9.13.1.5.1.1.5|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.5.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.5.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.5.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.5.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.5.1.1.26|2|26 +1.3.6.1.4.1.9.9.13.1.5.1.1.29|2|29 +1.3.6.1.4.1.9.9.13.1.5.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.5.1.2.0|4x|666f7277617264206f78656e206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.5|4|Jaded +1.3.6.1.4.1.9.9.13.1.5.1.2.16|4x|62757420717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.5.1.2.20|4|quaintly +1.3.6.1.4.1.9.9.13.1.5.1.2.21|4x|64726976696e6720717561696e746c7920616374656420627574207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.2.22|4x|62757420627574 +1.3.6.1.4.1.9.9.13.1.5.1.2.25|4x|6163746564206b6570742064726976696e67206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.26|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.9.9.13.1.5.1.2.29|4x|746865697220746865697220616374656420666f7277617264 +1.3.6.1.4.1.9.9.13.1.5.1.2.31|4x|4a616465642064726976696e67207468656972207468656972207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.3.0|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.3.5|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.16|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.20|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.22|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.26|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.31|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.4.0|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.5|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.16|2|4 +1.3.6.1.4.1.9.9.13.1.5.1.4.20|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.22|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.25|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.26|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.4.31|2|1 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.1|2|22 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.7|2|21 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.10|2|17 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.13|2|6 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.15|2|20 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.18|2|8 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.20|2|16 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.1|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.7|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.10|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.13|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.15|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.18|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.20|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.1|2|3 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.7|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.10|2|6 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.13|2|4 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.15|2|6 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.18|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.20|2|6 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.1|66|2223021701 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.7|66|917475738 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.10|66|631313195 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.13|66|2637486476 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.15|66|30159574 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.18|66|3370367591 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.20|66|1617271034 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.1|2|13 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.7|2|30 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.10|2|2 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.13|2|21 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.15|2|19 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.18|2|20 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.20|2|27 +1.3.6.1.4.1.9.9.48.1.1.1.1.18|2|18 +1.3.6.1.4.1.9.9.48.1.1.1.2.18|4|test_pool +1.3.6.1.4.1.9.9.48.1.1.1.3.18|2|23 +1.3.6.1.4.1.9.9.48.1.1.1.4.18|2|1 +1.3.6.1.4.1.9.9.48.1.1.1.5.18|66|4078680985 +1.3.6.1.4.1.9.9.48.1.1.1.6.18|66|3648996318 +1.3.6.1.4.1.9.9.48.1.1.1.7.18|66|3283078931 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.712|66|712 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.7746|66|7746 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.712|2|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.7746|2|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.712|66|90 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.7746|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.712|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.7746|66|4 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.712|66|50 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.712|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.7746|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.712|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.712|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.712|66|15518 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.7746|66|38028 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.712|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.7746|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.712|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.7746|66|7 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.712|66|353 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.7746|66|727588670 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.712|66|248 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.7746|66|1683542536 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.3|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.4|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.5|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.7|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.16|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.17|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.24|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.25|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.3|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.4|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.5|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.7|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.11|2|6 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.16|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.17|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.24|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.25|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.3|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.4|2|14 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.5|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.7|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.11|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.16|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.17|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.24|2|8 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.25|2|29 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.3|4x|6f78656e207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.4|4x|4a6164656420717561696e746c79204a6164656420627574207a6f6d6269657320717561696e746c79207a6f6d6269657320666f7277617264206b657074 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.5|4x|74686569722064726976696e67206b657074206f78656e2064726976696e6720666f7277617264207468656972 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.7|4x|6b65707420666f727761726420627574207468656972206275742064726976696e67207a6f6d6269657320746865697220717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.11|4|quaintly +1.3.6.1.4.1.9.9.117.1.1.2.1.4.16|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.17|4x|6f78656e206b65707420627574207a6f6d6269657320717561696e746c7920627574206f78656e +1.3.6.1.4.1.9.9.117.1.1.2.1.4.24|4x|4a61646564207a6f6d626965732061637465642064726976696e67207468656972207a6f6d6269657320666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.25|4x|6275742064726976696e67204a61646564206275742062757420627574 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.3|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.4|2|24 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.5|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.7|2|23 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.11|2|20 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.16|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.17|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.24|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.25|2|0 +1.3.6.1.4.1.9.9.117.1.1.3.0|2|10 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.2|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.7|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.8|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.21|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.26|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.27|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.30|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.31|2|1 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.1.3|2|3 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.3|4|Secondary unit +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.5|4|Primary unit +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.6|4|Failover LAN Interface +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.3|2|2 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.5|2|8 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.6|2|9 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.1.47596.5|66|47596 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.1.50035.2|66|50035 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.2.47596.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.2.50035.2|2|2 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.3.47596.5|4x|64726976696e67206b6570742064726976696e67207468656972204a61646564204a61646564206b65707420627574206b657074 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.3.50035.2|4x|717561696e746c7920627574207468656972206275742064726976696e67 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.4.47596.5|66|759866853 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.4.50035.2|66|3000607411 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.5.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.8.1|2|8 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.20.2|2|20 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.5.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.8.1|2|1 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.20.2|2|2 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.5.5|4x|627574206b657074207468656972206f78656e20666f72776172642064726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.8.1|4|test_conn +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.20.2|4x|4a6164656420746865697220627574204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.5.5|65|2025029234 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.8.1|65|2690303639 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.20.2|65|2586750173 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.5.5|66|20378309 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.20.2|66|4087850099 +1.3.6.1.4.1.9.9.171.1.1.1.0|2|20 +1.3.6.1.4.1.9.9.171.1.2.1.1.0|66|2517445787 +1.3.6.1.4.1.9.9.171.1.2.1.2.0|65|2082435314 +1.3.6.1.4.1.9.9.171.1.2.1.3.0|65|3586485799 +1.3.6.1.4.1.9.9.171.1.2.1.4.0|65|55415745 +1.3.6.1.4.1.9.9.171.1.2.1.5.0|65|2585066045 +1.3.6.1.4.1.9.9.171.1.2.1.6.0|65|2512419052 +1.3.6.1.4.1.9.9.171.1.2.1.7.0|65|787033253 +1.3.6.1.4.1.9.9.171.1.2.1.8.0|65|3554335867 +1.3.6.1.4.1.9.9.171.1.2.1.9.0|65|3427054745 +1.3.6.1.4.1.9.9.171.1.2.1.10.0|65|915529830 +1.3.6.1.4.1.9.9.171.1.2.1.11.0|65|1771994502 +1.3.6.1.4.1.9.9.171.1.2.1.12.0|65|2076367213 +1.3.6.1.4.1.9.9.171.1.2.1.13.0|65|123173035 +1.3.6.1.4.1.9.9.171.1.2.1.14.0|65|3653722608 +1.3.6.1.4.1.9.9.171.1.2.1.15.0|65|67753505 +1.3.6.1.4.1.9.9.171.1.2.1.16.0|65|2844371229 +1.3.6.1.4.1.9.9.171.1.2.1.17.0|65|654198838 +1.3.6.1.4.1.9.9.171.1.2.1.18.0|65|1314173894 +1.3.6.1.4.1.9.9.171.1.2.1.19.0|65|2721519379 +1.3.6.1.4.1.9.9.171.1.2.1.20.0|65|2355318485 +1.3.6.1.4.1.9.9.171.1.2.1.21.0|65|2650257281 +1.3.6.1.4.1.9.9.171.1.2.1.22.0|65|1030937622 +1.3.6.1.4.1.9.9.171.1.2.1.23.0|65|2780652506 +1.3.6.1.4.1.9.9.171.1.2.1.24.0|65|1045063375 +1.3.6.1.4.1.9.9.171.1.2.1.25.0|65|3776486351 +1.3.6.1.4.1.9.9.171.1.2.1.26.0|65|1216922190 +1.3.6.1.4.1.9.9.171.1.2.2.1.1.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.1.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|2 +1.3.6.1.4.1.9.9.171.1.2.2.1.2.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|6b6570742064726976696e67206275742064726976696e67206f78656e20666f7277617264204a6164656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.9.9.171.1.2.2.1.2.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4x|627574207a6f6d62696573206f78656e207468656972206b657074 +1.3.6.1.4.1.9.9.171.1.2.2.1.3.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.3.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.4.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|6b65707420666f7277617264207468656972 +1.3.6.1.4.1.9.9.171.1.2.2.1.4.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4x|717561696e746c792064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.171.1.2.2.1.5.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|30 +1.3.6.1.4.1.9.9.171.1.2.2.1.5.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|12 +1.3.6.1.4.1.9.9.171.1.2.2.1.6.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|4a61646564206b657074207468656972 +1.3.6.1.4.1.9.9.171.1.2.2.1.6.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4|kept +1.3.6.1.4.1.9.9.171.1.2.2.1.7.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.2.2.1.7.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4|kept +1.3.6.1.4.1.9.9.171.1.2.2.1.8.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|23 +1.3.6.1.4.1.9.9.171.1.2.2.1.8.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|31 +1.3.6.1.4.1.9.9.171.1.2.2.1.9.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|22 +1.3.6.1.4.1.9.9.171.1.2.2.1.9.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.1.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.3.1.2.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.2.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.3.3|4x|7468656972207a6f6d62696573207468656972207a6f6d62696573206b657074206f78656e +1.3.6.1.4.1.9.9.171.1.2.3.1.3.5|4x|7a6f6d62696573204a6164656420746865697220616374656420627574 +1.3.6.1.4.1.9.9.171.1.2.3.1.4.3|4|oxen +1.3.6.1.4.1.9.9.171.1.2.3.1.4.5|4x|6163746564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.2.3.1.5.3|4|oxen +1.3.6.1.4.1.9.9.171.1.2.3.1.5.5|4|but +1.3.6.1.4.1.9.9.171.1.2.3.1.6.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.6.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.7.3|4x|6163746564206b657074204a61646564206163746564 +1.3.6.1.4.1.9.9.171.1.2.3.1.7.5|4x|64726976696e67206f78656e206b65707420627574204a61646564207a6f6d62696573204a61646564 +1.3.6.1.4.1.9.9.171.1.2.3.1.8.3|4|kept +1.3.6.1.4.1.9.9.171.1.2.3.1.8.5|4x|6b657074207468656972204a61646564 +1.3.6.1.4.1.9.9.171.1.2.3.1.9.3|4x|6163746564206b657074207468656972207468656972 +1.3.6.1.4.1.9.9.171.1.2.3.1.9.5|4x|666f727761726420666f7277617264206b65707420717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.2.3.1.10.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.10.5|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.11.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.11.5|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.12.3|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.12.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.13.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.13.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.14.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.14.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.3.1.15.3|2|13 +1.3.6.1.4.1.9.9.171.1.2.3.1.15.5|2|28 +1.3.6.1.4.1.9.9.171.1.2.3.1.16.3|2|16 +1.3.6.1.4.1.9.9.171.1.2.3.1.16.5|2|0 +1.3.6.1.4.1.9.9.171.1.2.3.1.17.3|2|9 +1.3.6.1.4.1.9.9.171.1.2.3.1.17.5|2|23 +1.3.6.1.4.1.9.9.171.1.2.3.1.18.3|65|873863217 +1.3.6.1.4.1.9.9.171.1.2.3.1.18.5|65|4041389162 +1.3.6.1.4.1.9.9.171.1.2.3.1.19.3|65|444696945 +1.3.6.1.4.1.9.9.171.1.2.3.1.19.5|65|1429413108 +1.3.6.1.4.1.9.9.171.1.2.3.1.20.3|65|2526233032 +1.3.6.1.4.1.9.9.171.1.2.3.1.20.5|65|3931574972 +1.3.6.1.4.1.9.9.171.1.2.3.1.21.3|65|2479090364 +1.3.6.1.4.1.9.9.171.1.2.3.1.21.5|65|874183465 +1.3.6.1.4.1.9.9.171.1.2.3.1.22.3|65|888202948 +1.3.6.1.4.1.9.9.171.1.2.3.1.22.5|65|1610429217 +1.3.6.1.4.1.9.9.171.1.2.3.1.23.3|65|3462920250 +1.3.6.1.4.1.9.9.171.1.2.3.1.23.5|65|2151705546 +1.3.6.1.4.1.9.9.171.1.2.3.1.24.3|65|2565719801 +1.3.6.1.4.1.9.9.171.1.2.3.1.24.5|65|3395553994 +1.3.6.1.4.1.9.9.171.1.2.3.1.25.3|65|2228405074 +1.3.6.1.4.1.9.9.171.1.2.3.1.25.5|65|2624335244 +1.3.6.1.4.1.9.9.171.1.2.3.1.26.3|65|3006967537 +1.3.6.1.4.1.9.9.171.1.2.3.1.26.5|65|410051353 +1.3.6.1.4.1.9.9.171.1.2.3.1.27.3|65|1337714779 +1.3.6.1.4.1.9.9.171.1.2.3.1.27.5|65|1425712802 +1.3.6.1.4.1.9.9.171.1.2.3.1.28.3|65|2116873007 +1.3.6.1.4.1.9.9.171.1.2.3.1.28.5|65|1353332653 +1.3.6.1.4.1.9.9.171.1.2.3.1.29.3|65|3580869615 +1.3.6.1.4.1.9.9.171.1.2.3.1.29.5|65|715475082 +1.3.6.1.4.1.9.9.171.1.2.3.1.30.3|65|2249094174 +1.3.6.1.4.1.9.9.171.1.2.3.1.30.5|65|685279905 +1.3.6.1.4.1.9.9.171.1.2.3.1.31.3|65|2318835995 +1.3.6.1.4.1.9.9.171.1.2.3.1.31.5|65|3313898297 +1.3.6.1.4.1.9.9.171.1.2.3.1.32.3|65|990926535 +1.3.6.1.4.1.9.9.171.1.2.3.1.32.5|65|4004637148 +1.3.6.1.4.1.9.9.171.1.2.3.1.33.3|65|1674719135 +1.3.6.1.4.1.9.9.171.1.2.3.1.33.5|65|3116893031 +1.3.6.1.4.1.9.9.171.1.2.3.1.34.3|65|2142489467 +1.3.6.1.4.1.9.9.171.1.2.3.1.34.5|65|567516830 +1.3.6.1.4.1.9.9.171.1.2.3.1.35.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.35.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.4.1.1.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.1.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.2.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|4x|666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.171.1.2.4.1.2.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|4x|7468656972207a6f6d62696573206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.9.9.171.1.2.4.1.3.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.4.1.3.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.4.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|4x|627574206f78656e2064726976696e67207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.2.4.1.4.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|4x|7468656972204a61646564206b657074207a6f6d62696573207468656972206b65707420627574 +1.3.6.1.4.1.9.9.171.1.2.4.1.5.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|13 +1.3.6.1.4.1.9.9.171.1.2.4.1.5.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|24 +1.3.6.1.4.1.9.9.171.1.2.4.1.6.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.4.1.6.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|26 +1.3.6.1.4.1.9.9.171.1.2.4.1.7.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|23 +1.3.6.1.4.1.9.9.171.1.2.4.1.7.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|24 +1.3.6.1.4.1.9.9.171.1.2.5.1.1.2|66|3405348844 +1.3.6.1.4.1.9.9.171.1.2.5.1.1.17|66|1379037661 +1.3.6.1.4.1.9.9.171.1.2.5.1.2.2|65|88229005 +1.3.6.1.4.1.9.9.171.1.2.5.1.2.17|65|3030198713 +1.3.6.1.4.1.9.9.171.1.2.5.1.3.2|65|344910659 +1.3.6.1.4.1.9.9.171.1.2.5.1.3.17|65|33036840 +1.3.6.1.4.1.9.9.171.1.2.5.1.4.2|65|447299365 +1.3.6.1.4.1.9.9.171.1.2.5.1.4.17|65|538727845 +1.3.6.1.4.1.9.9.171.1.2.5.1.5.2|65|472834505 +1.3.6.1.4.1.9.9.171.1.2.5.1.5.17|65|3054034 +1.3.6.1.4.1.9.9.171.1.2.5.1.6.2|65|3593802072 +1.3.6.1.4.1.9.9.171.1.2.5.1.6.17|65|3549366247 +1.3.6.1.4.1.9.9.171.1.2.5.1.7.2|65|2944563745 +1.3.6.1.4.1.9.9.171.1.2.5.1.7.17|65|3766841702 +1.3.6.1.4.1.9.9.171.1.2.5.1.8.2|65|2827110916 +1.3.6.1.4.1.9.9.171.1.2.5.1.8.17|65|541497651 +1.3.6.1.4.1.9.9.171.1.2.5.1.9.2|65|234506077 +1.3.6.1.4.1.9.9.171.1.2.5.1.9.17|65|2731827217 +1.3.6.1.4.1.9.9.171.1.2.5.1.10.2|65|35823350 +1.3.6.1.4.1.9.9.171.1.2.5.1.10.17|65|2055408274 +1.3.6.1.4.1.9.9.171.1.2.5.1.11.2|65|613379743 +1.3.6.1.4.1.9.9.171.1.2.5.1.11.17|65|749737562 +1.3.6.1.4.1.9.9.171.1.2.5.1.12.2|65|3136782594 +1.3.6.1.4.1.9.9.171.1.2.5.1.12.17|65|3867599558 +1.3.6.1.4.1.9.9.171.1.2.5.1.13.2|65|2518038894 +1.3.6.1.4.1.9.9.171.1.2.5.1.13.17|65|3789209889 +1.3.6.1.4.1.9.9.171.1.2.5.1.14.2|65|485135820 +1.3.6.1.4.1.9.9.171.1.2.5.1.14.17|65|2804351110 +1.3.6.1.4.1.9.9.171.1.2.5.1.15.2|65|3816944451 +1.3.6.1.4.1.9.9.171.1.2.5.1.15.17|65|3061990294 +1.3.6.1.4.1.9.9.171.1.2.5.1.16.2|65|3293750728 +1.3.6.1.4.1.9.9.171.1.2.5.1.16.17|65|3502377103 +1.3.6.1.4.1.9.9.171.1.2.5.1.17.2|65|4236310901 +1.3.6.1.4.1.9.9.171.1.2.5.1.17.17|65|2360434961 +1.3.6.1.4.1.9.9.171.1.2.5.1.18.2|65|3798162230 +1.3.6.1.4.1.9.9.171.1.2.5.1.18.17|65|3954421682 +1.3.6.1.4.1.9.9.171.1.2.5.1.19.2|65|1365609163 +1.3.6.1.4.1.9.9.171.1.2.5.1.19.17|65|191894913 +1.3.6.1.4.1.9.9.171.1.2.5.1.20.2|65|1405339921 +1.3.6.1.4.1.9.9.171.1.2.5.1.20.17|65|2429774821 +1.3.6.1.4.1.9.9.171.1.2.5.1.21.2|65|2995566101 +1.3.6.1.4.1.9.9.171.1.2.5.1.21.17|65|1832565962 +1.3.6.1.4.1.9.9.171.1.2.5.1.22.2|65|4132429477 +1.3.6.1.4.1.9.9.171.1.2.5.1.22.17|65|418366803 +1.3.6.1.4.1.9.9.171.1.2.5.1.23.2|65|2015402172 +1.3.6.1.4.1.9.9.171.1.2.5.1.23.17|65|1316534295 +1.3.6.1.4.1.9.9.171.1.2.5.1.24.2|65|3247282160 +1.3.6.1.4.1.9.9.171.1.2.5.1.24.17|65|2833736517 +1.3.6.1.4.1.9.9.171.1.2.5.1.25.2|65|2823444229 +1.3.6.1.4.1.9.9.171.1.2.5.1.25.17|65|1615516389 +1.3.6.1.4.1.9.9.171.1.2.5.1.26.2|65|73347298 +1.3.6.1.4.1.9.9.171.1.2.5.1.26.17|65|2896149360 +1.3.6.1.4.1.9.9.171.1.3.1.1.0|66|555520100 +1.3.6.1.4.1.9.9.171.1.3.1.2.0|65|3433850807 +1.3.6.1.4.1.9.9.171.1.3.1.3.0|65|3765451978 +1.3.6.1.4.1.9.9.171.1.3.1.4.0|70|8076380598964912751 +1.3.6.1.4.1.9.9.171.1.3.1.5.0|65|605242469 +1.3.6.1.4.1.9.9.171.1.3.1.6.0|65|2117938836 +1.3.6.1.4.1.9.9.171.1.3.1.7.0|70|1244382013554652095 +1.3.6.1.4.1.9.9.171.1.3.1.8.0|65|2069097191 +1.3.6.1.4.1.9.9.171.1.3.1.9.0|65|1103506722 +1.3.6.1.4.1.9.9.171.1.3.1.10.0|65|3278141363 +1.3.6.1.4.1.9.9.171.1.3.1.11.0|65|2348631446 +1.3.6.1.4.1.9.9.171.1.3.1.12.0|65|788758787 +1.3.6.1.4.1.9.9.171.1.3.1.13.0|65|1299954247 +1.3.6.1.4.1.9.9.171.1.3.1.14.0|65|2563637642 +1.3.6.1.4.1.9.9.171.1.3.1.15.0|65|34726275 +1.3.6.1.4.1.9.9.171.1.3.1.16.0|65|3892208230 +1.3.6.1.4.1.9.9.171.1.3.1.17.0|70|11061656018312361232 +1.3.6.1.4.1.9.9.171.1.3.1.18.0|65|3239360685 +1.3.6.1.4.1.9.9.171.1.3.1.19.0|65|2198334559 +1.3.6.1.4.1.9.9.171.1.3.1.20.0|70|3371199286386608944 +1.3.6.1.4.1.9.9.171.1.3.1.21.0|65|2444861007 +1.3.6.1.4.1.9.9.171.1.3.1.22.0|65|1881053125 +1.3.6.1.4.1.9.9.171.1.3.1.23.0|65|3540985166 +1.3.6.1.4.1.9.9.171.1.3.1.24.0|65|3081489769 +1.3.6.1.4.1.9.9.171.1.3.1.25.0|65|257883106 +1.3.6.1.4.1.9.9.171.1.3.1.26.0|65|1836586560 +1.3.6.1.4.1.9.9.171.1.3.1.27.0|65|980485057 +1.3.6.1.4.1.9.9.171.1.3.1.28.0|65|644393269 +1.3.6.1.4.1.9.9.171.1.3.1.29.0|65|3550809455 +1.3.6.1.4.1.9.9.171.1.3.1.30.0|65|1537259604 +1.3.6.1.4.1.9.9.171.1.3.2.1.1.23|2|23 +1.3.6.1.4.1.9.9.171.1.3.2.1.1.28|2|28 +1.3.6.1.4.1.9.9.171.1.3.2.1.2.23|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.2.28|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.3.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.3.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.4.23|4x|64726976696e67206b65707420627574 +1.3.6.1.4.1.9.9.171.1.3.2.1.4.28|4x|6b6570742062757420666f7277617264 +1.3.6.1.4.1.9.9.171.1.3.2.1.5.23|4|kept +1.3.6.1.4.1.9.9.171.1.3.2.1.5.28|4|kept +1.3.6.1.4.1.9.9.171.1.3.2.1.6.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.6.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.7.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.7.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.8.23|2|4 +1.3.6.1.4.1.9.9.171.1.3.2.1.8.28|2|6 +1.3.6.1.4.1.9.9.171.1.3.2.1.9.23|2|25 +1.3.6.1.4.1.9.9.171.1.3.2.1.9.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.10.23|2|30 +1.3.6.1.4.1.9.9.171.1.3.2.1.10.28|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.11.23|2|25 +1.3.6.1.4.1.9.9.171.1.3.2.1.11.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.12.23|2|29 +1.3.6.1.4.1.9.9.171.1.3.2.1.12.28|2|12 +1.3.6.1.4.1.9.9.171.1.3.2.1.13.23|65|736404368 +1.3.6.1.4.1.9.9.171.1.3.2.1.13.28|65|3035617434 +1.3.6.1.4.1.9.9.171.1.3.2.1.14.23|65|2717096145 +1.3.6.1.4.1.9.9.171.1.3.2.1.14.28|65|3979661869 +1.3.6.1.4.1.9.9.171.1.3.2.1.15.23|66|1401352929 +1.3.6.1.4.1.9.9.171.1.3.2.1.15.28|66|1557942135 +1.3.6.1.4.1.9.9.171.1.3.2.1.16.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.16.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.17.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.17.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.18.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.18.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.19.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.19.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.20.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.20.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.21.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.21.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.22.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.22.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.23.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.23.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.24.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.24.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.25.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.25.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.26.23|65|165896064 +1.3.6.1.4.1.9.9.171.1.3.2.1.26.28|65|3618088990 +1.3.6.1.4.1.9.9.171.1.3.2.1.27.23|70|16893382919849205152 +1.3.6.1.4.1.9.9.171.1.3.2.1.27.28|70|11976318338642029242 +1.3.6.1.4.1.9.9.171.1.3.2.1.28.23|65|373706179 +1.3.6.1.4.1.9.9.171.1.3.2.1.28.28|65|42463689 +1.3.6.1.4.1.9.9.171.1.3.2.1.29.23|65|1106272656 +1.3.6.1.4.1.9.9.171.1.3.2.1.29.28|65|1002521669 +1.3.6.1.4.1.9.9.171.1.3.2.1.30.23|70|11922900353577803661 +1.3.6.1.4.1.9.9.171.1.3.2.1.30.28|70|15599379710949051351 +1.3.6.1.4.1.9.9.171.1.3.2.1.31.23|65|1074980189 +1.3.6.1.4.1.9.9.171.1.3.2.1.31.28|65|1263307338 +1.3.6.1.4.1.9.9.171.1.3.2.1.32.23|65|19491227 +1.3.6.1.4.1.9.9.171.1.3.2.1.32.28|65|3040420568 +1.3.6.1.4.1.9.9.171.1.3.2.1.33.23|65|185606313 +1.3.6.1.4.1.9.9.171.1.3.2.1.33.28|65|4077668277 +1.3.6.1.4.1.9.9.171.1.3.2.1.34.23|65|3856931801 +1.3.6.1.4.1.9.9.171.1.3.2.1.34.28|65|1043684270 +1.3.6.1.4.1.9.9.171.1.3.2.1.35.23|65|1768453926 +1.3.6.1.4.1.9.9.171.1.3.2.1.35.28|65|2468669416 +1.3.6.1.4.1.9.9.171.1.3.2.1.36.23|65|3103192375 +1.3.6.1.4.1.9.9.171.1.3.2.1.36.28|65|3896235917 +1.3.6.1.4.1.9.9.171.1.3.2.1.37.23|65|2610571653 +1.3.6.1.4.1.9.9.171.1.3.2.1.37.28|65|2004039361 +1.3.6.1.4.1.9.9.171.1.3.2.1.38.23|65|668234317 +1.3.6.1.4.1.9.9.171.1.3.2.1.38.28|65|229562644 +1.3.6.1.4.1.9.9.171.1.3.2.1.39.23|65|451351388 +1.3.6.1.4.1.9.9.171.1.3.2.1.39.28|65|358890378 +1.3.6.1.4.1.9.9.171.1.3.2.1.40.23|70|15907561446294960767 +1.3.6.1.4.1.9.9.171.1.3.2.1.40.28|70|14524952430283157279 +1.3.6.1.4.1.9.9.171.1.3.2.1.41.23|65|2966419854 +1.3.6.1.4.1.9.9.171.1.3.2.1.41.28|65|2075836476 +1.3.6.1.4.1.9.9.171.1.3.2.1.42.23|65|2137519503 +1.3.6.1.4.1.9.9.171.1.3.2.1.42.28|65|723885852 +1.3.6.1.4.1.9.9.171.1.3.2.1.43.23|70|13733445844003001241 +1.3.6.1.4.1.9.9.171.1.3.2.1.43.28|70|13579132757302593240 +1.3.6.1.4.1.9.9.171.1.3.2.1.44.23|65|2771155894 +1.3.6.1.4.1.9.9.171.1.3.2.1.44.28|65|1824515850 +1.3.6.1.4.1.9.9.171.1.3.2.1.45.23|65|1889625612 +1.3.6.1.4.1.9.9.171.1.3.2.1.45.28|65|4054252226 +1.3.6.1.4.1.9.9.171.1.3.2.1.46.23|65|2849925259 +1.3.6.1.4.1.9.9.171.1.3.2.1.46.28|65|3010306271 +1.3.6.1.4.1.9.9.171.1.3.2.1.47.23|65|2110348798 +1.3.6.1.4.1.9.9.171.1.3.2.1.47.28|65|3986765758 +1.3.6.1.4.1.9.9.171.1.3.2.1.48.23|65|2958887014 +1.3.6.1.4.1.9.9.171.1.3.2.1.48.28|65|121428427 +1.3.6.1.4.1.9.9.171.1.3.2.1.49.23|65|4235674459 +1.3.6.1.4.1.9.9.171.1.3.2.1.49.28|65|3087398701 +1.3.6.1.4.1.9.9.171.1.3.2.1.50.23|65|2987809814 +1.3.6.1.4.1.9.9.171.1.3.2.1.50.28|65|1084010267 +1.3.6.1.4.1.9.9.171.1.3.2.1.51.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.51.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.3.1.1.3.15|2|15 +1.3.6.1.4.1.9.9.171.1.3.3.1.1.19.26|2|26 +1.3.6.1.4.1.9.9.171.1.3.3.1.2.3.15|4x|717561696e746c79207a6f6d62696573206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.3.3.1.2.19.26|4x|6b657074206163746564206b65707420666f7277617264206b657074 +1.3.6.1.4.1.9.9.171.1.3.3.1.3.3.15|2|1 +1.3.6.1.4.1.9.9.171.1.3.3.1.3.19.26|2|2 +1.3.6.1.4.1.9.9.171.1.3.3.1.4.3.15|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.4.19.26|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.5.3.15|4x|64726976696e67206f78656e20627574 +1.3.6.1.4.1.9.9.171.1.3.3.1.5.19.26|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.6.3.15|2|6 +1.3.6.1.4.1.9.9.171.1.3.3.1.6.19.26|2|20 +1.3.6.1.4.1.9.9.171.1.3.3.1.7.3.15|2|22 +1.3.6.1.4.1.9.9.171.1.3.3.1.7.19.26|2|25 +1.3.6.1.4.1.9.9.171.1.3.3.1.8.3.15|4x|6f78656e204a6164656420746865697220627574 +1.3.6.1.4.1.9.9.171.1.3.3.1.8.19.26|4x|746865697220717561696e746c79206163746564207a6f6d62696573206163746564206f78656e2064726976696e67 +1.3.6.1.4.1.9.9.171.1.3.3.1.9.3.15|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.9.19.26|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.10.3.15|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.10.19.26|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.11.3.15|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.11.19.26|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.171.1.3.3.1.12.3.15|2|11 +1.3.6.1.4.1.9.9.171.1.3.3.1.12.19.26|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.13.3.15|2|17 +1.3.6.1.4.1.9.9.171.1.3.3.1.13.19.26|2|31 +1.3.6.1.4.1.9.9.171.1.3.4.1.1.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.1.31.28|2|28 +1.3.6.1.4.1.9.9.171.1.3.4.1.2.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.2.31.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.3.9.2|66|45981 +1.3.6.1.4.1.9.9.171.1.3.4.1.3.31.28|66|2825 +1.3.6.1.4.1.9.9.171.1.3.4.1.4.9.2|2|3 +1.3.6.1.4.1.9.9.171.1.3.4.1.4.31.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.4.1.5.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.5.31.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.5.1.1.11|66|1539004452 +1.3.6.1.4.1.9.9.171.1.3.5.1.1.21|66|986476198 +1.3.6.1.4.1.9.9.171.1.3.5.1.2.11|65|3634989455 +1.3.6.1.4.1.9.9.171.1.3.5.1.2.21|65|774642436 +1.3.6.1.4.1.9.9.171.1.3.5.1.3.11|65|971728629 +1.3.6.1.4.1.9.9.171.1.3.5.1.3.21|65|3145266041 +1.3.6.1.4.1.9.9.171.1.3.5.1.4.11|65|2110814352 +1.3.6.1.4.1.9.9.171.1.3.5.1.4.21|65|155761707 +1.3.6.1.4.1.9.9.171.1.3.5.1.5.11|65|2248268558 +1.3.6.1.4.1.9.9.171.1.3.5.1.5.21|65|561905585 +1.3.6.1.4.1.9.9.171.1.3.5.1.6.11|65|974515501 +1.3.6.1.4.1.9.9.171.1.3.5.1.6.21|65|913516496 +1.3.6.1.4.1.9.9.171.1.3.5.1.7.11|65|3221449308 +1.3.6.1.4.1.9.9.171.1.3.5.1.7.21|65|2989278436 +1.3.6.1.4.1.9.9.171.1.3.5.1.8.11|65|2541691427 +1.3.6.1.4.1.9.9.171.1.3.5.1.8.21|65|3367590847 +1.3.6.1.4.1.9.9.171.1.3.5.1.9.11|65|2075568959 +1.3.6.1.4.1.9.9.171.1.3.5.1.9.21|65|505678552 +1.3.6.1.4.1.9.9.171.1.3.5.1.10.11|65|1601794867 +1.3.6.1.4.1.9.9.171.1.3.5.1.10.21|65|4108299796 +1.3.6.1.4.1.9.9.171.1.3.5.1.11.11|65|3796494388 +1.3.6.1.4.1.9.9.171.1.3.5.1.11.21|65|1442135763 +1.3.6.1.4.1.9.9.171.1.3.5.1.12.11|65|2850926956 +1.3.6.1.4.1.9.9.171.1.3.5.1.12.21|65|989514632 +1.3.6.1.4.1.9.9.171.1.3.5.1.13.11|65|1864025156 +1.3.6.1.4.1.9.9.171.1.3.5.1.13.21|65|115684894 +1.3.6.1.4.1.9.9.171.1.3.5.1.14.11|65|1486924693 +1.3.6.1.4.1.9.9.171.1.3.5.1.14.21|65|3614381712 +1.3.6.1.4.1.9.9.171.1.3.5.1.15.11|65|2886166675 +1.3.6.1.4.1.9.9.171.1.3.5.1.15.21|65|2418878004 +1.3.6.1.4.1.9.9.171.1.3.5.1.16.11|65|4041081525 +1.3.6.1.4.1.9.9.171.1.3.5.1.16.21|65|3202353128 +1.3.6.1.4.1.9.9.171.1.3.5.1.17.11|65|3359563692 +1.3.6.1.4.1.9.9.171.1.3.5.1.17.21|65|3939308341 +1.3.6.1.4.1.9.9.171.1.3.5.1.18.11|65|3421730058 +1.3.6.1.4.1.9.9.171.1.3.5.1.18.21|65|2537482589 +1.3.6.1.4.1.9.9.171.1.3.5.1.19.11|65|2662393759 +1.3.6.1.4.1.9.9.171.1.3.5.1.19.21|65|2933597356 +1.3.6.1.4.1.9.9.171.1.3.5.1.20.11|65|4135163112 +1.3.6.1.4.1.9.9.171.1.3.5.1.20.21|65|3283135834 +1.3.6.1.4.1.9.9.171.1.3.5.1.21.11|65|562097720 +1.3.6.1.4.1.9.9.171.1.3.5.1.21.21|65|168036034 +1.3.6.1.4.1.9.9.171.1.3.5.1.22.11|65|2444828842 +1.3.6.1.4.1.9.9.171.1.3.5.1.22.21|65|78028517 +1.3.6.1.4.1.9.9.171.1.3.5.1.23.11|65|1627747682 +1.3.6.1.4.1.9.9.171.1.3.5.1.23.21|65|871345082 +1.3.6.1.4.1.9.9.171.1.3.5.1.24.11|65|3118031750 +1.3.6.1.4.1.9.9.171.1.3.5.1.24.21|65|3275451558 +1.3.6.1.4.1.9.9.171.1.3.5.1.25.11|65|142449220 +1.3.6.1.4.1.9.9.171.1.3.5.1.25.21|65|3664919325 +1.3.6.1.4.1.9.9.171.1.3.5.1.26.11|65|2401996341 +1.3.6.1.4.1.9.9.171.1.3.5.1.26.21|65|3251587706 +1.3.6.1.4.1.9.9.171.1.4.1.1.1.0|2|13 +1.3.6.1.4.1.9.9.171.1.4.1.1.2.0|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.1.10|2|10 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.2.10|2|4 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.2.22|2|7 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.3.10|2|30 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.3.22|2|19 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.4.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.4.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.5.10|4x|6163746564207a6f6d62696573206f78656e2061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.5.22|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.6.10|2|6 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.6.22|2|19 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.7.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.7.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.8.10|4x|627574207a6f6d62696573207a6f6d62696573207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.8.22|4x|6275742064726976696e67206b657074 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.9.10|4|kept +1.3.6.1.4.1.9.9.171.1.4.2.1.1.9.22|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.4.2.1.1.10.10|4x|64726976696e67206275742064726976696e6720666f7277617264207468656972 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.10.22|4x|6b657074207468656972204a61646564206b657074206b6570742064726976696e672062757420627574206f78656e +1.3.6.1.4.1.9.9.171.1.4.2.1.1.11.10|4|oxen +1.3.6.1.4.1.9.9.171.1.4.2.1.1.11.22|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.12.10|4x|64726976696e67207468656972206f78656e2064726976696e67207a6f6d6269657320666f727761726420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.12.22|4x|7468656972206163746564 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.13.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.13.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.14.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.14.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.15.10|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.15.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.16.10|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.16.22|2|3 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.17.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.17.22|2|3 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.18.10|2|17 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.18.22|2|15 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.19.10|67|4188924691 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.19.22|67|2937118870 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.20.10|2|11 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.20.22|2|6 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.21.10|65|3904979266 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.21.22|65|3560928040 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.22.10|65|3895453958 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.22.22|65|930877155 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.23.10|65|4155384128 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.23.22|65|1945794694 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.24.10|65|2440644215 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.24.22|65|2179560049 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.25.10|65|3951748314 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.25.22|65|127664431 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.26.10|65|240677500 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.26.22|65|4237031121 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.27.10|65|2919250870 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.27.22|65|4208516442 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.28.10|65|2427553207 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.28.22|65|948705652 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.29.10|65|82976265 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.29.22|65|3934746364 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.30.10|65|3861895215 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.30.22|65|217536823 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.31.10|65|3151994492 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.31.22|65|241794704 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.32.10|65|1506839476 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.32.22|65|2068566446 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.33.10|65|2343908199 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.33.22|65|3426161501 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.34.10|65|648407740 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.34.22|65|1146473588 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.35.10|65|1680408828 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.35.22|65|799707233 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.36.10|65|3312014872 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.36.22|65|1227147473 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.37.10|65|1202145057 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.37.22|65|1608376026 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.38.10|65|3883766622 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.38.22|65|2243100818 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.1.17|2|17 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.1.18|2|18 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.2.17|2|4 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.2.18|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.3.17|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.3.18|2|13 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.4.17|2|11 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.4.18|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.5.17|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.5.18|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.6.17|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.6.18|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.7.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.7.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.8.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.8.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.9.17|2|10 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.9.18|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.10.17|2|21 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.10.18|2|22 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.11.17|67|2140606133 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.11.18|67|947877786 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.12.17|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.12.18|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.13.17|65|804171075 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.13.18|65|3013529205 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.14.17|65|2306734177 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.14.18|65|59730603 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.15.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.15.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.16.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.16.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.17.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.17.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.18.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.18.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.19.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.19.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.20.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.20.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.21.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.21.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.22.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.22.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.23.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.23.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.24.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.24.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.25.17|65|1350520686 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.25.18|65|460378122 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.26.17|70|10257421324758334396 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.26.18|70|15955968530926075190 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.27.17|65|2626476172 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.27.18|65|866683012 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.28.17|65|729325687 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.28.18|65|2042095897 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.29.17|70|3908873172283764405 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.29.18|70|9692543863636570033 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.30.17|65|797291069 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.30.18|65|3831339083 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.31.17|65|365694518 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.31.18|65|659908830 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.32.17|65|3175828355 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.32.18|65|3194917681 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.33.17|65|3486343761 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.33.18|65|647213477 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.34.17|65|620133147 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.34.18|65|3900465494 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.35.17|65|2135862472 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.35.18|65|2286879901 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.36.17|65|4212299981 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.36.18|65|2957562648 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.37.17|65|3498974530 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.37.18|65|4110881771 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.38.17|65|3426811607 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.38.18|65|3841788286 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.39.17|70|4204788537335394816 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.39.18|70|12043116387776586811 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.40.17|65|3519864046 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.40.18|65|1622184210 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.41.17|65|3039522194 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.41.18|65|1867658882 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.42.17|70|17502062167311159970 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.42.18|70|10996239327049192810 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.43.17|65|3935338485 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.43.18|65|4137439811 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.44.17|65|2920482346 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.44.18|65|166949467 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.45.17|65|3600484353 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.45.18|65|542927767 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.46.17|65|250089742 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.46.18|65|3039150373 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.47.17|65|1876324894 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.47.18|65|3523115734 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.48.17|65|396919596 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.48.18|65|3635284240 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.49.17|65|1871392869 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.49.18|65|1071823832 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.1.24|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.2.22|2|23 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.2.24|2|8 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.3.22|2|11 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.3.24|2|28 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.4.22|4x|616374656420666f7277617264206163746564206b657074206163746564206163746564 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.4.24|4x|717561696e746c79204a6164656420746865697220616374656420627574 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.5.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.5.24|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.6.22|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.6.24|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.7.22|4x|6163746564206f78656e204a61646564 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.7.24|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.8.22|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.8.24|2|10 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.9.22|2|31 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.9.24|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.10.22|4x|6f78656e20627574206b65707420717561696e746c79 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.10.24|4x|616374656420627574 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.11.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.11.24|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.12.22|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.12.24|4x|6f78656e206163746564207468656972 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.13.22|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.13.24|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.14.22|2|14 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.14.24|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.15.22|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.15.24|2|15 +1.3.6.1.4.1.9.9.171.1.5.1.1.1.0|2|15 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.1.8|2|8 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.1.15|2|15 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.2.8|2|11 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.2.15|2|14 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.3.8|67|2511746407 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.3.15|67|919534560 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.4.8|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.4.15|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.5.8|4x|717561696e746c7920627574206b6570742061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.5.15|4x|4a61646564204a61646564204a61646564 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.6.8|2|1 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.6.15|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.7.8|4x|4a6164656420717561696e746c7920627574 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.7.15|4x|64726976696e6720666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.8.8|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.8.15|4|kept +1.3.6.1.4.1.9.9.171.1.5.2.1.1.9.8|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.9.15|4|oxen +1.3.6.1.4.1.9.9.171.1.5.3.1.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.1.29|2|29 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.2.22|2|16 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.2.29|2|10 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.3.22|67|4157396408 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.3.29|67|96476129 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.4.22|2|28 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.4.29|2|12 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.5.22|2|25 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.5.29|2|2 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.6.22|4|kept +1.3.6.1.4.1.9.9.171.1.5.3.1.1.6.29|4|kept +1.3.6.1.4.1.9.9.171.1.5.3.1.1.7.22|4|oxen +1.3.6.1.4.1.9.9.171.1.5.3.1.1.7.29|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.6.1.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.2.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.3.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.4.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.5.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.6.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.7.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.8.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.9.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.10.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.11.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.12.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.13.0|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.27|65|1629044510 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.27|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.1.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.1.6|2|6 +1.3.6.1.4.1.9.9.324.1.1.1.1.2.2|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.324.1.1.1.1.2.6|4x|6163746564207468656972 +1.3.6.1.4.1.9.9.324.1.1.1.1.3.2|2|5 +1.3.6.1.4.1.9.9.324.1.1.1.1.3.6|2|19 +1.3.6.1.4.1.9.9.324.1.1.1.1.4.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.4.6|2|3 +1.3.6.1.4.1.9.9.324.1.1.1.1.5.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.5.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.6.2|2|9 +1.3.6.1.4.1.9.9.324.1.1.1.1.6.6|2|24 +1.3.6.1.4.1.9.9.324.1.1.1.1.7.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.7.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.8.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.8.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.9.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.9.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.10.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.10.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.2.1.1.7.9|2|9 +1.3.6.1.4.1.9.9.324.1.1.2.1.1.16.29|2|29 +1.3.6.1.4.1.9.9.324.1.1.2.1.2.7.9|2|2 +1.3.6.1.4.1.9.9.324.1.1.2.1.2.16.29|2|1 +1.3.6.1.4.1.9.9.324.1.1.2.1.3.7.9|4|acted +1.3.6.1.4.1.9.9.324.1.1.2.1.3.16.29|4x|7468656972204a61646564 +1.3.6.1.4.1.9.9.324.1.1.2.1.4.7.9|2|20 +1.3.6.1.4.1.9.9.324.1.1.2.1.4.16.29|2|30 +1.3.6.1.4.1.9.9.324.1.1.2.1.5.7.9|66|28786 +1.3.6.1.4.1.9.9.324.1.1.2.1.5.16.29|66|14266 +1.3.6.1.4.1.9.9.324.1.1.2.1.6.7.9|2|20 +1.3.6.1.4.1.9.9.324.1.1.2.1.6.16.29|2|24 +1.3.6.1.4.1.9.9.324.1.1.2.1.7.7.9|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.9.9.324.1.1.2.1.7.16.29|4x|627574206b657074 +1.3.6.1.4.1.9.9.324.1.1.3.1.1.8.25|2|25 +1.3.6.1.4.1.9.9.324.1.1.3.1.1.16.7|2|7 +1.3.6.1.4.1.9.9.324.1.1.3.1.2.8.25|2|12 +1.3.6.1.4.1.9.9.324.1.1.3.1.2.16.7|2|29 +1.3.6.1.4.1.9.9.324.1.1.3.1.3.8.25|2|29 +1.3.6.1.4.1.9.9.324.1.1.3.1.3.16.7|2|30 +1.3.6.1.4.1.9.9.324.1.1.3.1.4.8.25|2|27 +1.3.6.1.4.1.9.9.324.1.1.3.1.4.16.7|2|15 +1.3.6.1.4.1.9.9.324.1.1.3.1.5.8.25|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.5.16.7|2|3 +1.3.6.1.4.1.9.9.324.1.1.3.1.6.8.25|4x|616374656420666f727761726420666f72776172642062757420627574206f78656e206f78656e +1.3.6.1.4.1.9.9.324.1.1.3.1.6.16.7|4x|7468656972206163746564 +1.3.6.1.4.1.9.9.324.1.1.3.1.7.8.25|66|196 +1.3.6.1.4.1.9.9.324.1.1.3.1.7.16.7|66|1734 +1.3.6.1.4.1.9.9.324.1.1.3.1.8.8.25|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.8.16.7|2|1 +1.3.6.1.4.1.9.9.324.1.1.3.1.9.8.25|2|1 +1.3.6.1.4.1.9.9.324.1.1.3.1.9.16.7|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.10.8.25|2|6 +1.3.6.1.4.1.9.9.324.1.1.3.1.10.16.7|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.1.9.20|2|20 +1.3.6.1.4.1.9.9.324.1.1.4.1.1.14.6|2|6 +1.3.6.1.4.1.9.9.324.1.1.4.1.2.9.20|2|3 +1.3.6.1.4.1.9.9.324.1.1.4.1.2.14.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.3.9.20|4x|62757420746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.324.1.1.4.1.3.14.6|4x|6f78656e206163746564204a616465642064726976696e67204a61646564207a6f6d6269657320717561696e746c79206f78656e +1.3.6.1.4.1.9.9.324.1.1.4.1.4.9.20|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.4.14.6|2|5 +1.3.6.1.4.1.9.9.324.1.1.5.1.1.3.4|2|4 +1.3.6.1.4.1.9.9.324.1.1.5.1.1.3.5|2|5 +1.3.6.1.4.1.9.9.324.1.1.5.1.2.3.4|4x|61637465642064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.324.1.1.5.1.2.3.5|4x|7468656972206f78656e20717561696e746c7920616374656420616374656420666f727761726420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.9.9.324.1.1.5.1.3.3.4|2|3 +1.3.6.1.4.1.9.9.324.1.1.5.1.3.3.5|2|2 +1.3.6.1.4.1.9.9.324.1.1.5.1.4.3.4|4x|64726976696e67204a6164656420627574 +1.3.6.1.4.1.9.9.324.1.1.5.1.4.3.5|4x|717561696e746c79204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.9.9.324.1.1.5.1.5.3.4|2|4 +1.3.6.1.4.1.9.9.324.1.1.5.1.5.3.5|2|2 +1.3.6.1.4.1.9.9.324.1.1.6.1.1.10.32|66|32 +1.3.6.1.4.1.9.9.324.1.1.6.1.1.19.255|66|255 +1.3.6.1.4.1.9.9.324.1.1.6.1.2.10.32|66|434 +1.3.6.1.4.1.9.9.324.1.1.6.1.2.19.255|66|645 +1.3.6.1.4.1.9.9.324.1.1.6.1.3.10.32|66|324 +1.3.6.1.4.1.9.9.324.1.1.6.1.3.19.255|66|732 +1.3.6.1.4.1.9.9.324.1.1.7.1.1.3|66|32 +1.3.6.1.4.1.9.9.324.1.1.7.1.1.10|66|227 +1.3.6.1.4.1.9.9.324.1.1.7.1.2.3|66|122 +1.3.6.1.4.1.9.9.324.1.1.7.1.2.10|66|232 +1.3.6.1.4.1.9.9.324.1.1.7.1.3.3|66|97 +1.3.6.1.4.1.9.9.324.1.1.7.1.3.10|66|115 +1.3.6.1.4.1.9.9.324.1.1.7.1.4.3|66|110 +1.3.6.1.4.1.9.9.324.1.1.7.1.4.10|66|113 +1.3.6.1.4.1.9.9.324.1.1.7.1.5.3|66|4513 +1.3.6.1.4.1.9.9.324.1.1.7.1.5.10|66|4412 +1.3.6.1.4.1.9.9.324.1.1.7.1.6.3|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.6.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.7.3|66|61 +1.3.6.1.4.1.9.9.324.1.1.7.1.7.10|66|133 +1.3.6.1.4.1.9.9.324.1.1.7.1.8.3|66|102 +1.3.6.1.4.1.9.9.324.1.1.7.1.8.10|66|67 +1.3.6.1.4.1.9.9.324.1.1.7.1.9.3|66|55 +1.3.6.1.4.1.9.9.324.1.1.7.1.9.10|66|35 +1.3.6.1.4.1.9.9.324.1.1.7.1.10.3|66|53760 +1.3.6.1.4.1.9.9.324.1.1.7.1.10.10|66|62525 +1.3.6.1.4.1.9.9.324.1.1.7.1.11.3|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.11.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.12.3|4x|666f727761726420627574207468656972 +1.3.6.1.4.1.9.9.324.1.1.7.1.12.10|4x|627574207a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.324.1.1.7.1.13.3|4x|6f78656e20666f7277617264206163746564206f78656e207468656972206f78656e +1.3.6.1.4.1.9.9.324.1.1.7.1.13.10|4x|6f78656e20666f7277617264 +1.3.6.1.4.1.9.9.324.1.1.7.1.14.3|4x|62757420666f7277617264206163746564207468656972207a6f6d6269657320717561696e746c79206163746564206b657074206b657074 +1.3.6.1.4.1.9.9.324.1.1.7.1.14.10|4x|7a6f6d6269657320616374656420616374656420717561696e746c792062757420616374656420627574206163746564 +1.3.6.1.4.1.9.9.324.1.1.7.1.15.3|4x|666f7277617264206f78656e +1.3.6.1.4.1.9.9.324.1.1.7.1.15.10|4x|4a6164656420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.324.1.1.7.1.16.3|2|3 +1.3.6.1.4.1.9.9.324.1.1.7.1.16.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.17.3|2|4 +1.3.6.1.4.1.9.9.324.1.1.7.1.17.10|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.18.3|4x|666f727761726420746865697220666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.324.1.1.7.1.18.10|4|Jaded +1.3.6.1.4.1.9.9.324.1.2.1.1.1.18.14|2|14 +1.3.6.1.4.1.9.9.324.1.2.1.1.1.26.14|2|14 +1.3.6.1.4.1.9.9.324.1.2.1.1.2.18.14|66|968784078 +1.3.6.1.4.1.9.9.324.1.2.1.1.2.26.14|66|1598367577 +1.3.6.1.4.1.9.9.324.1.2.1.1.3.18.14|66|2893057786 +1.3.6.1.4.1.9.9.324.1.2.1.1.3.26.14|66|4031602965 +1.3.6.1.4.1.9.9.324.1.2.1.1.4.18.14|66|1154560899 +1.3.6.1.4.1.9.9.324.1.2.1.1.4.26.14|66|2087239256 +1.3.6.1.4.1.9.9.324.1.2.1.1.5.18.14|66|42982 +1.3.6.1.4.1.9.9.324.1.2.1.1.5.26.14|66|52885 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.7|66|9997 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.8|66|15228 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.9|66|4850 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.12|66|8851 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.16|66|30813 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.25|66|24389 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.26|66|36264 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.27|66|4684 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.28|66|16580 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.7|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.8|2|1 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.9|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.12|2|1 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.16|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.25|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.26|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.27|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.28|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.7|67|2938099246 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.8|67|1742326644 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.9|67|222898566 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.12|67|41659817 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.16|67|1663224446 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.25|67|3973111650 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.26|67|736091720 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.27|67|3693310177 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.28|67|1614278838 +1.3.6.1.4.1.9.9.392.1.1.1.0|2|24 +1.3.6.1.4.1.9.9.392.1.1.2.0|2|29 +1.3.6.1.4.1.9.9.392.1.1.3.0|2|5 +1.3.6.1.4.1.9.9.392.1.1.4.0|2|4 +1.3.6.1.4.1.9.9.392.1.2.1.0|66|220179290 +1.3.6.1.4.1.9.9.392.1.3.1.0|66|3080751325 +1.3.6.1.4.1.9.9.392.1.3.2.0|65|1540201027 +1.3.6.1.4.1.9.9.392.1.3.3.0|66|1805302581 +1.3.6.1.4.1.9.9.392.1.3.4.0|66|161784324 +1.3.6.1.4.1.9.9.392.1.3.5.0|70|4672136608535977512 +1.3.6.1.4.1.9.9.392.1.3.6.0|70|2893804194127754033 +1.3.6.1.4.1.9.9.392.1.3.7.0|70|6239211035010594908 +1.3.6.1.4.1.9.9.392.1.3.8.0|70|7265876306749545408 +1.3.6.1.4.1.9.9.392.1.3.9.0|70|192850609352945696 +1.3.6.1.4.1.9.9.392.1.3.10.0|70|17127455384536618658 +1.3.6.1.4.1.9.9.392.1.3.11.0|70|14460697319949409206 +1.3.6.1.4.1.9.9.392.1.3.12.0|70|6617289242687491214 +1.3.6.1.4.1.9.9.392.1.3.21.1.1.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f7277617264204a61646564206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.1.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742074686569722064726976696e67207468656972204a61646564207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.2.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|7a6f6d62696573207a6f6d62696573204a61646564204a61646564207468656972206f78656e20616374656420746865697220627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.2.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|64726976696e67204a61646564204a61646564207a6f6d62696573207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.3.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|18 +1.3.6.1.4.1.9.9.392.1.3.21.1.3.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|11 +1.3.6.1.4.1.9.9.392.1.3.21.1.4.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|8 +1.3.6.1.4.1.9.9.392.1.3.21.1.4.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|7 +1.3.6.1.4.1.9.9.392.1.3.21.1.5.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.5.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|5 +1.3.6.1.4.1.9.9.392.1.3.21.1.6.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|65|1067898008 +1.3.6.1.4.1.9.9.392.1.3.21.1.6.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|65|2164050177 +1.3.6.1.4.1.9.9.392.1.3.21.1.7.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.7.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.8.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|64726976696e6720717561696e746c79206b657074207468656972204a61646564204a61646564206f78656e207468656972206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.8.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4|Jaded +1.3.6.1.4.1.9.9.392.1.3.21.1.9.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.9.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.10.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79207a6f6d62696573204a61646564204a6164656420746865697220627574206b657074 +1.3.6.1.4.1.9.9.392.1.3.21.1.10.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b657074206f78656e20717561696e746c792064726976696e6720717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.11.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|7 +1.3.6.1.4.1.9.9.392.1.3.21.1.11.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.12.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|6|1.3.6.1.3.208.49 +1.3.6.1.4.1.9.9.392.1.3.21.1.12.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|6|1.3.6.1.3.0.25.27 +1.3.6.1.4.1.9.9.392.1.3.21.1.13.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|8 +1.3.6.1.4.1.9.9.392.1.3.21.1.13.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.14.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.14.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.15.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.15.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.16.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|66|24991 +1.3.6.1.4.1.9.9.392.1.3.21.1.16.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|66|19923 +1.3.6.1.4.1.9.9.392.1.3.21.1.17.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|746865697220717561696e746c7920616374656420717561696e746c79206b65707420616374656420717561696e746c792064726976696e67206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.17.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|62757420627574206f78656e206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.18.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79206163746564207468656972 +1.3.6.1.4.1.9.9.392.1.3.21.1.18.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742061637465642064726976696e67206275742064726976696e67206b65707420666f7277617264 +1.3.6.1.4.1.9.9.392.1.3.21.1.19.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f727761726420746865697220666f7277617264206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.19.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6f78656e20666f727761726420717561696e746c79206163746564206b657074206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.20.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|7a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.20.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|666f72776172642061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.21.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.21.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|4 +1.3.6.1.4.1.9.9.392.1.3.21.1.22.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f727761726420666f7277617264207a6f6d62696573207a6f6d62696573207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.22.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742064726976696e67207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.392.1.3.21.1.23.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|0 +1.3.6.1.4.1.9.9.392.1.3.21.1.23.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.24.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|4a6164656420717561696e746c79 +1.3.6.1.4.1.9.9.392.1.3.21.1.24.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|4a61646564207468656972206f78656e20616374656420616374656420666f727761726420746865697220666f7277617264 +1.3.6.1.4.1.9.9.392.1.3.21.1.25.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.25.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.26.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f7277617264206b657074206f78656e206f78656e206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.26.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|616374656420717561696e746c7920627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.27.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.27.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|4 +1.3.6.1.4.1.9.9.392.1.3.21.1.28.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|64726976696e67207468656972207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.28.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|62757420627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.29.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|0 +1.3.6.1.4.1.9.9.392.1.3.21.1.29.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.30.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79206b657074 +1.3.6.1.4.1.9.9.392.1.3.21.1.30.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|746865697220717561696e746c7920717561696e746c7920616374656420717561696e746c7920717561696e746c79206163746564207a6f6d6269657320627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.31.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|4442691408326093793 +1.3.6.1.4.1.9.9.392.1.3.21.1.31.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|1873321696187597909 +1.3.6.1.4.1.9.9.392.1.3.21.1.32.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|6469637372671445412 +1.3.6.1.4.1.9.9.392.1.3.21.1.32.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|6712781232926100858 +1.3.6.1.4.1.9.9.392.1.3.21.1.33.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|13490210027652370573 +1.3.6.1.4.1.9.9.392.1.3.21.1.33.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|15555989303984511978 +1.3.6.1.4.1.9.9.392.1.3.21.1.34.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|12279646205639820727 +1.3.6.1.4.1.9.9.392.1.3.21.1.34.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|11056409441366507351 +1.3.6.1.4.1.9.9.392.1.3.21.1.35.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|13180762840652524543 +1.3.6.1.4.1.9.9.392.1.3.21.1.35.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|13958065058835407351 +1.3.6.1.4.1.9.9.392.1.3.21.1.36.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|3745449795705425282 +1.3.6.1.4.1.9.9.392.1.3.21.1.36.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|15681610043458202824 +1.3.6.1.4.1.9.9.392.1.3.21.1.37.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.37.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.22.1.1.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|4x|616374656420666f7277617264207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.9.9.392.1.3.22.1.1.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|4x|7468656972207468656972206b6570742062757420616374656420627574206275742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.22.1.2.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.9.9.392.1.3.22.1.2.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|2|21 +1.3.6.1.4.1.9.9.392.1.3.22.1.3.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|338143677832082857 +1.3.6.1.4.1.9.9.392.1.3.22.1.3.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|2540809463851896468 +1.3.6.1.4.1.9.9.392.1.3.22.1.4.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|9211169575499894801 +1.3.6.1.4.1.9.9.392.1.3.22.1.4.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|5889125074864305265 +1.3.6.1.4.1.9.9.392.1.3.22.1.5.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|15329032065323570335 +1.3.6.1.4.1.9.9.392.1.3.22.1.5.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|11848822181082996062 +1.3.6.1.4.1.9.9.392.1.3.22.1.6.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|9393682061551994449 +1.3.6.1.4.1.9.9.392.1.3.22.1.6.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|14553503058612069516 +1.3.6.1.4.1.9.9.392.1.3.22.1.7.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|5657946358853111387 +1.3.6.1.4.1.9.9.392.1.3.22.1.7.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|132504407579425476 +1.3.6.1.4.1.9.9.392.1.3.22.1.8.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|14359838585433121302 +1.3.6.1.4.1.9.9.392.1.3.22.1.8.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|16427745788021119202 +1.3.6.1.4.1.9.9.392.1.3.23.0|66|3912948724 +1.3.6.1.4.1.9.9.392.1.3.24.0|65|3793567672 +1.3.6.1.4.1.9.9.392.1.3.25.0|66|24567 +1.3.6.1.4.1.9.9.392.1.3.26.0|66|4157346489 +1.3.6.1.4.1.9.9.392.1.3.27.0|65|566439668 +1.3.6.1.4.1.9.9.392.1.3.28.0|66|2035 +1.3.6.1.4.1.9.9.392.1.3.29.0|66|899294235 +1.3.6.1.4.1.9.9.392.1.3.30.0|65|2870170921 +1.3.6.1.4.1.9.9.392.1.3.31.0|66|47972 +1.3.6.1.4.1.9.9.392.1.3.32.0|66|1402819470 +1.3.6.1.4.1.9.9.392.1.3.33.0|65|552584163 +1.3.6.1.4.1.9.9.392.1.3.34.0|66|54192 +1.3.6.1.4.1.9.9.392.1.3.35.0|66|4109252783 +1.3.6.1.4.1.9.9.392.1.3.36.0|65|3375288981 +1.3.6.1.4.1.9.9.392.1.3.37.0|66|60584 +1.3.6.1.4.1.9.9.392.1.3.38.0|66|2342846144 +1.3.6.1.4.1.9.9.392.1.3.39.0|65|2612706951 +1.3.6.1.4.1.9.9.392.1.3.40.0|66|27723 +1.3.6.1.4.1.9.9.392.1.4.1.1.0|70|18308256571427912229 +1.3.6.1.4.1.9.9.392.1.4.1.2.0|66|12797 +1.3.6.1.4.1.9.9.392.1.4.1.3.0|70|18072880834846251558 +1.3.6.1.4.1.9.9.392.1.4.1.4.0|70|8998085897560354675 +1.3.6.1.4.1.9.9.392.1.4.2.1.0|66|19062 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.1.26|66|26 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.1.6794|66|6794 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.2.26|4x|717561696e746c7920666f7277617264206b657074207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.2.6794|4x|7a6f6d62696573206f78656e204a61646564204a616465642074686569722062757420666f7277617264206b657074204a61646564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.3.26|4x|62757420666f7277617264204a61646564206275742064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.3.6794|4|Jaded +1.3.6.1.4.1.9.9.392.1.4.3.1.1.4.26|2|2 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.4.6794|2|1 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.5.26|2|3 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.5.6794|2|5 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.6.26|67|2717938161 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.6.6794|67|1576292881 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.7.26|2|20 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.7.6794|2|7 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.8.26|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.8.6794|2|1 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.9.26|4x|6b6570742064726976696e672064726976696e67207a6f6d62696573206b657074206b657074204a61646564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.9.6794|4x|7a6f6d62696573207a6f6d6269657320627574207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.10.26|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.10.6794|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.11.26|4x|64726976696e67206163746564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.11.6794|4x|64726976696e67206b65707420746865697220746865697220666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.3.2.0|66|19587 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.1.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|4x|7a6f6d62696573207a6f6d62696573207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.1.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|4x|62757420717561696e746c7920746865697220666f727761726420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.2.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|7705169462584045514 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.2.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|4782105877718188020 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.3.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|1208657904808146249 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.3.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|6135263682934130631 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.4.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|3212491034507665689 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.4.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|4669944071782599429 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.5.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|15487989910931679686 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.5.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|16491208374579900638 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.6.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|14990721728316737493 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.6.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|17568880258347646976 +1.3.6.1.4.1.9.9.392.1.5.1.1.0|70|16763036102461238324 +1.3.6.1.4.1.9.9.392.1.6.1.0|2|30 +1.3.6.1.4.1.9.9.392.1.6.2.0|66|10901 +1.3.6.1.4.1.9.9.392.1.6.3.0|2|3 +1.3.6.1.4.1.9.9.392.1.7.1.0|2|1 +1.3.6.1.4.1.9.9.392.1.7.2.0|2|1 +1.3.6.1.4.1.9.9.392.1.7.3.0|2|1 +1.3.6.1.4.1.9.9.500.1.2.1.1.1.21|66|23989 +1.3.6.1.4.1.9.9.500.1.2.1.1.2.21|66|64612 +1.3.6.1.4.1.9.9.500.1.2.1.1.3.21|2|4 +1.3.6.1.4.1.9.9.500.1.2.1.1.4.21|66|33053 +1.3.6.1.4.1.9.9.500.1.2.1.1.5.21|66|55695 +1.3.6.1.4.1.9.9.500.1.2.1.1.6.21|2|8 +1.3.6.1.4.1.9.9.500.1.2.1.1.7.21|4x|ffffffffffff +1.3.6.1.4.1.9.9.500.1.2.2.1.1.7|2|3 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.213.175.39.60.38.62.82.247.189 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.166.109.172.24.90.149 +1.3.6.1.6.3.1.1.6.1.0|2|3 +1.3.6.1.6.3.10.2.1.1.0|4x|6f78656e20717561696e746c79 +1.3.6.1.6.3.10.2.1.1.0|4x|64726976696e67206f78656e204a6164656420717561696e746c79 +1.3.6.1.6.3.10.2.1.2.0|2|12 +1.3.6.1.6.3.10.2.1.2.0|2|24 +1.3.6.1.6.3.10.2.1.3.0|2|4 +1.3.6.1.6.3.10.2.1.3.0|2|28 +1.3.6.1.6.3.10.2.1.4.0|2|567 +1.3.6.1.6.3.10.2.1.4.0|2|763 \ No newline at end of file diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-asa.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-asa.snmprec new file mode 100644 index 0000000000000..f052f153933a7 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-asa.snmprec @@ -0,0 +1,1478 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.669 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.5.0|4|kept +1.3.6.1.2.1.2.2.1.1.11|2|11 +1.3.6.1.2.1.2.2.1.2.11|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.3.11|2|29 +1.3.6.1.2.1.2.2.1.4.11|2|10 +1.3.6.1.2.1.2.2.1.5.11|66|842689539 +1.3.6.1.2.1.2.2.1.6.11|4x|00 +1.3.6.1.2.1.2.2.1.7.11|2|2 +1.3.6.1.2.1.2.2.1.8.11|2|7 +1.3.6.1.2.1.2.2.1.9.11|67|4043941980 +1.3.6.1.2.1.2.2.1.10.11|65|2268799121 +1.3.6.1.2.1.2.2.1.11.11|65|1358081555 +1.3.6.1.2.1.2.2.1.12.11|65|2804916297 +1.3.6.1.2.1.2.2.1.13.11|65|1953269825 +1.3.6.1.2.1.2.2.1.14.11|65|3659465164 +1.3.6.1.2.1.2.2.1.15.11|65|3028473442 +1.3.6.1.2.1.2.2.1.16.11|65|2204618213 +1.3.6.1.2.1.2.2.1.17.11|65|3659357157 +1.3.6.1.2.1.2.2.1.18.11|65|1946069301 +1.3.6.1.2.1.2.2.1.19.11|65|1976763204 +1.3.6.1.2.1.2.2.1.20.11|65|1287028500 +1.3.6.1.2.1.2.2.1.21.11|66|3693484051 +1.3.6.1.2.1.6.5.0|65|2858992486 +1.3.6.1.2.1.6.6.0|65|4156312381 +1.3.6.1.2.1.6.7.0|65|2022233107 +1.3.6.1.2.1.6.8.0|65|2434846008 +1.3.6.1.2.1.6.9.0|66|3859114747 +1.3.6.1.2.1.6.10.0|65|443704958 +1.3.6.1.2.1.6.11.0|65|761536386 +1.3.6.1.2.1.6.12.0|65|3742055603 +1.3.6.1.2.1.6.13.1.1.23.177.97.199.10.151.211.52.249.28|2|12 +1.3.6.1.2.1.6.13.1.1.113.156.27.12.6.103.49.217.167.25|2|8 +1.3.6.1.2.1.6.13.1.1.122.61.54.190.29.172.169.37.170.22|2|5 +1.3.6.1.2.1.6.13.1.1.148.215.184.93.3.18.135.204.247.11|2|9 +1.3.6.1.2.1.6.13.1.1.192.71.88.207.22.184.150.214.61.14|2|12 +1.3.6.1.2.1.6.13.1.1.215.10.127.204.23.126.210.252.1.27|2|7 +1.3.6.1.2.1.6.13.1.1.223.16.55.201.31.104.212.252.181.5|2|9 +1.3.6.1.2.1.6.13.1.1.223.54.125.172.16.159.226.236.17.1|2|5 +1.3.6.1.2.1.6.13.1.1.227.50.96.2.2.215.88.85.244.22|2|3 +1.3.6.1.2.1.6.13.1.1.254.4.140.40.29.214.201.146.122.0|2|1 +1.3.6.1.2.1.6.13.1.2.23.177.97.199.10.151.211.52.249.28|64x|17b161c7 +1.3.6.1.2.1.6.13.1.2.113.156.27.12.6.103.49.217.167.25|64x|719c1b0c +1.3.6.1.2.1.6.13.1.2.122.61.54.190.29.172.169.37.170.22|64x|7a3d36be +1.3.6.1.2.1.6.13.1.2.148.215.184.93.3.18.135.204.247.11|64x|94d7b85d +1.3.6.1.2.1.6.13.1.2.192.71.88.207.22.184.150.214.61.14|64x|c04758cf +1.3.6.1.2.1.6.13.1.2.215.10.127.204.23.126.210.252.1.27|64x|d70a7fcc +1.3.6.1.2.1.6.13.1.2.223.16.55.201.31.104.212.252.181.5|64x|df1037c9 +1.3.6.1.2.1.6.13.1.2.223.54.125.172.16.159.226.236.17.1|64x|df367dac +1.3.6.1.2.1.6.13.1.2.227.50.96.2.2.215.88.85.244.22|64x|e3326002 +1.3.6.1.2.1.6.13.1.2.254.4.140.40.29.214.201.146.122.0|64x|fe048c28 +1.3.6.1.2.1.6.13.1.3.23.177.97.199.10.151.211.52.249.28|2|10 +1.3.6.1.2.1.6.13.1.3.113.156.27.12.6.103.49.217.167.25|2|6 +1.3.6.1.2.1.6.13.1.3.122.61.54.190.29.172.169.37.170.22|2|29 +1.3.6.1.2.1.6.13.1.3.148.215.184.93.3.18.135.204.247.11|2|3 +1.3.6.1.2.1.6.13.1.3.192.71.88.207.22.184.150.214.61.14|2|22 +1.3.6.1.2.1.6.13.1.3.215.10.127.204.23.126.210.252.1.27|2|23 +1.3.6.1.2.1.6.13.1.3.223.16.55.201.31.104.212.252.181.5|2|31 +1.3.6.1.2.1.6.13.1.3.223.54.125.172.16.159.226.236.17.1|2|16 +1.3.6.1.2.1.6.13.1.3.227.50.96.2.2.215.88.85.244.22|2|2 +1.3.6.1.2.1.6.13.1.3.254.4.140.40.29.214.201.146.122.0|2|29 +1.3.6.1.2.1.6.13.1.4.23.177.97.199.10.151.211.52.249.28|64x|97d334f9 +1.3.6.1.2.1.6.13.1.4.113.156.27.12.6.103.49.217.167.25|64x|6731d9a7 +1.3.6.1.2.1.6.13.1.4.122.61.54.190.29.172.169.37.170.22|64x|aca925aa +1.3.6.1.2.1.6.13.1.4.148.215.184.93.3.18.135.204.247.11|64x|1287ccf7 +1.3.6.1.2.1.6.13.1.4.192.71.88.207.22.184.150.214.61.14|64x|b896d63d +1.3.6.1.2.1.6.13.1.4.215.10.127.204.23.126.210.252.1.27|64x|7ed2fc01 +1.3.6.1.2.1.6.13.1.4.223.16.55.201.31.104.212.252.181.5|64x|68d4fcb5 +1.3.6.1.2.1.6.13.1.4.223.54.125.172.16.159.226.236.17.1|64x|9fe2ec11 +1.3.6.1.2.1.6.13.1.4.227.50.96.2.2.215.88.85.244.22|64x|d75855f4 +1.3.6.1.2.1.6.13.1.4.254.4.140.40.29.214.201.146.122.0|64x|d6c9927a +1.3.6.1.2.1.6.13.1.5.23.177.97.199.10.151.211.52.249.28|2|28 +1.3.6.1.2.1.6.13.1.5.113.156.27.12.6.103.49.217.167.25|2|25 +1.3.6.1.2.1.6.13.1.5.122.61.54.190.29.172.169.37.170.22|2|22 +1.3.6.1.2.1.6.13.1.5.148.215.184.93.3.18.135.204.247.11|2|11 +1.3.6.1.2.1.6.13.1.5.192.71.88.207.22.184.150.214.61.14|2|14 +1.3.6.1.2.1.6.13.1.5.215.10.127.204.23.126.210.252.1.27|2|27 +1.3.6.1.2.1.6.13.1.5.223.16.55.201.31.104.212.252.181.5|2|5 +1.3.6.1.2.1.6.13.1.5.223.54.125.172.16.159.226.236.17.1|2|1 +1.3.6.1.2.1.6.13.1.5.227.50.96.2.2.215.88.85.244.22|2|22 +1.3.6.1.2.1.6.13.1.5.254.4.140.40.29.214.201.146.122.0|2|0 +1.3.6.1.2.1.6.14.0|65|2935824574 +1.3.6.1.2.1.6.15.0|65|1544900307 +1.3.6.1.2.1.6.17.0|70|16581522528925471079 +1.3.6.1.2.1.6.18.0|70|3369991573516953990 +1.3.6.1.2.1.7.2.0|65|3998586035 +1.3.6.1.2.1.7.3.0|65|3549343151 +1.3.6.1.2.1.7.4.0|65|2404484755 +1.3.6.1.2.1.7.5.1.1.2.141.239.85.23|64x|028def55 +1.3.6.1.2.1.7.5.1.1.20.60.66.67.23|64x|143c4243 +1.3.6.1.2.1.7.5.1.1.42.145.113.188.16|64x|2a9171bc +1.3.6.1.2.1.7.5.1.1.78.118.31.86.2|64x|4e761f56 +1.3.6.1.2.1.7.5.1.1.85.153.183.119.31|64x|5599b777 +1.3.6.1.2.1.7.5.1.1.87.237.140.144.26|64x|57ed8c90 +1.3.6.1.2.1.7.5.1.1.145.214.51.243.3|64x|91d633f3 +1.3.6.1.2.1.7.5.1.1.169.8.79.103.26|64x|a9084f67 +1.3.6.1.2.1.7.5.1.1.172.6.61.73.19|64x|ac063d49 +1.3.6.1.2.1.7.5.1.1.209.91.67.71.4|64x|d15b4347 +1.3.6.1.2.1.7.5.1.2.2.141.239.85.23|2|23 +1.3.6.1.2.1.7.5.1.2.20.60.66.67.23|2|23 +1.3.6.1.2.1.7.5.1.2.42.145.113.188.16|2|16 +1.3.6.1.2.1.7.5.1.2.78.118.31.86.2|2|2 +1.3.6.1.2.1.7.5.1.2.85.153.183.119.31|2|31 +1.3.6.1.2.1.7.5.1.2.87.237.140.144.26|2|26 +1.3.6.1.2.1.7.5.1.2.145.214.51.243.3|2|3 +1.3.6.1.2.1.7.5.1.2.169.8.79.103.26|2|26 +1.3.6.1.2.1.7.5.1.2.172.6.61.73.19|2|19 +1.3.6.1.2.1.7.5.1.2.209.91.67.71.4|2|4 +1.3.6.1.2.1.7.7.1.1.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|2|0 +1.3.6.1.2.1.7.7.1.1.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|2|0 +1.3.6.1.2.1.7.7.1.1.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|2|1 +1.3.6.1.2.1.7.7.1.1.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|2|2 +1.3.6.1.2.1.7.7.1.1.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|2|2 +1.3.6.1.2.1.7.7.1.1.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|2|2 +1.3.6.1.2.1.7.7.1.1.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|2|2 +1.3.6.1.2.1.7.7.1.1.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|2|3 +1.3.6.1.2.1.7.7.1.1.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|2|4 +1.3.6.1.2.1.7.7.1.1.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|2|4 +1.3.6.1.2.1.7.7.1.2.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|4|their +1.3.6.1.2.1.7.7.1.2.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|4x|4a61646564206b65707420627574206b657074 +1.3.6.1.2.1.7.7.1.2.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|4x|717561696e746c79206b6570742064726976696e67206b6570742074686569722062757420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|4x|746865697220666f7277617264204a61646564 +1.3.6.1.2.1.7.7.1.2.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|4x|627574206163746564206b65707420627574206f78656e207468656972 +1.3.6.1.2.1.7.7.1.2.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|4x|666f727761726420666f727761726420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|4x|64726976696e67207468656972206b657074206163746564204a61646564207a6f6d62696573206163746564206b657074 +1.3.6.1.2.1.7.7.1.2.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|4x|717561696e746c79207a6f6d626965732062757420627574206b657074 +1.3.6.1.2.1.7.7.1.2.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|4x|4a61646564204a6164656420717561696e746c79206f78656e206f78656e204a6164656420627574206163746564 +1.3.6.1.2.1.7.7.1.2.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|4x|717561696e746c7920666f727761726420627574207a6f6d626965732064726976696e67204a61646564207a6f6d62696573 +1.3.6.1.2.1.7.7.1.3.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|59995 +1.3.6.1.2.1.7.7.1.3.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|13615 +1.3.6.1.2.1.7.7.1.3.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|17513 +1.3.6.1.2.1.7.7.1.3.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|2480 +1.3.6.1.2.1.7.7.1.3.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|37036 +1.3.6.1.2.1.7.7.1.3.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|20490 +1.3.6.1.2.1.7.7.1.3.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|30354 +1.3.6.1.2.1.7.7.1.3.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|6240 +1.3.6.1.2.1.7.7.1.3.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|29265 +1.3.6.1.2.1.7.7.1.3.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|27397 +1.3.6.1.2.1.7.7.1.4.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|2|0 +1.3.6.1.2.1.7.7.1.4.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|2|2 +1.3.6.1.2.1.7.7.1.4.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|2|16 +1.3.6.1.2.1.7.7.1.4.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|2|0 +1.3.6.1.2.1.7.7.1.4.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|2|3 +1.3.6.1.2.1.7.7.1.4.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|2|16 +1.3.6.1.2.1.7.7.1.4.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|2|3 +1.3.6.1.2.1.7.7.1.4.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|2|4 +1.3.6.1.2.1.7.7.1.4.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|2|1 +1.3.6.1.2.1.7.7.1.4.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|2|3 +1.3.6.1.2.1.7.7.1.5.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|4x|6163746564207a6f6d62696573207468656972204a61646564206b657074 +1.3.6.1.2.1.7.7.1.5.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|4x|7a6f6d62696573207a6f6d62696573206b65707420666f7277617264206b657074206b657074204a6164656420627574207468656972 +1.3.6.1.2.1.7.7.1.5.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|4x|666f7277617264206f78656e204a61646564 +1.3.6.1.2.1.7.7.1.5.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|4x|4a616465642064726976696e6720616374656420616374656420627574204a61646564207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|4x|64726976696e67206f78656e206b65707420717561696e746c79207468656972207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|4x|717561696e746c79206163746564 +1.3.6.1.2.1.7.7.1.5.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|4x|6275742074686569722062757420717561696e746c79206b657074 +1.3.6.1.2.1.7.7.1.5.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|4|their +1.3.6.1.2.1.7.7.1.5.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|4x|7a6f6d626965732074686569722064726976696e672062757420717561696e746c79207a6f6d626965732074686569722064726976696e67207468656972 +1.3.6.1.2.1.7.7.1.5.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|4x|62757420666f7277617264 +1.3.6.1.2.1.7.7.1.6.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|55726 +1.3.6.1.2.1.7.7.1.6.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|28531 +1.3.6.1.2.1.7.7.1.6.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|11079 +1.3.6.1.2.1.7.7.1.6.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|36798 +1.3.6.1.2.1.7.7.1.6.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|16811 +1.3.6.1.2.1.7.7.1.6.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|48634 +1.3.6.1.2.1.7.7.1.6.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|47173 +1.3.6.1.2.1.7.7.1.6.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|64624 +1.3.6.1.2.1.7.7.1.6.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|50219 +1.3.6.1.2.1.7.7.1.6.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|29145 +1.3.6.1.2.1.7.7.1.7.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|774 +1.3.6.1.2.1.7.7.1.7.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|32766 +1.3.6.1.2.1.7.7.1.7.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|42521 +1.3.6.1.2.1.7.7.1.7.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|62779 +1.3.6.1.2.1.7.7.1.7.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|47504 +1.3.6.1.2.1.7.7.1.7.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|55881 +1.3.6.1.2.1.7.7.1.7.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|30456 +1.3.6.1.2.1.7.7.1.7.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|29068 +1.3.6.1.2.1.7.7.1.7.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|30734 +1.3.6.1.2.1.7.7.1.7.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|33093 +1.3.6.1.2.1.7.7.1.8.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|22659 +1.3.6.1.2.1.7.7.1.8.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|19353 +1.3.6.1.2.1.7.7.1.8.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|61976 +1.3.6.1.2.1.7.7.1.8.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|61206 +1.3.6.1.2.1.7.7.1.8.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|14129 +1.3.6.1.2.1.7.7.1.8.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|59181 +1.3.6.1.2.1.7.7.1.8.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|15936 +1.3.6.1.2.1.7.7.1.8.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|5023 +1.3.6.1.2.1.7.7.1.8.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|22219 +1.3.6.1.2.1.7.7.1.8.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|45286 +1.3.6.1.2.1.7.8.0|70|6116206687099577350 +1.3.6.1.2.1.7.9.0|70|60548728080473664 +1.3.6.1.2.1.31.1.1.1.1.11|4x|65746830 +1.3.6.1.2.1.31.1.1.1.2.11|65|3971642957 +1.3.6.1.2.1.31.1.1.1.3.11|65|3271801795 +1.3.6.1.2.1.31.1.1.1.4.11|65|3342364789 +1.3.6.1.2.1.31.1.1.1.5.11|65|3388467146 +1.3.6.1.2.1.31.1.1.1.6.11|70|14670660891743438939 +1.3.6.1.2.1.31.1.1.1.7.11|70|10886984631120028416 +1.3.6.1.2.1.31.1.1.1.8.11|70|17994136813414766052 +1.3.6.1.2.1.31.1.1.1.9.11|70|10439183159610289289 +1.3.6.1.2.1.31.1.1.1.10.11|70|2583386891169315520 +1.3.6.1.2.1.31.1.1.1.11.11|70|8885889412380302445 +1.3.6.1.2.1.31.1.1.1.12.11|70|10885548970511406028 +1.3.6.1.2.1.31.1.1.1.13.11|70|10028224865574503284 +1.3.6.1.2.1.31.1.1.1.15.11|66|31298329 +1.3.6.1.2.1.99.1.1.1.1.31|2|9 +1.3.6.1.2.1.99.1.1.1.2.31|2|3 +1.3.6.1.2.1.99.1.1.1.3.31|2|6 +1.3.6.1.2.1.99.1.1.1.4.31|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.1.8|2|8 +1.3.6.1.4.1.9.9.13.1.3.1.1.11|2|11 +1.3.6.1.4.1.9.9.13.1.3.1.1.13|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.1.14|2|14 +1.3.6.1.4.1.9.9.13.1.3.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.3.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.3.1.2.3|4x|7468656972207a6f6d62696573207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.13.1.3.1.2.6|4x|64726976696e672064726976696e67206b657074206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.8|4x|7a6f6d626965732062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.11|4x|61637465642064726976696e67204a61646564206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.13|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.14|4|oxen +1.3.6.1.4.1.9.9.13.1.3.1.2.20|4x|6b657074206f78656e +1.3.6.1.4.1.9.9.13.1.3.1.2.21|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.13.1.3.1.2.31|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.3.3|66|3930379735 +1.3.6.1.4.1.9.9.13.1.3.1.3.6|66|2258658671 +1.3.6.1.4.1.9.9.13.1.3.1.3.8|66|3213289584 +1.3.6.1.4.1.9.9.13.1.3.1.3.11|66|978410705 +1.3.6.1.4.1.9.9.13.1.3.1.3.13|66|2328456073 +1.3.6.1.4.1.9.9.13.1.3.1.3.14|66|952183581 +1.3.6.1.4.1.9.9.13.1.3.1.3.20|66|2877883263 +1.3.6.1.4.1.9.9.13.1.3.1.3.21|66|3953080519 +1.3.6.1.4.1.9.9.13.1.3.1.3.31|66|414726588 +1.3.6.1.4.1.9.9.13.1.3.1.4.3|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.4.6|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.4.8|2|1 +1.3.6.1.4.1.9.9.13.1.3.1.4.11|2|29 +1.3.6.1.4.1.9.9.13.1.3.1.4.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.4.14|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.4.20|2|23 +1.3.6.1.4.1.9.9.13.1.3.1.4.21|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.4.31|2|5 +1.3.6.1.4.1.9.9.13.1.3.1.5.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.5.6|2|7 +1.3.6.1.4.1.9.9.13.1.3.1.5.8|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.5.11|2|26 +1.3.6.1.4.1.9.9.13.1.3.1.5.13|2|30 +1.3.6.1.4.1.9.9.13.1.3.1.5.14|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.5.20|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.5.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.5.31|2|28 +1.3.6.1.4.1.9.9.13.1.3.1.6.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.8|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.11|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.14|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.20|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.21|2|4 +1.3.6.1.4.1.9.9.13.1.3.1.6.31|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.1.4|2|4 +1.3.6.1.4.1.9.9.13.1.4.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.1.7|2|7 +1.3.6.1.4.1.9.9.13.1.4.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.4.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.4.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.4.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.4.1.1.27|2|27 +1.3.6.1.4.1.9.9.13.1.4.1.1.30|2|30 +1.3.6.1.4.1.9.9.13.1.4.1.2.4|4|fan_1 +1.3.6.1.4.1.9.9.13.1.4.1.2.6|4|fan_2 +1.3.6.1.4.1.9.9.13.1.4.1.2.7|4|fan_3 +1.3.6.1.4.1.9.9.13.1.4.1.2.16|4|fan_4 +1.3.6.1.4.1.9.9.13.1.4.1.2.22|4|fan_5 +1.3.6.1.4.1.9.9.13.1.4.1.2.25|4|fan_6 +1.3.6.1.4.1.9.9.13.1.4.1.2.27|4|fan_7 +1.3.6.1.4.1.9.9.13.1.4.1.2.30|4|fan_8 +1.3.6.1.4.1.9.9.13.1.4.1.3.4|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.7|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.16|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.21|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.22|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.27|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.30|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.1.0|2|0 +1.3.6.1.4.1.9.9.13.1.5.1.1.5|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.5.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.5.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.5.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.5.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.5.1.1.26|2|26 +1.3.6.1.4.1.9.9.13.1.5.1.1.29|2|29 +1.3.6.1.4.1.9.9.13.1.5.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.5.1.2.0|4x|666f7277617264206f78656e206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.5|4|Jaded +1.3.6.1.4.1.9.9.13.1.5.1.2.16|4x|62757420717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.5.1.2.20|4|quaintly +1.3.6.1.4.1.9.9.13.1.5.1.2.21|4x|64726976696e6720717561696e746c7920616374656420627574207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.2.22|4x|62757420627574 +1.3.6.1.4.1.9.9.13.1.5.1.2.25|4x|6163746564206b6570742064726976696e67206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.26|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.9.9.13.1.5.1.2.29|4x|746865697220746865697220616374656420666f7277617264 +1.3.6.1.4.1.9.9.13.1.5.1.2.31|4x|4a616465642064726976696e67207468656972207468656972207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.3.0|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.3.5|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.16|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.20|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.22|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.26|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.31|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.4.0|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.5|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.16|2|4 +1.3.6.1.4.1.9.9.13.1.5.1.4.20|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.22|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.25|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.26|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.4.31|2|1 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.1|2|22 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.7|2|21 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.10|2|17 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.13|2|6 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.15|2|20 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.18|2|8 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.20|2|16 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.1|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.7|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.10|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.13|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.15|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.18|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.20|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.1|2|3 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.7|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.10|2|6 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.13|2|4 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.15|2|6 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.18|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.20|2|6 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.1|66|2223021701 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.7|66|917475738 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.10|66|631313195 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.13|66|2637486476 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.15|66|30159574 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.18|66|3370367591 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.20|66|1617271034 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.1|2|13 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.7|2|30 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.10|2|2 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.13|2|21 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.15|2|19 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.18|2|20 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.20|2|27 +1.3.6.1.4.1.9.9.48.1.1.1.1.18|2|18 +1.3.6.1.4.1.9.9.48.1.1.1.2.18|4|test_pool +1.3.6.1.4.1.9.9.48.1.1.1.3.18|2|23 +1.3.6.1.4.1.9.9.48.1.1.1.4.18|2|1 +1.3.6.1.4.1.9.9.48.1.1.1.5.18|66|4078680985 +1.3.6.1.4.1.9.9.48.1.1.1.6.18|66|3648996318 +1.3.6.1.4.1.9.9.48.1.1.1.7.18|66|3283078931 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.712|66|712 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.7746|66|7746 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.712|2|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.7746|2|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.712|66|90 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.7746|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.712|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.7746|66|4 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.712|66|50 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.712|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.7746|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.712|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.712|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.712|66|15518 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.7746|66|38028 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.712|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.7746|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.712|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.7746|66|7 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.712|66|353 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.7746|66|727588670 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.712|66|248 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.7746|66|1683542536 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.3|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.4|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.5|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.7|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.16|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.17|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.24|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.25|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.3|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.4|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.5|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.7|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.11|2|6 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.16|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.17|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.24|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.25|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.3|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.4|2|14 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.5|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.7|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.11|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.16|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.17|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.24|2|8 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.25|2|29 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.3|4x|6f78656e207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.4|4x|4a6164656420717561696e746c79204a6164656420627574207a6f6d6269657320717561696e746c79207a6f6d6269657320666f7277617264206b657074 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.5|4x|74686569722064726976696e67206b657074206f78656e2064726976696e6720666f7277617264207468656972 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.7|4x|6b65707420666f727761726420627574207468656972206275742064726976696e67207a6f6d6269657320746865697220717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.11|4|quaintly +1.3.6.1.4.1.9.9.117.1.1.2.1.4.16|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.17|4x|6f78656e206b65707420627574207a6f6d6269657320717561696e746c7920627574206f78656e +1.3.6.1.4.1.9.9.117.1.1.2.1.4.24|4x|4a61646564207a6f6d626965732061637465642064726976696e67207468656972207a6f6d6269657320666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.25|4x|6275742064726976696e67204a61646564206275742062757420627574 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.3|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.4|2|24 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.5|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.7|2|23 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.11|2|20 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.16|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.17|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.24|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.25|2|0 +1.3.6.1.4.1.9.9.117.1.1.3.0|2|10 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.2|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.7|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.8|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.21|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.26|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.27|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.30|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.31|2|1 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.1.3|2|3 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.3|4|Secondary unit +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.5|4|Primary unit +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.6|4|Failover LAN Interface +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.3|2|2 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.5|2|8 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.6|2|9 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.1.47596.5|66|47596 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.1.50035.2|66|50035 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.2.47596.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.2.50035.2|2|2 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.3.47596.5|4x|64726976696e67206b6570742064726976696e67207468656972204a61646564204a61646564206b65707420627574206b657074 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.3.50035.2|4x|717561696e746c7920627574207468656972206275742064726976696e67 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.4.47596.5|66|759866853 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.4.50035.2|66|3000607411 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.5.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.8.1|2|8 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.20.2|2|20 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.5.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.8.1|2|1 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.20.2|2|2 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.5.5|4x|627574206b657074207468656972206f78656e20666f72776172642064726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.8.1|4|test_conn +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.20.2|4x|4a6164656420746865697220627574204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.5.5|65|2025029234 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.8.1|65|2690303639 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.20.2|65|2586750173 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.5.5|66|20378309 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.20.2|66|4087850099 +1.3.6.1.4.1.9.9.171.1.1.1.0|2|20 +1.3.6.1.4.1.9.9.171.1.2.1.1.0|66|2517445787 +1.3.6.1.4.1.9.9.171.1.2.1.2.0|65|2082435314 +1.3.6.1.4.1.9.9.171.1.2.1.3.0|65|3586485799 +1.3.6.1.4.1.9.9.171.1.2.1.4.0|65|55415745 +1.3.6.1.4.1.9.9.171.1.2.1.5.0|65|2585066045 +1.3.6.1.4.1.9.9.171.1.2.1.6.0|65|2512419052 +1.3.6.1.4.1.9.9.171.1.2.1.7.0|65|787033253 +1.3.6.1.4.1.9.9.171.1.2.1.8.0|65|3554335867 +1.3.6.1.4.1.9.9.171.1.2.1.9.0|65|3427054745 +1.3.6.1.4.1.9.9.171.1.2.1.10.0|65|915529830 +1.3.6.1.4.1.9.9.171.1.2.1.11.0|65|1771994502 +1.3.6.1.4.1.9.9.171.1.2.1.12.0|65|2076367213 +1.3.6.1.4.1.9.9.171.1.2.1.13.0|65|123173035 +1.3.6.1.4.1.9.9.171.1.2.1.14.0|65|3653722608 +1.3.6.1.4.1.9.9.171.1.2.1.15.0|65|67753505 +1.3.6.1.4.1.9.9.171.1.2.1.16.0|65|2844371229 +1.3.6.1.4.1.9.9.171.1.2.1.17.0|65|654198838 +1.3.6.1.4.1.9.9.171.1.2.1.18.0|65|1314173894 +1.3.6.1.4.1.9.9.171.1.2.1.19.0|65|2721519379 +1.3.6.1.4.1.9.9.171.1.2.1.20.0|65|2355318485 +1.3.6.1.4.1.9.9.171.1.2.1.21.0|65|2650257281 +1.3.6.1.4.1.9.9.171.1.2.1.22.0|65|1030937622 +1.3.6.1.4.1.9.9.171.1.2.1.23.0|65|2780652506 +1.3.6.1.4.1.9.9.171.1.2.1.24.0|65|1045063375 +1.3.6.1.4.1.9.9.171.1.2.1.25.0|65|3776486351 +1.3.6.1.4.1.9.9.171.1.2.1.26.0|65|1216922190 +1.3.6.1.4.1.9.9.171.1.2.2.1.1.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.1.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|2 +1.3.6.1.4.1.9.9.171.1.2.2.1.2.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|6b6570742064726976696e67206275742064726976696e67206f78656e20666f7277617264204a6164656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.9.9.171.1.2.2.1.2.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4x|627574207a6f6d62696573206f78656e207468656972206b657074 +1.3.6.1.4.1.9.9.171.1.2.2.1.3.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.3.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.4.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|6b65707420666f7277617264207468656972 +1.3.6.1.4.1.9.9.171.1.2.2.1.4.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4x|717561696e746c792064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.171.1.2.2.1.5.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|30 +1.3.6.1.4.1.9.9.171.1.2.2.1.5.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|12 +1.3.6.1.4.1.9.9.171.1.2.2.1.6.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|4a61646564206b657074207468656972 +1.3.6.1.4.1.9.9.171.1.2.2.1.6.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4|kept +1.3.6.1.4.1.9.9.171.1.2.2.1.7.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.2.2.1.7.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4|kept +1.3.6.1.4.1.9.9.171.1.2.2.1.8.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|23 +1.3.6.1.4.1.9.9.171.1.2.2.1.8.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|31 +1.3.6.1.4.1.9.9.171.1.2.2.1.9.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|22 +1.3.6.1.4.1.9.9.171.1.2.2.1.9.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.1.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.3.1.2.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.2.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.3.3|4x|7468656972207a6f6d62696573207468656972207a6f6d62696573206b657074206f78656e +1.3.6.1.4.1.9.9.171.1.2.3.1.3.5|4x|7a6f6d62696573204a6164656420746865697220616374656420627574 +1.3.6.1.4.1.9.9.171.1.2.3.1.4.3|4|oxen +1.3.6.1.4.1.9.9.171.1.2.3.1.4.5|4x|6163746564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.2.3.1.5.3|4|oxen +1.3.6.1.4.1.9.9.171.1.2.3.1.5.5|4|but +1.3.6.1.4.1.9.9.171.1.2.3.1.6.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.6.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.7.3|4x|6163746564206b657074204a61646564206163746564 +1.3.6.1.4.1.9.9.171.1.2.3.1.7.5|4x|64726976696e67206f78656e206b65707420627574204a61646564207a6f6d62696573204a61646564 +1.3.6.1.4.1.9.9.171.1.2.3.1.8.3|4|kept +1.3.6.1.4.1.9.9.171.1.2.3.1.8.5|4x|6b657074207468656972204a61646564 +1.3.6.1.4.1.9.9.171.1.2.3.1.9.3|4x|6163746564206b657074207468656972207468656972 +1.3.6.1.4.1.9.9.171.1.2.3.1.9.5|4x|666f727761726420666f7277617264206b65707420717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.2.3.1.10.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.10.5|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.11.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.11.5|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.12.3|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.12.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.13.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.13.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.14.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.14.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.3.1.15.3|2|13 +1.3.6.1.4.1.9.9.171.1.2.3.1.15.5|2|28 +1.3.6.1.4.1.9.9.171.1.2.3.1.16.3|2|16 +1.3.6.1.4.1.9.9.171.1.2.3.1.16.5|2|0 +1.3.6.1.4.1.9.9.171.1.2.3.1.17.3|2|9 +1.3.6.1.4.1.9.9.171.1.2.3.1.17.5|2|23 +1.3.6.1.4.1.9.9.171.1.2.3.1.18.3|65|873863217 +1.3.6.1.4.1.9.9.171.1.2.3.1.18.5|65|4041389162 +1.3.6.1.4.1.9.9.171.1.2.3.1.19.3|65|444696945 +1.3.6.1.4.1.9.9.171.1.2.3.1.19.5|65|1429413108 +1.3.6.1.4.1.9.9.171.1.2.3.1.20.3|65|2526233032 +1.3.6.1.4.1.9.9.171.1.2.3.1.20.5|65|3931574972 +1.3.6.1.4.1.9.9.171.1.2.3.1.21.3|65|2479090364 +1.3.6.1.4.1.9.9.171.1.2.3.1.21.5|65|874183465 +1.3.6.1.4.1.9.9.171.1.2.3.1.22.3|65|888202948 +1.3.6.1.4.1.9.9.171.1.2.3.1.22.5|65|1610429217 +1.3.6.1.4.1.9.9.171.1.2.3.1.23.3|65|3462920250 +1.3.6.1.4.1.9.9.171.1.2.3.1.23.5|65|2151705546 +1.3.6.1.4.1.9.9.171.1.2.3.1.24.3|65|2565719801 +1.3.6.1.4.1.9.9.171.1.2.3.1.24.5|65|3395553994 +1.3.6.1.4.1.9.9.171.1.2.3.1.25.3|65|2228405074 +1.3.6.1.4.1.9.9.171.1.2.3.1.25.5|65|2624335244 +1.3.6.1.4.1.9.9.171.1.2.3.1.26.3|65|3006967537 +1.3.6.1.4.1.9.9.171.1.2.3.1.26.5|65|410051353 +1.3.6.1.4.1.9.9.171.1.2.3.1.27.3|65|1337714779 +1.3.6.1.4.1.9.9.171.1.2.3.1.27.5|65|1425712802 +1.3.6.1.4.1.9.9.171.1.2.3.1.28.3|65|2116873007 +1.3.6.1.4.1.9.9.171.1.2.3.1.28.5|65|1353332653 +1.3.6.1.4.1.9.9.171.1.2.3.1.29.3|65|3580869615 +1.3.6.1.4.1.9.9.171.1.2.3.1.29.5|65|715475082 +1.3.6.1.4.1.9.9.171.1.2.3.1.30.3|65|2249094174 +1.3.6.1.4.1.9.9.171.1.2.3.1.30.5|65|685279905 +1.3.6.1.4.1.9.9.171.1.2.3.1.31.3|65|2318835995 +1.3.6.1.4.1.9.9.171.1.2.3.1.31.5|65|3313898297 +1.3.6.1.4.1.9.9.171.1.2.3.1.32.3|65|990926535 +1.3.6.1.4.1.9.9.171.1.2.3.1.32.5|65|4004637148 +1.3.6.1.4.1.9.9.171.1.2.3.1.33.3|65|1674719135 +1.3.6.1.4.1.9.9.171.1.2.3.1.33.5|65|3116893031 +1.3.6.1.4.1.9.9.171.1.2.3.1.34.3|65|2142489467 +1.3.6.1.4.1.9.9.171.1.2.3.1.34.5|65|567516830 +1.3.6.1.4.1.9.9.171.1.2.3.1.35.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.35.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.4.1.1.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.1.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.2.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|4x|666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.171.1.2.4.1.2.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|4x|7468656972207a6f6d62696573206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.9.9.171.1.2.4.1.3.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.4.1.3.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.4.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|4x|627574206f78656e2064726976696e67207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.2.4.1.4.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|4x|7468656972204a61646564206b657074207a6f6d62696573207468656972206b65707420627574 +1.3.6.1.4.1.9.9.171.1.2.4.1.5.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|13 +1.3.6.1.4.1.9.9.171.1.2.4.1.5.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|24 +1.3.6.1.4.1.9.9.171.1.2.4.1.6.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.4.1.6.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|26 +1.3.6.1.4.1.9.9.171.1.2.4.1.7.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|23 +1.3.6.1.4.1.9.9.171.1.2.4.1.7.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|24 +1.3.6.1.4.1.9.9.171.1.2.5.1.1.2|66|3405348844 +1.3.6.1.4.1.9.9.171.1.2.5.1.1.17|66|1379037661 +1.3.6.1.4.1.9.9.171.1.2.5.1.2.2|65|88229005 +1.3.6.1.4.1.9.9.171.1.2.5.1.2.17|65|3030198713 +1.3.6.1.4.1.9.9.171.1.2.5.1.3.2|65|344910659 +1.3.6.1.4.1.9.9.171.1.2.5.1.3.17|65|33036840 +1.3.6.1.4.1.9.9.171.1.2.5.1.4.2|65|447299365 +1.3.6.1.4.1.9.9.171.1.2.5.1.4.17|65|538727845 +1.3.6.1.4.1.9.9.171.1.2.5.1.5.2|65|472834505 +1.3.6.1.4.1.9.9.171.1.2.5.1.5.17|65|3054034 +1.3.6.1.4.1.9.9.171.1.2.5.1.6.2|65|3593802072 +1.3.6.1.4.1.9.9.171.1.2.5.1.6.17|65|3549366247 +1.3.6.1.4.1.9.9.171.1.2.5.1.7.2|65|2944563745 +1.3.6.1.4.1.9.9.171.1.2.5.1.7.17|65|3766841702 +1.3.6.1.4.1.9.9.171.1.2.5.1.8.2|65|2827110916 +1.3.6.1.4.1.9.9.171.1.2.5.1.8.17|65|541497651 +1.3.6.1.4.1.9.9.171.1.2.5.1.9.2|65|234506077 +1.3.6.1.4.1.9.9.171.1.2.5.1.9.17|65|2731827217 +1.3.6.1.4.1.9.9.171.1.2.5.1.10.2|65|35823350 +1.3.6.1.4.1.9.9.171.1.2.5.1.10.17|65|2055408274 +1.3.6.1.4.1.9.9.171.1.2.5.1.11.2|65|613379743 +1.3.6.1.4.1.9.9.171.1.2.5.1.11.17|65|749737562 +1.3.6.1.4.1.9.9.171.1.2.5.1.12.2|65|3136782594 +1.3.6.1.4.1.9.9.171.1.2.5.1.12.17|65|3867599558 +1.3.6.1.4.1.9.9.171.1.2.5.1.13.2|65|2518038894 +1.3.6.1.4.1.9.9.171.1.2.5.1.13.17|65|3789209889 +1.3.6.1.4.1.9.9.171.1.2.5.1.14.2|65|485135820 +1.3.6.1.4.1.9.9.171.1.2.5.1.14.17|65|2804351110 +1.3.6.1.4.1.9.9.171.1.2.5.1.15.2|65|3816944451 +1.3.6.1.4.1.9.9.171.1.2.5.1.15.17|65|3061990294 +1.3.6.1.4.1.9.9.171.1.2.5.1.16.2|65|3293750728 +1.3.6.1.4.1.9.9.171.1.2.5.1.16.17|65|3502377103 +1.3.6.1.4.1.9.9.171.1.2.5.1.17.2|65|4236310901 +1.3.6.1.4.1.9.9.171.1.2.5.1.17.17|65|2360434961 +1.3.6.1.4.1.9.9.171.1.2.5.1.18.2|65|3798162230 +1.3.6.1.4.1.9.9.171.1.2.5.1.18.17|65|3954421682 +1.3.6.1.4.1.9.9.171.1.2.5.1.19.2|65|1365609163 +1.3.6.1.4.1.9.9.171.1.2.5.1.19.17|65|191894913 +1.3.6.1.4.1.9.9.171.1.2.5.1.20.2|65|1405339921 +1.3.6.1.4.1.9.9.171.1.2.5.1.20.17|65|2429774821 +1.3.6.1.4.1.9.9.171.1.2.5.1.21.2|65|2995566101 +1.3.6.1.4.1.9.9.171.1.2.5.1.21.17|65|1832565962 +1.3.6.1.4.1.9.9.171.1.2.5.1.22.2|65|4132429477 +1.3.6.1.4.1.9.9.171.1.2.5.1.22.17|65|418366803 +1.3.6.1.4.1.9.9.171.1.2.5.1.23.2|65|2015402172 +1.3.6.1.4.1.9.9.171.1.2.5.1.23.17|65|1316534295 +1.3.6.1.4.1.9.9.171.1.2.5.1.24.2|65|3247282160 +1.3.6.1.4.1.9.9.171.1.2.5.1.24.17|65|2833736517 +1.3.6.1.4.1.9.9.171.1.2.5.1.25.2|65|2823444229 +1.3.6.1.4.1.9.9.171.1.2.5.1.25.17|65|1615516389 +1.3.6.1.4.1.9.9.171.1.2.5.1.26.2|65|73347298 +1.3.6.1.4.1.9.9.171.1.2.5.1.26.17|65|2896149360 +1.3.6.1.4.1.9.9.171.1.3.1.1.0|66|555520100 +1.3.6.1.4.1.9.9.171.1.3.1.2.0|65|3433850807 +1.3.6.1.4.1.9.9.171.1.3.1.3.0|65|3765451978 +1.3.6.1.4.1.9.9.171.1.3.1.4.0|70|8076380598964912751 +1.3.6.1.4.1.9.9.171.1.3.1.5.0|65|605242469 +1.3.6.1.4.1.9.9.171.1.3.1.6.0|65|2117938836 +1.3.6.1.4.1.9.9.171.1.3.1.7.0|70|1244382013554652095 +1.3.6.1.4.1.9.9.171.1.3.1.8.0|65|2069097191 +1.3.6.1.4.1.9.9.171.1.3.1.9.0|65|1103506722 +1.3.6.1.4.1.9.9.171.1.3.1.10.0|65|3278141363 +1.3.6.1.4.1.9.9.171.1.3.1.11.0|65|2348631446 +1.3.6.1.4.1.9.9.171.1.3.1.12.0|65|788758787 +1.3.6.1.4.1.9.9.171.1.3.1.13.0|65|1299954247 +1.3.6.1.4.1.9.9.171.1.3.1.14.0|65|2563637642 +1.3.6.1.4.1.9.9.171.1.3.1.15.0|65|34726275 +1.3.6.1.4.1.9.9.171.1.3.1.16.0|65|3892208230 +1.3.6.1.4.1.9.9.171.1.3.1.17.0|70|11061656018312361232 +1.3.6.1.4.1.9.9.171.1.3.1.18.0|65|3239360685 +1.3.6.1.4.1.9.9.171.1.3.1.19.0|65|2198334559 +1.3.6.1.4.1.9.9.171.1.3.1.20.0|70|3371199286386608944 +1.3.6.1.4.1.9.9.171.1.3.1.21.0|65|2444861007 +1.3.6.1.4.1.9.9.171.1.3.1.22.0|65|1881053125 +1.3.6.1.4.1.9.9.171.1.3.1.23.0|65|3540985166 +1.3.6.1.4.1.9.9.171.1.3.1.24.0|65|3081489769 +1.3.6.1.4.1.9.9.171.1.3.1.25.0|65|257883106 +1.3.6.1.4.1.9.9.171.1.3.1.26.0|65|1836586560 +1.3.6.1.4.1.9.9.171.1.3.1.27.0|65|980485057 +1.3.6.1.4.1.9.9.171.1.3.1.28.0|65|644393269 +1.3.6.1.4.1.9.9.171.1.3.1.29.0|65|3550809455 +1.3.6.1.4.1.9.9.171.1.3.1.30.0|65|1537259604 +1.3.6.1.4.1.9.9.171.1.3.2.1.1.23|2|23 +1.3.6.1.4.1.9.9.171.1.3.2.1.1.28|2|28 +1.3.6.1.4.1.9.9.171.1.3.2.1.2.23|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.2.28|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.3.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.3.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.4.23|4x|64726976696e67206b65707420627574 +1.3.6.1.4.1.9.9.171.1.3.2.1.4.28|4x|6b6570742062757420666f7277617264 +1.3.6.1.4.1.9.9.171.1.3.2.1.5.23|4|kept +1.3.6.1.4.1.9.9.171.1.3.2.1.5.28|4|kept +1.3.6.1.4.1.9.9.171.1.3.2.1.6.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.6.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.7.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.7.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.8.23|2|4 +1.3.6.1.4.1.9.9.171.1.3.2.1.8.28|2|6 +1.3.6.1.4.1.9.9.171.1.3.2.1.9.23|2|25 +1.3.6.1.4.1.9.9.171.1.3.2.1.9.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.10.23|2|30 +1.3.6.1.4.1.9.9.171.1.3.2.1.10.28|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.11.23|2|25 +1.3.6.1.4.1.9.9.171.1.3.2.1.11.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.12.23|2|29 +1.3.6.1.4.1.9.9.171.1.3.2.1.12.28|2|12 +1.3.6.1.4.1.9.9.171.1.3.2.1.13.23|65|736404368 +1.3.6.1.4.1.9.9.171.1.3.2.1.13.28|65|3035617434 +1.3.6.1.4.1.9.9.171.1.3.2.1.14.23|65|2717096145 +1.3.6.1.4.1.9.9.171.1.3.2.1.14.28|65|3979661869 +1.3.6.1.4.1.9.9.171.1.3.2.1.15.23|66|1401352929 +1.3.6.1.4.1.9.9.171.1.3.2.1.15.28|66|1557942135 +1.3.6.1.4.1.9.9.171.1.3.2.1.16.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.16.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.17.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.17.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.18.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.18.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.19.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.19.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.20.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.20.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.21.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.21.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.22.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.22.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.23.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.23.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.24.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.24.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.25.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.25.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.26.23|65|165896064 +1.3.6.1.4.1.9.9.171.1.3.2.1.26.28|65|3618088990 +1.3.6.1.4.1.9.9.171.1.3.2.1.27.23|70|16893382919849205152 +1.3.6.1.4.1.9.9.171.1.3.2.1.27.28|70|11976318338642029242 +1.3.6.1.4.1.9.9.171.1.3.2.1.28.23|65|373706179 +1.3.6.1.4.1.9.9.171.1.3.2.1.28.28|65|42463689 +1.3.6.1.4.1.9.9.171.1.3.2.1.29.23|65|1106272656 +1.3.6.1.4.1.9.9.171.1.3.2.1.29.28|65|1002521669 +1.3.6.1.4.1.9.9.171.1.3.2.1.30.23|70|11922900353577803661 +1.3.6.1.4.1.9.9.171.1.3.2.1.30.28|70|15599379710949051351 +1.3.6.1.4.1.9.9.171.1.3.2.1.31.23|65|1074980189 +1.3.6.1.4.1.9.9.171.1.3.2.1.31.28|65|1263307338 +1.3.6.1.4.1.9.9.171.1.3.2.1.32.23|65|19491227 +1.3.6.1.4.1.9.9.171.1.3.2.1.32.28|65|3040420568 +1.3.6.1.4.1.9.9.171.1.3.2.1.33.23|65|185606313 +1.3.6.1.4.1.9.9.171.1.3.2.1.33.28|65|4077668277 +1.3.6.1.4.1.9.9.171.1.3.2.1.34.23|65|3856931801 +1.3.6.1.4.1.9.9.171.1.3.2.1.34.28|65|1043684270 +1.3.6.1.4.1.9.9.171.1.3.2.1.35.23|65|1768453926 +1.3.6.1.4.1.9.9.171.1.3.2.1.35.28|65|2468669416 +1.3.6.1.4.1.9.9.171.1.3.2.1.36.23|65|3103192375 +1.3.6.1.4.1.9.9.171.1.3.2.1.36.28|65|3896235917 +1.3.6.1.4.1.9.9.171.1.3.2.1.37.23|65|2610571653 +1.3.6.1.4.1.9.9.171.1.3.2.1.37.28|65|2004039361 +1.3.6.1.4.1.9.9.171.1.3.2.1.38.23|65|668234317 +1.3.6.1.4.1.9.9.171.1.3.2.1.38.28|65|229562644 +1.3.6.1.4.1.9.9.171.1.3.2.1.39.23|65|451351388 +1.3.6.1.4.1.9.9.171.1.3.2.1.39.28|65|358890378 +1.3.6.1.4.1.9.9.171.1.3.2.1.40.23|70|15907561446294960767 +1.3.6.1.4.1.9.9.171.1.3.2.1.40.28|70|14524952430283157279 +1.3.6.1.4.1.9.9.171.1.3.2.1.41.23|65|2966419854 +1.3.6.1.4.1.9.9.171.1.3.2.1.41.28|65|2075836476 +1.3.6.1.4.1.9.9.171.1.3.2.1.42.23|65|2137519503 +1.3.6.1.4.1.9.9.171.1.3.2.1.42.28|65|723885852 +1.3.6.1.4.1.9.9.171.1.3.2.1.43.23|70|13733445844003001241 +1.3.6.1.4.1.9.9.171.1.3.2.1.43.28|70|13579132757302593240 +1.3.6.1.4.1.9.9.171.1.3.2.1.44.23|65|2771155894 +1.3.6.1.4.1.9.9.171.1.3.2.1.44.28|65|1824515850 +1.3.6.1.4.1.9.9.171.1.3.2.1.45.23|65|1889625612 +1.3.6.1.4.1.9.9.171.1.3.2.1.45.28|65|4054252226 +1.3.6.1.4.1.9.9.171.1.3.2.1.46.23|65|2849925259 +1.3.6.1.4.1.9.9.171.1.3.2.1.46.28|65|3010306271 +1.3.6.1.4.1.9.9.171.1.3.2.1.47.23|65|2110348798 +1.3.6.1.4.1.9.9.171.1.3.2.1.47.28|65|3986765758 +1.3.6.1.4.1.9.9.171.1.3.2.1.48.23|65|2958887014 +1.3.6.1.4.1.9.9.171.1.3.2.1.48.28|65|121428427 +1.3.6.1.4.1.9.9.171.1.3.2.1.49.23|65|4235674459 +1.3.6.1.4.1.9.9.171.1.3.2.1.49.28|65|3087398701 +1.3.6.1.4.1.9.9.171.1.3.2.1.50.23|65|2987809814 +1.3.6.1.4.1.9.9.171.1.3.2.1.50.28|65|1084010267 +1.3.6.1.4.1.9.9.171.1.3.2.1.51.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.51.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.3.1.1.3.15|2|15 +1.3.6.1.4.1.9.9.171.1.3.3.1.1.19.26|2|26 +1.3.6.1.4.1.9.9.171.1.3.3.1.2.3.15|4x|717561696e746c79207a6f6d62696573206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.3.3.1.2.19.26|4x|6b657074206163746564206b65707420666f7277617264206b657074 +1.3.6.1.4.1.9.9.171.1.3.3.1.3.3.15|2|1 +1.3.6.1.4.1.9.9.171.1.3.3.1.3.19.26|2|2 +1.3.6.1.4.1.9.9.171.1.3.3.1.4.3.15|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.4.19.26|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.5.3.15|4x|64726976696e67206f78656e20627574 +1.3.6.1.4.1.9.9.171.1.3.3.1.5.19.26|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.6.3.15|2|6 +1.3.6.1.4.1.9.9.171.1.3.3.1.6.19.26|2|20 +1.3.6.1.4.1.9.9.171.1.3.3.1.7.3.15|2|22 +1.3.6.1.4.1.9.9.171.1.3.3.1.7.19.26|2|25 +1.3.6.1.4.1.9.9.171.1.3.3.1.8.3.15|4x|6f78656e204a6164656420746865697220627574 +1.3.6.1.4.1.9.9.171.1.3.3.1.8.19.26|4x|746865697220717561696e746c79206163746564207a6f6d62696573206163746564206f78656e2064726976696e67 +1.3.6.1.4.1.9.9.171.1.3.3.1.9.3.15|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.9.19.26|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.10.3.15|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.10.19.26|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.11.3.15|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.11.19.26|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.171.1.3.3.1.12.3.15|2|11 +1.3.6.1.4.1.9.9.171.1.3.3.1.12.19.26|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.13.3.15|2|17 +1.3.6.1.4.1.9.9.171.1.3.3.1.13.19.26|2|31 +1.3.6.1.4.1.9.9.171.1.3.4.1.1.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.1.31.28|2|28 +1.3.6.1.4.1.9.9.171.1.3.4.1.2.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.2.31.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.3.9.2|66|45981 +1.3.6.1.4.1.9.9.171.1.3.4.1.3.31.28|66|2825 +1.3.6.1.4.1.9.9.171.1.3.4.1.4.9.2|2|3 +1.3.6.1.4.1.9.9.171.1.3.4.1.4.31.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.4.1.5.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.5.31.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.5.1.1.11|66|1539004452 +1.3.6.1.4.1.9.9.171.1.3.5.1.1.21|66|986476198 +1.3.6.1.4.1.9.9.171.1.3.5.1.2.11|65|3634989455 +1.3.6.1.4.1.9.9.171.1.3.5.1.2.21|65|774642436 +1.3.6.1.4.1.9.9.171.1.3.5.1.3.11|65|971728629 +1.3.6.1.4.1.9.9.171.1.3.5.1.3.21|65|3145266041 +1.3.6.1.4.1.9.9.171.1.3.5.1.4.11|65|2110814352 +1.3.6.1.4.1.9.9.171.1.3.5.1.4.21|65|155761707 +1.3.6.1.4.1.9.9.171.1.3.5.1.5.11|65|2248268558 +1.3.6.1.4.1.9.9.171.1.3.5.1.5.21|65|561905585 +1.3.6.1.4.1.9.9.171.1.3.5.1.6.11|65|974515501 +1.3.6.1.4.1.9.9.171.1.3.5.1.6.21|65|913516496 +1.3.6.1.4.1.9.9.171.1.3.5.1.7.11|65|3221449308 +1.3.6.1.4.1.9.9.171.1.3.5.1.7.21|65|2989278436 +1.3.6.1.4.1.9.9.171.1.3.5.1.8.11|65|2541691427 +1.3.6.1.4.1.9.9.171.1.3.5.1.8.21|65|3367590847 +1.3.6.1.4.1.9.9.171.1.3.5.1.9.11|65|2075568959 +1.3.6.1.4.1.9.9.171.1.3.5.1.9.21|65|505678552 +1.3.6.1.4.1.9.9.171.1.3.5.1.10.11|65|1601794867 +1.3.6.1.4.1.9.9.171.1.3.5.1.10.21|65|4108299796 +1.3.6.1.4.1.9.9.171.1.3.5.1.11.11|65|3796494388 +1.3.6.1.4.1.9.9.171.1.3.5.1.11.21|65|1442135763 +1.3.6.1.4.1.9.9.171.1.3.5.1.12.11|65|2850926956 +1.3.6.1.4.1.9.9.171.1.3.5.1.12.21|65|989514632 +1.3.6.1.4.1.9.9.171.1.3.5.1.13.11|65|1864025156 +1.3.6.1.4.1.9.9.171.1.3.5.1.13.21|65|115684894 +1.3.6.1.4.1.9.9.171.1.3.5.1.14.11|65|1486924693 +1.3.6.1.4.1.9.9.171.1.3.5.1.14.21|65|3614381712 +1.3.6.1.4.1.9.9.171.1.3.5.1.15.11|65|2886166675 +1.3.6.1.4.1.9.9.171.1.3.5.1.15.21|65|2418878004 +1.3.6.1.4.1.9.9.171.1.3.5.1.16.11|65|4041081525 +1.3.6.1.4.1.9.9.171.1.3.5.1.16.21|65|3202353128 +1.3.6.1.4.1.9.9.171.1.3.5.1.17.11|65|3359563692 +1.3.6.1.4.1.9.9.171.1.3.5.1.17.21|65|3939308341 +1.3.6.1.4.1.9.9.171.1.3.5.1.18.11|65|3421730058 +1.3.6.1.4.1.9.9.171.1.3.5.1.18.21|65|2537482589 +1.3.6.1.4.1.9.9.171.1.3.5.1.19.11|65|2662393759 +1.3.6.1.4.1.9.9.171.1.3.5.1.19.21|65|2933597356 +1.3.6.1.4.1.9.9.171.1.3.5.1.20.11|65|4135163112 +1.3.6.1.4.1.9.9.171.1.3.5.1.20.21|65|3283135834 +1.3.6.1.4.1.9.9.171.1.3.5.1.21.11|65|562097720 +1.3.6.1.4.1.9.9.171.1.3.5.1.21.21|65|168036034 +1.3.6.1.4.1.9.9.171.1.3.5.1.22.11|65|2444828842 +1.3.6.1.4.1.9.9.171.1.3.5.1.22.21|65|78028517 +1.3.6.1.4.1.9.9.171.1.3.5.1.23.11|65|1627747682 +1.3.6.1.4.1.9.9.171.1.3.5.1.23.21|65|871345082 +1.3.6.1.4.1.9.9.171.1.3.5.1.24.11|65|3118031750 +1.3.6.1.4.1.9.9.171.1.3.5.1.24.21|65|3275451558 +1.3.6.1.4.1.9.9.171.1.3.5.1.25.11|65|142449220 +1.3.6.1.4.1.9.9.171.1.3.5.1.25.21|65|3664919325 +1.3.6.1.4.1.9.9.171.1.3.5.1.26.11|65|2401996341 +1.3.6.1.4.1.9.9.171.1.3.5.1.26.21|65|3251587706 +1.3.6.1.4.1.9.9.171.1.4.1.1.1.0|2|13 +1.3.6.1.4.1.9.9.171.1.4.1.1.2.0|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.1.10|2|10 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.2.10|2|4 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.2.22|2|7 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.3.10|2|30 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.3.22|2|19 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.4.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.4.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.5.10|4x|6163746564207a6f6d62696573206f78656e2061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.5.22|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.6.10|2|6 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.6.22|2|19 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.7.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.7.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.8.10|4x|627574207a6f6d62696573207a6f6d62696573207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.8.22|4x|6275742064726976696e67206b657074 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.9.10|4|kept +1.3.6.1.4.1.9.9.171.1.4.2.1.1.9.22|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.4.2.1.1.10.10|4x|64726976696e67206275742064726976696e6720666f7277617264207468656972 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.10.22|4x|6b657074207468656972204a61646564206b657074206b6570742064726976696e672062757420627574206f78656e +1.3.6.1.4.1.9.9.171.1.4.2.1.1.11.10|4|oxen +1.3.6.1.4.1.9.9.171.1.4.2.1.1.11.22|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.12.10|4x|64726976696e67207468656972206f78656e2064726976696e67207a6f6d6269657320666f727761726420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.12.22|4x|7468656972206163746564 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.13.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.13.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.14.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.14.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.15.10|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.15.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.16.10|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.16.22|2|3 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.17.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.17.22|2|3 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.18.10|2|17 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.18.22|2|15 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.19.10|67|4188924691 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.19.22|67|2937118870 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.20.10|2|11 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.20.22|2|6 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.21.10|65|3904979266 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.21.22|65|3560928040 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.22.10|65|3895453958 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.22.22|65|930877155 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.23.10|65|4155384128 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.23.22|65|1945794694 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.24.10|65|2440644215 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.24.22|65|2179560049 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.25.10|65|3951748314 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.25.22|65|127664431 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.26.10|65|240677500 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.26.22|65|4237031121 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.27.10|65|2919250870 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.27.22|65|4208516442 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.28.10|65|2427553207 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.28.22|65|948705652 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.29.10|65|82976265 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.29.22|65|3934746364 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.30.10|65|3861895215 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.30.22|65|217536823 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.31.10|65|3151994492 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.31.22|65|241794704 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.32.10|65|1506839476 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.32.22|65|2068566446 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.33.10|65|2343908199 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.33.22|65|3426161501 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.34.10|65|648407740 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.34.22|65|1146473588 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.35.10|65|1680408828 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.35.22|65|799707233 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.36.10|65|3312014872 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.36.22|65|1227147473 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.37.10|65|1202145057 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.37.22|65|1608376026 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.38.10|65|3883766622 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.38.22|65|2243100818 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.1.17|2|17 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.1.18|2|18 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.2.17|2|4 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.2.18|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.3.17|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.3.18|2|13 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.4.17|2|11 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.4.18|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.5.17|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.5.18|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.6.17|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.6.18|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.7.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.7.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.8.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.8.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.9.17|2|10 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.9.18|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.10.17|2|21 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.10.18|2|22 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.11.17|67|2140606133 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.11.18|67|947877786 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.12.17|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.12.18|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.13.17|65|804171075 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.13.18|65|3013529205 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.14.17|65|2306734177 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.14.18|65|59730603 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.15.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.15.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.16.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.16.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.17.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.17.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.18.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.18.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.19.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.19.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.20.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.20.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.21.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.21.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.22.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.22.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.23.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.23.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.24.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.24.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.25.17|65|1350520686 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.25.18|65|460378122 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.26.17|70|10257421324758334396 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.26.18|70|15955968530926075190 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.27.17|65|2626476172 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.27.18|65|866683012 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.28.17|65|729325687 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.28.18|65|2042095897 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.29.17|70|3908873172283764405 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.29.18|70|9692543863636570033 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.30.17|65|797291069 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.30.18|65|3831339083 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.31.17|65|365694518 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.31.18|65|659908830 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.32.17|65|3175828355 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.32.18|65|3194917681 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.33.17|65|3486343761 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.33.18|65|647213477 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.34.17|65|620133147 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.34.18|65|3900465494 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.35.17|65|2135862472 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.35.18|65|2286879901 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.36.17|65|4212299981 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.36.18|65|2957562648 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.37.17|65|3498974530 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.37.18|65|4110881771 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.38.17|65|3426811607 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.38.18|65|3841788286 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.39.17|70|4204788537335394816 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.39.18|70|12043116387776586811 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.40.17|65|3519864046 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.40.18|65|1622184210 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.41.17|65|3039522194 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.41.18|65|1867658882 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.42.17|70|17502062167311159970 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.42.18|70|10996239327049192810 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.43.17|65|3935338485 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.43.18|65|4137439811 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.44.17|65|2920482346 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.44.18|65|166949467 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.45.17|65|3600484353 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.45.18|65|542927767 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.46.17|65|250089742 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.46.18|65|3039150373 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.47.17|65|1876324894 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.47.18|65|3523115734 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.48.17|65|396919596 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.48.18|65|3635284240 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.49.17|65|1871392869 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.49.18|65|1071823832 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.1.24|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.2.22|2|23 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.2.24|2|8 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.3.22|2|11 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.3.24|2|28 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.4.22|4x|616374656420666f7277617264206163746564206b657074206163746564206163746564 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.4.24|4x|717561696e746c79204a6164656420746865697220616374656420627574 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.5.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.5.24|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.6.22|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.6.24|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.7.22|4x|6163746564206f78656e204a61646564 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.7.24|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.8.22|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.8.24|2|10 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.9.22|2|31 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.9.24|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.10.22|4x|6f78656e20627574206b65707420717561696e746c79 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.10.24|4x|616374656420627574 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.11.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.11.24|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.12.22|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.12.24|4x|6f78656e206163746564207468656972 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.13.22|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.13.24|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.14.22|2|14 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.14.24|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.15.22|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.15.24|2|15 +1.3.6.1.4.1.9.9.171.1.5.1.1.1.0|2|15 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.1.8|2|8 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.1.15|2|15 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.2.8|2|11 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.2.15|2|14 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.3.8|67|2511746407 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.3.15|67|919534560 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.4.8|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.4.15|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.5.8|4x|717561696e746c7920627574206b6570742061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.5.15|4x|4a61646564204a61646564204a61646564 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.6.8|2|1 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.6.15|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.7.8|4x|4a6164656420717561696e746c7920627574 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.7.15|4x|64726976696e6720666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.8.8|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.8.15|4|kept +1.3.6.1.4.1.9.9.171.1.5.2.1.1.9.8|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.9.15|4|oxen +1.3.6.1.4.1.9.9.171.1.5.3.1.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.1.29|2|29 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.2.22|2|16 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.2.29|2|10 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.3.22|67|4157396408 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.3.29|67|96476129 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.4.22|2|28 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.4.29|2|12 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.5.22|2|25 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.5.29|2|2 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.6.22|4|kept +1.3.6.1.4.1.9.9.171.1.5.3.1.1.6.29|4|kept +1.3.6.1.4.1.9.9.171.1.5.3.1.1.7.22|4|oxen +1.3.6.1.4.1.9.9.171.1.5.3.1.1.7.29|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.6.1.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.2.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.3.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.4.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.5.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.6.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.7.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.8.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.9.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.10.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.11.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.12.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.13.0|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.27|65|1629044510 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.27|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.1.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.1.6|2|6 +1.3.6.1.4.1.9.9.324.1.1.1.1.2.2|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.324.1.1.1.1.2.6|4x|6163746564207468656972 +1.3.6.1.4.1.9.9.324.1.1.1.1.3.2|2|5 +1.3.6.1.4.1.9.9.324.1.1.1.1.3.6|2|19 +1.3.6.1.4.1.9.9.324.1.1.1.1.4.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.4.6|2|3 +1.3.6.1.4.1.9.9.324.1.1.1.1.5.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.5.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.6.2|2|9 +1.3.6.1.4.1.9.9.324.1.1.1.1.6.6|2|24 +1.3.6.1.4.1.9.9.324.1.1.1.1.7.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.7.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.8.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.8.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.9.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.9.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.10.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.10.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.2.1.1.7.9|2|9 +1.3.6.1.4.1.9.9.324.1.1.2.1.1.16.29|2|29 +1.3.6.1.4.1.9.9.324.1.1.2.1.2.7.9|2|2 +1.3.6.1.4.1.9.9.324.1.1.2.1.2.16.29|2|1 +1.3.6.1.4.1.9.9.324.1.1.2.1.3.7.9|4|acted +1.3.6.1.4.1.9.9.324.1.1.2.1.3.16.29|4x|7468656972204a61646564 +1.3.6.1.4.1.9.9.324.1.1.2.1.4.7.9|2|20 +1.3.6.1.4.1.9.9.324.1.1.2.1.4.16.29|2|30 +1.3.6.1.4.1.9.9.324.1.1.2.1.5.7.9|66|28786 +1.3.6.1.4.1.9.9.324.1.1.2.1.5.16.29|66|14266 +1.3.6.1.4.1.9.9.324.1.1.2.1.6.7.9|2|20 +1.3.6.1.4.1.9.9.324.1.1.2.1.6.16.29|2|24 +1.3.6.1.4.1.9.9.324.1.1.2.1.7.7.9|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.9.9.324.1.1.2.1.7.16.29|4x|627574206b657074 +1.3.6.1.4.1.9.9.324.1.1.3.1.1.8.25|2|25 +1.3.6.1.4.1.9.9.324.1.1.3.1.1.16.7|2|7 +1.3.6.1.4.1.9.9.324.1.1.3.1.2.8.25|2|12 +1.3.6.1.4.1.9.9.324.1.1.3.1.2.16.7|2|29 +1.3.6.1.4.1.9.9.324.1.1.3.1.3.8.25|2|29 +1.3.6.1.4.1.9.9.324.1.1.3.1.3.16.7|2|30 +1.3.6.1.4.1.9.9.324.1.1.3.1.4.8.25|2|27 +1.3.6.1.4.1.9.9.324.1.1.3.1.4.16.7|2|15 +1.3.6.1.4.1.9.9.324.1.1.3.1.5.8.25|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.5.16.7|2|3 +1.3.6.1.4.1.9.9.324.1.1.3.1.6.8.25|4x|616374656420666f727761726420666f72776172642062757420627574206f78656e206f78656e +1.3.6.1.4.1.9.9.324.1.1.3.1.6.16.7|4x|7468656972206163746564 +1.3.6.1.4.1.9.9.324.1.1.3.1.7.8.25|66|196 +1.3.6.1.4.1.9.9.324.1.1.3.1.7.16.7|66|1734 +1.3.6.1.4.1.9.9.324.1.1.3.1.8.8.25|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.8.16.7|2|1 +1.3.6.1.4.1.9.9.324.1.1.3.1.9.8.25|2|1 +1.3.6.1.4.1.9.9.324.1.1.3.1.9.16.7|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.10.8.25|2|6 +1.3.6.1.4.1.9.9.324.1.1.3.1.10.16.7|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.1.9.20|2|20 +1.3.6.1.4.1.9.9.324.1.1.4.1.1.14.6|2|6 +1.3.6.1.4.1.9.9.324.1.1.4.1.2.9.20|2|3 +1.3.6.1.4.1.9.9.324.1.1.4.1.2.14.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.3.9.20|4x|62757420746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.324.1.1.4.1.3.14.6|4x|6f78656e206163746564204a616465642064726976696e67204a61646564207a6f6d6269657320717561696e746c79206f78656e +1.3.6.1.4.1.9.9.324.1.1.4.1.4.9.20|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.4.14.6|2|5 +1.3.6.1.4.1.9.9.324.1.1.5.1.1.3.4|2|4 +1.3.6.1.4.1.9.9.324.1.1.5.1.1.3.5|2|5 +1.3.6.1.4.1.9.9.324.1.1.5.1.2.3.4|4x|61637465642064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.324.1.1.5.1.2.3.5|4x|7468656972206f78656e20717561696e746c7920616374656420616374656420666f727761726420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.9.9.324.1.1.5.1.3.3.4|2|3 +1.3.6.1.4.1.9.9.324.1.1.5.1.3.3.5|2|2 +1.3.6.1.4.1.9.9.324.1.1.5.1.4.3.4|4x|64726976696e67204a6164656420627574 +1.3.6.1.4.1.9.9.324.1.1.5.1.4.3.5|4x|717561696e746c79204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.9.9.324.1.1.5.1.5.3.4|2|4 +1.3.6.1.4.1.9.9.324.1.1.5.1.5.3.5|2|2 +1.3.6.1.4.1.9.9.324.1.1.6.1.1.10.32|66|32 +1.3.6.1.4.1.9.9.324.1.1.6.1.1.19.255|66|255 +1.3.6.1.4.1.9.9.324.1.1.6.1.2.10.32|66|434 +1.3.6.1.4.1.9.9.324.1.1.6.1.2.19.255|66|645 +1.3.6.1.4.1.9.9.324.1.1.6.1.3.10.32|66|324 +1.3.6.1.4.1.9.9.324.1.1.6.1.3.19.255|66|732 +1.3.6.1.4.1.9.9.324.1.1.7.1.1.3|66|32 +1.3.6.1.4.1.9.9.324.1.1.7.1.1.10|66|227 +1.3.6.1.4.1.9.9.324.1.1.7.1.2.3|66|122 +1.3.6.1.4.1.9.9.324.1.1.7.1.2.10|66|232 +1.3.6.1.4.1.9.9.324.1.1.7.1.3.3|66|97 +1.3.6.1.4.1.9.9.324.1.1.7.1.3.10|66|115 +1.3.6.1.4.1.9.9.324.1.1.7.1.4.3|66|110 +1.3.6.1.4.1.9.9.324.1.1.7.1.4.10|66|113 +1.3.6.1.4.1.9.9.324.1.1.7.1.5.3|66|4513 +1.3.6.1.4.1.9.9.324.1.1.7.1.5.10|66|4412 +1.3.6.1.4.1.9.9.324.1.1.7.1.6.3|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.6.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.7.3|66|61 +1.3.6.1.4.1.9.9.324.1.1.7.1.7.10|66|133 +1.3.6.1.4.1.9.9.324.1.1.7.1.8.3|66|102 +1.3.6.1.4.1.9.9.324.1.1.7.1.8.10|66|67 +1.3.6.1.4.1.9.9.324.1.1.7.1.9.3|66|55 +1.3.6.1.4.1.9.9.324.1.1.7.1.9.10|66|35 +1.3.6.1.4.1.9.9.324.1.1.7.1.10.3|66|53760 +1.3.6.1.4.1.9.9.324.1.1.7.1.10.10|66|62525 +1.3.6.1.4.1.9.9.324.1.1.7.1.11.3|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.11.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.12.3|4x|666f727761726420627574207468656972 +1.3.6.1.4.1.9.9.324.1.1.7.1.12.10|4x|627574207a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.324.1.1.7.1.13.3|4x|6f78656e20666f7277617264206163746564206f78656e207468656972206f78656e +1.3.6.1.4.1.9.9.324.1.1.7.1.13.10|4x|6f78656e20666f7277617264 +1.3.6.1.4.1.9.9.324.1.1.7.1.14.3|4x|62757420666f7277617264206163746564207468656972207a6f6d6269657320717561696e746c79206163746564206b657074206b657074 +1.3.6.1.4.1.9.9.324.1.1.7.1.14.10|4x|7a6f6d6269657320616374656420616374656420717561696e746c792062757420616374656420627574206163746564 +1.3.6.1.4.1.9.9.324.1.1.7.1.15.3|4x|666f7277617264206f78656e +1.3.6.1.4.1.9.9.324.1.1.7.1.15.10|4x|4a6164656420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.324.1.1.7.1.16.3|2|3 +1.3.6.1.4.1.9.9.324.1.1.7.1.16.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.17.3|2|4 +1.3.6.1.4.1.9.9.324.1.1.7.1.17.10|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.18.3|4x|666f727761726420746865697220666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.324.1.1.7.1.18.10|4|Jaded +1.3.6.1.4.1.9.9.324.1.2.1.1.1.18.14|2|14 +1.3.6.1.4.1.9.9.324.1.2.1.1.1.26.14|2|14 +1.3.6.1.4.1.9.9.324.1.2.1.1.2.18.14|66|968784078 +1.3.6.1.4.1.9.9.324.1.2.1.1.2.26.14|66|1598367577 +1.3.6.1.4.1.9.9.324.1.2.1.1.3.18.14|66|2893057786 +1.3.6.1.4.1.9.9.324.1.2.1.1.3.26.14|66|4031602965 +1.3.6.1.4.1.9.9.324.1.2.1.1.4.18.14|66|1154560899 +1.3.6.1.4.1.9.9.324.1.2.1.1.4.26.14|66|2087239256 +1.3.6.1.4.1.9.9.324.1.2.1.1.5.18.14|66|42982 +1.3.6.1.4.1.9.9.324.1.2.1.1.5.26.14|66|52885 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.7|66|9997 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.8|66|15228 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.9|66|4850 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.12|66|8851 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.16|66|30813 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.25|66|24389 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.26|66|36264 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.27|66|4684 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.28|66|16580 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.7|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.8|2|1 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.9|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.12|2|1 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.16|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.25|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.26|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.27|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.28|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.7|67|2938099246 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.8|67|1742326644 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.9|67|222898566 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.12|67|41659817 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.16|67|1663224446 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.25|67|3973111650 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.26|67|736091720 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.27|67|3693310177 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.28|67|1614278838 +1.3.6.1.4.1.9.9.392.1.1.1.0|2|24 +1.3.6.1.4.1.9.9.392.1.1.2.0|2|29 +1.3.6.1.4.1.9.9.392.1.1.3.0|2|5 +1.3.6.1.4.1.9.9.392.1.1.4.0|2|4 +1.3.6.1.4.1.9.9.392.1.2.1.0|66|220179290 +1.3.6.1.4.1.9.9.392.1.3.1.0|66|3080751325 +1.3.6.1.4.1.9.9.392.1.3.2.0|65|1540201027 +1.3.6.1.4.1.9.9.392.1.3.3.0|66|1805302581 +1.3.6.1.4.1.9.9.392.1.3.4.0|66|161784324 +1.3.6.1.4.1.9.9.392.1.3.5.0|70|4672136608535977512 +1.3.6.1.4.1.9.9.392.1.3.6.0|70|2893804194127754033 +1.3.6.1.4.1.9.9.392.1.3.7.0|70|6239211035010594908 +1.3.6.1.4.1.9.9.392.1.3.8.0|70|7265876306749545408 +1.3.6.1.4.1.9.9.392.1.3.9.0|70|192850609352945696 +1.3.6.1.4.1.9.9.392.1.3.10.0|70|17127455384536618658 +1.3.6.1.4.1.9.9.392.1.3.11.0|70|14460697319949409206 +1.3.6.1.4.1.9.9.392.1.3.12.0|70|6617289242687491214 +1.3.6.1.4.1.9.9.392.1.3.21.1.1.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f7277617264204a61646564206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.1.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742074686569722064726976696e67207468656972204a61646564207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.2.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|7a6f6d62696573207a6f6d62696573204a61646564204a61646564207468656972206f78656e20616374656420746865697220627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.2.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|64726976696e67204a61646564204a61646564207a6f6d62696573207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.3.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|18 +1.3.6.1.4.1.9.9.392.1.3.21.1.3.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|11 +1.3.6.1.4.1.9.9.392.1.3.21.1.4.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|8 +1.3.6.1.4.1.9.9.392.1.3.21.1.4.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|7 +1.3.6.1.4.1.9.9.392.1.3.21.1.5.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.5.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|5 +1.3.6.1.4.1.9.9.392.1.3.21.1.6.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|65|1067898008 +1.3.6.1.4.1.9.9.392.1.3.21.1.6.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|65|2164050177 +1.3.6.1.4.1.9.9.392.1.3.21.1.7.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.7.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.8.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|64726976696e6720717561696e746c79206b657074207468656972204a61646564204a61646564206f78656e207468656972206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.8.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4|Jaded +1.3.6.1.4.1.9.9.392.1.3.21.1.9.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.9.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.10.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79207a6f6d62696573204a61646564204a6164656420746865697220627574206b657074 +1.3.6.1.4.1.9.9.392.1.3.21.1.10.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b657074206f78656e20717561696e746c792064726976696e6720717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.11.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|7 +1.3.6.1.4.1.9.9.392.1.3.21.1.11.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.12.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|6|1.3.6.1.3.208.49 +1.3.6.1.4.1.9.9.392.1.3.21.1.12.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|6|1.3.6.1.3.0.25.27 +1.3.6.1.4.1.9.9.392.1.3.21.1.13.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|8 +1.3.6.1.4.1.9.9.392.1.3.21.1.13.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.14.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.14.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.15.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.15.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.16.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|66|24991 +1.3.6.1.4.1.9.9.392.1.3.21.1.16.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|66|19923 +1.3.6.1.4.1.9.9.392.1.3.21.1.17.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|746865697220717561696e746c7920616374656420717561696e746c79206b65707420616374656420717561696e746c792064726976696e67206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.17.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|62757420627574206f78656e206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.18.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79206163746564207468656972 +1.3.6.1.4.1.9.9.392.1.3.21.1.18.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742061637465642064726976696e67206275742064726976696e67206b65707420666f7277617264 +1.3.6.1.4.1.9.9.392.1.3.21.1.19.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f727761726420746865697220666f7277617264206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.19.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6f78656e20666f727761726420717561696e746c79206163746564206b657074206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.20.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|7a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.20.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|666f72776172642061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.21.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.21.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|4 +1.3.6.1.4.1.9.9.392.1.3.21.1.22.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f727761726420666f7277617264207a6f6d62696573207a6f6d62696573207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.22.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742064726976696e67207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.392.1.3.21.1.23.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|0 +1.3.6.1.4.1.9.9.392.1.3.21.1.23.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.24.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|4a6164656420717561696e746c79 +1.3.6.1.4.1.9.9.392.1.3.21.1.24.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|4a61646564207468656972206f78656e20616374656420616374656420666f727761726420746865697220666f7277617264 +1.3.6.1.4.1.9.9.392.1.3.21.1.25.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.25.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.26.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f7277617264206b657074206f78656e206f78656e206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.26.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|616374656420717561696e746c7920627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.27.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.27.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|4 +1.3.6.1.4.1.9.9.392.1.3.21.1.28.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|64726976696e67207468656972207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.28.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|62757420627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.29.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|0 +1.3.6.1.4.1.9.9.392.1.3.21.1.29.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.30.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79206b657074 +1.3.6.1.4.1.9.9.392.1.3.21.1.30.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|746865697220717561696e746c7920717561696e746c7920616374656420717561696e746c7920717561696e746c79206163746564207a6f6d6269657320627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.31.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|4442691408326093793 +1.3.6.1.4.1.9.9.392.1.3.21.1.31.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|1873321696187597909 +1.3.6.1.4.1.9.9.392.1.3.21.1.32.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|6469637372671445412 +1.3.6.1.4.1.9.9.392.1.3.21.1.32.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|6712781232926100858 +1.3.6.1.4.1.9.9.392.1.3.21.1.33.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|13490210027652370573 +1.3.6.1.4.1.9.9.392.1.3.21.1.33.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|15555989303984511978 +1.3.6.1.4.1.9.9.392.1.3.21.1.34.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|12279646205639820727 +1.3.6.1.4.1.9.9.392.1.3.21.1.34.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|11056409441366507351 +1.3.6.1.4.1.9.9.392.1.3.21.1.35.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|13180762840652524543 +1.3.6.1.4.1.9.9.392.1.3.21.1.35.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|13958065058835407351 +1.3.6.1.4.1.9.9.392.1.3.21.1.36.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|3745449795705425282 +1.3.6.1.4.1.9.9.392.1.3.21.1.36.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|15681610043458202824 +1.3.6.1.4.1.9.9.392.1.3.21.1.37.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.37.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.22.1.1.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|4x|616374656420666f7277617264207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.9.9.392.1.3.22.1.1.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|4x|7468656972207468656972206b6570742062757420616374656420627574206275742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.22.1.2.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.9.9.392.1.3.22.1.2.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|2|21 +1.3.6.1.4.1.9.9.392.1.3.22.1.3.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|338143677832082857 +1.3.6.1.4.1.9.9.392.1.3.22.1.3.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|2540809463851896468 +1.3.6.1.4.1.9.9.392.1.3.22.1.4.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|9211169575499894801 +1.3.6.1.4.1.9.9.392.1.3.22.1.4.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|5889125074864305265 +1.3.6.1.4.1.9.9.392.1.3.22.1.5.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|15329032065323570335 +1.3.6.1.4.1.9.9.392.1.3.22.1.5.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|11848822181082996062 +1.3.6.1.4.1.9.9.392.1.3.22.1.6.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|9393682061551994449 +1.3.6.1.4.1.9.9.392.1.3.22.1.6.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|14553503058612069516 +1.3.6.1.4.1.9.9.392.1.3.22.1.7.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|5657946358853111387 +1.3.6.1.4.1.9.9.392.1.3.22.1.7.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|132504407579425476 +1.3.6.1.4.1.9.9.392.1.3.22.1.8.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|14359838585433121302 +1.3.6.1.4.1.9.9.392.1.3.22.1.8.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|16427745788021119202 +1.3.6.1.4.1.9.9.392.1.3.23.0|66|3912948724 +1.3.6.1.4.1.9.9.392.1.3.24.0|65|3793567672 +1.3.6.1.4.1.9.9.392.1.3.25.0|66|24567 +1.3.6.1.4.1.9.9.392.1.3.26.0|66|4157346489 +1.3.6.1.4.1.9.9.392.1.3.27.0|65|566439668 +1.3.6.1.4.1.9.9.392.1.3.28.0|66|2035 +1.3.6.1.4.1.9.9.392.1.3.29.0|66|899294235 +1.3.6.1.4.1.9.9.392.1.3.30.0|65|2870170921 +1.3.6.1.4.1.9.9.392.1.3.31.0|66|47972 +1.3.6.1.4.1.9.9.392.1.3.32.0|66|1402819470 +1.3.6.1.4.1.9.9.392.1.3.33.0|65|552584163 +1.3.6.1.4.1.9.9.392.1.3.34.0|66|54192 +1.3.6.1.4.1.9.9.392.1.3.35.0|66|4109252783 +1.3.6.1.4.1.9.9.392.1.3.36.0|65|3375288981 +1.3.6.1.4.1.9.9.392.1.3.37.0|66|60584 +1.3.6.1.4.1.9.9.392.1.3.38.0|66|2342846144 +1.3.6.1.4.1.9.9.392.1.3.39.0|65|2612706951 +1.3.6.1.4.1.9.9.392.1.3.40.0|66|27723 +1.3.6.1.4.1.9.9.392.1.4.1.1.0|70|18308256571427912229 +1.3.6.1.4.1.9.9.392.1.4.1.2.0|66|12797 +1.3.6.1.4.1.9.9.392.1.4.1.3.0|70|18072880834846251558 +1.3.6.1.4.1.9.9.392.1.4.1.4.0|70|8998085897560354675 +1.3.6.1.4.1.9.9.392.1.4.2.1.0|66|19062 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.1.26|66|26 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.1.6794|66|6794 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.2.26|4x|717561696e746c7920666f7277617264206b657074207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.2.6794|4x|7a6f6d62696573206f78656e204a61646564204a616465642074686569722062757420666f7277617264206b657074204a61646564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.3.26|4x|62757420666f7277617264204a61646564206275742064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.3.6794|4|Jaded +1.3.6.1.4.1.9.9.392.1.4.3.1.1.4.26|2|2 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.4.6794|2|1 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.5.26|2|3 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.5.6794|2|5 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.6.26|67|2717938161 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.6.6794|67|1576292881 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.7.26|2|20 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.7.6794|2|7 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.8.26|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.8.6794|2|1 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.9.26|4x|6b6570742064726976696e672064726976696e67207a6f6d62696573206b657074206b657074204a61646564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.9.6794|4x|7a6f6d62696573207a6f6d6269657320627574207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.10.26|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.10.6794|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.11.26|4x|64726976696e67206163746564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.11.6794|4x|64726976696e67206b65707420746865697220746865697220666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.3.2.0|66|19587 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.1.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|4x|7a6f6d62696573207a6f6d62696573207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.1.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|4x|62757420717561696e746c7920746865697220666f727761726420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.2.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|7705169462584045514 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.2.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|4782105877718188020 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.3.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|1208657904808146249 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.3.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|6135263682934130631 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.4.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|3212491034507665689 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.4.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|4669944071782599429 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.5.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|15487989910931679686 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.5.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|16491208374579900638 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.6.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|14990721728316737493 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.6.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|17568880258347646976 +1.3.6.1.4.1.9.9.392.1.5.1.1.0|70|16763036102461238324 +1.3.6.1.4.1.9.9.392.1.6.1.0|2|30 +1.3.6.1.4.1.9.9.392.1.6.2.0|66|10901 +1.3.6.1.4.1.9.9.392.1.6.3.0|2|3 +1.3.6.1.4.1.9.9.392.1.7.1.0|2|1 +1.3.6.1.4.1.9.9.392.1.7.2.0|2|1 +1.3.6.1.4.1.9.9.392.1.7.3.0|2|1 +1.3.6.1.4.1.9.9.500.1.2.1.1.1.21|66|23989 +1.3.6.1.4.1.9.9.500.1.2.1.1.2.21|66|64612 +1.3.6.1.4.1.9.9.500.1.2.1.1.3.21|2|4 +1.3.6.1.4.1.9.9.500.1.2.1.1.4.21|66|33053 +1.3.6.1.4.1.9.9.500.1.2.1.1.5.21|66|55695 +1.3.6.1.4.1.9.9.500.1.2.1.1.6.21|2|8 +1.3.6.1.4.1.9.9.500.1.2.1.1.7.21|4x|ffffffffffff +1.3.6.1.4.1.9.9.500.1.2.2.1.1.7|2|3 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.213.175.39.60.38.62.82.247.189 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.166.109.172.24.90.149 +1.3.6.1.6.3.1.1.6.1.0|2|3 +1.3.6.1.6.3.10.2.1.1.0|4x|6f78656e20717561696e746c79 +1.3.6.1.6.3.10.2.1.1.0|4x|64726976696e67206f78656e204a6164656420717561696e746c79 +1.3.6.1.6.3.10.2.1.2.0|2|12 +1.3.6.1.6.3.10.2.1.2.0|2|24 +1.3.6.1.6.3.10.2.1.3.0|2|4 +1.3.6.1.6.3.10.2.1.3.0|2|28 +1.3.6.1.6.3.10.2.1.4.0|2|567 +1.3.6.1.6.3.10.2.1.4.0|2|763 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-catalyst.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-catalyst.snmprec new file mode 100644 index 0000000000000..884066b6c7103 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-catalyst.snmprec @@ -0,0 +1,136 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.241 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.5.0|4|catalyst-6000.example +1.3.6.1.2.1.31.1.1.1.1.2|4|Nu0 +1.3.6.1.2.1.31.1.1.1.1.8|4x|4769312f302f36 +1.3.6.1.2.1.31.1.1.1.1.12|4x|4769312f302f3130 +1.3.6.1.2.1.31.1.1.1.1.13|4x|4769312f302f3132 +1.3.6.1.2.1.31.1.1.1.1.20|4x|4769312f302f3138 +1.3.6.1.2.1.31.1.1.1.1.24|4x|4769312f302f3232 +1.3.6.1.2.1.31.1.1.1.1.27|4x|4769312f302f3235 +1.3.6.1.2.1.31.1.1.1.1.29|4x|4769312f302f3237 +1.3.6.1.4.1.9.5.1.2.19.0|4|SCA044001J9 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.5|2|10 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.9|2|10 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.5|2|13 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.9|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.5|2|5 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.9|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.5|2|23 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.9|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.5|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.9|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.5|67|1049691128 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.9|67|1263170302 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.5|2|14 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.9|2|9 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.5|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.9|2|13 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.1001|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.1010|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.2001|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.2010|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.1001|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.1010|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.2001|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.2010|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.1001|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.1010|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.2001|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.2010|2|0 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.2|66|3212285088 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.8|66|2549745875 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.12|66|1593634447 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.13|66|808029871 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.20|66|2834780680 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.24|66|143097770 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.27|66|1054270666 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.29|66|2115594198 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.2|66|3654206285 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.8|66|3471768262 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.12|66|4114631259 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.13|66|2572660324 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.20|66|881502462 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.24|66|3928182588 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.27|66|864463746 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.29|66|2794940018 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.2|66|2070214205 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.8|66|3056100498 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.12|66|2504461818 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.13|66|3933035197 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.20|66|452554532 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.24|66|1461380713 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.27|66|175693990 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.29|66|3240655547 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.2|65|228010741 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.8|65|206579581 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.12|65|3921291878 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.13|65|1783596833 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.20|65|1665500425 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.24|65|1143836242 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.27|65|1922821796 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.29|65|2001716681 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.2|65|1142461627 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.8|65|3059551836 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.12|65|2180426153 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.13|65|4168917597 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.20|65|2348485051 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.24|65|3885252847 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.27|65|430313909 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.29|65|1040929562 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.2|65|820404054 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.8|65|2842996488 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.12|65|516627181 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.13|65|3834958484 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.20|65|4008809623 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.24|65|1591458481 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.27|65|987592255 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.29|65|4091757079 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.2|65|2654913472 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.8|65|3445531903 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.12|65|2714831435 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.13|65|1451987827 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.20|65|2047943866 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.24|65|2557121706 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.27|65|3780408747 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.29|65|2637888044 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.2|65|1180282382 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.8|65|2061646443 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.12|65|3785685086 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.13|65|25718795 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.20|65|3804634205 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.24|65|3264052307 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.27|65|172763145 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.29|65|427550293 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.2|65|729797820 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.8|65|1936660647 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.12|65|3798824095 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.13|65|2468750642 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.20|65|3659844688 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.24|65|1351841532 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.27|65|1979532859 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.29|65|1661918307 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.2|65|4142247954 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.8|65|3001638507 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.12|65|3472759966 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.13|65|2231231366 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.20|65|1172731832 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.24|65|799128435 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.27|65|2659811954 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.29|65|3387896804 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.2|65|4250585048 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.8|65|3784229221 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.12|65|3972327928 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.13|65|3829663665 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.20|65|3862025380 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.24|65|3173505921 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.27|65|4149481903 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.29|65|2691284812 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.2|67|3232838669 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.8|67|3707696379 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.12|67|2247655666 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.13|67|1190980479 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.20|67|1427024890 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.24|67|2179332826 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.27|67|1567995511 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.29|67|1679558187 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-csr1000v.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-csr1000v.snmprec new file mode 100644 index 0000000000000..72ab8517133a7 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-csr1000v.snmprec @@ -0,0 +1,24 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.1537 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-nexus.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-nexus.snmprec new file mode 100644 index 0000000000000..e54bcb1130768 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-nexus.snmprec @@ -0,0 +1,3275 @@ +1.3.6.1.2.1.1.1.0|4x|6f78656e20616374656420627574206163746564206b657074 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.12.3.1.3.1.2 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.4.0|4|acted +1.3.6.1.2.1.1.5.0|4x|4e657875732d6575312e636f6d70616e796e616d652e6d616e61676564 +1.3.6.1.2.1.1.6.0|4x|627574206b657074204a6164656420746865697220627574206b65707420717561696e746c792064726976696e67207468656972 +1.3.6.1.2.1.1.7.0|2|9 +1.3.6.1.2.1.1.8.0|67|3680163691 +1.3.6.1.2.1.1.9.1.1.1|2|1 +1.3.6.1.2.1.1.9.1.1.3|2|3 +1.3.6.1.2.1.1.9.1.1.9|2|9 +1.3.6.1.2.1.1.9.1.1.11|2|11 +1.3.6.1.2.1.1.9.1.1.15|2|15 +1.3.6.1.2.1.1.9.1.1.16|2|16 +1.3.6.1.2.1.1.9.1.1.18|2|18 +1.3.6.1.2.1.1.9.1.1.20|2|20 +1.3.6.1.2.1.1.9.1.1.21|2|21 +1.3.6.1.2.1.1.9.1.1.24|2|24 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.3.164.198.69.240.83.26.70 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.3 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.3.129.98.33.156 +1.3.6.1.2.1.1.9.1.2.11|6|1.3.6.1.3.45.170.49.172 +1.3.6.1.2.1.1.9.1.2.15|6|1.3.6.1.3.218.227.133.165.158.83 +1.3.6.1.2.1.1.9.1.2.16|6|1.3.6.1.3.38.4.57.45.113.219.22 +1.3.6.1.2.1.1.9.1.2.18|6|1.3.6.1.3.212.88.17.14.129 +1.3.6.1.2.1.1.9.1.2.20|6|1.3.6.1.3.221 +1.3.6.1.2.1.1.9.1.2.21|6|1.3.6.1.3.144.52 +1.3.6.1.2.1.1.9.1.2.24|6|1.3.6.1.3.159.1 +1.3.6.1.2.1.1.9.1.3.1|4x|6f78656e204a6164656420616374656420666f72776172642064726976696e6720717561696e746c7920717561696e746c79 +1.3.6.1.2.1.1.9.1.3.3|4x|627574204a6164656420666f72776172642064726976696e6720616374656420616374656420717561696e746c79206f78656e +1.3.6.1.2.1.1.9.1.3.9|4x|4a61646564207468656972207a6f6d6269657320627574206b657074207a6f6d62696573207468656972 +1.3.6.1.2.1.1.9.1.3.11|4x|64726976696e67206b657074206163746564204a616465642064726976696e6720717561696e746c792074686569722064726976696e67 +1.3.6.1.2.1.1.9.1.3.15|4|but +1.3.6.1.2.1.1.9.1.3.16|4x|7a6f6d626965732074686569722064726976696e672062757420666f7277617264204a61646564206b6570742064726976696e67204a61646564 +1.3.6.1.2.1.1.9.1.3.18|4|their +1.3.6.1.2.1.1.9.1.3.20|4x|62757420627574204a6164656420666f7277617264206163746564204a61646564207a6f6d6269657320627574204a61646564 +1.3.6.1.2.1.1.9.1.3.21|4x|4a61646564204a61646564206f78656e206163746564 +1.3.6.1.2.1.1.9.1.3.24|4|driving +1.3.6.1.2.1.1.9.1.4.1|67|1695851488 +1.3.6.1.2.1.1.9.1.4.3|67|3741814296 +1.3.6.1.2.1.1.9.1.4.9|67|780686098 +1.3.6.1.2.1.1.9.1.4.11|67|4058878359 +1.3.6.1.2.1.1.9.1.4.15|67|2547376430 +1.3.6.1.2.1.1.9.1.4.16|67|2644545445 +1.3.6.1.2.1.1.9.1.4.18|67|2083688378 +1.3.6.1.2.1.1.9.1.4.20|67|663477043 +1.3.6.1.2.1.1.9.1.4.21|67|3245404876 +1.3.6.1.2.1.1.9.1.4.24|67|278147560 +1.3.6.1.2.1.2.1.0|2|0 +1.3.6.1.2.1.2.2.1.1.1|2|1 +1.3.6.1.2.1.2.2.1.1.5|2|5 +1.3.6.1.2.1.2.2.1.1.6|2|6 +1.3.6.1.2.1.2.2.1.1.7|2|7 +1.3.6.1.2.1.2.2.1.1.14|2|14 +1.3.6.1.2.1.2.2.1.1.19|2|19 +1.3.6.1.2.1.2.2.1.1.23|2|23 +1.3.6.1.2.1.2.2.1.1.28|2|28 +1.3.6.1.2.1.2.2.1.1.30|2|30 +1.3.6.1.2.1.2.2.1.1.31|2|31 +1.3.6.1.2.1.2.2.1.2.2|4x|4769676162697445746865726e6574312f302f31 +1.3.6.1.2.1.2.2.1.2.13|4x|4769676162697445746865726e6574312f302f32 +1.3.6.1.2.1.2.2.1.2.20|4x|4769676162697445746865726e6574312f302f33 +1.3.6.1.2.1.2.2.1.2.22|4x|4769676162697445746865726e6574312f302f34 +1.3.6.1.2.1.2.2.1.2.23|4x|4769676162697445746865726e6574312f302f35 +1.3.6.1.2.1.2.2.1.2.25|4x|4769676162697445746865726e6574312f302f36 +1.3.6.1.2.1.2.2.1.2.29|4x|4769676162697445746865726e6574312f302f37 +1.3.6.1.2.1.2.2.1.2.30|4x|4769676162697445746865726e6574312f302f38 +1.3.6.1.2.1.2.2.1.3.1|2|9 +1.3.6.1.2.1.2.2.1.3.5|2|1 +1.3.6.1.2.1.2.2.1.3.6|2|2 +1.3.6.1.2.1.2.2.1.3.7|2|23 +1.3.6.1.2.1.2.2.1.3.14|2|3 +1.3.6.1.2.1.2.2.1.3.19|2|30 +1.3.6.1.2.1.2.2.1.3.23|2|8 +1.3.6.1.2.1.2.2.1.3.28|2|15 +1.3.6.1.2.1.2.2.1.3.30|2|13 +1.3.6.1.2.1.2.2.1.3.31|2|28 +1.3.6.1.2.1.2.2.1.4.1|2|25 +1.3.6.1.2.1.2.2.1.4.5|2|7 +1.3.6.1.2.1.2.2.1.4.6|2|10 +1.3.6.1.2.1.2.2.1.4.7|2|17 +1.3.6.1.2.1.2.2.1.4.14|2|23 +1.3.6.1.2.1.2.2.1.4.19|2|27 +1.3.6.1.2.1.2.2.1.4.23|2|17 +1.3.6.1.2.1.2.2.1.4.28|2|21 +1.3.6.1.2.1.2.2.1.4.30|2|21 +1.3.6.1.2.1.2.2.1.4.31|2|25 +1.3.6.1.2.1.2.2.1.5.2|66|22 +1.3.6.1.2.1.2.2.1.5.13|66|31 +1.3.6.1.2.1.2.2.1.5.20|66|92 +1.3.6.1.2.1.2.2.1.5.22|66|34 +1.3.6.1.2.1.2.2.1.5.23|66|78 +1.3.6.1.2.1.2.2.1.5.25|66|28 +1.3.6.1.2.1.2.2.1.5.29|66|85 +1.3.6.1.2.1.2.2.1.5.30|66|41 +1.3.6.1.2.1.2.2.1.6.1|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.5|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.6|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.7|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.14|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.19|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.23|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.28|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.30|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.31|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.7.2|2|1 +1.3.6.1.2.1.2.2.1.7.13|2|2 +1.3.6.1.2.1.2.2.1.7.20|2|2 +1.3.6.1.2.1.2.2.1.7.22|2|1 +1.3.6.1.2.1.2.2.1.7.23|2|1 +1.3.6.1.2.1.2.2.1.7.25|2|1 +1.3.6.1.2.1.2.2.1.7.29|2|3 +1.3.6.1.2.1.2.2.1.7.30|2|2 +1.3.6.1.2.1.2.2.1.8.2|2|3 +1.3.6.1.2.1.2.2.1.8.13|2|2 +1.3.6.1.2.1.2.2.1.8.20|2|3 +1.3.6.1.2.1.2.2.1.8.22|2|5 +1.3.6.1.2.1.2.2.1.8.23|2|6 +1.3.6.1.2.1.2.2.1.8.25|2|1 +1.3.6.1.2.1.2.2.1.8.29|2|1 +1.3.6.1.2.1.2.2.1.8.30|2|6 +1.3.6.1.2.1.2.2.1.9.1|67|46974653 +1.3.6.1.2.1.2.2.1.9.5|67|3524906906 +1.3.6.1.2.1.2.2.1.9.6|67|1854085230 +1.3.6.1.2.1.2.2.1.9.7|67|2589243966 +1.3.6.1.2.1.2.2.1.9.14|67|1415836515 +1.3.6.1.2.1.2.2.1.9.19|67|3494681791 +1.3.6.1.2.1.2.2.1.9.23|67|73477284 +1.3.6.1.2.1.2.2.1.9.28|67|1193030203 +1.3.6.1.2.1.2.2.1.9.30|67|2010077956 +1.3.6.1.2.1.2.2.1.9.31|67|1672264105 +1.3.6.1.2.1.2.2.1.10.1|65|1882003004 +1.3.6.1.2.1.2.2.1.10.5|65|3385985368 +1.3.6.1.2.1.2.2.1.10.6|65|1115476981 +1.3.6.1.2.1.2.2.1.10.7|65|1168361537 +1.3.6.1.2.1.2.2.1.10.14|65|190722488 +1.3.6.1.2.1.2.2.1.10.19|65|3080937116 +1.3.6.1.2.1.2.2.1.10.23|65|2718244281 +1.3.6.1.2.1.2.2.1.10.28|65|1148208774 +1.3.6.1.2.1.2.2.1.10.30|65|618533489 +1.3.6.1.2.1.2.2.1.10.31|65|2503484251 +1.3.6.1.2.1.2.2.1.11.1|65|3496478306 +1.3.6.1.2.1.2.2.1.11.5|65|3410705023 +1.3.6.1.2.1.2.2.1.11.6|65|1796554451 +1.3.6.1.2.1.2.2.1.11.7|65|159541309 +1.3.6.1.2.1.2.2.1.11.14|65|1411862423 +1.3.6.1.2.1.2.2.1.11.19|65|4038679469 +1.3.6.1.2.1.2.2.1.11.23|65|3764171114 +1.3.6.1.2.1.2.2.1.11.28|65|4134622941 +1.3.6.1.2.1.2.2.1.11.30|65|3073594124 +1.3.6.1.2.1.2.2.1.11.31|65|1098762737 +1.3.6.1.2.1.2.2.1.12.1|65|3333721855 +1.3.6.1.2.1.2.2.1.12.5|65|4260137392 +1.3.6.1.2.1.2.2.1.12.6|65|4223847667 +1.3.6.1.2.1.2.2.1.12.7|65|1649342798 +1.3.6.1.2.1.2.2.1.12.14|65|1747369486 +1.3.6.1.2.1.2.2.1.12.19|65|1451002237 +1.3.6.1.2.1.2.2.1.12.23|65|1750393128 +1.3.6.1.2.1.2.2.1.12.28|65|2086509258 +1.3.6.1.2.1.2.2.1.12.30|65|196517694 +1.3.6.1.2.1.2.2.1.12.31|65|2969815192 +1.3.6.1.2.1.2.2.1.13.2|65|2241689204 +1.3.6.1.2.1.2.2.1.13.13|65|4175033535 +1.3.6.1.2.1.2.2.1.13.20|65|1078726538 +1.3.6.1.2.1.2.2.1.13.22|65|1338010120 +1.3.6.1.2.1.2.2.1.13.23|65|3184652116 +1.3.6.1.2.1.2.2.1.13.25|65|537113987 +1.3.6.1.2.1.2.2.1.13.29|65|1725293067 +1.3.6.1.2.1.2.2.1.13.30|65|3185732570 +1.3.6.1.2.1.2.2.1.14.2|65|2672375192 +1.3.6.1.2.1.2.2.1.14.13|65|663057221 +1.3.6.1.2.1.2.2.1.14.20|65|3514419006 +1.3.6.1.2.1.2.2.1.14.22|65|4122938877 +1.3.6.1.2.1.2.2.1.14.23|65|2634101757 +1.3.6.1.2.1.2.2.1.14.25|65|3854692160 +1.3.6.1.2.1.2.2.1.14.29|65|1620889538 +1.3.6.1.2.1.2.2.1.14.30|65|165871928 +1.3.6.1.2.1.2.2.1.15.1|65|4195285301 +1.3.6.1.2.1.2.2.1.15.5|65|1431612784 +1.3.6.1.2.1.2.2.1.15.6|65|543505378 +1.3.6.1.2.1.2.2.1.15.7|65|1976142234 +1.3.6.1.2.1.2.2.1.15.14|65|3674813791 +1.3.6.1.2.1.2.2.1.15.19|65|3004007008 +1.3.6.1.2.1.2.2.1.15.23|65|3326039872 +1.3.6.1.2.1.2.2.1.15.28|65|725344437 +1.3.6.1.2.1.2.2.1.15.30|65|1593318352 +1.3.6.1.2.1.2.2.1.15.31|65|2012521445 +1.3.6.1.2.1.2.2.1.16.1|65|2185729508 +1.3.6.1.2.1.2.2.1.16.5|65|1981888745 +1.3.6.1.2.1.2.2.1.16.6|65|1069282708 +1.3.6.1.2.1.2.2.1.16.7|65|1089537527 +1.3.6.1.2.1.2.2.1.16.14|65|1592695357 +1.3.6.1.2.1.2.2.1.16.19|65|1048940037 +1.3.6.1.2.1.2.2.1.16.23|65|1467394219 +1.3.6.1.2.1.2.2.1.16.28|65|691822583 +1.3.6.1.2.1.2.2.1.16.30|65|1511086565 +1.3.6.1.2.1.2.2.1.16.31|65|1796032263 +1.3.6.1.2.1.2.2.1.17.1|65|3702458710 +1.3.6.1.2.1.2.2.1.17.5|65|1144326488 +1.3.6.1.2.1.2.2.1.17.6|65|755364319 +1.3.6.1.2.1.2.2.1.17.7|65|2989385220 +1.3.6.1.2.1.2.2.1.17.14|65|3953952011 +1.3.6.1.2.1.2.2.1.17.19|65|3083592819 +1.3.6.1.2.1.2.2.1.17.23|65|322682189 +1.3.6.1.2.1.2.2.1.17.28|65|751481754 +1.3.6.1.2.1.2.2.1.17.30|65|1572646496 +1.3.6.1.2.1.2.2.1.17.31|65|1001871605 +1.3.6.1.2.1.2.2.1.18.1|65|3805912207 +1.3.6.1.2.1.2.2.1.18.5|65|3052655381 +1.3.6.1.2.1.2.2.1.18.6|65|1060694077 +1.3.6.1.2.1.2.2.1.18.7|65|1178885167 +1.3.6.1.2.1.2.2.1.18.14|65|146095067 +1.3.6.1.2.1.2.2.1.18.19|65|3416577638 +1.3.6.1.2.1.2.2.1.18.23|65|154936189 +1.3.6.1.2.1.2.2.1.18.28|65|1338060249 +1.3.6.1.2.1.2.2.1.18.30|65|3812251620 +1.3.6.1.2.1.2.2.1.18.31|65|1846042920 +1.3.6.1.2.1.2.2.1.19.2|65|642166389 +1.3.6.1.2.1.2.2.1.19.13|65|3466819068 +1.3.6.1.2.1.2.2.1.19.20|65|646965121 +1.3.6.1.2.1.2.2.1.19.22|65|2275903126 +1.3.6.1.2.1.2.2.1.19.23|65|3412605861 +1.3.6.1.2.1.2.2.1.19.25|65|2646666505 +1.3.6.1.2.1.2.2.1.19.29|65|1387261523 +1.3.6.1.2.1.2.2.1.19.30|65|2609115879 +1.3.6.1.2.1.2.2.1.20.2|65|4148611609 +1.3.6.1.2.1.2.2.1.20.13|65|3724140174 +1.3.6.1.2.1.2.2.1.20.20|65|3028781023 +1.3.6.1.2.1.2.2.1.20.22|65|2087642655 +1.3.6.1.2.1.2.2.1.20.23|65|3915779502 +1.3.6.1.2.1.2.2.1.20.25|65|3902137000 +1.3.6.1.2.1.2.2.1.20.29|65|3262403811 +1.3.6.1.2.1.2.2.1.20.30|65|4238703132 +1.3.6.1.2.1.2.2.1.21.1|66|82 +1.3.6.1.2.1.2.2.1.21.5|66|57 +1.3.6.1.2.1.2.2.1.21.6|66|93 +1.3.6.1.2.1.2.2.1.21.7|66|63 +1.3.6.1.2.1.2.2.1.21.14|66|24 +1.3.6.1.2.1.2.2.1.21.19|66|26 +1.3.6.1.2.1.2.2.1.21.23|66|80 +1.3.6.1.2.1.2.2.1.21.28|66|80 +1.3.6.1.2.1.2.2.1.21.30|66|19 +1.3.6.1.2.1.2.2.1.21.31|66|50 +1.3.6.1.2.1.2.2.1.22.1|6|1.3.6.1.3.45.147.101.228.214 +1.3.6.1.2.1.2.2.1.22.5|6|1.3.6.1.3.45 +1.3.6.1.2.1.2.2.1.22.6|6|1.3.6.1.3.48 +1.3.6.1.2.1.2.2.1.22.7|6|1.3.6.1.3 +1.3.6.1.2.1.2.2.1.22.14|6|1.3.6.1.3.156.196.167.160.176.17.112.48.166 +1.3.6.1.2.1.2.2.1.22.19|6|1.3.6.1.3.133.100.137.5 +1.3.6.1.2.1.2.2.1.22.23|6|1.3.6.1.3.196.82 +1.3.6.1.2.1.2.2.1.22.28|6|1.3.6.1.3.77.239.236 +1.3.6.1.2.1.2.2.1.22.30|6|1.3.6.1.3.47.232.249.83 +1.3.6.1.2.1.2.2.1.22.31|6|1.3.6.1.3.68.173.9.55.66.221.65.82 +1.3.6.1.2.1.6.1.0|2|4 +1.3.6.1.2.1.6.2.0|2|19 +1.3.6.1.2.1.6.3.0|2|13 +1.3.6.1.2.1.6.4.0|2|14 +1.3.6.1.2.1.6.5.0|65|3495703086 +1.3.6.1.2.1.6.6.0|65|372085797 +1.3.6.1.2.1.6.7.0|65|341719439 +1.3.6.1.2.1.6.8.0|65|3777519670 +1.3.6.1.2.1.6.9.0|66|72 +1.3.6.1.2.1.6.10.0|65|3212468096 +1.3.6.1.2.1.6.11.0|65|1506985444 +1.3.6.1.2.1.6.12.0|65|1004422298 +1.3.6.1.2.1.6.13.1.1.19.192.194.138.30.197.116.181.203.19|2|5 +1.3.6.1.2.1.6.13.1.1.49.212.70.37.27.99.156.38.80.20|2|6 +1.3.6.1.2.1.6.13.1.1.63.202.33.95.3.150.24.202.206.14|2|1 +1.3.6.1.2.1.6.13.1.1.75.220.11.81.3.75.157.192.44.26|2|11 +1.3.6.1.2.1.6.13.1.1.78.176.81.126.21.98.39.62.222.12|2|11 +1.3.6.1.2.1.6.13.1.1.162.10.255.161.23.83.77.198.1.22|2|10 +1.3.6.1.2.1.6.13.1.1.194.43.197.151.15.102.149.131.169.1|2|9 +1.3.6.1.2.1.6.13.1.1.201.4.229.174.6.121.8.120.60.9|2|1 +1.3.6.1.2.1.6.13.1.1.232.232.12.248.30.180.112.159.204.23|2|6 +1.3.6.1.2.1.6.13.1.1.241.83.234.94.1.27.228.22.177.14|2|11 +1.3.6.1.2.1.6.13.1.2.19.192.194.138.30.197.116.181.203.19|64x|13c0c28a +1.3.6.1.2.1.6.13.1.2.49.212.70.37.27.99.156.38.80.20|64x|31d44625 +1.3.6.1.2.1.6.13.1.2.63.202.33.95.3.150.24.202.206.14|64x|3fca215f +1.3.6.1.2.1.6.13.1.2.75.220.11.81.3.75.157.192.44.26|64x|4bdc0b51 +1.3.6.1.2.1.6.13.1.2.78.176.81.126.21.98.39.62.222.12|64x|4eb0517e +1.3.6.1.2.1.6.13.1.2.162.10.255.161.23.83.77.198.1.22|64x|a20affa1 +1.3.6.1.2.1.6.13.1.2.194.43.197.151.15.102.149.131.169.1|64x|c22bc597 +1.3.6.1.2.1.6.13.1.2.201.4.229.174.6.121.8.120.60.9|64x|c904e5ae +1.3.6.1.2.1.6.13.1.2.232.232.12.248.30.180.112.159.204.23|64x|e8e80cf8 +1.3.6.1.2.1.6.13.1.2.241.83.234.94.1.27.228.22.177.14|64x|f153ea5e +1.3.6.1.2.1.6.13.1.3.19.192.194.138.30.197.116.181.203.19|2|30 +1.3.6.1.2.1.6.13.1.3.49.212.70.37.27.99.156.38.80.20|2|27 +1.3.6.1.2.1.6.13.1.3.63.202.33.95.3.150.24.202.206.14|2|3 +1.3.6.1.2.1.6.13.1.3.75.220.11.81.3.75.157.192.44.26|2|3 +1.3.6.1.2.1.6.13.1.3.78.176.81.126.21.98.39.62.222.12|2|21 +1.3.6.1.2.1.6.13.1.3.162.10.255.161.23.83.77.198.1.22|2|23 +1.3.6.1.2.1.6.13.1.3.194.43.197.151.15.102.149.131.169.1|2|15 +1.3.6.1.2.1.6.13.1.3.201.4.229.174.6.121.8.120.60.9|2|6 +1.3.6.1.2.1.6.13.1.3.232.232.12.248.30.180.112.159.204.23|2|30 +1.3.6.1.2.1.6.13.1.3.241.83.234.94.1.27.228.22.177.14|2|1 +1.3.6.1.2.1.6.13.1.4.19.192.194.138.30.197.116.181.203.19|64x|c574b5cb +1.3.6.1.2.1.6.13.1.4.49.212.70.37.27.99.156.38.80.20|64x|639c2650 +1.3.6.1.2.1.6.13.1.4.63.202.33.95.3.150.24.202.206.14|64x|9618cace +1.3.6.1.2.1.6.13.1.4.75.220.11.81.3.75.157.192.44.26|64x|4b9dc02c +1.3.6.1.2.1.6.13.1.4.78.176.81.126.21.98.39.62.222.12|64x|62273ede +1.3.6.1.2.1.6.13.1.4.162.10.255.161.23.83.77.198.1.22|64x|534dc601 +1.3.6.1.2.1.6.13.1.4.194.43.197.151.15.102.149.131.169.1|64x|669583a9 +1.3.6.1.2.1.6.13.1.4.201.4.229.174.6.121.8.120.60.9|64x|7908783c +1.3.6.1.2.1.6.13.1.4.232.232.12.248.30.180.112.159.204.23|64x|b4709fcc +1.3.6.1.2.1.6.13.1.4.241.83.234.94.1.27.228.22.177.14|64x|1be416b1 +1.3.6.1.2.1.6.13.1.5.19.192.194.138.30.197.116.181.203.19|2|19 +1.3.6.1.2.1.6.13.1.5.49.212.70.37.27.99.156.38.80.20|2|20 +1.3.6.1.2.1.6.13.1.5.63.202.33.95.3.150.24.202.206.14|2|14 +1.3.6.1.2.1.6.13.1.5.75.220.11.81.3.75.157.192.44.26|2|26 +1.3.6.1.2.1.6.13.1.5.78.176.81.126.21.98.39.62.222.12|2|12 +1.3.6.1.2.1.6.13.1.5.162.10.255.161.23.83.77.198.1.22|2|22 +1.3.6.1.2.1.6.13.1.5.194.43.197.151.15.102.149.131.169.1|2|1 +1.3.6.1.2.1.6.13.1.5.201.4.229.174.6.121.8.120.60.9|2|9 +1.3.6.1.2.1.6.13.1.5.232.232.12.248.30.180.112.159.204.23|2|23 +1.3.6.1.2.1.6.13.1.5.241.83.234.94.1.27.228.22.177.14|2|14 +1.3.6.1.2.1.6.14.0|65|1656807085 +1.3.6.1.2.1.6.15.0|65|209366602 +1.3.6.1.2.1.6.17.0|70|10836309735518636992 +1.3.6.1.2.1.6.18.0|70|6643493366038592398 +1.3.6.1.2.1.6.19.1.1.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|2|0 +1.3.6.1.2.1.6.19.1.1.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|2|0 +1.3.6.1.2.1.6.19.1.1.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|2|0 +1.3.6.1.2.1.6.19.1.1.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|2|1 +1.3.6.1.2.1.6.19.1.1.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|2|1 +1.3.6.1.2.1.6.19.1.1.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|2|2 +1.3.6.1.2.1.6.19.1.1.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|2|3 +1.3.6.1.2.1.6.19.1.1.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|2|3 +1.3.6.1.2.1.6.19.1.1.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|2|16 +1.3.6.1.2.1.6.19.1.1.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|2|16 +1.3.6.1.2.1.6.19.1.2.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|4x|62757420666f72776172642064726976696e672064726976696e67 +1.3.6.1.2.1.6.19.1.2.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|4x|6163746564207a6f6d6269657320717561696e746c79206275742064726976696e6720717561696e746c79 +1.3.6.1.2.1.6.19.1.2.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|4x|746865697220666f72776172642074686569722074686569722064726976696e672074686569722064726976696e67206f78656e206f78656e +1.3.6.1.2.1.6.19.1.2.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|4x|64726976696e67206b657074207a6f6d6269657320666f7277617264204a61646564206b65707420746865697220627574 +1.3.6.1.2.1.6.19.1.2.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|4x|666f7277617264207a6f6d626965732062757420666f727761726420666f727761726420666f727761726420666f7277617264 +1.3.6.1.2.1.6.19.1.2.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|4|driving +1.3.6.1.2.1.6.19.1.2.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|4|oxen +1.3.6.1.2.1.6.19.1.2.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|4x|64726976696e672064726976696e6720717561696e746c79206f78656e207468656972204a61646564 +1.3.6.1.2.1.6.19.1.2.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|4x|4a61646564207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.6.19.1.2.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|4x|6163746564207a6f6d62696573207468656972207468656972 +1.3.6.1.2.1.6.19.1.3.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|66|98 +1.3.6.1.2.1.6.19.1.3.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|66|19488 +1.3.6.1.2.1.6.19.1.3.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|66|13300 +1.3.6.1.2.1.6.19.1.3.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|66|61978 +1.3.6.1.2.1.6.19.1.3.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|66|65208 +1.3.6.1.2.1.6.19.1.3.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|66|34220 +1.3.6.1.2.1.6.19.1.3.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|66|62943 +1.3.6.1.2.1.6.19.1.3.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|66|58514 +1.3.6.1.2.1.6.19.1.3.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|66|50515 +1.3.6.1.2.1.6.19.1.3.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|66|60547 +1.3.6.1.2.1.6.19.1.4.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|2|0 +1.3.6.1.2.1.6.19.1.4.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|2|2 +1.3.6.1.2.1.6.19.1.4.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|2|0 +1.3.6.1.2.1.6.19.1.4.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|2|3 +1.3.6.1.2.1.6.19.1.4.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|2|16 +1.3.6.1.2.1.6.19.1.4.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|2|3 +1.3.6.1.2.1.6.19.1.4.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|2|2 +1.3.6.1.2.1.6.19.1.4.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|2|16 +1.3.6.1.2.1.6.19.1.4.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|2|2 +1.3.6.1.2.1.6.19.1.4.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|2|16 +1.3.6.1.2.1.6.19.1.5.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|4x|6b6570742064726976696e672064726976696e672064726976696e67206b657074206f78656e20666f7277617264206b657074 +1.3.6.1.2.1.6.19.1.5.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|4x|616374656420666f72776172642064726976696e67204a61646564207a6f6d626965732062757420627574 +1.3.6.1.2.1.6.19.1.5.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|4x|64726976696e6720746865697220666f72776172642064726976696e67 +1.3.6.1.2.1.6.19.1.5.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|4x|6163746564206163746564204a61646564206f78656e207a6f6d62696573207468656972206b657074206b657074 +1.3.6.1.2.1.6.19.1.5.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|4x|717561696e746c79207468656972 +1.3.6.1.2.1.6.19.1.5.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|4|forward +1.3.6.1.2.1.6.19.1.5.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|4x|4a616465642062757420717561696e746c79206163746564 +1.3.6.1.2.1.6.19.1.5.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|4x|666f7277617264206b65707420627574206b657074 +1.3.6.1.2.1.6.19.1.5.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|4x|4a61646564206163746564206b65707420627574206163746564207468656972 +1.3.6.1.2.1.6.19.1.5.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|4x|64726976696e6720666f7277617264207a6f6d62696573206163746564 +1.3.6.1.2.1.6.19.1.6.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|66|30876 +1.3.6.1.2.1.6.19.1.6.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|66|62320 +1.3.6.1.2.1.6.19.1.6.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|66|54623 +1.3.6.1.2.1.6.19.1.6.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|66|48165 +1.3.6.1.2.1.6.19.1.6.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|66|41084 +1.3.6.1.2.1.6.19.1.6.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|66|45017 +1.3.6.1.2.1.6.19.1.6.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|66|57404 +1.3.6.1.2.1.6.19.1.6.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|66|54370 +1.3.6.1.2.1.6.19.1.6.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|66|28244 +1.3.6.1.2.1.6.19.1.6.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|66|56793 +1.3.6.1.2.1.6.19.1.7.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|2|9 +1.3.6.1.2.1.6.19.1.7.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|2|4 +1.3.6.1.2.1.6.19.1.7.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|2|1 +1.3.6.1.2.1.6.19.1.7.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|2|7 +1.3.6.1.2.1.6.19.1.7.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|2|9 +1.3.6.1.2.1.6.19.1.7.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|2|9 +1.3.6.1.2.1.6.19.1.7.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|2|1 +1.3.6.1.2.1.6.19.1.7.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|2|8 +1.3.6.1.2.1.6.19.1.7.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|2|3 +1.3.6.1.2.1.6.19.1.7.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|2|5 +1.3.6.1.2.1.6.19.1.8.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|66|11494 +1.3.6.1.2.1.6.19.1.8.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|66|19833 +1.3.6.1.2.1.6.19.1.8.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|66|20375 +1.3.6.1.2.1.6.19.1.8.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|66|36316 +1.3.6.1.2.1.6.19.1.8.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|66|14994 +1.3.6.1.2.1.6.19.1.8.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|66|61477 +1.3.6.1.2.1.6.19.1.8.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|66|20102 +1.3.6.1.2.1.6.19.1.8.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|66|5148 +1.3.6.1.2.1.6.19.1.8.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|66|23335 +1.3.6.1.2.1.6.19.1.8.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|66|3408 +1.3.6.1.2.1.6.20.1.1.2.57.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.74.97.100.101.100.43630|2|2 +1.3.6.1.2.1.6.20.1.1.3.7.122.111.109.98.105.101.115.62225|2|3 +1.3.6.1.2.1.6.20.1.1.4.5.116.104.101.105.114.63131|2|4 +1.3.6.1.2.1.6.20.1.1.4.7.100.114.105.118.105.110.103.26679|2|4 +1.3.6.1.2.1.6.20.1.1.4.17.97.99.116.101.100.32.98.117.116.32.122.111.109.98.105.101.115.29283|2|4 +1.3.6.1.2.1.6.20.1.1.4.29.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.2131|2|4 +1.3.6.1.2.1.6.20.1.1.4.41.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.98.117.116.32.111.120.101.110.65455|2|4 +1.3.6.1.2.1.6.20.1.1.16.38.97.99.116.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.98.117.116.32.122.111.109.98.105.101.115.7290|2|16 +1.3.6.1.2.1.6.20.1.1.16.57.122.111.109.98.105.101.115.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.12767|2|16 +1.3.6.1.2.1.6.20.1.1.16.58.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.113.117.97.105.110.116.108.121.33797|2|16 +1.3.6.1.2.1.6.20.1.2.2.57.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.74.97.100.101.100.43630|4x|666f72776172642064726976696e672061637465642074686569722061637465642064726976696e67206b657074206f78656e204a61646564 +1.3.6.1.2.1.6.20.1.2.3.7.122.111.109.98.105.101.115.62225|4|zombies +1.3.6.1.2.1.6.20.1.2.4.5.116.104.101.105.114.63131|4|their +1.3.6.1.2.1.6.20.1.2.4.7.100.114.105.118.105.110.103.26679|4|driving +1.3.6.1.2.1.6.20.1.2.4.17.97.99.116.101.100.32.98.117.116.32.122.111.109.98.105.101.115.29283|4x|616374656420627574207a6f6d62696573 +1.3.6.1.2.1.6.20.1.2.4.29.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.2131|4x|7468656972207a6f6d62696573206f78656e204a61646564206f78656e +1.3.6.1.2.1.6.20.1.2.4.41.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.98.117.116.32.111.120.101.110.65455|4x|666f7277617264206163746564204a61646564206f78656e207a6f6d6269657320627574206f78656e +1.3.6.1.2.1.6.20.1.2.16.38.97.99.116.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.98.117.116.32.122.111.109.98.105.101.115.7290|4x|6163746564206b657074207a6f6d626965732064726976696e6720627574207a6f6d62696573 +1.3.6.1.2.1.6.20.1.2.16.57.122.111.109.98.105.101.115.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.12767|4x|7a6f6d62696573204a61646564206f78656e207a6f6d62696573206163746564206b65707420717561696e746c79206b657074206163746564 +1.3.6.1.2.1.6.20.1.2.16.58.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.113.117.97.105.110.116.108.121.33797|4x|666f7277617264207a6f6d62696573204a61646564207468656972207a6f6d6269657320717561696e746c79206b65707420717561696e746c79 +1.3.6.1.2.1.6.20.1.3.2.57.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.74.97.100.101.100.43630|66|43630 +1.3.6.1.2.1.6.20.1.3.3.7.122.111.109.98.105.101.115.62225|66|62225 +1.3.6.1.2.1.6.20.1.3.4.5.116.104.101.105.114.63131|66|63131 +1.3.6.1.2.1.6.20.1.3.4.7.100.114.105.118.105.110.103.26679|66|26679 +1.3.6.1.2.1.6.20.1.3.4.17.97.99.116.101.100.32.98.117.116.32.122.111.109.98.105.101.115.29283|66|29283 +1.3.6.1.2.1.6.20.1.3.4.29.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.2131|66|2131 +1.3.6.1.2.1.6.20.1.3.4.41.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.98.117.116.32.111.120.101.110.65455|66|65455 +1.3.6.1.2.1.6.20.1.3.16.38.97.99.116.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.98.117.116.32.122.111.109.98.105.101.115.7290|66|7290 +1.3.6.1.2.1.6.20.1.3.16.57.122.111.109.98.105.101.115.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.12767|66|12767 +1.3.6.1.2.1.6.20.1.3.16.58.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.113.117.97.105.110.116.108.121.33797|66|33797 +1.3.6.1.2.1.6.20.1.4.2.57.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.74.97.100.101.100.43630|66|11043 +1.3.6.1.2.1.6.20.1.4.3.7.122.111.109.98.105.101.115.62225|66|46645 +1.3.6.1.2.1.6.20.1.4.4.5.116.104.101.105.114.63131|66|21183 +1.3.6.1.2.1.6.20.1.4.4.7.100.114.105.118.105.110.103.26679|66|22659 +1.3.6.1.2.1.6.20.1.4.4.17.97.99.116.101.100.32.98.117.116.32.122.111.109.98.105.101.115.29283|66|29878 +1.3.6.1.2.1.6.20.1.4.4.29.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.2131|66|30450 +1.3.6.1.2.1.6.20.1.4.4.41.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.98.117.116.32.111.120.101.110.65455|66|6110 +1.3.6.1.2.1.6.20.1.4.16.38.97.99.116.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.98.117.116.32.122.111.109.98.105.101.115.7290|66|6544 +1.3.6.1.2.1.6.20.1.4.16.57.122.111.109.98.105.101.115.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.12767|66|51412 +1.3.6.1.2.1.6.20.1.4.16.58.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.113.117.97.105.110.116.108.121.33797|66|23539 +1.3.6.1.2.1.7.1.0|65|4270141773 +1.3.6.1.2.1.7.2.0|65|199753378 +1.3.6.1.2.1.7.3.0|65|3005352238 +1.3.6.1.2.1.7.4.0|65|4259461437 +1.3.6.1.2.1.7.5.1.1.13.209.77.90.1|64x|0dd14d5a +1.3.6.1.2.1.7.5.1.1.36.47.137.236.30|64x|242f89ec +1.3.6.1.2.1.7.5.1.1.49.119.163.14.29|64x|3177a30e +1.3.6.1.2.1.7.5.1.1.61.157.139.16.2|64x|3d9d8b10 +1.3.6.1.2.1.7.5.1.1.62.156.117.114.10|64x|3e9c7572 +1.3.6.1.2.1.7.5.1.1.77.165.52.164.25|64x|4da534a4 +1.3.6.1.2.1.7.5.1.1.105.30.91.133.18|64x|691e5b85 +1.3.6.1.2.1.7.5.1.1.195.150.79.206.0|64x|c3964fce +1.3.6.1.2.1.7.5.1.1.239.86.52.156.20|64x|ef56349c +1.3.6.1.2.1.7.5.1.1.240.81.67.244.2|64x|f05143f4 +1.3.6.1.2.1.7.5.1.2.13.209.77.90.1|2|1 +1.3.6.1.2.1.7.5.1.2.36.47.137.236.30|2|30 +1.3.6.1.2.1.7.5.1.2.49.119.163.14.29|2|29 +1.3.6.1.2.1.7.5.1.2.61.157.139.16.2|2|2 +1.3.6.1.2.1.7.5.1.2.62.156.117.114.10|2|10 +1.3.6.1.2.1.7.5.1.2.77.165.52.164.25|2|25 +1.3.6.1.2.1.7.5.1.2.105.30.91.133.18|2|18 +1.3.6.1.2.1.7.5.1.2.195.150.79.206.0|2|0 +1.3.6.1.2.1.7.5.1.2.239.86.52.156.20|2|20 +1.3.6.1.2.1.7.5.1.2.240.81.67.244.2|2|2 +1.3.6.1.2.1.7.7.1.1.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|2|0 +1.3.6.1.2.1.7.7.1.1.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|2|0 +1.3.6.1.2.1.7.7.1.1.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|2|1 +1.3.6.1.2.1.7.7.1.1.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|2|2 +1.3.6.1.2.1.7.7.1.1.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|2|2 +1.3.6.1.2.1.7.7.1.1.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|2|3 +1.3.6.1.2.1.7.7.1.1.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|2|3 +1.3.6.1.2.1.7.7.1.1.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|2|4 +1.3.6.1.2.1.7.7.1.1.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|2|4 +1.3.6.1.2.1.7.7.1.1.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|2|4 +1.3.6.1.2.1.7.7.1.2.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|4x|746865697220666f7277617264 +1.3.6.1.2.1.7.7.1.2.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|4x|4a61646564207a6f6d626965732062757420717561696e746c7920717561696e746c79206163746564207a6f6d6269657320627574 +1.3.6.1.2.1.7.7.1.2.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|4x|6b6570742062757420666f7277617264206f78656e2064726976696e6720666f727761726420717561696e746c79206b65707420666f7277617264 +1.3.6.1.2.1.7.7.1.2.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|4x|6163746564206b657074 +1.3.6.1.2.1.7.7.1.2.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|4x|6275742064726976696e672061637465642064726976696e67204a61646564206b657074206b65707420666f7277617264 +1.3.6.1.2.1.7.7.1.2.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|4x|6b657074207468656972206f78656e20627574207a6f6d6269657320616374656420746865697220666f7277617264 +1.3.6.1.2.1.7.7.1.2.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|4x|6b657074207468656972207a6f6d62696573206f78656e2061637465642064726976696e67206163746564206b657074207468656972 +1.3.6.1.2.1.7.7.1.2.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|4|driving +1.3.6.1.2.1.7.7.1.2.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|4x|62757420627574206b65707420627574 +1.3.6.1.2.1.7.7.1.2.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|4x|74686569722064726976696e67207468656972204a61646564 +1.3.6.1.2.1.7.7.1.3.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|66|4256 +1.3.6.1.2.1.7.7.1.3.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|66|64125 +1.3.6.1.2.1.7.7.1.3.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|66|41987 +1.3.6.1.2.1.7.7.1.3.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|66|29033 +1.3.6.1.2.1.7.7.1.3.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|66|4650 +1.3.6.1.2.1.7.7.1.3.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|66|13211 +1.3.6.1.2.1.7.7.1.3.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|66|12634 +1.3.6.1.2.1.7.7.1.3.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|66|49271 +1.3.6.1.2.1.7.7.1.3.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|66|13862 +1.3.6.1.2.1.7.7.1.3.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|66|63517 +1.3.6.1.2.1.7.7.1.4.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|2|4 +1.3.6.1.2.1.7.7.1.4.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|2|2 +1.3.6.1.2.1.7.7.1.4.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|2|16 +1.3.6.1.2.1.7.7.1.4.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|2|16 +1.3.6.1.2.1.7.7.1.4.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|2|3 +1.3.6.1.2.1.7.7.1.4.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|2|3 +1.3.6.1.2.1.7.7.1.4.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|2|2 +1.3.6.1.2.1.7.7.1.4.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|2|0 +1.3.6.1.2.1.7.7.1.4.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|2|16 +1.3.6.1.2.1.7.7.1.4.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|2|4 +1.3.6.1.2.1.7.7.1.5.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|4x|746865697220666f727761726420717561696e746c792064726976696e67206163746564204a61646564206163746564 +1.3.6.1.2.1.7.7.1.5.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|4|zombies +1.3.6.1.2.1.7.7.1.5.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|4x|717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|4|quaintly +1.3.6.1.2.1.7.7.1.5.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|4x|6163746564207468656972 +1.3.6.1.2.1.7.7.1.5.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|4x|62757420666f7277617264207468656972207468656972 +1.3.6.1.2.1.7.7.1.5.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|4x|64726976696e672064726976696e672064726976696e67206163746564 +1.3.6.1.2.1.7.7.1.5.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|4x|6b657074206f78656e206163746564 +1.3.6.1.2.1.7.7.1.5.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|4x|6f78656e20666f72776172642064726976696e6720616374656420717561696e746c792064726976696e672064726976696e6720666f7277617264206163746564 +1.3.6.1.2.1.7.7.1.5.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|4|driving +1.3.6.1.2.1.7.7.1.6.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|66|44544 +1.3.6.1.2.1.7.7.1.6.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|66|15820 +1.3.6.1.2.1.7.7.1.6.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|66|27196 +1.3.6.1.2.1.7.7.1.6.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|66|52479 +1.3.6.1.2.1.7.7.1.6.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|66|41218 +1.3.6.1.2.1.7.7.1.6.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|66|33858 +1.3.6.1.2.1.7.7.1.6.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|66|34581 +1.3.6.1.2.1.7.7.1.6.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|66|54166 +1.3.6.1.2.1.7.7.1.6.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|66|39814 +1.3.6.1.2.1.7.7.1.6.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|66|54011 +1.3.6.1.2.1.7.7.1.7.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|66|52531 +1.3.6.1.2.1.7.7.1.7.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|66|11592 +1.3.6.1.2.1.7.7.1.7.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|66|10000 +1.3.6.1.2.1.7.7.1.7.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|66|34579 +1.3.6.1.2.1.7.7.1.7.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|66|23033 +1.3.6.1.2.1.7.7.1.7.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|66|37887 +1.3.6.1.2.1.7.7.1.7.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|66|61882 +1.3.6.1.2.1.7.7.1.7.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|66|51020 +1.3.6.1.2.1.7.7.1.7.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|66|14440 +1.3.6.1.2.1.7.7.1.7.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|66|8069 +1.3.6.1.2.1.7.7.1.8.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|66|56769 +1.3.6.1.2.1.7.7.1.8.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|66|4918 +1.3.6.1.2.1.7.7.1.8.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|66|29584 +1.3.6.1.2.1.7.7.1.8.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|66|5023 +1.3.6.1.2.1.7.7.1.8.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|66|59393 +1.3.6.1.2.1.7.7.1.8.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|66|48568 +1.3.6.1.2.1.7.7.1.8.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|66|46491 +1.3.6.1.2.1.7.7.1.8.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|66|24853 +1.3.6.1.2.1.7.7.1.8.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|66|43653 +1.3.6.1.2.1.7.7.1.8.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|66|21028 +1.3.6.1.2.1.7.8.0|70|7642781740819387010 +1.3.6.1.2.1.7.9.0|70|7684584856575881521 +1.3.6.1.2.1.11.1.0|65|954851721 +1.3.6.1.2.1.11.1.0|65|1454218606 +1.3.6.1.2.1.11.2.0|65|409608966 +1.3.6.1.2.1.11.2.0|65|1880301803 +1.3.6.1.2.1.11.3.0|65|1289819496 +1.3.6.1.2.1.11.3.0|65|3124603570 +1.3.6.1.2.1.11.4.0|65|992806328 +1.3.6.1.2.1.11.4.0|65|2163750677 +1.3.6.1.2.1.11.5.0|65|63400765 +1.3.6.1.2.1.11.5.0|65|1652706228 +1.3.6.1.2.1.11.6.0|65|2152341393 +1.3.6.1.2.1.11.6.0|65|3271598735 +1.3.6.1.2.1.11.8.0|65|4111852310 +1.3.6.1.2.1.11.8.0|65|4201055591 +1.3.6.1.2.1.11.9.0|65|1160138484 +1.3.6.1.2.1.11.9.0|65|4256205423 +1.3.6.1.2.1.11.10.0|65|1221013779 +1.3.6.1.2.1.11.10.0|65|2302657642 +1.3.6.1.2.1.11.11.0|65|1540407169 +1.3.6.1.2.1.11.11.0|65|2350117438 +1.3.6.1.2.1.11.12.0|65|2614239671 +1.3.6.1.2.1.11.12.0|65|4111230750 +1.3.6.1.2.1.11.13.0|65|2852397657 +1.3.6.1.2.1.11.13.0|65|3121375553 +1.3.6.1.2.1.11.14.0|65|755604849 +1.3.6.1.2.1.11.14.0|65|3542294623 +1.3.6.1.2.1.11.15.0|65|741638534 +1.3.6.1.2.1.11.15.0|65|2794090705 +1.3.6.1.2.1.11.16.0|65|3877638626 +1.3.6.1.2.1.11.16.0|65|4180316518 +1.3.6.1.2.1.11.17.0|65|253685917 +1.3.6.1.2.1.11.17.0|65|2693168960 +1.3.6.1.2.1.11.18.0|65|1808524638 +1.3.6.1.2.1.11.18.0|65|2140737931 +1.3.6.1.2.1.11.19.0|65|676443377 +1.3.6.1.2.1.11.19.0|65|1117806078 +1.3.6.1.2.1.11.20.0|65|354628088 +1.3.6.1.2.1.11.20.0|65|3965434335 +1.3.6.1.2.1.11.21.0|65|1634954399 +1.3.6.1.2.1.11.21.0|65|1964459181 +1.3.6.1.2.1.11.22.0|65|1192433191 +1.3.6.1.2.1.11.22.0|65|1853429365 +1.3.6.1.2.1.11.24.0|65|380779089 +1.3.6.1.2.1.11.24.0|65|1472413992 +1.3.6.1.2.1.11.25.0|65|1794503904 +1.3.6.1.2.1.11.25.0|65|2149515263 +1.3.6.1.2.1.11.26.0|65|1232486629 +1.3.6.1.2.1.11.26.0|65|1651496593 +1.3.6.1.2.1.11.27.0|65|916838675 +1.3.6.1.2.1.11.27.0|65|2699929583 +1.3.6.1.2.1.11.28.0|65|70260818 +1.3.6.1.2.1.11.28.0|65|641662408 +1.3.6.1.2.1.11.29.0|65|998857108 +1.3.6.1.2.1.11.29.0|65|3136471498 +1.3.6.1.2.1.11.30.0|2|1 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.11.31.0|65|2369006345 +1.3.6.1.2.1.11.31.0|65|2819398811 +1.3.6.1.2.1.11.32.0|65|1430690600 +1.3.6.1.2.1.11.32.0|65|1725520591 +1.3.6.1.2.1.31.1.1.1.1.2|4x|4769676162697445746865726e6574312f302f31 +1.3.6.1.2.1.31.1.1.1.1.13|4x|4769676162697445746865726e6574312f302f32 +1.3.6.1.2.1.31.1.1.1.1.20|4x|4769676162697445746865726e6574312f302f33 +1.3.6.1.2.1.31.1.1.1.1.22|4x|4769676162697445746865726e6574312f302f34 +1.3.6.1.2.1.31.1.1.1.1.23|4x|4769676162697445746865726e6574312f302f35 +1.3.6.1.2.1.31.1.1.1.1.25|4x|4769676162697445746865726e6574312f302f36 +1.3.6.1.2.1.31.1.1.1.1.29|4x|4769676162697445746865726e6574312f302f37 +1.3.6.1.2.1.31.1.1.1.1.30|4x|4769676162697445746865726e6574312f302f38 +1.3.6.1.2.1.31.1.1.1.2.2|65|2733450495 +1.3.6.1.2.1.31.1.1.1.2.13|65|699266092 +1.3.6.1.2.1.31.1.1.1.2.20|65|4053490784 +1.3.6.1.2.1.31.1.1.1.2.22|65|1710795156 +1.3.6.1.2.1.31.1.1.1.2.23|65|3843858446 +1.3.6.1.2.1.31.1.1.1.2.25|65|947448120 +1.3.6.1.2.1.31.1.1.1.2.29|65|715533867 +1.3.6.1.2.1.31.1.1.1.2.30|65|3328396082 +1.3.6.1.2.1.31.1.1.1.3.2|65|3325970083 +1.3.6.1.2.1.31.1.1.1.3.13|65|1528033277 +1.3.6.1.2.1.31.1.1.1.3.20|65|3045056125 +1.3.6.1.2.1.31.1.1.1.3.22|65|204045711 +1.3.6.1.2.1.31.1.1.1.3.23|65|2573064606 +1.3.6.1.2.1.31.1.1.1.3.25|65|734698077 +1.3.6.1.2.1.31.1.1.1.3.29|65|2595770740 +1.3.6.1.2.1.31.1.1.1.3.30|65|1524629487 +1.3.6.1.2.1.31.1.1.1.4.2|65|3540226820 +1.3.6.1.2.1.31.1.1.1.4.13|65|2682280325 +1.3.6.1.2.1.31.1.1.1.4.20|65|3957518508 +1.3.6.1.2.1.31.1.1.1.4.22|65|1906225887 +1.3.6.1.2.1.31.1.1.1.4.23|65|1741403028 +1.3.6.1.2.1.31.1.1.1.4.25|65|1255363249 +1.3.6.1.2.1.31.1.1.1.4.29|65|399502146 +1.3.6.1.2.1.31.1.1.1.4.30|65|1144089387 +1.3.6.1.2.1.31.1.1.1.5.2|65|1452176956 +1.3.6.1.2.1.31.1.1.1.5.13|65|3409164710 +1.3.6.1.2.1.31.1.1.1.5.20|65|2463070203 +1.3.6.1.2.1.31.1.1.1.5.22|65|848059051 +1.3.6.1.2.1.31.1.1.1.5.23|65|2914405363 +1.3.6.1.2.1.31.1.1.1.5.25|65|3108752973 +1.3.6.1.2.1.31.1.1.1.5.29|65|1232734959 +1.3.6.1.2.1.31.1.1.1.5.30|65|1764074382 +1.3.6.1.2.1.31.1.1.1.6.2|70|13448303172714697305 +1.3.6.1.2.1.31.1.1.1.6.13|70|4318719075804689635 +1.3.6.1.2.1.31.1.1.1.6.20|70|17201856891642082546 +1.3.6.1.2.1.31.1.1.1.6.22|70|13246658495780705980 +1.3.6.1.2.1.31.1.1.1.6.23|70|9332172312136476036 +1.3.6.1.2.1.31.1.1.1.6.25|70|15314956972903536651 +1.3.6.1.2.1.31.1.1.1.6.29|70|9318379647000499270 +1.3.6.1.2.1.31.1.1.1.6.30|70|9765358329565439355 +1.3.6.1.2.1.31.1.1.1.7.2|70|10179706897128774466 +1.3.6.1.2.1.31.1.1.1.7.13|70|4454859230604991099 +1.3.6.1.2.1.31.1.1.1.7.20|70|3359284887771123963 +1.3.6.1.2.1.31.1.1.1.7.22|70|11446923366838822379 +1.3.6.1.2.1.31.1.1.1.7.23|70|10465411426025060425 +1.3.6.1.2.1.31.1.1.1.7.25|70|3080911980461264564 +1.3.6.1.2.1.31.1.1.1.7.29|70|2435720068607480212 +1.3.6.1.2.1.31.1.1.1.7.30|70|6421342371519975141 +1.3.6.1.2.1.31.1.1.1.8.2|70|456111944996040225 +1.3.6.1.2.1.31.1.1.1.8.13|70|18195635595774592670 +1.3.6.1.2.1.31.1.1.1.8.20|70|10306916805428074276 +1.3.6.1.2.1.31.1.1.1.8.22|70|10817541190455104384 +1.3.6.1.2.1.31.1.1.1.8.23|70|16699596081972900079 +1.3.6.1.2.1.31.1.1.1.8.25|70|12660222749186865742 +1.3.6.1.2.1.31.1.1.1.8.29|70|7608584762010362398 +1.3.6.1.2.1.31.1.1.1.8.30|70|14936114632924624840 +1.3.6.1.2.1.31.1.1.1.9.2|70|4893042909336225003 +1.3.6.1.2.1.31.1.1.1.9.13|70|11758107631008367663 +1.3.6.1.2.1.31.1.1.1.9.20|70|2724215101882812388 +1.3.6.1.2.1.31.1.1.1.9.22|70|5136657074956142950 +1.3.6.1.2.1.31.1.1.1.9.23|70|9530476596662027452 +1.3.6.1.2.1.31.1.1.1.9.25|70|14086768769392060956 +1.3.6.1.2.1.31.1.1.1.9.29|70|11317604788457258935 +1.3.6.1.2.1.31.1.1.1.9.30|70|6797537392375707490 +1.3.6.1.2.1.31.1.1.1.10.2|70|12274849589607689984 +1.3.6.1.2.1.31.1.1.1.10.13|70|940792159273415684 +1.3.6.1.2.1.31.1.1.1.10.20|70|11139680439752029358 +1.3.6.1.2.1.31.1.1.1.10.22|70|1594900387358540750 +1.3.6.1.2.1.31.1.1.1.10.23|70|11192496846189559441 +1.3.6.1.2.1.31.1.1.1.10.25|70|16344897290942655305 +1.3.6.1.2.1.31.1.1.1.10.29|70|677815612738172887 +1.3.6.1.2.1.31.1.1.1.10.30|70|16368354720075476219 +1.3.6.1.2.1.31.1.1.1.11.2|70|15970914692347547432 +1.3.6.1.2.1.31.1.1.1.11.13|70|13601449749320466487 +1.3.6.1.2.1.31.1.1.1.11.20|70|2293591718704981678 +1.3.6.1.2.1.31.1.1.1.11.22|70|12372852009231832301 +1.3.6.1.2.1.31.1.1.1.11.23|70|11206420299303144484 +1.3.6.1.2.1.31.1.1.1.11.25|70|18096173012673022526 +1.3.6.1.2.1.31.1.1.1.11.29|70|16246528730037708164 +1.3.6.1.2.1.31.1.1.1.11.30|70|11360917974542476187 +1.3.6.1.2.1.31.1.1.1.12.2|70|4902902070248533915 +1.3.6.1.2.1.31.1.1.1.12.13|70|17202254967886391507 +1.3.6.1.2.1.31.1.1.1.12.20|70|4717428222020898053 +1.3.6.1.2.1.31.1.1.1.12.22|70|15078557458701602035 +1.3.6.1.2.1.31.1.1.1.12.23|70|8614726914866626135 +1.3.6.1.2.1.31.1.1.1.12.25|70|6002335830185811704 +1.3.6.1.2.1.31.1.1.1.12.29|70|8462951256947496252 +1.3.6.1.2.1.31.1.1.1.12.30|70|11436030414039510640 +1.3.6.1.2.1.31.1.1.1.13.2|70|11008162885060916668 +1.3.6.1.2.1.31.1.1.1.13.13|70|444503635646358599 +1.3.6.1.2.1.31.1.1.1.13.20|70|12142342600175513906 +1.3.6.1.2.1.31.1.1.1.13.22|70|3805092011446384798 +1.3.6.1.2.1.31.1.1.1.13.23|70|10616684150150900851 +1.3.6.1.2.1.31.1.1.1.13.25|70|7473343076948502502 +1.3.6.1.2.1.31.1.1.1.13.29|70|6829434071846665165 +1.3.6.1.2.1.31.1.1.1.13.30|70|7327198865724432175 +1.3.6.1.2.1.31.1.1.1.14.2|2|2 +1.3.6.1.2.1.31.1.1.1.14.13|2|1 +1.3.6.1.2.1.31.1.1.1.14.20|2|2 +1.3.6.1.2.1.31.1.1.1.14.22|2|1 +1.3.6.1.2.1.31.1.1.1.14.23|2|2 +1.3.6.1.2.1.31.1.1.1.14.25|2|1 +1.3.6.1.2.1.31.1.1.1.14.29|2|1 +1.3.6.1.2.1.31.1.1.1.14.30|2|1 +1.3.6.1.2.1.31.1.1.1.15.2|66|29 +1.3.6.1.2.1.31.1.1.1.15.13|66|43 +1.3.6.1.2.1.31.1.1.1.15.20|66|49 +1.3.6.1.2.1.31.1.1.1.15.22|66|68 +1.3.6.1.2.1.31.1.1.1.15.23|66|91 +1.3.6.1.2.1.31.1.1.1.15.25|66|87 +1.3.6.1.2.1.31.1.1.1.15.29|66|81 +1.3.6.1.2.1.31.1.1.1.15.30|66|77 +1.3.6.1.2.1.31.1.1.1.16.2|2|1 +1.3.6.1.2.1.31.1.1.1.16.13|2|1 +1.3.6.1.2.1.31.1.1.1.16.20|2|1 +1.3.6.1.2.1.31.1.1.1.16.22|2|2 +1.3.6.1.2.1.31.1.1.1.16.23|2|2 +1.3.6.1.2.1.31.1.1.1.16.25|2|2 +1.3.6.1.2.1.31.1.1.1.16.29|2|1 +1.3.6.1.2.1.31.1.1.1.16.30|2|2 +1.3.6.1.2.1.31.1.1.1.17.2|2|1 +1.3.6.1.2.1.31.1.1.1.17.13|2|1 +1.3.6.1.2.1.31.1.1.1.17.20|2|2 +1.3.6.1.2.1.31.1.1.1.17.22|2|2 +1.3.6.1.2.1.31.1.1.1.17.23|2|1 +1.3.6.1.2.1.31.1.1.1.17.25|2|2 +1.3.6.1.2.1.31.1.1.1.17.29|2|1 +1.3.6.1.2.1.31.1.1.1.17.30|2|1 +1.3.6.1.2.1.31.1.1.1.18.2|4| +1.3.6.1.2.1.31.1.1.1.18.13|4| +1.3.6.1.2.1.31.1.1.1.18.20|4| +1.3.6.1.2.1.31.1.1.1.18.22|4| +1.3.6.1.2.1.31.1.1.1.18.23|4| +1.3.6.1.2.1.31.1.1.1.18.25|4| +1.3.6.1.2.1.31.1.1.1.18.29|4| +1.3.6.1.2.1.31.1.1.1.18.30|4| +1.3.6.1.2.1.31.1.1.1.19.2|67|3348202847 +1.3.6.1.2.1.31.1.1.1.19.13|67|735588022 +1.3.6.1.2.1.31.1.1.1.19.20|67|3243024311 +1.3.6.1.2.1.31.1.1.1.19.22|67|3697070021 +1.3.6.1.2.1.31.1.1.1.19.23|67|3302138292 +1.3.6.1.2.1.31.1.1.1.19.25|67|3917221164 +1.3.6.1.2.1.31.1.1.1.19.29|67|2442724574 +1.3.6.1.2.1.31.1.1.1.19.30|67|3866962771 +1.3.6.1.2.1.31.1.2.1.1.4.6|2|4 +1.3.6.1.2.1.31.1.2.1.1.5.28|2|5 +1.3.6.1.2.1.31.1.2.1.1.12.14|2|12 +1.3.6.1.2.1.31.1.2.1.1.13.6|2|13 +1.3.6.1.2.1.31.1.2.1.1.14.16|2|14 +1.3.6.1.2.1.31.1.2.1.1.19.2|2|19 +1.3.6.1.2.1.31.1.2.1.1.21.31|2|21 +1.3.6.1.2.1.31.1.2.1.1.26.21|2|26 +1.3.6.1.2.1.31.1.2.1.1.27.5|2|27 +1.3.6.1.2.1.31.1.2.1.1.31.21|2|31 +1.3.6.1.2.1.31.1.2.1.2.4.6|2|6 +1.3.6.1.2.1.31.1.2.1.2.5.28|2|28 +1.3.6.1.2.1.31.1.2.1.2.12.14|2|14 +1.3.6.1.2.1.31.1.2.1.2.13.6|2|6 +1.3.6.1.2.1.31.1.2.1.2.14.16|2|16 +1.3.6.1.2.1.31.1.2.1.2.19.2|2|2 +1.3.6.1.2.1.31.1.2.1.2.21.31|2|31 +1.3.6.1.2.1.31.1.2.1.2.26.21|2|21 +1.3.6.1.2.1.31.1.2.1.2.27.5|2|5 +1.3.6.1.2.1.31.1.2.1.2.31.21|2|21 +1.3.6.1.2.1.31.1.2.1.3.4.6|2|6 +1.3.6.1.2.1.31.1.2.1.3.5.28|2|6 +1.3.6.1.2.1.31.1.2.1.3.12.14|2|3 +1.3.6.1.2.1.31.1.2.1.3.13.6|2|2 +1.3.6.1.2.1.31.1.2.1.3.14.16|2|0 +1.3.6.1.2.1.31.1.2.1.3.19.2|2|4 +1.3.6.1.2.1.31.1.2.1.3.21.31|2|4 +1.3.6.1.2.1.31.1.2.1.3.26.21|2|6 +1.3.6.1.2.1.31.1.2.1.3.27.5|2|0 +1.3.6.1.2.1.31.1.2.1.3.31.21|2|6 +1.3.6.1.2.1.31.1.3.1.1.3|2|19 +1.3.6.1.2.1.31.1.3.1.1.9|2|21 +1.3.6.1.2.1.31.1.3.1.1.15|2|30 +1.3.6.1.2.1.31.1.3.1.1.16|2|18 +1.3.6.1.2.1.31.1.3.1.1.17|2|11 +1.3.6.1.2.1.31.1.3.1.1.18|2|8 +1.3.6.1.2.1.31.1.3.1.1.20|2|7 +1.3.6.1.2.1.31.1.3.1.1.24|2|10 +1.3.6.1.2.1.31.1.3.1.1.27|2|9 +1.3.6.1.2.1.31.1.3.1.1.31|2|2 +1.3.6.1.2.1.31.1.3.1.2.3|2|1 +1.3.6.1.2.1.31.1.3.1.2.9|2|1 +1.3.6.1.2.1.31.1.3.1.2.15|2|2 +1.3.6.1.2.1.31.1.3.1.2.16|2|1 +1.3.6.1.2.1.31.1.3.1.2.17|2|1 +1.3.6.1.2.1.31.1.3.1.2.18|2|2 +1.3.6.1.2.1.31.1.3.1.2.20|2|2 +1.3.6.1.2.1.31.1.3.1.2.24|2|2 +1.3.6.1.2.1.31.1.3.1.2.27|2|2 +1.3.6.1.2.1.31.1.3.1.2.31|2|2 +1.3.6.1.2.1.31.1.3.1.3.3|6|1.3.6.1.3.109 +1.3.6.1.2.1.31.1.3.1.3.9|6|1.3.6.1.3.165.239.212.146.132 +1.3.6.1.2.1.31.1.3.1.3.15|6|1.3.6.1.3.26.60 +1.3.6.1.2.1.31.1.3.1.3.16|6|1.3.6.1.3.49.134.239.38 +1.3.6.1.2.1.31.1.3.1.3.17|6|1.3.6.1.3.42.80.246.41.97.208.178 +1.3.6.1.2.1.31.1.3.1.3.18|6|1.3.6.1.3 +1.3.6.1.2.1.31.1.3.1.3.20|6|1.3.6.1.3.217.68.166.138.250.141 +1.3.6.1.2.1.31.1.3.1.3.24|6|1.3.6.1.3.15.5.120.167 +1.3.6.1.2.1.31.1.3.1.3.27|6|1.3.6.1.3.82.210.10.160.216.59 +1.3.6.1.2.1.31.1.3.1.3.31|6|1.3.6.1.3.97.128.195 +1.3.6.1.2.1.31.1.3.1.4.3|2|2 +1.3.6.1.2.1.31.1.3.1.4.9|2|5 +1.3.6.1.2.1.31.1.3.1.4.15|2|6 +1.3.6.1.2.1.31.1.3.1.4.16|2|3 +1.3.6.1.2.1.31.1.3.1.4.17|2|7 +1.3.6.1.2.1.31.1.3.1.4.18|2|7 +1.3.6.1.2.1.31.1.3.1.4.20|2|7 +1.3.6.1.2.1.31.1.3.1.4.24|2|6 +1.3.6.1.2.1.31.1.3.1.4.27|2|6 +1.3.6.1.2.1.31.1.3.1.4.31|2|3 +1.3.6.1.2.1.31.1.3.1.5.3|6|1.3.6.1.3.41.63.85.46.30 +1.3.6.1.2.1.31.1.3.1.5.9|6|1.3.6.1.3.240.1.39.78.90.70 +1.3.6.1.2.1.31.1.3.1.5.15|6|1.3.6.1.3.194.105 +1.3.6.1.2.1.31.1.3.1.5.16|6|1.3.6.1.3.223.205.243.27.145.236.111.164 +1.3.6.1.2.1.31.1.3.1.5.17|6|1.3.6.1.3.199.37.240.94.50.52.90 +1.3.6.1.2.1.31.1.3.1.5.18|6|1.3.6.1.3.102.51.116.18.224.148.90.3.51 +1.3.6.1.2.1.31.1.3.1.5.20|6|1.3.6.1.3.245.162.128.232.129.33.38 +1.3.6.1.2.1.31.1.3.1.5.24|6|1.3.6.1.3.154.74.95.29.176.206.122.130.33 +1.3.6.1.2.1.31.1.3.1.5.27|6|1.3.6.1.3.193.203.61.185.202.110 +1.3.6.1.2.1.31.1.3.1.5.31|6|1.3.6.1.3.113 +1.3.6.1.2.1.31.1.3.1.6.3|4|kept +1.3.6.1.2.1.31.1.3.1.6.9|4x|7a6f6d62696573204a61646564207468656972204a6164656420717561696e746c792064726976696e67206163746564 +1.3.6.1.2.1.31.1.3.1.6.15|4x|64726976696e6720666f72776172642064726976696e6720717561696e746c79 +1.3.6.1.2.1.31.1.3.1.6.16|4x|616374656420666f727761726420746865697220717561696e746c79206f78656e +1.3.6.1.2.1.31.1.3.1.6.17|4|quaintly +1.3.6.1.2.1.31.1.3.1.6.18|4x|62757420627574204a61646564206b657074 +1.3.6.1.2.1.31.1.3.1.6.20|4x|64726976696e672064726976696e67207468656972206b657074207a6f6d62696573207468656972206f78656e206b657074204a61646564 +1.3.6.1.2.1.31.1.3.1.6.24|4x|717561696e746c79207a6f6d6269657320746865697220746865697220746865697220627574 +1.3.6.1.2.1.31.1.3.1.6.27|4x|7a6f6d62696573206f78656e2064726976696e6720717561696e746c79206b6570742064726976696e67206f78656e206163746564 +1.3.6.1.2.1.31.1.3.1.6.31|4x|717561696e746c79207468656972206b65707420627574207468656972 +1.3.6.1.2.1.31.1.4.1.1.3.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.6.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.7.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.12.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.14.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.20.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.21.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.22.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.26.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.31.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.2.3.6.66.1.10.164.0.51|2|4 +1.3.6.1.2.1.31.1.4.1.2.6.6.66.1.10.164.0.51|2|5 +1.3.6.1.2.1.31.1.4.1.2.7.6.66.1.10.164.0.51|2|6 +1.3.6.1.2.1.31.1.4.1.2.12.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.2.14.6.66.1.10.164.0.51|2|6 +1.3.6.1.2.1.31.1.4.1.2.20.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.2.21.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.2.22.6.66.1.10.164.0.51|2|5 +1.3.6.1.2.1.31.1.4.1.2.26.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.2.31.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.3.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.6.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.7.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.12.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.14.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.20.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.3.21.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.3.22.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.3.26.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.3.31.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.5.0|67|769573055 +1.3.6.1.2.1.31.1.6.0|67|2568717285 +1.3.6.1.4.1.9.9.13.1.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.1.8|2|8 +1.3.6.1.4.1.9.9.13.1.3.1.1.11|2|11 +1.3.6.1.4.1.9.9.13.1.3.1.1.13|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.1.14|2|14 +1.3.6.1.4.1.9.9.13.1.3.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.3.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.3.1.2.3|4x|7468656972207a6f6d62696573207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.13.1.3.1.2.6|4x|64726976696e672064726976696e67206b657074206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.8|4x|7a6f6d626965732062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.11|4x|61637465642064726976696e67204a61646564206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.13|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.14|4|oxen +1.3.6.1.4.1.9.9.13.1.3.1.2.20|4x|6b657074206f78656e +1.3.6.1.4.1.9.9.13.1.3.1.2.21|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.13.1.3.1.2.31|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.3.3|66|3930379735 +1.3.6.1.4.1.9.9.13.1.3.1.3.6|66|2258658671 +1.3.6.1.4.1.9.9.13.1.3.1.3.8|66|3213289584 +1.3.6.1.4.1.9.9.13.1.3.1.3.11|66|978410705 +1.3.6.1.4.1.9.9.13.1.3.1.3.13|66|2328456073 +1.3.6.1.4.1.9.9.13.1.3.1.3.14|66|952183581 +1.3.6.1.4.1.9.9.13.1.3.1.3.20|66|2877883263 +1.3.6.1.4.1.9.9.13.1.3.1.3.21|66|3953080519 +1.3.6.1.4.1.9.9.13.1.3.1.3.31|66|414726588 +1.3.6.1.4.1.9.9.13.1.3.1.4.3|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.4.6|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.4.8|2|1 +1.3.6.1.4.1.9.9.13.1.3.1.4.11|2|29 +1.3.6.1.4.1.9.9.13.1.3.1.4.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.4.14|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.4.20|2|23 +1.3.6.1.4.1.9.9.13.1.3.1.4.21|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.4.31|2|5 +1.3.6.1.4.1.9.9.13.1.3.1.5.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.5.6|2|7 +1.3.6.1.4.1.9.9.13.1.3.1.5.8|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.5.11|2|26 +1.3.6.1.4.1.9.9.13.1.3.1.5.13|2|30 +1.3.6.1.4.1.9.9.13.1.3.1.5.14|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.5.20|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.5.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.5.31|2|28 +1.3.6.1.4.1.9.9.13.1.3.1.6.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.8|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.11|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.14|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.20|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.21|2|4 +1.3.6.1.4.1.9.9.13.1.3.1.6.31|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.1.4|2|4 +1.3.6.1.4.1.9.9.13.1.4.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.1.7|2|7 +1.3.6.1.4.1.9.9.13.1.4.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.4.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.4.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.4.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.4.1.1.27|2|27 +1.3.6.1.4.1.9.9.13.1.4.1.1.30|2|30 +1.3.6.1.4.1.9.9.13.1.4.1.2.4|4|fan_1 +1.3.6.1.4.1.9.9.13.1.4.1.2.6|4|fan_2 +1.3.6.1.4.1.9.9.13.1.4.1.2.7|4|fan_3 +1.3.6.1.4.1.9.9.13.1.4.1.2.16|4|fan_4 +1.3.6.1.4.1.9.9.13.1.4.1.2.22|4|fan_5 +1.3.6.1.4.1.9.9.13.1.4.1.2.25|4|fan_6 +1.3.6.1.4.1.9.9.13.1.4.1.2.27|4|fan_7 +1.3.6.1.4.1.9.9.13.1.4.1.2.30|4|fan_8 +1.3.6.1.4.1.9.9.13.1.4.1.3.4|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.7|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.16|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.21|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.22|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.27|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.30|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.1.0|2|0 +1.3.6.1.4.1.9.9.13.1.5.1.1.5|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.5.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.5.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.5.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.5.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.5.1.1.26|2|26 +1.3.6.1.4.1.9.9.13.1.5.1.1.29|2|29 +1.3.6.1.4.1.9.9.13.1.5.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.5.1.2.0|4x|666f7277617264206f78656e206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.5|4|Jaded +1.3.6.1.4.1.9.9.13.1.5.1.2.16|4x|62757420717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.5.1.2.20|4|quaintly +1.3.6.1.4.1.9.9.13.1.5.1.2.21|4x|64726976696e6720717561696e746c7920616374656420627574207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.2.22|4x|62757420627574 +1.3.6.1.4.1.9.9.13.1.5.1.2.25|4x|6163746564206b6570742064726976696e67206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.26|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.9.9.13.1.5.1.2.29|4x|746865697220746865697220616374656420666f7277617264 +1.3.6.1.4.1.9.9.13.1.5.1.2.31|4x|4a616465642064726976696e67207468656972207468656972207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.3.0|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.3.5|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.16|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.20|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.22|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.26|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.31|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.4.0|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.5|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.16|2|4 +1.3.6.1.4.1.9.9.13.1.5.1.4.20|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.22|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.25|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.26|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.4.31|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.1|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.9|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.11|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.12|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.13|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.14|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.17|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.26|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.29|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.31|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.1|2|6 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.9|2|15 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.11|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.12|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.13|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.14|2|6 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.17|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.26|2|15 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.29|2|4 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.31|2|6 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.1|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.9|2|5 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.11|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.12|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.13|2|4 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.14|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.17|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.26|2|7 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.29|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.31|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.1|2|24 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.9|2|10 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.11|2|7 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.12|2|27 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.13|2|23 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.14|2|7 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.17|2|27 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.26|2|0 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.29|2|17 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.31|2|0 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.1|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.9|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.11|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.12|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.13|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.14|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.17|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.26|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.29|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.31|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.1|67|1900813911 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.9|67|25123729 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.11|67|3628093885 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.12|67|3324089695 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.13|67|4269533055 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.14|67|660607648 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.17|67|1101047558 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.26|67|3983603615 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.29|67|1292535257 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.31|67|3650464662 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.1|2|27 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.9|2|14 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.11|2|9 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.12|2|12 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.13|2|18 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.14|2|11 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.17|2|0 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.26|2|26 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.29|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.31|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.1|2|7 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.9|2|27 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.11|2|0 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.12|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.13|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.14|2|22 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.17|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.26|2|29 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.29|2|25 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.31|2|29 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.2.26|2|26 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.2.31|2|31 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.4.2|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.7.14|2|14 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.12.16|2|16 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.14.23|2|23 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.18.3|2|3 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.23.5|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.26.25|2|25 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.31.18|2|18 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.2.26|2|30 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.2.31|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.4.2|2|20 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.7.14|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.12.16|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.14.23|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.18.3|2|20 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.23.5|2|30 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.26.25|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.31.18|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.2.26|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.2.31|2|4 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.4.2|2|3 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.7.14|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.12.16|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.14.23|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.18.3|2|6 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.23.5|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.26.25|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.31.18|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.2.26|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.2.31|2|12 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.4.2|2|24 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.7.14|2|8 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.12.16|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.14.23|2|28 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.18.3|2|17 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.23.5|2|9 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.26.25|2|8 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.31.18|2|8 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.2.26|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.2.31|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.4.2|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.7.14|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.12.16|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.14.23|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.18.3|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.23.5|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.26.25|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.31.18|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.2.26|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.2.31|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.4.2|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.7.14|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.12.16|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.14.23|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.18.3|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.23.5|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.26.25|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.31.18|2|2 +1.3.6.1.4.1.9.9.91.1.3.1.0|2|2 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.3173|66|3173 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.6692|66|6692 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.11571|66|11571 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.19529|66|19529 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.30674|66|30674 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.38253|66|38253 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.52063|66|52063 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.54474|66|54474 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.55946|66|55946 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.63960|66|63960 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.3173|2|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.6692|2|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.11571|2|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.19529|2|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.30674|2|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.38253|2|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.52063|2|7 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.54474|2|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.55946|2|27 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.63960|2|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.3173|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.6692|66|34 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.11571|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.19529|66|56 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.30674|66|35 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.38253|66|87 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.52063|66|16 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.54474|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.55946|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.63960|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.3173|66|53 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.6692|66|77 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.11571|66|85 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.19529|66|79 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.30674|66|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.38253|66|86 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.52063|66|1 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.54474|66|90 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.55946|66|72 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.63960|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.3173|66|72 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.6692|66|74 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.11571|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.19529|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.30674|66|80 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.38253|66|52 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.52063|66|66 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.54474|66|27 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.55946|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.63960|66|91 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.3173|66|96 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.6692|66|41 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.11571|66|78 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.19529|66|65 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.30674|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.38253|66|19 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.52063|66|41 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.54474|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.55946|66|32 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.63960|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.3173|66|52 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.6692|66|64 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.11571|66|46 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.19529|66|19 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.30674|66|27 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.38253|66|34 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.52063|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.54474|66|94 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.55946|66|1 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.63960|66|55 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.3173|66|29 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.6692|66|57 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.11571|66|7 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.19529|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.30674|66|1 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.38253|66|23 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.52063|66|96 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.54474|66|62 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.55946|66|23 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.63960|66|87 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.3173|66|3050 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.6692|66|41115 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.11571|66|902 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.19529|66|42132 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.30674|66|42302 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.38253|66|14144 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.52063|66|55063 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.54474|66|52054 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.55946|66|42044 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.63960|66|41009 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.3173|66|14 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.6692|66|4 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.11571|66|51 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.19529|66|97 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.30674|66|52 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.38253|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.52063|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.54474|66|9 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.55946|66|95 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.63960|66|59 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.3173|66|15 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.6692|66|45 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.11571|66|48 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.19529|66|67 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.30674|66|66 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.38253|66|34 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.52063|66|76 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.54474|66|50 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.55946|66|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.63960|66|74 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.3173|66|59 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.6692|66|59 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.11571|66|71 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.19529|66|46 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.30674|66|18 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.38253|66|95 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.52063|66|35 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.54474|66|96 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.55946|66|36 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.63960|66|44 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.3173|66|94 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.6692|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.11571|66|43 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.19529|66|27 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.30674|66|82 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.38253|66|1 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.52063|66|24 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.54474|66|44 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.55946|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.63960|66|43 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.3173|66|14 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.6692|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.11571|66|19 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.19529|66|4 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.30674|66|49 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.38253|66|87 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.52063|66|55 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.54474|66|75 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.55946|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.63960|66|61 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.3173|66|82 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.6692|66|33 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.11571|66|45 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.19529|66|54 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.30674|66|33 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.38253|66|10 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.52063|66|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.54474|66|35 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.55946|66|78 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.63960|66|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.3173|66|71 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.6692|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.11571|66|95 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.19529|66|28 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.30674|66|74 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.38253|66|59 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.52063|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.54474|66|36 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.55946|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.63960|66|79 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.3173|70|3290693061297386538 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.6692|70|7564509971850013770 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.11571|70|15654260797702288865 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.19529|70|13010811470010516479 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.30674|70|6793566916088852728 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.38253|70|5393542058728323197 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.52063|70|2268170237084751317 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.54474|70|3579988003556919076 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.55946|70|4093858454825039165 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.63960|70|2077285200507819328 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.3173|66|78 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.6692|66|82 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.11571|66|19 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.19529|66|41 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.30674|66|52 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.38253|66|87 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.52063|66|48 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.54474|66|75 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.55946|66|17 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.63960|66|58 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.3173|70|5822992624363405166 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.6692|70|13445277955552209028 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.11571|70|892841109358583387 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.19529|70|8797706252171050151 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.30674|70|13873733226744658372 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.38253|70|6444852483924982709 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.52063|70|7716954844901249882 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.54474|70|6036102741467749802 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.55946|70|9312669560315346235 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.63960|70|10838219291701191875 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.3173|66|35 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.6692|66|77 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.11571|66|82 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.19529|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.30674|66|61 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.38253|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.52063|66|58 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.54474|66|42 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.55946|66|0 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.63960|66|68 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.3173|70|16056868659973483516 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.6692|70|10017909177997976087 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.11571|70|2230842307636527027 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.19529|70|17668750968545471270 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.30674|70|12763088877257047417 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.38253|70|2636521422820186079 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.52063|70|12357278839854731282 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.54474|70|17340027277602899307 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.55946|70|5676502918525025098 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.63960|70|2764302225969834845 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.3173|66|38 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.6692|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.11571|66|54 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.19529|66|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.30674|66|74 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.38253|66|26 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.52063|66|73 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.54474|66|42 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.55946|66|32 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.63960|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.3173|70|7121308621459330441 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.6692|70|3922534602980269925 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.11571|70|5138610210651117747 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.19529|70|4224528508121142168 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.30674|70|11889431121186442907 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.38253|70|17918794903249540226 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.52063|70|5663281812824895846 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.54474|70|14961337836425660842 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.55946|70|4987695838892114677 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.63960|70|5599291427942308324 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.3173|66|31199 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.6692|66|26726 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.11571|66|28498 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.19529|66|9348 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.30674|66|3520 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.38253|66|8160 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.52063|66|34590 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.54474|66|4270 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.55946|66|1405 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.63960|66|4595 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.3173|66|14445 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.6692|66|59502 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.11571|66|39108 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.19529|66|64322 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.30674|66|13001 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.38253|66|54851 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.52063|66|64862 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.54474|66|28436 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.55946|66|16405 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.63960|66|49738 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.3173|66|41359 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.6692|66|54594 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.11571|66|24124 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.19529|66|13619 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.30674|66|52103 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.38253|66|26931 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.52063|66|53441 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.54474|66|3524 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.55946|66|24054 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.63960|66|22153 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.3173|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.6692|66|73 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.11571|66|33 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.19529|66|86 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.30674|66|99 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.38253|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.52063|66|75 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.54474|66|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.55946|66|47 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.63960|66|41 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.3173|66|94 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.6692|66|55 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.11571|66|58 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.19529|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.30674|66|71 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.38253|66|11 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.52063|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.54474|66|94 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.55946|66|98 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.63960|66|42 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.3173|70|11308386979488134514 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.6692|70|12867401079824171768 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.11571|70|7163940979205272132 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.19529|70|12755693763463931220 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.30674|70|2897889008176006026 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.38253|70|11248166661806159715 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.52063|70|9436792442958722426 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.54474|70|17287484452982049608 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.55946|70|710960261146813662 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.63960|70|7288576621002403883 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.1834.53089|66|53089 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.5375.52445|66|52445 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.9984.29744|66|29744 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.11013.18610|66|18610 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.12674.11973|66|11973 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.32048.11203|66|11203 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.32435.37015|66|37015 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.37693.9209|66|9209 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.57718.34885|66|34885 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.65273.50850|66|50850 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.1834.53089|2|9 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.5375.52445|2|0 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.9984.29744|2|27 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.11013.18610|2|24 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.12674.11973|2|31 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.32048.11203|2|16 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.32435.37015|2|2 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.37693.9209|2|23 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.57718.34885|2|29 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.65273.50850|2|31 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.1834.53089|66|40 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.5375.52445|66|40 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.9984.29744|66|62 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.11013.18610|66|71 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.12674.11973|66|25 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.32048.11203|66|41 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.32435.37015|66|57 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.37693.9209|66|29 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.57718.34885|66|61 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.65273.50850|66|77 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.1834.53089|66|64 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.5375.52445|66|52 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.9984.29744|66|68 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.11013.18610|66|73 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.12674.11973|66|74 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.32048.11203|66|55 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.32435.37015|66|9 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.37693.9209|66|23 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.57718.34885|66|61 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.65273.50850|66|74 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.1834.53089|66|24 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.5375.52445|66|14 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.9984.29744|66|68 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.11013.18610|66|26 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.12674.11973|66|40 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.32048.11203|66|4 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.32435.37015|66|41 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.37693.9209|66|66 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.57718.34885|66|75 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.65273.50850|66|68 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.1834.53089|66|50700 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.5375.52445|66|33201 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.9984.29744|66|50882 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.11013.18610|66|63295 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.12674.11973|66|7338 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.32048.11203|66|30398 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.32435.37015|66|30125 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.37693.9209|66|37494 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.57718.34885|66|65153 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.65273.50850|66|63643 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.1834.53089|66|7224 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.5375.52445|66|20812 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.9984.29744|66|52999 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.11013.18610|66|45011 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.12674.11973|66|19495 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.32048.11203|66|7057 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.32435.37015|66|13812 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.37693.9209|66|44860 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.57718.34885|66|53378 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.65273.50850|66|10616 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.1834.53089|66|63098 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.5375.52445|66|8783 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.9984.29744|66|33504 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.11013.18610|66|56445 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.12674.11973|66|46255 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.32048.11203|66|27163 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.32435.37015|66|5048 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.37693.9209|66|9031 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.57718.34885|66|18761 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.65273.50850|66|217 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.5050.63191|66|63191 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.7738.13226|66|13226 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.16585.17703|66|17703 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.18884.41283|66|41283 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.31680.31158|66|31158 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.36563.52821|66|52821 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.36784.59513|66|59513 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.37198.27632|66|27632 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.57206.10814|66|10814 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.62814.61830|66|61830 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.5050.63191|4x|717561696e746c79206f78656e +1.3.6.1.4.1.9.9.109.1.2.1.1.2.7738.13226|4x|64726976696e672064726976696e67207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.16585.17703|4|zombies +1.3.6.1.4.1.9.9.109.1.2.1.1.2.18884.41283|4|Jaded +1.3.6.1.4.1.9.9.109.1.2.1.1.2.31680.31158|4x|6f78656e20666f7277617264 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.36563.52821|4x|616374656420666f7277617264207468656972204a61646564206b657074 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.36784.59513|4|oxen +1.3.6.1.4.1.9.9.109.1.2.1.1.2.37198.27632|4x|7a6f6d62696573206f78656e206f78656e206b657074 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.57206.10814|4x|7a6f6d62696573206f78656e206f78656e207468656972204a61646564 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.62814.61830|4|forward +1.3.6.1.4.1.9.9.109.1.2.1.1.4.5050.63191|66|53017 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.7738.13226|66|47056 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.16585.17703|66|28361 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.18884.41283|66|63054 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.31680.31158|66|61067 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.36563.52821|66|30259 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.36784.59513|66|43768 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.37198.27632|66|61208 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.57206.10814|66|1009 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.62814.61830|66|33434 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.5050.63191|67|4102798138 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.7738.13226|67|783933618 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.16585.17703|67|2842563957 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.18884.41283|67|2858093979 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.31680.31158|67|2520052764 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.36563.52821|67|800983262 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.36784.59513|67|3329122975 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.37198.27632|67|1709081370 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.57206.10814|67|1281736894 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.62814.61830|67|1155750717 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.5050.63191|66|2783 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.7738.13226|66|52771 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.16585.17703|66|28528 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.18884.41283|66|3682 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.31680.31158|66|21256 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.36563.52821|66|26879 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.36784.59513|66|39330 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.37198.27632|66|43770 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.57206.10814|66|55316 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.62814.61830|66|35911 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.1866.44348|66|74 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.7109.50119|66|38 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.8148.23147|66|20 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.12213.58938|66|31 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.12594.44400|66|11 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.16216.28383|66|11 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.43925.62310|66|50 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.50020.18771|66|83 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.51224.10286|66|59 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.62244.14693|66|33 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.1866.44348|66|8 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.7109.50119|66|80 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.8148.23147|66|43 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.12213.58938|66|7 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.12594.44400|66|4 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.16216.28383|66|29 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.43925.62310|66|41 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.50020.18771|66|81 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.51224.10286|66|44 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.62244.14693|66|84 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.1866.44348|65|3073572808 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.7109.50119|65|2372764780 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.8148.23147|65|425569613 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.12213.58938|65|429486184 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.12594.44400|65|2416997065 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.16216.28383|65|1656249 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.43925.62310|65|1384080842 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.50020.18771|65|3116372117 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.51224.10286|65|2059867987 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.62244.14693|65|2793792536 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.1866.44348|65|3132349595 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.7109.50119|65|3564734600 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.8148.23147|65|2053910930 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.12213.58938|65|2047793300 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.12594.44400|65|3730704944 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.16216.28383|65|1931040855 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.43925.62310|65|3915271815 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.50020.18771|65|318837471 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.51224.10286|65|3115812269 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.62244.14693|65|2024261 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.1866.44348|66|36 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.7109.50119|66|55 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.8148.23147|66|62 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.12213.58938|66|87 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.12594.44400|66|90 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.16216.28383|66|7 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.43925.62310|66|86 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.50020.18771|66|97 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.51224.10286|66|72 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.62244.14693|66|60 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.1866.44348|66|65 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.7109.50119|66|97 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.8148.23147|66|98 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.12213.58938|66|43 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.12594.44400|66|11 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.16216.28383|66|98 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.43925.62310|66|74 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.50020.18771|66|49 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.51224.10286|66|58 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.62244.14693|66|77 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.1866.44348|66|32 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.7109.50119|66|89 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.8148.23147|66|51 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.12213.58938|66|5 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.12594.44400|66|41 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.16216.28383|66|10 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.43925.62310|66|59 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.50020.18771|66|90 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.51224.10286|66|84 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.62244.14693|66|46 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.1866.44348|2|1 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.7109.50119|2|5 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.8148.23147|2|4 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.12213.58938|2|4 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.12594.44400|2|1 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.16216.28383|2|4 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.43925.62310|2|5 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.50020.18771|2|5 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.51224.10286|2|2 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.62244.14693|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.521.56978|66|70 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.9186.213|66|61 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.16268.20475|66|73 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.17759.61739|66|45 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.23689.18870|66|99 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.31815.54480|66|91 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.33103.50821|66|63 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.33432.18914|66|85 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.40030.24893|66|20 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.53251.36558|66|9 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.521.56978|66|37 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.9186.213|66|60 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.16268.20475|66|85 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.17759.61739|66|18 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.23689.18870|66|90 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.31815.54480|66|43 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.33103.50821|66|92 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.33432.18914|66|11 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.40030.24893|66|52 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.53251.36558|66|57 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.521.56978|65|3985134255 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.9186.213|65|3772121799 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.16268.20475|65|1070607610 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.17759.61739|65|219330067 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.23689.18870|65|3338621279 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.31815.54480|65|3899074880 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.33103.50821|65|237491262 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.33432.18914|65|2853860449 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.40030.24893|65|4002243710 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.53251.36558|65|349822375 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.521.56978|65|3005306269 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.9186.213|65|1559726237 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.16268.20475|65|2836214003 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.17759.61739|65|2502423132 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.23689.18870|65|2415987835 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.31815.54480|65|2980836764 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.33103.50821|65|2706830688 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.33432.18914|65|3252058731 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.40030.24893|65|722867811 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.53251.36558|65|2751229876 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.521.56978|66|43 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.9186.213|66|39 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.16268.20475|66|78 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.17759.61739|66|76 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.23689.18870|66|30 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.31815.54480|66|92 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.33103.50821|66|82 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.33432.18914|66|8 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.40030.24893|66|69 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.53251.36558|66|23 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.521.56978|66|51 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.9186.213|66|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.16268.20475|66|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.17759.61739|66|47 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.23689.18870|66|66 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.31815.54480|66|49 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.33103.50821|66|75 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.33432.18914|66|85 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.40030.24893|66|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.53251.36558|66|67 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.521.56978|66|24 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.9186.213|66|23 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.16268.20475|66|95 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.17759.61739|66|32 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.23689.18870|66|67 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.31815.54480|66|61 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.33103.50821|66|90 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.33432.18914|66|86 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.40030.24893|66|38 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.53251.36558|66|20 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.521.56978|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.9186.213|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.16268.20475|2|4 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.17759.61739|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.23689.18870|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.31815.54480|2|4 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.33103.50821|2|4 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.33432.18914|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.40030.24893|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.53251.36558|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.521.56978|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.9186.213|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.16268.20475|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.17759.61739|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.23689.18870|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.31815.54480|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.33103.50821|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.33432.18914|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.40030.24893|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.53251.36558|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.521.56978|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.9186.213|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.16268.20475|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.17759.61739|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.23689.18870|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.31815.54480|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.33103.50821|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.33432.18914|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.40030.24893|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.53251.36558|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.521.56978|65|1404850526 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.9186.213|65|2569030043 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.16268.20475|65|2615755782 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.17759.61739|65|4114438398 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.23689.18870|65|402464564 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.31815.54480|65|1935027795 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.33103.50821|65|1149247672 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.33432.18914|65|2004830638 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.40030.24893|65|3873710144 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.53251.36558|65|3018383535 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.521.56978|65|3859893368 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.9186.213|65|1072275487 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.16268.20475|65|3562728775 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.17759.61739|65|1677368507 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.23689.18870|65|233736144 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.31815.54480|65|1094635678 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.33103.50821|65|1396030876 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.33432.18914|65|3225776463 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.40030.24893|65|3757864776 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.53251.36558|65|2918462442 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.521.56978|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.9186.213|2|8 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.16268.20475|2|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.17759.61739|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.23689.18870|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.31815.54480|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.33103.50821|2|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.33432.18914|2|8 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.40030.24893|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.53251.36558|2|6 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.521.56978|4x|6163746564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.9186.213|4x|4a61646564204a6164656420616374656420666f727761726420627574 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.16268.20475|4x|6275742064726976696e67204a61646564 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.17759.61739|4x|717561696e746c7920627574 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.23689.18870|4x|7a6f6d62696573207468656972 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.31815.54480|4x|7468656972206f78656e20627574 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.33103.50821|4x|717561696e746c79206f78656e2061637465642064726976696e67207468656972207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.33432.18914|4x|64726976696e67207a6f6d6269657320717561696e746c79204a61646564207a6f6d62696573206f78656e207468656972206b657074207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.40030.24893|4x|6b657074204a6164656420666f72776172642064726976696e67206b657074204a6164656420717561696e746c7920666f72776172642064726976696e67 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.53251.36558|4x|4a616465642064726976696e67206f78656e206f78656e +1.3.6.1.4.1.9.9.109.1.2.3.1.15.521.56978|66|17420 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.9186.213|66|6080 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.16268.20475|66|48019 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.17759.61739|66|11499 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.23689.18870|66|6646 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.31815.54480|66|23119 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.33103.50821|66|38203 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.33432.18914|66|18223 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.40030.24893|66|13394 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.53251.36558|66|13721 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.521.56978|66|60 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.9186.213|66|45 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.16268.20475|66|23 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.17759.61739|66|67 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.23689.18870|66|55 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.31815.54480|66|37 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.33103.50821|66|65 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.33432.18914|66|32 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.40030.24893|66|89 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.53251.36558|66|18 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.521.56978|66|0 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.9186.213|66|0 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.16268.20475|66|30 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.17759.61739|66|24 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.23689.18870|66|16 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.31815.54480|66|45 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.33103.50821|66|64 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.33432.18914|66|65 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.40030.24893|66|51 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.53251.36558|66|14 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.521.56978|66|88 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.9186.213|66|31 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.16268.20475|66|14 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.17759.61739|66|57 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.23689.18870|66|15 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.31815.54480|66|19 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.33103.50821|66|59 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.33432.18914|66|51 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.40030.24893|66|77 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.53251.36558|66|26 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.521.56978|66|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.9186.213|66|72 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.16268.20475|66|41 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.17759.61739|66|29 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.23689.18870|66|46 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.31815.54480|66|79 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.33103.50821|66|37 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.33432.18914|66|89 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.40030.24893|66|83 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.53251.36558|66|76 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.521.56978|70|15369492500408286360 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.9186.213|70|12330355343026713797 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.16268.20475|70|17437390839202513998 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.17759.61739|70|9811260540752629666 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.23689.18870|70|13072214610462469522 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.31815.54480|70|1423405882536019946 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.33103.50821|70|15400502503770756719 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.33432.18914|70|7304503024638386968 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.40030.24893|70|11355283423476280692 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.53251.36558|70|11837713933155375260 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.521.56978|66|35 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.9186.213|66|22 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.16268.20475|66|56 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.17759.61739|66|21 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.23689.18870|66|20 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.31815.54480|66|40 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.33103.50821|66|53 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.33432.18914|66|72 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.40030.24893|66|56 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.53251.36558|66|84 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.521.56978|70|1683904979685991049 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.9186.213|70|4543762234773299100 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.16268.20475|70|3924239032867687955 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.17759.61739|70|1073280279628186147 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.23689.18870|70|14916624358112448342 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.31815.54480|70|6715466263362714741 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.33103.50821|70|9408298646379651638 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.33432.18914|70|17162364556639216384 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.40030.24893|70|5738469502311508448 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.53251.36558|70|1545963014044291141 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.521.56978|66|11931 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.9186.213|66|11912 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.16268.20475|66|3761 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.17759.61739|66|35961 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.23689.18870|66|31845 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.31815.54480|66|24022 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.33103.50821|66|36358 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.33432.18914|66|31994 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.40030.24893|66|51068 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.53251.36558|66|63318 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.521.56978|70|15106092275461330334 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.9186.213|70|9324617721311197732 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.16268.20475|70|14862389194142061143 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.17759.61739|70|18407004200157355835 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.23689.18870|70|6271100479507239456 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.31815.54480|70|9839873037955051683 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.33103.50821|70|4028288617253475855 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.33432.18914|70|6242349747842387500 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.40030.24893|70|5755084948408634474 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.53251.36558|70|9935343495073257974 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.521.56978|66|74 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.9186.213|66|73 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.16268.20475|66|54 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.17759.61739|66|93 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.23689.18870|66|81 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.31815.54480|66|98 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.33103.50821|66|14 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.33432.18914|66|36 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.40030.24893|66|66 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.53251.36558|66|56 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.521.56978|70|9896650306660630803 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.9186.213|70|12209985520629545135 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.16268.20475|70|11813056167543624066 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.17759.61739|70|16053000599576554597 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.23689.18870|70|18358834980803529052 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.31815.54480|70|16544096150339367917 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.33103.50821|70|538800042495191723 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.33432.18914|70|11857589791529122871 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.40030.24893|70|3461284989967045243 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.53251.36558|70|11968143525062600714 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.521.56978|66|20 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.9186.213|66|47 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.16268.20475|66|61 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.17759.61739|66|65 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.23689.18870|66|14 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.31815.54480|66|85 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.33103.50821|66|72 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.33432.18914|66|98 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.40030.24893|66|53 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.53251.36558|66|10 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.521.56978|70|12103757085096184490 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.9186.213|70|5843830361500064657 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.16268.20475|70|4835774082804735247 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.17759.61739|70|5816035763173934275 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.23689.18870|70|1164307549666630523 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.31815.54480|70|10990798822073582251 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.33103.50821|70|6299245436047061138 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.33432.18914|70|5381347318027744817 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.40030.24893|70|15746196839872846105 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.53251.36558|70|161883527798085410 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.521.56978|66|10 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.9186.213|66|68 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.16268.20475|66|23 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.17759.61739|66|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.23689.18870|66|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.31815.54480|66|6 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.33103.50821|66|98 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.33432.18914|66|82 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.40030.24893|66|16 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.53251.36558|66|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.521.56978|70|13400642414041499439 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.9186.213|70|11304661000508108741 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.16268.20475|70|4516390742446116438 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.17759.61739|70|712473139123490782 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.23689.18870|70|10451729541519214955 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.31815.54480|70|5875934278731916632 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.33103.50821|70|11851468923929155496 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.33432.18914|70|9706081057617541131 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.40030.24893|70|17274595320087563389 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.53251.36558|70|192402271146810407 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.4251.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.7251.3|2|3 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.13397.1|2|1 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.17564.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.23630.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.38929.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.47166.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.51708.1|2|1 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.57222.1|2|1 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.58800.3|2|3 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.4251.2|66|76 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.7251.3|66|86 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.13397.1|66|32 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.17564.2|66|24 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.23630.2|66|90 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.38929.2|66|78 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.47166.2|66|68 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.51708.1|66|72 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.57222.1|66|7 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.58800.3|66|63 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.4251.2|66|63285 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.7251.3|66|53546 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.13397.1|66|48639 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.17564.2|66|25925 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.23630.2|66|10236 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.38929.2|66|22952 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.47166.2|66|36386 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.51708.1|66|59094 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.57222.1|66|51439 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.58800.3|66|16098 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.4251.2|66|9 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.7251.3|66|33 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.13397.1|66|11 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.17564.2|66|13 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.23630.2|66|9 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.38929.2|66|73 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.47166.2|66|4 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.51708.1|66|39 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.57222.1|66|57 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.58800.3|66|51 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.4251.2|66|23417 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.7251.3|66|31195 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.13397.1|66|6720 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.17564.2|66|61155 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.23630.2|66|55792 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.38929.2|66|46253 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.47166.2|66|14058 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.51708.1|66|30560 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.57222.1|66|5784 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.58800.3|66|58585 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.4251.2|2|1 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.7251.3|2|4 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.13397.1|2|0 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.17564.2|2|6 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.23630.2|2|0 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.38929.2|2|6 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.47166.2|2|5 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.51708.1|2|0 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.57222.1|2|3 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.58800.3|2|2 +1.3.6.1.4.1.9.9.109.1.2.5.1.0|66|11 +1.3.6.1.4.1.9.9.109.1.2.5.2.0|66|33939 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.8025.50660|66|50660 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.11061.1486|66|1486 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.11069.43977|66|43977 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.28265.23860|66|23860 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.35051.14303|66|14303 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.36283.2959|66|2959 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.42204.45256|66|45256 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.42802.44838|66|44838 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.61447.37638|66|37638 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.64661.47730|66|47730 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.8025.50660|66|36170 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.11061.1486|66|42207 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.11069.43977|66|45614 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.28265.23860|66|22125 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.35051.14303|66|50421 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.36283.2959|66|27040 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.42204.45256|66|33126 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.42802.44838|66|8231 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.61447.37638|66|50415 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.64661.47730|66|46063 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.8025.50660|66|6 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.11061.1486|66|29 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.11069.43977|66|97 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.28265.23860|66|55 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.35051.14303|66|16 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.36283.2959|66|61 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.42204.45256|66|9 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.42802.44838|66|28 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.61447.37638|66|51 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.64661.47730|66|29 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.8025.50660|66|20 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.11061.1486|66|71 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.11069.43977|66|15 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.28265.23860|66|84 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.35051.14303|66|34 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.36283.2959|66|4 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.42204.45256|66|80 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.42802.44838|66|60 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.61447.37638|66|87 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.64661.47730|66|19 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.8025.50660|67|3675170886 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.11061.1486|67|4064616831 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.11069.43977|67|2380327368 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.28265.23860|67|1848980811 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.35051.14303|67|4065104924 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.36283.2959|67|3071143191 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.42204.45256|67|444804599 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.42802.44838|67|1792535979 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.61447.37638|67|3109485668 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.64661.47730|67|1798876415 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.16683.48895.35002|66|35002 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.18720.61718.52124|66|52124 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.28936.23834.14668|66|14668 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.32346.30789.55465|66|55465 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.34089.11388.40727|66|40727 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.42715.33675.61887|66|61887 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.47371.19788.37363|66|37363 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.52454.22896.12510|66|12510 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.59802.25402.15265|66|15265 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.60431.32033.63487|66|63487 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.16683.48895.35002|66|35138 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.18720.61718.52124|66|42332 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.28936.23834.14668|66|8205 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.32346.30789.55465|66|35610 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.34089.11388.40727|66|18655 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.42715.33675.61887|66|8792 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.47371.19788.37363|66|36603 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.52454.22896.12510|66|2686 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.59802.25402.15265|66|45827 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.60431.32033.63487|66|14166 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.16683.48895.35002|4x|717561696e746c79206b657074206f78656e206275742062757420616374656420627574207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.18720.61718.52124|4x|7a6f6d62696573206b65707420666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.28936.23834.14668|4x|666f727761726420666f727761726420666f7277617264207a6f6d6269657320627574206f78656e +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.32346.30789.55465|4x|64726976696e67204a616465642064726976696e67206f78656e204a6164656420666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.34089.11388.40727|4x|6b65707420717561696e746c79206163746564206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.42715.33675.61887|4x|7a6f6d6269657320666f7277617264206f78656e206f78656e206f78656e2064726976696e67206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.47371.19788.37363|4x|6f78656e206b657074 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.52454.22896.12510|4x|4a61646564204a61646564204a616465642064726976696e67 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.59802.25402.15265|4|their +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.60431.32033.63487|4x|7a6f6d6269657320666f7277617264206f78656e20627574204a61646564206b657074206163746564204a6164656420627574 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.16683.48895.35002|67|2637003504 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.18720.61718.52124|67|1150051589 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.28936.23834.14668|67|1466560506 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.32346.30789.55465|67|3939095306 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.34089.11388.40727|67|845719368 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.42715.33675.61887|67|3896297407 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.47371.19788.37363|67|4222885604 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.52454.22896.12510|67|2519548440 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.59802.25402.15265|67|1179433578 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.60431.32033.63487|67|496965377 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.16683.48895.35002|66|44 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.18720.61718.52124|66|97 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.28936.23834.14668|66|97 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.32346.30789.55465|66|43 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.34089.11388.40727|66|34 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.42715.33675.61887|66|19 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.47371.19788.37363|66|67 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.52454.22896.12510|66|77 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.59802.25402.15265|66|55 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.60431.32033.63487|66|24 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.7952.54529.32151|66|32151 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.14170.35158.34064|66|34064 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.14353.1576.21498|66|21498 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.17391.9714.37697|66|37697 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.24300.49333.30531|66|30531 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.30111.4885.10757|66|10757 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.42279.44258.13673|66|13673 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.52782.7129.14290|66|14290 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.60066.45127.57709|66|57709 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.63585.42438.34574|66|34574 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.7952.54529.32151|4x|666f727761726420666f727761726420627574 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.14170.35158.34064|4x|64726976696e67207468656972 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.14353.1576.21498|4x|627574206163746564206163746564206f78656e206b657074206b657074 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.17391.9714.37697|4x|6b657074207468656972 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.24300.49333.30531|4x|64726976696e67206b657074 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.30111.4885.10757|4x|64726976696e6720746865697220627574204a61646564 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.42279.44258.13673|4x|6f78656e206b65707420666f7277617264206275742064726976696e67206b657074207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.52782.7129.14290|4x|6f78656e20717561696e746c79206b657074207468656972207a6f6d626965732074686569722062757420616374656420627574 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.60066.45127.57709|4x|717561696e746c79207a6f6d626965732061637465642064726976696e672064726976696e6720627574206b657074 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.63585.42438.34574|4|their +1.3.6.1.4.1.9.9.109.1.3.1.1.3.7952.54529.32151|66|31 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.14170.35158.34064|66|29 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.14353.1576.21498|66|23 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.17391.9714.37697|66|30 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.24300.49333.30531|66|0 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.30111.4885.10757|66|54 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.42279.44258.13673|66|51 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.52782.7129.14290|66|14 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.60066.45127.57709|66|59 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.63585.42438.34574|66|9 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.7952.54529.32151|2|17 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.14170.35158.34064|2|7 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.14353.1576.21498|2|7 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.17391.9714.37697|2|15 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.24300.49333.30531|2|9 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.30111.4885.10757|2|10 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.42279.44258.13673|2|8 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.52782.7129.14290|2|17 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.60066.45127.57709|2|16 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.63585.42438.34574|2|18 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.7952.54529.32151|6|1.3.6.1.3.3.168.226.157 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.14170.35158.34064|6|1.3.6.1.3.65.140.53.104.230.203 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.14353.1576.21498|6|1.3.6.1.3.88.83.240.128.167.91.123.99 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.17391.9714.37697|6|1.3.6.1.3.0 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.24300.49333.30531|6|1.3.6.1.3.78.9.202.14.13 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.30111.4885.10757|6|1.3.6.1.3.46.176.44.241 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.42279.44258.13673|6|1.3.6.1.3.204.130 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.52782.7129.14290|6|1.3.6.1.3.22.221.139.57.151.64.50.110.142 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.60066.45127.57709|6|1.3.6.1.3.216 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.63585.42438.34574|6|1.3.6.1.3.74 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.7952.54529.32151|66|45 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.14170.35158.34064|66|97 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.14353.1576.21498|66|34 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.17391.9714.37697|66|31 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.24300.49333.30531|66|6 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.30111.4885.10757|66|99 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.42279.44258.13673|66|43 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.52782.7129.14290|66|51 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.60066.45127.57709|66|69 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.63585.42438.34574|66|57 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.7952.54529.32151|66|31 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.14170.35158.34064|66|22 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.14353.1576.21498|66|40 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.17391.9714.37697|66|84 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.24300.49333.30531|66|28 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.30111.4885.10757|66|76 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.42279.44258.13673|66|70 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.52782.7129.14290|66|5 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.60066.45127.57709|66|82 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.63585.42438.34574|66|56 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.7952.54529.32151|66|72 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.14170.35158.34064|66|58 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.14353.1576.21498|66|94 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.17391.9714.37697|66|7 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.24300.49333.30531|66|14 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.30111.4885.10757|66|73 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.42279.44258.13673|66|22 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.52782.7129.14290|66|12 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.60066.45127.57709|66|45 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.63585.42438.34574|66|67 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.7952.54529.32151|70|12536855801311930303 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.14170.35158.34064|70|4572697853400027178 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.14353.1576.21498|70|6017610781913198128 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.17391.9714.37697|70|15327844184217226801 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.24300.49333.30531|70|6077808775831175044 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.30111.4885.10757|70|3569781898646775353 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.42279.44258.13673|70|13572180478614053874 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.52782.7129.14290|70|10311194709848961588 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.60066.45127.57709|70|15552960930157986525 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.63585.42438.34574|70|11961455335232963984 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.4213.48030.43695|66|43695 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.6649.54424.42686|66|42686 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.31268.54020.15551|66|15551 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.36202.12464.13656|66|13656 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.41829.3820.41289|66|41289 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.42482.53385.10498|66|10498 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.47976.31857.32544|66|32544 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.53156.45280.48785|66|48785 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.61984.49990.63540|66|63540 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.64988.4765.48638|66|48638 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.4213.48030.43695|4|quaintly +1.3.6.1.4.1.9.9.109.1.4.1.1.2.6649.54424.42686|4x|616374656420717561696e746c79204a6164656420627574 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.31268.54020.15551|4x|7a6f6d6269657320746865697220627574206163746564 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.36202.12464.13656|4x|4a61646564206f78656e206f78656e +1.3.6.1.4.1.9.9.109.1.4.1.1.2.41829.3820.41289|4|quaintly +1.3.6.1.4.1.9.9.109.1.4.1.1.2.42482.53385.10498|4x|62757420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.47976.31857.32544|4x|666f7277617264206b657074204a61646564 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.53156.45280.48785|4x|6163746564204a61646564 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.61984.49990.63540|4x|4a6164656420627574206f78656e +1.3.6.1.4.1.9.9.109.1.4.1.1.2.64988.4765.48638|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.4213.48030.43695|66|5 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.6649.54424.42686|66|1 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.31268.54020.15551|66|87 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.36202.12464.13656|66|6 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.41829.3820.41289|66|85 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.42482.53385.10498|66|67 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.47976.31857.32544|66|56 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.53156.45280.48785|66|25 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.61984.49990.63540|66|93 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.64988.4765.48638|66|94 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.4213.48030.43695|66|20 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.6649.54424.42686|66|19 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.31268.54020.15551|66|40 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.36202.12464.13656|66|18 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.41829.3820.41289|66|16 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.42482.53385.10498|66|12 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.47976.31857.32544|66|31 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.53156.45280.48785|66|30 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.61984.49990.63540|66|65 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.64988.4765.48638|66|78 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.4213.48030.43695|66|54 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.6649.54424.42686|66|69 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.31268.54020.15551|66|68 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.36202.12464.13656|66|88 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.41829.3820.41289|66|83 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.42482.53385.10498|66|19 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.47976.31857.32544|66|59 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.53156.45280.48785|66|90 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.61984.49990.63540|66|94 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.64988.4765.48638|66|29 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.4213.48030.43695|66|91 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.6649.54424.42686|66|71 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.31268.54020.15551|66|38 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.36202.12464.13656|66|70 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.41829.3820.41289|66|36 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.42482.53385.10498|66|34 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.47976.31857.32544|66|65 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.53156.45280.48785|66|48 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.61984.49990.63540|66|86 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.64988.4765.48638|66|75 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.4213.48030.43695|66|31 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.6649.54424.42686|66|71 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.31268.54020.15551|66|59 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.36202.12464.13656|66|18 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.41829.3820.41289|66|16 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.42482.53385.10498|66|28 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.47976.31857.32544|66|60 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.53156.45280.48785|66|54 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.61984.49990.63540|66|77 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.64988.4765.48638|66|66 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.4213.48030.43695|65|2319398173 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.6649.54424.42686|65|3249403752 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.31268.54020.15551|65|2155949024 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.36202.12464.13656|65|2160808000 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.41829.3820.41289|65|1376302709 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.42482.53385.10498|65|3349394117 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.47976.31857.32544|65|3008149292 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.53156.45280.48785|65|4092415521 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.61984.49990.63540|65|3409411081 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.64988.4765.48638|65|3245997006 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.4213.48030.43695|65|3454673130 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.6649.54424.42686|65|793272003 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.31268.54020.15551|65|3654728742 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.36202.12464.13656|65|3957871964 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.41829.3820.41289|65|2134320096 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.42482.53385.10498|65|4144251809 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.47976.31857.32544|65|2191076942 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.53156.45280.48785|65|2196810675 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.61984.49990.63540|65|3650134545 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.64988.4765.48638|65|2391168365 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.4213.48030.43695|66|98 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.6649.54424.42686|66|88 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.31268.54020.15551|66|17 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.36202.12464.13656|66|24 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.41829.3820.41289|66|75 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.42482.53385.10498|66|45 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.47976.31857.32544|66|34 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.53156.45280.48785|66|85 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.61984.49990.63540|66|90 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.64988.4765.48638|66|13 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.4213.48030.43695|70|10771359123386452260 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.6649.54424.42686|70|6626829195585800715 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.31268.54020.15551|70|15590584626572032421 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.36202.12464.13656|70|3608045537640384570 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.41829.3820.41289|70|13156002808859145705 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.42482.53385.10498|70|9749715017365667806 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.47976.31857.32544|70|10496628384563594658 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.53156.45280.48785|70|10871113670784198631 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.61984.49990.63540|70|364988844010773600 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.64988.4765.48638|70|14872310483613750125 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.4213.48030.43695|66|31 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.6649.54424.42686|66|95 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.31268.54020.15551|66|73 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.36202.12464.13656|66|36 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.41829.3820.41289|66|52 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.42482.53385.10498|66|52 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.47976.31857.32544|66|15 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.53156.45280.48785|66|43 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.61984.49990.63540|66|27 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.64988.4765.48638|66|65 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.4213.48030.43695|70|17775814700657783740 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.6649.54424.42686|70|14498879412306746375 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.31268.54020.15551|70|17550750001047018929 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.36202.12464.13656|70|13563588664594938177 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.41829.3820.41289|70|13864198119835081503 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.42482.53385.10498|70|1629421407624276278 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.47976.31857.32544|70|17360179421514529509 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.53156.45280.48785|70|16167447620657197327 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.61984.49990.63540|70|4801744969275681230 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.64988.4765.48638|70|2906757100866319957 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.1|2|5 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.4|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.5|2|7 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.16|2|5 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.18|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.19|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.24|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.27|2|7 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.1|4|zombies +1.3.6.1.4.1.9.9.117.1.1.1.1.2.4|4x|666f72776172642062757420627574 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.5|4x|6b657074204a616465642064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.16|4x|4a6164656420666f727761726420627574204a61646564204a616465642062757420717561696e746c79206f78656e20666f7277617264 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.18|4|forward +1.3.6.1.4.1.9.9.117.1.1.1.1.2.19|4x|6f78656e20666f727761726420666f727761726420666f727761726420627574206f78656e20717561696e746c792062757420627574 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.24|4x|666f7277617264206275742064726976696e67206f78656e +1.3.6.1.4.1.9.9.117.1.1.1.1.2.27|4|quaintly +1.3.6.1.4.1.9.9.117.1.1.1.1.3.1|2|13 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.4|2|31 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.5|2|6 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.16|2|16 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.18|2|31 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.19|2|26 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.24|2|12 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.27|2|14 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.1|2|6 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.4|2|13 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.5|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.16|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.18|2|11 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.19|2|13 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.24|2|29 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.27|2|13 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.1|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.4|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.5|2|7 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.16|2|4 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.18|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.19|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.24|2|4 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.27|2|6 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.1|2|4 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.4|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.5|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.16|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.18|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.19|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.24|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.27|2|5 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.1|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.4|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.5|2|4 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.16|2|11 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.18|2|23 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.19|2|8 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.24|2|12 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.27|2|23 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.6|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.7|2|4 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.15|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.16|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.19|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.27|2|4 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.30|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.31|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.6|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.7|2|4 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.15|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.16|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.19|2|7 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.27|2|8 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.30|2|7 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.31|2|4 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.6|2|24 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.7|2|6 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.15|2|7 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.16|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.19|2|20 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.27|2|13 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.30|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.31|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.6|4x|6b6570742061637465642062757420627574206f78656e20627574 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.7|4x|7a6f6d62696573206b65707420616374656420717561696e746c79204a61646564206f78656e206b657074206f78656e +1.3.6.1.4.1.9.9.117.1.1.2.1.4.15|4x|627574207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.16|4x|4a6164656420666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.19|4x|6163746564207a6f6d62696573206b65707420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.27|4x|6b65707420717561696e746c792064726976696e672074686569722062757420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.30|4x|717561696e746c79206163746564206f78656e207468656972204a616465642074686569722064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.31|4x|7468656972207468656972 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.6|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.7|2|25 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.15|2|6 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.16|2|25 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.19|2|17 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.27|2|19 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.30|2|25 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.31|2|2 +1.3.6.1.4.1.9.9.117.1.1.3.0|2|9 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.11|2|7 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.12|2|18 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.15|2|14 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.18|2|13 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.19|2|28 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.20|2|16 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.27|2|2 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.29|2|2 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.30|2|27 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.31|2|27 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.11|2|28 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.12|2|2 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.15|2|31 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.18|2|28 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.19|2|5 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.20|2|13 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.27|2|16 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.29|2|4 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.30|2|11 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.31|2|25 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.11|2|14 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.12|2|16 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.15|2|24 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.18|2|23 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.19|2|16 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.20|2|22 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.27|2|11 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.29|2|14 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.30|2|14 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.31|2|19 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.11|2|20 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.12|2|10 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.15|2|6 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.18|2|9 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.19|2|21 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.20|2|28 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.27|2|18 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.29|2|9 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.30|2|22 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.31|2|12 +1.3.6.1.4.1.9.9.117.1.1.5.0|66|61033 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.5|2|1 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.12|2|4 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.14|2|2 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.15|2|1 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.20|2|2 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.23|2|4 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.29|2|4 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.31|2|4 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.5|2|25 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.12|2|11 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.14|2|14 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.15|2|17 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.20|2|8 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.23|2|20 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.29|2|8 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.31|2|1 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.5|2|12 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.12|2|7 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.14|2|16 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.15|2|20 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.20|2|19 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.23|2|22 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.29|2|7 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.31|2|16 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.5|67|2650613581 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.12|67|3336923482 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.14|67|1586519763 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.15|67|843521143 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.20|67|1728591606 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.23|67|3380847573 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.29|67|2507423664 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.31|67|927620814 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.5|67|1761743004 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.12|67|3248124270 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.14|67|1130741044 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.15|67|3891424805 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.20|67|1899751227 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.23|67|1918671328 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.29|67|4268202887 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.31|67|3625784997 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.5|4x|666f72776172642064726976696e672064726976696e6720666f7277617264206b657074206275742064726976696e67 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.12|4x|717561696e746c7920717561696e746c7920627574207a6f6d62696573206f78656e204a61646564206163746564 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.14|4x|7468656972207a6f6d62696573206f78656e2064726976696e67204a61646564206163746564206b657074204a61646564204a61646564 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.15|4|Jaded +1.3.6.1.4.1.9.9.117.1.2.1.1.6.20|4x|6b657074207a6f6d6269657320666f7277617264207468656972 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.23|4x|627574206b657074204a61646564204a61646564204a616465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.29|4x|6f78656e206f78656e206163746564204a61646564 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.31|4|oxen +1.3.6.1.4.1.9.9.117.1.2.1.1.7.5|4x|62757420627574206b657074204a61646564 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.12|4x|6f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.9.9.117.1.2.1.1.7.14|4x|666f7277617264207a6f6d6269657320746865697220717561696e746c79 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.15|4x|746865697220627574206f78656e207468656972 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.20|4x|746865697220717561696e746c79 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.23|4|driving +1.3.6.1.4.1.9.9.117.1.2.1.1.7.29|4x|666f7277617264206b6570742064726976696e6720666f72776172642064726976696e67 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.31|4x|4a61646564206f78656e206f78656e2064726976696e6720627574 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.5|66|13876 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.12|66|39581 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.14|66|57038 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.15|66|57543 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.20|66|13652 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.23|66|19160 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.29|66|63177 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.31|66|24546 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.7|2|3 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.11|2|1 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.12|2|0 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.13|2|2 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.23|2|16 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.27|2|1 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.30|2|1 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.7|4x|7a6f6d6269657320746865697220627574207a6f6d62696573207a6f6d62696573206163746564206b657074206b65707420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.11|4|Jaded +1.3.6.1.4.1.9.9.117.1.2.2.1.2.12|4x|627574204a6164656420616374656420666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.13|4x|7a6f6d62696573206b65707420666f7277617264206f78656e20717561696e746c79206f78656e204a6164656420627574 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.23|4x|7468656972206f78656e20717561696e746c792062757420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.27|4x|627574207468656972207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.30|4x|627574206f78656e +1.3.6.1.4.1.9.9.117.1.2.3.1.1.8|2|2 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.10|2|1 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.13|2|1 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.14|2|2 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.20|2|2 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.22|2|2 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.23|2|1 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.29|2|2 +1.3.6.1.4.1.9.9.117.1.3.1.0|2|2 +1.3.6.1.4.1.9.9.117.1.3.2.0|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.1|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.2|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.4|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.5|2|2 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.6|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.7|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.8|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.9|2|2 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.14|2|2 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.18|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.19|2|2 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.21|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.25|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.26|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.26|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.27|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.30|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.31|2|1 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.3|2|4 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.13|2|1 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.17|2|1 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.18|2|4 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.22|2|1 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.24|2|2 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.26|2|2 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.31|2|1 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.1.20536|66|20536 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.1.24360|66|24360 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.2.60246|66|60246 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.8.21110|66|21110 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.10.18774|66|18774 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.18.34118|66|34118 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.20.24263|66|24263 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.21.5548|66|5548 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.25.27317|66|27317 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.30.41629|66|41629 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.1.20536|2|2 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.1.24360|2|4 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.2.60246|2|3 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.8.21110|2|3 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.10.18774|2|1 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.18.34118|2|4 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.20.24263|2|3 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.21.5548|2|2 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.25.27317|2|3 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.30.41629|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.2.53113|66|53113 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.10.13370|66|13370 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.10.58710|66|58710 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.12.1018|66|1018 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.15.21396|66|21396 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.21.21751|66|21751 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.24.63359|66|63359 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.25.65482|66|65482 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.27.18113|66|18113 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.27.48504|66|48504 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.2.53113|2|9 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.10.13370|2|5 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.10.58710|2|10 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.12.1018|2|23 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.15.21396|2|21 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.21.21751|2|22 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.24.63359|2|20 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.25.65482|2|19 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.27.18113|2|31 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.27.48504|2|19 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.2.53113|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.10.13370|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.10.58710|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.12.1018|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.15.21396|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.21.21751|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.24.63359|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.25.65482|2|2 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.27.18113|2|2 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.27.48504|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.1|66|25441 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.4|66|6818 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.5|66|44851 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.9|66|33852 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.12|66|35360 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.15|66|17917 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.20|66|55389 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.23|66|48174 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.30|66|30688 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.1|2|2 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.4|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.5|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.9|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.12|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.15|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.20|2|2 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.23|2|2 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.30|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.9|66|41370 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.14|66|52003 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.16|66|46889 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.18|66|11590 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.19|66|46437 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.22|66|63065 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.23|66|48410 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.24|66|53620 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.26|66|11023 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.29|66|10318 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.9|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.14|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.16|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.18|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.19|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.22|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.23|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.24|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.26|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.29|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.2|66|51721 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.3|66|17281 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.4|66|43398 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.8|66|29967 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.9|66|51797 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.15|66|54490 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.16|66|42031 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.23|66|39972 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.2|2|2 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.3|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.4|2|2 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.8|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.9|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.15|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.16|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.23|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.1.1267|66|1267 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.3.629|66|629 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.3.1733|66|1733 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.7.3612|66|3612 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.17.3132|66|3132 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.18.4038|66|4038 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.19.2397|66|2397 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.21.1323|66|1323 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.29.894|66|894 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.29.3094|66|3094 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.1.1267|4x|7a6f6d626965732064726976696e67206b657074 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.3.629|4x|7a6f6d62696573206163746564206163746564204a61646564 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.3.1733|4x|7a6f6d62696573206163746564206f78656e2064726976696e67 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.7.3612|4x|62757420627574206f78656e207a6f6d62696573206f78656e20717561696e746c792064726976696e672062757420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.17.3132|4x|6b657074204a616465642074686569722064726976696e67 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.18.4038|4x|4a6164656420746865697220666f7277617264207468656972204a61646564 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.19.2397|4x|627574204a6164656420746865697220666f7277617264206b657074 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.21.1323|4x|717561696e746c7920717561696e746c79207468656972204a61646564204a61646564206f78656e2064726976696e67 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.29.894|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.29.3094|4x|6b657074204a61646564207a6f6d62696573206f78656e206f78656e207468656972 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.1.1267|66|27855 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.3.629|66|39251 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.3.1733|66|40348 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.7.3612|66|5443 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.17.3132|66|54303 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.18.4038|66|25212 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.19.2397|66|39539 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.21.1323|66|20445 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.29.894|66|23276 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.29.3094|66|2788 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.1.1267|2|3 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.3.629|2|15 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.3.1733|2|15 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.7.3612|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.17.3132|2|22 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.18.4038|2|10 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.19.2397|2|18 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.21.1323|2|9 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.29.894|2|26 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.29.3094|2|25 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.1.1267|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.3.629|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.3.1733|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.7.3612|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.17.3132|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.18.4038|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.19.2397|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.21.1323|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.29.894|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.29.3094|2|2 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.2|2|29 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.8|2|12 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.10|2|20 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.17|2|12 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.19|2|19 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.21|2|14 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.24|2|24 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.30|2|24 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.31|2|19 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.1|2|6 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.4|2|28 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.9|2|1 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.10|2|20 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.11|2|24 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.13|2|9 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.16|2|20 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.19|2|16 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.31|2|30 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.5|66|9 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.11|66|79 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.12|66|89 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.14|66|34 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.15|66|74 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.23|66|24 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.25|66|88 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.29|66|35 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.5|66|12 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.11|66|5 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.12|66|1 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.14|66|44 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.15|66|0 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.23|66|90 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.25|66|34 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.29|66|82 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.5|66|32 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.11|66|26 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.12|66|32 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.14|66|9 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.15|66|66 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.23|66|14 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.25|66|47 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.29|66|41 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.5|65|4052283384 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.11|65|480980367 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.12|65|3508786834 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.14|65|2019443519 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.15|65|1342830392 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.23|65|1001601252 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.25|65|4065517905 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.29|65|2444516430 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.5|65|2440735346 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.11|65|3835354025 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.12|65|942612100 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.14|65|82195730 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.15|65|2249357700 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.23|65|3542170101 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.25|65|4072544026 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.29|65|2640427379 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.5|65|3650575792 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.11|65|235730517 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.12|65|3647367127 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.14|65|216797306 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.15|65|2972949031 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.23|65|2018345924 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.25|65|3912317367 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.29|65|791649334 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.5|65|4007008744 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.11|65|267618974 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.12|65|802656157 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.14|65|3644678682 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.15|65|3081748391 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.23|65|4173505379 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.25|65|2349555014 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.29|65|1369139610 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.5|65|1848680438 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.11|65|1790263457 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.12|65|4286087546 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.14|65|3666898480 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.15|65|164051556 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.23|65|135332959 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.25|65|1559022063 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.29|65|1334628187 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.5|65|150802315 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.11|65|4007752308 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.12|65|2608136927 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.14|65|1609551714 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.15|65|19654709 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.23|65|2364930933 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.25|65|2131515074 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.29|65|1624161988 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.5|65|628727095 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.11|65|3009408111 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.12|65|84186513 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.14|65|4119672180 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.15|65|3992483911 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.23|65|4099430526 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.25|65|731955654 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.29|65|1803277624 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.5|65|3859014027 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.11|65|308797052 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.12|65|3277252804 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.14|65|45074466 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.15|65|449876318 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.23|65|1461377563 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.25|65|2869435659 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.29|65|972661753 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.5|67|978493077 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.11|67|308489210 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.12|67|330041448 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.14|67|2865645358 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.15|67|2556292449 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.23|67|2168609144 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.25|67|63056245 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.29|67|2745518699 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.2|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.13|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.20|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.22|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.23|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.25|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.29|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.30|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.12|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.17|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.22|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.23|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.25|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.5|4|acted +1.3.6.1.4.1.9.9.276.1.1.2.1.3.6|4x|7468656972206f78656e20666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.12|4x|616374656420666f727761726420627574206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.17|4x|4a61646564207a6f6d626965732064726976696e67207a6f6d626965732064726976696e6720746865697220666f727761726420627574207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.21|4x|6f78656e2061637465642074686569722064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.22|4x|6f78656e20666f7277617264206b657074206163746564 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.23|4x|6163746564206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.25|4x|746865697220666f7277617264206b657074207a6f6d62696573207468656972206b65707420717561696e746c79206f78656e204a61646564 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.30|4x|4a61646564206f78656e204a61646564206f78656e206b657074204a6164656420666f7277617264207468656972204a61646564 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.5|65|1387081831 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.6|65|2496136103 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.12|65|3136594009 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.17|65|2162916259 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.21|65|4292195881 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.22|65|128378014 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.23|65|1214810007 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.25|65|2878318125 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.30|65|139833157 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.5|67|3626823156 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.6|67|3287886572 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.12|67|2628828927 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.17|67|1930554714 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.21|67|177625006 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.22|67|2500042606 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.23|67|917039755 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.25|67|2469951495 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.30|67|652857983 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.12|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.17|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.22|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.23|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.25|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.5|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.6|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.12|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.17|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.21|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.22|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.23|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.25|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.30|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.5|4x|7468656972207468656972207a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.6|4|zombies +1.3.6.1.4.1.9.9.276.1.1.2.1.8.12|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.2.1.8.17|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.21|4x|64726976696e67206b6570742064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.22|4x|666f727761726420717561696e746c79206b6570742064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.23|4x|616374656420666f7277617264204a61646564 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.25|4|oxen +1.3.6.1.4.1.9.9.276.1.1.2.1.8.30|4x|6f78656e2064726976696e67206b657074206163746564206163746564 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.5|2|10 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.6|2|15 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.12|2|16 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.17|2|28 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.21|2|14 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.22|2|27 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.23|2|11 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.25|2|18 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.30|2|29 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.5|4x|6b657074206163746564204a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.276.1.1.2.1.10.6|4x|4a61646564206163746564206b6570742064726976696e672062757420627574206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.12|4x|6f78656e204a616465642064726976696e67207a6f6d62696573206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.17|4x|61637465642064726976696e6720666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.21|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.2.1.10.22|4x|6b657074204a61646564206f78656e206f78656e20616374656420666f7277617264207a6f6d62696573207a6f6d62696573206f78656e +1.3.6.1.4.1.9.9.276.1.1.2.1.10.23|4x|64726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.25|4x|64726976696e67207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.30|4x|7a6f6d62696573206b65707420717561696e746c7920627574206163746564 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.5|66|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.6|66|20 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.12|66|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.17|66|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.21|66|72 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.22|66|87 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.23|66|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.25|66|95 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.30|66|96 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.5|66|97 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.6|66|50 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.12|66|59 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.17|66|76 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.21|66|51 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.22|66|48 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.23|66|86 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.25|66|60 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.30|66|13 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.5|4x|627574207a6f6d62696573204a6164656420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.6|4x|6f78656e206f78656e204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.12|4x|7a6f6d6269657320717561696e746c792064726976696e67207468656972204a6164656420717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.17|4x|627574204a61646564204a61646564206b657074204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.21|4x|6f78656e206f78656e207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.22|4x|7a6f6d62696573206b65707420666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.23|4x|6b65707420666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.25|4x|627574206f78656e206163746564206b6570742064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.30|4x|666f727761726420746865697220627574206f78656e20666f727761726420666f7277617264206b65707420746865697220717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.5|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.12|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.17|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.21|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.22|2|4 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.23|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.25|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.12|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.17|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.21|2|4 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.22|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.23|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.25|2|4 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.5|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.6|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.12|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.17|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.21|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.22|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.23|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.25|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.12|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.17|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.22|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.23|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.25|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.30|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.6|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.12|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.17|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.22|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.23|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.25|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.12|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.17|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.22|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.23|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.25|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.1.16719|66|16719 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.1.39424|66|39424 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.4.45280|66|45280 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.7.95|66|95 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.10.52561|66|52561 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.12.14466|66|14466 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.13.56581|66|56581 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.17.63266|66|63266 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.18.7326|66|7326 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.20.26270|66|26270 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.1.16719|4x|4a61646564206b65707420616374656420717561696e746c792064726976696e672064726976696e67207468656972206163746564206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.1.39424|4x|6163746564206b657074204a61646564206163746564204a61646564204a6164656420616374656420717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.4.45280|4x|64726976696e6720666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.7.95|4x|6b657074207468656972206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.10.52561|4x|62757420666f7277617264206b6570742064726976696e6720717561696e746c79206b657074207468656972206b657074204a61646564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.12.14466|4x|627574206f78656e206f78656e204a616465642064726976696e67206b65707420666f727761726420717561696e746c79204a61646564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.13.56581|4x|7a6f6d62696573206f78656e +1.3.6.1.4.1.9.9.276.1.1.3.1.2.17.63266|4x|74686569722064726976696e6720666f7277617264207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.18.7326|4x|7a6f6d62696573206f78656e206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.20.26270|4|kept +1.3.6.1.4.1.9.9.276.1.1.3.1.3.1.16719|4x|7468656972206163746564206f78656e2064726976696e67207468656972 +1.3.6.1.4.1.9.9.276.1.1.3.1.3.1.39424|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.3.1.3.4.45280|4|acted +1.3.6.1.4.1.9.9.276.1.1.3.1.3.7.95|4x|64726976696e67206163746564206b6570742074686569722064726976696e67206f78656e +1.3.6.1.4.1.9.9.276.1.1.3.1.3.10.52561|4|forward +1.3.6.1.4.1.9.9.276.1.1.3.1.3.12.14466|4x|6b657074207a6f6d6269657320627574 +1.3.6.1.4.1.9.9.276.1.1.3.1.3.13.56581|4x|4a61646564206f78656e206163746564206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.3.17.63266|4x|6b657074206f78656e206b6570742064726976696e6720666f7277617264206b657074 +1.3.6.1.4.1.9.9.276.1.1.3.1.3.18.7326|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.3.1.3.20.26270|4x|666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.1.16719|4x|666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.1.39424|4x|7a6f6d62696573204a6164656420666f72776172642064726976696e67207468656972206f78656e20666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.4.45280|4x|717561696e746c79204a61646564204a61646564206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.7.95|4x|717561696e746c7920627574206f78656e204a61646564206f78656e20746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.10.52561|4x|6f78656e2061637465642064726976696e67206b657074206b657074206b6570742061637465642064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.12.14466|4x|64726976696e67206f78656e206f78656e207a6f6d62696573204a6164656420717561696e746c79206b657074207468656972 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.13.56581|4x|7a6f6d6269657320666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.17.63266|4x|666f72776172642064726976696e672062757420666f7277617264207468656972204a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.18.7326|4x|627574207a6f6d626965732064726976696e67207468656972206b6570742064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.20.26270|4x|746865697220627574 +1.3.6.1.4.1.9.9.276.1.1.3.1.5.1.16719|4|acted +1.3.6.1.4.1.9.9.276.1.1.3.1.5.1.39424|4|zombies +1.3.6.1.4.1.9.9.276.1.1.3.1.5.4.45280|4|kept +1.3.6.1.4.1.9.9.276.1.1.3.1.5.7.95|4|kept +1.3.6.1.4.1.9.9.276.1.1.3.1.5.10.52561|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.3.1.5.12.14466|4|zombies +1.3.6.1.4.1.9.9.276.1.1.3.1.5.13.56581|4|acted +1.3.6.1.4.1.9.9.276.1.1.3.1.5.17.63266|4|acted +1.3.6.1.4.1.9.9.276.1.1.3.1.5.18.7326|4|quaintly +1.3.6.1.4.1.9.9.276.1.1.3.1.5.20.26270|4|quaintly +1.3.6.1.4.1.9.9.276.1.1.4.1.1.15|70|6515459484201652903 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.20|70|6525228104465243106 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.21|70|8074084556062809507 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.22|70|3879828243818155564 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.24|70|8254895130039056501 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.26|70|12603496095441413057 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.30|70|10909634483436674430 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.15|70|17560370720518583073 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.20|70|14771198156831440445 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.21|70|4516615649348040507 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.22|70|5398256853253084550 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.24|70|12234278304657512290 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.26|70|5542681715530028671 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.30|70|7628466436218350687 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.15|70|8177103286894496983 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.20|70|12130035877430502410 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.21|70|11868242152478329003 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.22|70|17611012933324514101 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.24|70|14387955517091274482 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.26|70|12736718849002214539 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.30|70|11254183245162288544 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.15|70|13985360553412293610 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.20|70|3367143004283872827 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.21|70|12488196907822745031 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.22|70|8001376348978922169 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.24|70|18394891919657574353 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.26|70|46777343186426235 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.30|70|12772949408748318645 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.15|70|15911958525521007897 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.20|70|4658975256539769435 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.21|70|16870543779188523898 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.22|70|2933302758620621634 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.24|70|10920144256388106712 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.26|70|4188203579231500517 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.30|70|5630120856472611172 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.15|70|726189341999283452 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.20|70|14885206523225807307 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.21|70|17183558753808646342 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.22|70|13449113140515066127 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.24|70|11727141470103305940 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.26|70|6877703282565992678 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.30|70|3715117028720478102 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.15|70|16539956966645395556 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.20|70|6753588002541984324 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.21|70|1921495791084456864 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.22|70|216319505008223941 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.24|70|14594123502315176499 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.26|70|4597017118903375793 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.30|70|18185946407597153850 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.15|70|3135026258998182869 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.20|70|6488324158989841839 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.21|70|11605005648862390544 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.22|70|8767339550959985057 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.24|70|14965930179802757449 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.26|70|17432541913022086602 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.30|70|12385348985836041022 +1.3.6.1.4.1.9.9.276.1.2.1.0|2|4 +1.3.6.1.4.1.9.9.276.1.2.2.0|4x|6275742064726976696e6720666f7277617264204a6164656420666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.276.1.2.3.0|2|2 +1.3.6.1.4.1.9.9.276.1.2.4.0|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.2|2|2 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.5|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.6|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.14|2|2 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.18|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.22|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.23|2|2 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.27|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.29|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.31|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.2|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.5|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.6|2|3 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.14|2|3 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.18|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.22|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.23|2|3 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.27|2|3 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.29|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.31|2|2 +1.3.6.1.4.1.9.9.276.1.2.6.0|2|1 +1.3.6.1.4.1.9.9.276.1.2.7.0|66|43 +1.3.6.1.4.1.9.9.276.1.2.8.0|2|2 +1.3.6.1.4.1.9.9.276.1.2.9.0|4x|4a61646564204a61646564 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.1|2|1 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.6|2|13 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.9|2|29 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.11|2|23 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.12|2|31 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.14|2|19 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.18|2|31 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.29|2|19 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.31|2|2 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.1|2|23 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.6|2|2 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.9|2|3 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.11|2|5 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.12|2|10 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.14|2|18 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.18|2|13 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.29|2|29 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.31|2|18 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.3|70|14350934316156695507 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.4|70|2899666167006496292 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.7|70|16520444618565274613 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.12|70|2503702512586709136 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.18|70|999601313714508681 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.19|70|325588263630070068 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.21|70|15658081660018889484 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.22|70|11313059572521385948 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.25|70|721808147740263798 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.29|70|13072506015753748026 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.3|70|1866100775927682747 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.4|70|11376707929224250202 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.7|70|1825740447988070510 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.12|70|16138138532883603793 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.18|70|5408896337953193119 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.19|70|8765660358579533533 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.21|70|5522890384384570706 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.22|70|13168151856250529687 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.25|70|5558637931265655328 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.29|70|1752008300868790087 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.3|70|451276363799057835 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.4|70|15367612972855483638 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.7|70|10866699429225037486 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.12|70|15853691834443554039 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.18|70|13279325565138533181 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.19|70|13883603126490830873 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.21|70|5638722143760747417 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.22|70|8135053447474485528 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.25|70|340101174908480024 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.29|70|17802470503176288153 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.3|70|7701097226247683469 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.4|70|1499530274839182910 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.7|70|2346263121132498383 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.12|70|8760181703613327264 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.18|70|12686097106151010628 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.19|70|1275600082320266218 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.21|70|1028341336639671774 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.22|70|120349320811901336 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.25|70|9750928792210739924 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.29|70|7865402135610317416 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.3|66|27705 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.4|66|48090 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.7|66|15587 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.12|66|9082 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.18|66|13183 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.19|66|55318 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.21|66|36553 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.22|66|24631 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.25|66|30253 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.29|66|4976 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.1|2|25 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.5|2|25 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.9|2|26 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.12|2|14 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.13|2|17 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.17|2|21 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.26|2|1 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.28|2|29 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.29|2|30 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.30|2|18 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.7.100.114.105.118.105.110.103|4|driving +1.3.6.1.4.1.9.9.276.1.6.1.1.1.7.102.111.114.119.97.114.100|4|forward +1.3.6.1.4.1.9.9.276.1.6.1.1.1.21.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110|4x|7468656972206163746564206f78656e206f78656e +1.3.6.1.4.1.9.9.276.1.6.1.1.1.23.102.111.114.119.97.114.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103|4x|666f727761726420627574206275742064726976696e67 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.26.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|746865697220717561696e746c79207468656972207468656972 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.33.100.114.105.118.105.110.103.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116|4x|64726976696e6720627574206163746564206163746564204a6164656420627574 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.39.111.120.101.110.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.116.104.101.105.114|4x|6f78656e204a6164656420717561696e746c7920666f7277617264204a61646564207468656972 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.41.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110|4x|64726976696e6720717561696e746c79206163746564204a616465642064726976696e67206f78656e +1.3.6.1.4.1.9.9.276.1.6.1.1.1.51.102.111.114.119.97.114.100.32.107.101.112.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.97.99.116.101.100|4x|666f7277617264206b657074206f78656e207a6f6d62696573207468656972207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.54.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|4x|717561696e746c79206f78656e20746865697220666f7277617264206f78656e20616374656420666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.7.100.114.105.118.105.110.103|2|28 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.7.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.21.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110|2|16 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.23.102.111.114.119.97.114.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103|2|13 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.26.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|12 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.33.100.114.105.118.105.110.103.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116|2|3 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.39.111.120.101.110.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.116.104.101.105.114|2|26 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.41.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110|2|30 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.51.102.111.114.119.97.114.100.32.107.101.112.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.97.99.116.101.100|2|17 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.54.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|2|9 +1.3.6.1.4.1.9.9.500.1.2.1.1.1.21|66|23989 +1.3.6.1.4.1.9.9.500.1.2.1.1.2.21|66|64612 +1.3.6.1.4.1.9.9.500.1.2.1.1.3.21|2|4 +1.3.6.1.4.1.9.9.500.1.2.1.1.4.21|66|33053 +1.3.6.1.4.1.9.9.500.1.2.1.1.5.21|66|55695 +1.3.6.1.4.1.9.9.500.1.2.1.1.6.21|2|8 +1.3.6.1.4.1.9.9.500.1.2.1.1.7.21|4x|ffffffffffff +1.3.6.1.4.1.9.9.500.1.2.2.1.1.2|2|3 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.47.19.214.176.95.83.210 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.98.57.138.20 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.217 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.9.140.70.113.243.98 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.27.35.213.125 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.69.182.170.137.149.52.235.31 +1.3.6.1.6.3.1.1.6.1.0|2|7 +1.3.6.1.6.3.1.1.6.1.0|2|18 +1.3.6.1.6.3.1.1.6.1.0|2|22 +1.3.6.1.6.3.10.2.1.1.0|4x|4a6164656420666f7277617264 +1.3.6.1.6.3.10.2.1.1.0|4x|6b657074206f78656e206f78656e20666f7277617264207a6f6d62696573 +1.3.6.1.6.3.10.2.1.1.0|4x|627574207a6f6d62696573206f78656e +1.3.6.1.6.3.10.2.1.1.0|4|driving +1.3.6.1.6.3.10.2.1.2.0|2|6 +1.3.6.1.6.3.10.2.1.2.0|2|9 +1.3.6.1.6.3.10.2.1.2.0|2|23 +1.3.6.1.6.3.10.2.1.2.0|2|27 +1.3.6.1.6.3.10.2.1.3.0|2|9 +1.3.6.1.6.3.10.2.1.3.0|2|13 +1.3.6.1.6.3.10.2.1.3.0|2|16 +1.3.6.1.6.3.10.2.1.3.0|2|29 +1.3.6.1.6.3.10.2.1.4.0|2|484 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco_icm.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco_icm.snmprec new file mode 100644 index 0000000000000..5c15e492e6870 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco_icm.snmprec @@ -0,0 +1,230 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.693 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.5.0|4|test +1.3.6.1.2.1.10.21.1.2.2.1.1.7.3|66|32218 +1.3.6.1.2.1.10.21.1.2.2.1.2.7.3|66|5771 +1.3.6.1.2.1.10.21.1.2.2.1.3.7.3|66|46229 +1.3.6.1.2.1.10.21.1.2.2.1.4.7.3|66|42716 +1.3.6.1.2.1.10.21.1.2.2.1.5.7.3|66|4034 +1.3.6.1.2.1.10.21.1.2.2.1.6.7.3|66|17225 +1.3.6.1.2.1.25.4.2.1.1.8|2|18 +1.3.6.1.2.1.25.4.2.1.1.11|2|30 +1.3.6.1.2.1.25.4.2.1.1.14|2|10 +1.3.6.1.2.1.25.4.2.1.1.16|2|24 +1.3.6.1.2.1.25.4.2.1.1.19|2|8 +1.3.6.1.2.1.25.4.2.1.1.20|2|29 +1.3.6.1.2.1.25.4.2.1.1.23|2|7 +1.3.6.1.2.1.25.4.2.1.1.24|2|9 +1.3.6.1.2.1.25.4.2.1.1.27|2|4 +1.3.6.1.2.1.25.4.2.1.2.8|4|test +1.3.6.1.2.1.25.4.2.1.2.11|4|test +1.3.6.1.2.1.25.4.2.1.2.14|4|test +1.3.6.1.2.1.25.4.2.1.2.16|4|test +1.3.6.1.2.1.25.4.2.1.2.19|4|test +1.3.6.1.2.1.25.4.2.1.2.20|4|test +1.3.6.1.2.1.25.4.2.1.2.23|4|test +1.3.6.1.2.1.25.4.2.1.2.24|4|test +1.3.6.1.2.1.25.4.2.1.2.27|4|test +1.3.6.1.2.1.25.4.2.1.3.8|6|1.3.6.1.3.241.163.109.38.226.117 +1.3.6.1.2.1.25.4.2.1.3.11|6|1.3.6.1.3 +1.3.6.1.2.1.25.4.2.1.3.14|6|1.3.6.1.3.178.68.218.160.30 +1.3.6.1.2.1.25.4.2.1.3.16|6|1.3.6.1.3.97.233.247.97.19 +1.3.6.1.2.1.25.4.2.1.3.19|6|1.3.6.1.3.1.246.15.177.61.207 +1.3.6.1.2.1.25.4.2.1.3.20|6|1.3.6.1.3.237.85.224.239.104.112.55.36 +1.3.6.1.2.1.25.4.2.1.3.23|6|1.3.6.1.3.148.213.221.68.159.92 +1.3.6.1.2.1.25.4.2.1.3.24|6|1.3.6.1.3.23.53.58.26 +1.3.6.1.2.1.25.4.2.1.3.27|6|1.3.6.1.3.20.217.100.30.122.3.26.13 +1.3.6.1.2.1.25.4.2.1.4.8|4x|717561696e746c7920717561696e746c79204a6164656420666f7277617264204a61646564206b657074206f78656e206f78656e +1.3.6.1.2.1.25.4.2.1.4.11|4x|6275742064726976696e67206b657074204a6164656420616374656420746865697220666f72776172642064726976696e67206f78656e +1.3.6.1.2.1.25.4.2.1.4.14|4x|616374656420717561696e746c79204a61646564204a61646564206f78656e204a6164656420746865697220746865697220666f7277617264 +1.3.6.1.2.1.25.4.2.1.4.16|4x|6b657074207468656972 +1.3.6.1.2.1.25.4.2.1.4.19|4x|7a6f6d62696573207468656972 +1.3.6.1.2.1.25.4.2.1.4.20|4x|666f7277617264206b65707420627574207468656972 +1.3.6.1.2.1.25.4.2.1.4.23|4x|64726976696e6720666f727761726420717561696e746c79206b65707420666f7277617264 +1.3.6.1.2.1.25.4.2.1.4.24|4x|6163746564207a6f6d626965732064726976696e67207a6f6d6269657320666f7277617264206b65707420666f727761726420717561696e746c7920627574 +1.3.6.1.2.1.25.4.2.1.4.27|4x|746865697220666f72776172642064726976696e672064726976696e67206275742064726976696e67206163746564206f78656e +1.3.6.1.2.1.25.4.2.1.5.8|4|zombies +1.3.6.1.2.1.25.4.2.1.5.11|4x|4a61646564206b65707420717561696e746c79 +1.3.6.1.2.1.25.4.2.1.5.14|4x|7468656972207468656972207468656972206f78656e206f78656e206163746564 +1.3.6.1.2.1.25.4.2.1.5.16|4x|6b65707420666f727761726420717561696e746c7920616374656420717561696e746c7920616374656420666f7277617264 +1.3.6.1.2.1.25.4.2.1.5.19|4|oxen +1.3.6.1.2.1.25.4.2.1.5.20|4x|7a6f6d6269657320666f7277617264 +1.3.6.1.2.1.25.4.2.1.5.23|4x|6275742061637465642074686569722064726976696e67207468656972 +1.3.6.1.2.1.25.4.2.1.5.24|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.25.4.2.1.5.27|4x|6163746564206f78656e206b6570742061637465642064726976696e67 +1.3.6.1.2.1.25.4.2.1.6.8|2|2 +1.3.6.1.2.1.25.4.2.1.6.11|2|3 +1.3.6.1.2.1.25.4.2.1.6.14|2|3 +1.3.6.1.2.1.25.4.2.1.6.16|2|3 +1.3.6.1.2.1.25.4.2.1.6.19|2|4 +1.3.6.1.2.1.25.4.2.1.6.20|2|2 +1.3.6.1.2.1.25.4.2.1.6.23|2|1 +1.3.6.1.2.1.25.4.2.1.6.24|2|3 +1.3.6.1.2.1.25.4.2.1.6.27|2|2 +1.3.6.1.2.1.25.4.2.1.7.8|2|3 +1.3.6.1.2.1.25.4.2.1.7.11|2|4 +1.3.6.1.2.1.25.4.2.1.7.14|2|4 +1.3.6.1.2.1.25.4.2.1.7.16|2|3 +1.3.6.1.2.1.25.4.2.1.7.19|2|1 +1.3.6.1.2.1.25.4.2.1.7.20|2|2 +1.3.6.1.2.1.25.4.2.1.7.23|2|4 +1.3.6.1.2.1.25.4.2.1.7.24|2|3 +1.3.6.1.2.1.25.4.2.1.7.27|2|1 +1.3.6.1.2.1.25.5.1.1.1.1|2|5 +1.3.6.1.2.1.25.5.1.1.1.5|2|0 +1.3.6.1.2.1.25.5.1.1.1.7|2|10 +1.3.6.1.2.1.25.5.1.1.1.8|2|23 +1.3.6.1.2.1.25.5.1.1.1.13|2|9 +1.3.6.1.2.1.25.5.1.1.1.15|2|20 +1.3.6.1.2.1.25.5.1.1.1.21|2|0 +1.3.6.1.2.1.25.5.1.1.1.23|2|0 +1.3.6.1.2.1.25.5.1.1.1.28|2|15 +1.3.6.1.2.1.25.5.1.1.2.1|2|2 +1.3.6.1.2.1.25.5.1.1.2.5|2|5 +1.3.6.1.2.1.25.5.1.1.2.7|2|18 +1.3.6.1.2.1.25.5.1.1.2.8|2|18 +1.3.6.1.2.1.25.5.1.1.2.13|2|21 +1.3.6.1.2.1.25.5.1.1.2.15|2|30 +1.3.6.1.2.1.25.5.1.1.2.21|2|16 +1.3.6.1.2.1.25.5.1.1.2.23|2|12 +1.3.6.1.2.1.25.5.1.1.2.28|2|1 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.4|66|6 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.13|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.14|66|1 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.17|66|42127 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.18|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.22|66|43 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.25|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.30|66|3 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.31|66|3 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.4|66|7 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.13|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.14|66|4 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.17|66|7 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.18|66|6 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.22|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.25|66|4 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.30|66|343 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.31|66|2 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.1|66|4 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.2|66|2 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.4|66|7 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.14|66|4 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.18|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.25|66|43 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.27|66|54 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.29|66|23 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.30|66|45 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.31|66|567 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.1|66|2 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.2|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.4|66|2 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.14|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.18|66|6 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.25|66|45 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.27|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.29|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.30|66|6 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.31|66|65 +1.3.6.1.4.1.9.9.156.1.5.5.0|65|1194392220 +1.3.6.1.4.1.9.9.156.1.5.6.0|65|788063609 +1.3.6.1.4.1.9.9.156.1.5.7.0|65|2492003767 +1.3.6.1.4.1.9.9.156.1.5.8.0|65|401932234 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.4446|66|4446 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.5179|66|5179 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.12093|66|12093 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.19363|66|19363 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.25033|66|25033 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.37738|66|37738 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.42562|66|42562 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.51845|66|51845 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.62906|66|62906 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.63361|66|63361 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.4446.18326|66|7469 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.5179.31658|66|5462 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.12093.24948|66|3953 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.19363.31336|66|7284 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.25033.57438|66|6013 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.37738.59634|66|9518 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.42562.46865|66|1371 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.51845.48063|66|9727 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.62906.5310|66|891 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.63361.46518|66|8988 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.4446.18326|66|7137 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.5179.31658|66|330 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.12093.24948|66|3652 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.19363.31336|66|2456 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.25033.57438|66|8461 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.37738.59634|66|5291 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.42562.46865|66|940 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.51845.48063|66|8616 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.62906.5310|66|6023 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.63361.46518|66|8797 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.4446.18326|66|815 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.5179.31658|66|5483 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.12093.24948|66|1936 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.19363.31336|66|772 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.25033.57438|66|7890 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.37738.59634|66|237 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.42562.46865|66|8766 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.51845.48063|66|4003 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.62906.5310|66|9754 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.63361.46518|66|7024 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.4351.29722.31|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.16469.37169.2|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.18917.14469.5|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.20734.59281.32|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.31487.42819.17|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.36228.63314.4|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.37463.17761.14|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.50909.47402.7|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.57906.47038.21|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.59011.25332.2|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.2.4351.29722.31|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.16469.37169.2|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.18917.14469.5|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.20734.59281.32|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.31487.42819.17|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.36228.63314.4|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.37463.17761.14|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.50909.47402.7|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.57906.47038.21|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.59011.25332.2|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.3.4351.29722.31|2|17 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.16469.37169.2|2|15 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.18917.14469.5|2|12 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.20734.59281.32|2|5 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.31487.42819.17|2|16 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.36228.63314.4|2|10 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.37463.17761.14|2|18 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.50909.47402.7|2|15 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.57906.47038.21|2|5 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.59011.25332.2|2|14 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.4351.29722.31|2|4 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.16469.37169.2|2|7 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.18917.14469.5|2|7 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.20734.59281.32|2|8 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.31487.42819.17|2|3 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.36228.63314.4|2|1 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.37463.17761.14|2|4 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.50909.47402.7|2|1 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.57906.47038.21|2|7 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.59011.25332.2|2|9 +1.3.6.1.4.1.9.9.473.1.3.6.1.5.4351.29722.31|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.16469.37169.2|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.18917.14469.5|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.20734.59281.32|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.31487.42819.17|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.36228.63314.4|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.37463.17761.14|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.50909.47402.7|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.57906.47038.21|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.59011.25332.2|4|test +1.3.6.1.4.1.9.9.590.1.2.2.0|66|951185694 +1.3.6.1.4.1.9.9.590.1.2.12.0|70|4641130472909277500 +1.3.6.1.4.1.9.9.590.1.6.1.1.1.33274|66|2756470189 +1.3.6.1.4.1.9.9.590.1.6.1.1.2.33274|66|2431416299 +1.3.6.1.4.1.9.9.590.1.6.1.1.3.33274|66|700781135 +1.3.6.1.4.1.9.9.590.1.6.1.1.4.33274|66|4286492019 +1.3.6.1.4.1.9.9.590.1.6.1.1.5.33274|66|2842971250 +1.3.6.1.4.1.9.9.590.1.6.1.1.6.33274|66|2149197955 diff --git a/test/new-e2e/ndm/snmp/compose/data/constraint.snmprec b/test/new-e2e/ndm/snmp/compose/data/constraint.snmprec new file mode 100644 index 0000000000000..60f8c29c95cfe --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/constraint.snmprec @@ -0,0 +1,2 @@ +1.3.6.1.2.1.6.1|2|10 +# (tcpRtoAlgorithm) OID with value breaking constraint 1 <= value <= 4 diff --git a/test/new-e2e/ndm/snmp/compose/data/dell-poweredge.snmprec b/test/new-e2e/ndm/snmp/compose/data/dell-poweredge.snmprec new file mode 100644 index 0000000000000..49b4f08b52275 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/dell-poweredge.snmprec @@ -0,0 +1,3487 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.674.10892.1.2 +1.3.6.1.4.1.343.2.7.2.1.1.0|4|kept +1.3.6.1.4.1.343.2.7.2.1.2.0|4x|7a6f6d6269657320717561696e746c792061637465642064726976696e6720627574 +1.3.6.1.4.1.343.2.7.2.1.3.0|4x|666f727761726420717561696e746c79206f78656e206163746564 +1.3.6.1.4.1.343.2.7.2.1.4.0|4x|62757420666f727761726420627574 +1.3.6.1.4.1.343.2.7.2.1.5.0|4x|64726976696e67206b657074204a61646564 +1.3.6.1.4.1.343.2.7.2.1.6.0|4x|666f7277617264204a61646564207468656972206b657074 +1.3.6.1.4.1.343.2.7.2.1.7.0|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.1.8|2|8 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.1.18|2|18 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.2.8|4x|65746830 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.2.18|4x|656e31 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.3.8|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.3.18|2|2 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.4.8|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.4.18|2|0 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.1.18|4x|666f7277617264207a6f6d62696573207468656972 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.1.22|4x|717561696e746c79204a61646564206f78656e207a6f6d62696573206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.343.2.7.2.2.1.2.1.2.18|4x|4a61646564207a6f6d62696573206f78656e207468656972206b6570742064726976696e67206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.2.22|4x|61637465642064726976696e6720666f7277617264206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.3.18|4x|6b657074206163746564204a61646564204a6164656420746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.3.22|4x|6f78656e206163746564204a6164656420717561696e746c79206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.4.18|4x|627574206f78656e207468656972206f78656e206b6570742064726976696e672064726976696e6720627574 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.4.22|4x|717561696e746c79206f78656e2062757420717561696e746c792064726976696e67207a6f6d62696573206f78656e204a61646564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.5.18|4x|4a61646564206f78656e +1.3.6.1.4.1.343.2.7.2.2.1.2.1.5.22|4x|717561696e746c792074686569722064726976696e67207a6f6d62696573 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.6.18|4x|6b657074204a61646564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.6.22|4|driving +1.3.6.1.4.1.343.2.7.2.2.1.2.1.7.18|4x|4a616465642064726976696e67206b657074207468656972206f78656e20627574 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.7.22|4x|4a616465642064726976696e67206b65707420627574 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.1.8|65|26212581 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.1.18|65|918782676 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.2.8|65|2561191324 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.2.18|65|4290482129 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.3.8|65|3900533769 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.3.18|65|564767165 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.4.8|65|3058685355 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.4.18|65|3837029910 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.5.8|65|1958861748 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.5.18|65|2421785564 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.6.8|65|2377289710 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.6.18|65|4015875170 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.7.8|65|4079823523 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.7.18|65|577740315 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.8.8|65|3885573357 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.8.18|65|1559311203 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.9.8|65|1208244969 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.9.18|65|736603272 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.10.8|65|1397338420 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.10.18|65|3150855068 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.1.4|2|4 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.1.29|2|29 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.2.4|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.2.29|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.3.4|65|1467360873 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.3.29|65|3891936190 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.4.4|66|1428003748 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.4.29|66|3467694198 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.5.4|2|2 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.5.29|2|2 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.6.4|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.6.29|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.7.4|2|9 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.7.29|2|29 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.8.4|2|13 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.8.29|2|28 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.9.4|2|15 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.9.29|2|24 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.10.4|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.10.29|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.11.4|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.11.29|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.12.4|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.12.29|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.13.4|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.13.29|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.14.4|2|13 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.14.29|2|30 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.1.3|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.1.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.2.3|65|906870219 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.2.11|65|3854133097 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.3.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.3.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.4.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.4.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.5.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.5.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.6.3|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.6.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.1.2|2|2 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.1.11|2|11 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.2.2|2|11 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.2.11|2|22 +1.3.6.1.4.1.343.2.7.2.2.3.2.1.1.7|2|0 +1.3.6.1.4.1.343.2.7.2.2.3.2.1.1.23|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.1.22|2|22 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.1.30|2|30 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.2.22|2|29 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.2.30|2|19 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.3.22|2|16 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.3.30|2|12 +1.3.6.1.4.1.343.2.7.2.2.4.2.1.1.7|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.1.5|4x|6f78656e2061637465642064726976696e6720666f72776172642064726976696e67 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.1.11|4x|4a61646564206163746564 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.2.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.2.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.3.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.3.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.4.5|66|1949733254 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.4.11|66|2070885352 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.5.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.5.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.6.5|2|2 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.6.11|2|2 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.7.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.7.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.8.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.8.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.9.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.9.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.10.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.10.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.11.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.11.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.12.5|65|2997670242 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.12.11|65|2131631262 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.13.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.13.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.14.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.14.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.15.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.15.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.1.26|2|26 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.1.27|2|27 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.2.26|2|15 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.2.27|2|1 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.1.19|2|3 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.1.31|2|2 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.2.19|65|706719367 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.2.31|65|1306335671 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.3.19|2|2 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.3.31|2|2 +1.3.6.1.4.1.343.2.7.2.3.1.2.0|2|0 +1.3.6.1.4.1.343.2.7.2.3.1.3.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.1.4.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.2.2.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.3.2.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.4.2.0|2|0 +1.3.6.1.4.1.674.10892.1.200.10.1.1.26|2|26 +1.3.6.1.4.1.674.10892.1.200.10.1.1.29|2|29 +1.3.6.1.4.1.674.10892.1.200.10.1.2.26|2|3 +1.3.6.1.4.1.674.10892.1.200.10.1.2.29|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.3.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.3.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.4.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.4.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.5.26|4x|7a6f6d62696573206f78656e206b657074206b657074206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.200.10.1.5.29|4x|6275742062757420746865697220666f7277617264207a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.6.26|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.6.29|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.7.26|4x|64726976696e67206b65707420616374656420627574 +1.3.6.1.4.1.674.10892.1.200.10.1.7.29|4|kept +1.3.6.1.4.1.674.10892.1.200.10.1.8.26|4x|6b65707420627574207a6f6d6269657320666f7277617264204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.8.29|4|zombies +1.3.6.1.4.1.674.10892.1.200.10.1.9.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.9.29|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.10.26|4x|6b657074206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.10.29|4x|666f727761726420717561696e746c79204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.11.26|4x|666f7277617264204a61646564206f78656e20666f7277617264207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.200.10.1.11.29|4x|64726976696e6720666f727761726420666f727761726420717561696e746c79207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.12.26|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.12.29|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.13.26|4x|4a6164656420666f7277617264207a6f6d6269657320746865697220717561696e746c79207468656972204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.13.29|4x|717561696e746c7920627574 +1.3.6.1.4.1.674.10892.1.200.10.1.14.26|4x|6163746564207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.200.10.1.14.29|4x|6b657074206163746564206b65707420666f7277617264207a6f6d6269657320717561696e746c7920746865697220666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.15.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.15.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.16.26|4x|666f7277617264204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.1.200.10.1.16.29|4|quaintly +1.3.6.1.4.1.674.10892.1.200.10.1.17.26|4x|627574207468656972206b65707420717561696e746c7920717561696e746c7920746865697220666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.1.200.10.1.17.29|4x|64726976696e67207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.18.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.18.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.19.26|4x|6f78656e207468656972206f78656e +1.3.6.1.4.1.674.10892.1.200.10.1.19.29|4x|717561696e746c7920717561696e746c79206f78656e204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.200.10.1.20.26|4x|6b65707420666f72776172642074686569722062757420627574 +1.3.6.1.4.1.674.10892.1.200.10.1.20.29|4x|6b65707420746865697220717561696e746c792064726976696e67207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.674.10892.1.200.10.1.21.26|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.21.29|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.22.26|4x|6b6570742062757420717561696e746c79206f78656e20717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.22.29|4x|61637465642074686569722064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.23.26|4|acted +1.3.6.1.4.1.674.10892.1.200.10.1.23.29|4|their +1.3.6.1.4.1.674.10892.1.200.10.1.24.26|2|3 +1.3.6.1.4.1.674.10892.1.200.10.1.24.29|2|3 +1.3.6.1.4.1.674.10892.1.200.10.1.25.26|4x|616374656420666f72776172642061637465642064726976696e672064726976696e6720746865697220627574204a61646564 +1.3.6.1.4.1.674.10892.1.200.10.1.25.29|4x|62757420666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.26.26|4x|6f78656e206f78656e207a6f6d62696573207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.26.29|4x|666f72776172642064726976696e6720666f7277617264206b657074207a6f6d62696573204a6164656420627574206163746564206b657074 +1.3.6.1.4.1.674.10892.1.200.10.1.27.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.27.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.28.26|4x|7a6f6d6269657320746865697220717561696e746c79206163746564206b657074207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.28.29|4x|4a61646564207a6f6d62696573206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.29.26|4x|746865697220666f7277617264206b6570742064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.29.29|4x|64726976696e6720666f727761726420627574206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.30.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.30.29|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.31.26|4x|627574206f78656e207468656972206f78656e2064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.31.29|4|acted +1.3.6.1.4.1.674.10892.1.200.10.1.42.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.42.29|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.43.26|4x|627574207a6f6d6269657320666f7277617264206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.43.29|4x|64726976696e6720616374656420666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.44.26|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.44.29|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.45.26|4x|6f78656e20666f7277617264207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.45.29|4x|6f78656e206b657074206b657074 +1.3.6.1.4.1.674.10892.1.200.10.1.50.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.50.29|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.51.26|4x|7a6f6d62696573206b657074206b65707420616374656420627574 +1.3.6.1.4.1.674.10892.1.200.10.1.51.29|4x|666f727761726420666f7277617264207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.52.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.52.29|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.53.26|4x|7a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.674.10892.1.200.10.1.53.29|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.200.10.1.54.26|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.54.29|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.55.26|4x|64726976696e6720627574206f78656e204a61646564206275742074686569722064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.55.29|4x|64726976696e672074686569722064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.56.26|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.56.29|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.57.26|4x|717561696e746c792064726976696e6720746865697220616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.57.29|4x|717561696e746c7920717561696e746c79206b65707420666f7277617264206275742064726976696e67206b657074207468656972207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.58.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.58.29|2|3 +1.3.6.1.4.1.674.10892.1.200.10.1.59.26|4x|6f78656e2074686569722064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.200.10.1.59.29|4x|4a61646564206163746564207468656972206163746564207a6f6d62696573206f78656e207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.60.26|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.60.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.61.26|4x|6b657074207a6f6d62696573206163746564207a6f6d62696573207a6f6d6269657320616374656420746865697220627574207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.61.29|4x|666f7277617264207a6f6d6269657320717561696e746c7920717561696e746c79204a6164656420627574204a61646564206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.62.26|4x|7468656972207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.200.10.1.62.29|4x|4a6164656420666f7277617264206b6570742064726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.63.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.63.29|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.64.26|4x|6163746564206b657074204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.200.10.1.64.29|4x|4a616465642064726976696e6720717561696e746c79206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.300.50.1.1.3.26|2|3 +1.3.6.1.4.1.674.10892.1.300.50.1.1.31.19|2|31 +1.3.6.1.4.1.674.10892.1.300.50.1.2.3.26|2|26 +1.3.6.1.4.1.674.10892.1.300.50.1.2.31.19|2|19 +1.3.6.1.4.1.674.10892.1.300.50.1.3.3.26|2|2 +1.3.6.1.4.1.674.10892.1.300.50.1.3.31.19|2|6 +1.3.6.1.4.1.674.10892.1.300.50.1.4.3.26|2|4 +1.3.6.1.4.1.674.10892.1.300.50.1.4.31.19|2|1 +1.3.6.1.4.1.674.10892.1.300.50.1.5.3.26|2|6 +1.3.6.1.4.1.674.10892.1.300.50.1.5.31.19|2|4 +1.3.6.1.4.1.674.10892.1.300.50.1.7.3.26|4x|61637465642061637465642064726976696e67206163746564 +1.3.6.1.4.1.674.10892.1.300.50.1.7.31.19|4x|666f7277617264207a6f6d62696573206b657074206b657074 +1.3.6.1.4.1.674.10892.1.300.50.1.8.3.26|4x|6f78656e206163746564204a6164656420666f7277617264207a6f6d626965732064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.1.300.50.1.8.31.19|4x|666f7277617264206b657074206f78656e +1.3.6.1.4.1.674.10892.1.300.50.1.11.3.26|4x|6f78656e2064726976696e6720717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.1.300.50.1.11.31.19|4x|64726976696e6720666f7277617264207a6f6d62696573204a61646564206b657074206b657074204a61646564204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.300.70.1.1.18.23|2|18 +1.3.6.1.4.1.674.10892.1.300.70.1.1.29.21|2|29 +1.3.6.1.4.1.674.10892.1.300.70.1.2.18.23|2|23 +1.3.6.1.4.1.674.10892.1.300.70.1.2.29.21|2|21 +1.3.6.1.4.1.674.10892.1.300.70.1.3.18.23|2|1 +1.3.6.1.4.1.674.10892.1.300.70.1.3.29.21|2|4 +1.3.6.1.4.1.674.10892.1.300.70.1.4.18.23|2|2 +1.3.6.1.4.1.674.10892.1.300.70.1.4.29.21|2|2 +1.3.6.1.4.1.674.10892.1.300.70.1.5.18.23|2|4 +1.3.6.1.4.1.674.10892.1.300.70.1.5.29.21|2|2 +1.3.6.1.4.1.674.10892.1.300.70.1.6.18.23|2|3 +1.3.6.1.4.1.674.10892.1.300.70.1.6.29.21|2|1 +1.3.6.1.4.1.674.10892.1.300.70.1.7.18.23|2|2 +1.3.6.1.4.1.674.10892.1.300.70.1.7.29.21|2|1 +1.3.6.1.4.1.674.10892.1.300.70.1.8.18.23|4x|4a61646564206f78656e2064726976696e67207a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.674.10892.1.300.70.1.8.29.21|4x|6b657074207a6f6d62696573206f78656e206b6570742064726976696e6720666f7277617264206f78656e +1.3.6.1.4.1.674.10892.1.400.20.1.1.4|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.1.5|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.1.6|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.1.8|2|8 +1.3.6.1.4.1.674.10892.1.400.20.1.1.14|2|14 +1.3.6.1.4.1.674.10892.1.400.20.1.1.23|2|23 +1.3.6.1.4.1.674.10892.1.400.20.1.1.29|2|29 +1.3.6.1.4.1.674.10892.1.400.20.1.1.31|2|31 +1.3.6.1.4.1.674.10892.1.400.20.1.2.4|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.2.5|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.2.6|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.2.8|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.2.14|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.2.23|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.2.29|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.2.31|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.3.4|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.3.5|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.3.6|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.3.8|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.3.14|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.3.23|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.3.29|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.3.31|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.4.4|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.4.5|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.4.6|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.4.8|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.4.14|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.4.23|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.4.29|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.4.31|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.5.4|2|12 +1.3.6.1.4.1.674.10892.1.400.20.1.5.5|2|27 +1.3.6.1.4.1.674.10892.1.400.20.1.5.6|2|12 +1.3.6.1.4.1.674.10892.1.400.20.1.5.8|2|10 +1.3.6.1.4.1.674.10892.1.400.20.1.5.14|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.5.23|2|17 +1.3.6.1.4.1.674.10892.1.400.20.1.5.29|2|9 +1.3.6.1.4.1.674.10892.1.400.20.1.5.31|2|29 +1.3.6.1.4.1.674.10892.1.400.20.1.6.4|2|16 +1.3.6.1.4.1.674.10892.1.400.20.1.6.5|2|15 +1.3.6.1.4.1.674.10892.1.400.20.1.6.6|2|31 +1.3.6.1.4.1.674.10892.1.400.20.1.6.8|2|23 +1.3.6.1.4.1.674.10892.1.400.20.1.6.14|2|18 +1.3.6.1.4.1.674.10892.1.400.20.1.6.23|2|29 +1.3.6.1.4.1.674.10892.1.400.20.1.6.29|2|20 +1.3.6.1.4.1.674.10892.1.400.20.1.6.31|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.7.4|2|7 +1.3.6.1.4.1.674.10892.1.400.20.1.7.5|2|14 +1.3.6.1.4.1.674.10892.1.400.20.1.7.6|2|8 +1.3.6.1.4.1.674.10892.1.400.20.1.7.8|2|15 +1.3.6.1.4.1.674.10892.1.400.20.1.7.14|2|11 +1.3.6.1.4.1.674.10892.1.400.20.1.7.23|2|27 +1.3.6.1.4.1.674.10892.1.400.20.1.7.29|2|10 +1.3.6.1.4.1.674.10892.1.400.20.1.7.31|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.8.4|2|30 +1.3.6.1.4.1.674.10892.1.400.20.1.8.5|2|16 +1.3.6.1.4.1.674.10892.1.400.20.1.8.6|2|22 +1.3.6.1.4.1.674.10892.1.400.20.1.8.8|2|11 +1.3.6.1.4.1.674.10892.1.400.20.1.8.14|2|22 +1.3.6.1.4.1.674.10892.1.400.20.1.8.23|2|14 +1.3.6.1.4.1.674.10892.1.400.20.1.8.29|2|25 +1.3.6.1.4.1.674.10892.1.400.20.1.8.31|2|28 +1.3.6.1.4.1.674.10892.1.400.20.1.9.4|2|23 +1.3.6.1.4.1.674.10892.1.400.20.1.9.5|2|21 +1.3.6.1.4.1.674.10892.1.400.20.1.9.6|2|21 +1.3.6.1.4.1.674.10892.1.400.20.1.9.8|2|25 +1.3.6.1.4.1.674.10892.1.400.20.1.9.14|2|20 +1.3.6.1.4.1.674.10892.1.400.20.1.9.23|2|7 +1.3.6.1.4.1.674.10892.1.400.20.1.9.29|2|14 +1.3.6.1.4.1.674.10892.1.400.20.1.9.31|2|30 +1.3.6.1.4.1.674.10892.1.400.20.1.10.4|2|12 +1.3.6.1.4.1.674.10892.1.400.20.1.10.5|2|18 +1.3.6.1.4.1.674.10892.1.400.20.1.10.6|2|15 +1.3.6.1.4.1.674.10892.1.400.20.1.10.8|2|29 +1.3.6.1.4.1.674.10892.1.400.20.1.10.14|2|21 +1.3.6.1.4.1.674.10892.1.400.20.1.10.23|2|9 +1.3.6.1.4.1.674.10892.1.400.20.1.10.29|2|3 +1.3.6.1.4.1.674.10892.1.400.20.1.10.31|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.11.4|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.5|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.6|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.8|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.14|4x|627574206b657074 +1.3.6.1.4.1.674.10892.1.400.20.1.11.23|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.29|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.31|4|quaintly +1.3.6.1.4.1.674.10892.1.600.10.1.1.1.24|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.1.1.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.1.2.4|2|2 +1.3.6.1.4.1.674.10892.1.600.10.1.1.8.21|2|8 +1.3.6.1.4.1.674.10892.1.600.10.1.1.9.18|2|9 +1.3.6.1.4.1.674.10892.1.600.10.1.1.14.27|2|14 +1.3.6.1.4.1.674.10892.1.600.10.1.1.15.9|2|15 +1.3.6.1.4.1.674.10892.1.600.10.1.1.16.7|2|16 +1.3.6.1.4.1.674.10892.1.600.10.1.1.21.13|2|21 +1.3.6.1.4.1.674.10892.1.600.10.1.1.28.27|2|28 +1.3.6.1.4.1.674.10892.1.600.10.1.2.1.24|2|24 +1.3.6.1.4.1.674.10892.1.600.10.1.2.1.27|2|27 +1.3.6.1.4.1.674.10892.1.600.10.1.2.2.4|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.2.8.21|2|21 +1.3.6.1.4.1.674.10892.1.600.10.1.2.9.18|2|18 +1.3.6.1.4.1.674.10892.1.600.10.1.2.14.27|2|27 +1.3.6.1.4.1.674.10892.1.600.10.1.2.15.9|2|9 +1.3.6.1.4.1.674.10892.1.600.10.1.2.16.7|2|7 +1.3.6.1.4.1.674.10892.1.600.10.1.2.21.13|2|13 +1.3.6.1.4.1.674.10892.1.600.10.1.2.28.27|2|27 +1.3.6.1.4.1.674.10892.1.600.10.1.3.1.24|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.3.1.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.3.2.4|2|2 +1.3.6.1.4.1.674.10892.1.600.10.1.3.8.21|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.3.9.18|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.3.14.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.3.15.9|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.3.16.7|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.3.21.13|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.3.28.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.4.1.24|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.4.1.27|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.4.2.4|2|2 +1.3.6.1.4.1.674.10892.1.600.10.1.4.8.21|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.4.9.18|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.4.14.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.4.15.9|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.4.16.7|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.4.21.13|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.4.28.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.5.1.24|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.5.1.27|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.5.2.4|2|7 +1.3.6.1.4.1.674.10892.1.600.10.1.5.8.21|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.5.9.18|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.5.14.27|2|5 +1.3.6.1.4.1.674.10892.1.600.10.1.5.15.9|2|3 +1.3.6.1.4.1.674.10892.1.600.10.1.5.16.7|2|3 +1.3.6.1.4.1.674.10892.1.600.10.1.5.21.13|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.5.28.27|2|5 +1.3.6.1.4.1.674.10892.1.600.10.1.6.1.24|2|11 +1.3.6.1.4.1.674.10892.1.600.10.1.6.1.27|2|31 +1.3.6.1.4.1.674.10892.1.600.10.1.6.2.4|2|31 +1.3.6.1.4.1.674.10892.1.600.10.1.6.8.21|2|27 +1.3.6.1.4.1.674.10892.1.600.10.1.6.9.18|2|21 +1.3.6.1.4.1.674.10892.1.600.10.1.6.14.27|2|10 +1.3.6.1.4.1.674.10892.1.600.10.1.6.15.9|2|19 +1.3.6.1.4.1.674.10892.1.600.10.1.6.16.7|2|22 +1.3.6.1.4.1.674.10892.1.600.10.1.6.21.13|2|18 +1.3.6.1.4.1.674.10892.1.600.10.1.6.28.27|2|11 +1.3.6.1.4.1.674.10892.1.600.10.1.7.1.24|4x|6275742062757420627574 +1.3.6.1.4.1.674.10892.1.600.10.1.7.1.27|4|zombies +1.3.6.1.4.1.674.10892.1.600.10.1.7.2.4|4x|717561696e746c79206b65707420717561696e746c79206b65707420717561696e746c7920717561696e746c79206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.600.10.1.7.8.21|4x|6163746564204a616465642064726976696e67207a6f6d626965732064726976696e67204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.10.1.7.9.18|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.1.600.10.1.7.14.27|4x|4a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.10.1.7.15.9|4|kept +1.3.6.1.4.1.674.10892.1.600.10.1.7.16.7|4x|4a61646564206f78656e20627574 +1.3.6.1.4.1.674.10892.1.600.10.1.7.21.13|4x|6f78656e20666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.10.1.7.28.27|4x|627574206b6570742064726976696e67206b657074 +1.3.6.1.4.1.674.10892.1.600.10.1.8.1.24|2|2 +1.3.6.1.4.1.674.10892.1.600.10.1.8.1.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.8.2.4|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.8.8.21|2|3 +1.3.6.1.4.1.674.10892.1.600.10.1.8.9.18|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.8.14.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.8.15.9|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.8.16.7|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.8.21.13|2|5 +1.3.6.1.4.1.674.10892.1.600.10.1.8.28.27|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.1.4.5|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.1.4.17|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.1.8.27|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.1.13.12|2|13 +1.3.6.1.4.1.674.10892.1.600.12.1.1.15.24|2|15 +1.3.6.1.4.1.674.10892.1.600.12.1.1.18.16|2|18 +1.3.6.1.4.1.674.10892.1.600.12.1.1.18.21|2|18 +1.3.6.1.4.1.674.10892.1.600.12.1.1.18.26|2|18 +1.3.6.1.4.1.674.10892.1.600.12.1.1.21.6|2|21 +1.3.6.1.4.1.674.10892.1.600.12.1.1.23.24|2|23 +1.3.6.1.4.1.674.10892.1.600.12.1.2.4.5|2|5 +1.3.6.1.4.1.674.10892.1.600.12.1.2.4.17|2|17 +1.3.6.1.4.1.674.10892.1.600.12.1.2.8.27|2|27 +1.3.6.1.4.1.674.10892.1.600.12.1.2.13.12|2|12 +1.3.6.1.4.1.674.10892.1.600.12.1.2.15.24|2|24 +1.3.6.1.4.1.674.10892.1.600.12.1.2.18.16|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.2.18.21|2|21 +1.3.6.1.4.1.674.10892.1.600.12.1.2.18.26|2|26 +1.3.6.1.4.1.674.10892.1.600.12.1.2.21.6|2|6 +1.3.6.1.4.1.674.10892.1.600.12.1.2.23.24|2|24 +1.3.6.1.4.1.674.10892.1.600.12.1.3.4.5|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.4.17|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.8.27|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.3.13.12|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.15.24|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.18.16|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.3.18.21|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.18.26|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.3.21.6|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.3.23.24|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.4.4.5|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.4.4.17|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.4.8.27|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.4.13.12|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.4.15.24|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.4.18.16|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.4.18.21|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.4.18.26|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.4.21.6|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.4.23.24|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.5.4.5|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.5.4.17|2|6 +1.3.6.1.4.1.674.10892.1.600.12.1.6.4.5|2|7 +1.3.6.1.4.1.674.10892.1.600.12.1.6.4.17|2|9 +1.3.6.1.4.1.674.10892.1.600.12.1.6.8.27|2|18 +1.3.6.1.4.1.674.10892.1.600.12.1.6.13.12|2|21 +1.3.6.1.4.1.674.10892.1.600.12.1.6.15.24|2|19 +1.3.6.1.4.1.674.10892.1.600.12.1.6.18.16|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.6.18.21|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.6.18.26|2|9 +1.3.6.1.4.1.674.10892.1.600.12.1.6.21.6|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.6.23.24|2|13 +1.3.6.1.4.1.674.10892.1.600.12.1.7.4.5|2|7 +1.3.6.1.4.1.674.10892.1.600.12.1.7.4.17|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.7.8.27|2|7 +1.3.6.1.4.1.674.10892.1.600.12.1.7.13.12|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.7.15.24|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.7.18.16|2|5 +1.3.6.1.4.1.674.10892.1.600.12.1.7.18.21|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.7.18.26|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.7.21.6|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.7.23.24|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.8.4.5|4x|627574206f78656e20616374656420717561696e746c79207468656972207a6f6d626965732062757420627574 +1.3.6.1.4.1.674.10892.1.600.12.1.8.4.17|4x|6b65707420717561696e746c79207468656972207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.600.12.1.8.8.27|4x|666f7277617264206f78656e +1.3.6.1.4.1.674.10892.1.600.12.1.8.13.12|4x|6b6570742062757420666f7277617264206163746564 +1.3.6.1.4.1.674.10892.1.600.12.1.8.15.24|4x|6b657074204a6164656420717561696e746c79207a6f6d6269657320627574204a61646564206b657074204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.12.1.8.18.16|4x|6163746564206f78656e20717561696e746c79204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.600.12.1.8.18.21|4|zombies +1.3.6.1.4.1.674.10892.1.600.12.1.8.18.26|4x|7a6f6d62696573204a616465642062757420717561696e746c7920717561696e746c792064726976696e67204a61646564204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.12.1.8.21.6|4x|4a616465642064726976696e672062757420666f727761726420717561696e746c79206f78656e206f78656e207468656972206b657074 +1.3.6.1.4.1.674.10892.1.600.12.1.8.23.24|4x|64726976696e67207468656972207468656972204a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.12.1.9.4.5|2|29 +1.3.6.1.4.1.674.10892.1.600.12.1.9.4.17|2|19 +1.3.6.1.4.1.674.10892.1.600.12.1.10.4.5|2|14 +1.3.6.1.4.1.674.10892.1.600.12.1.10.4.17|2|31 +1.3.6.1.4.1.674.10892.1.600.12.1.10.8.27|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.10.13.12|2|29 +1.3.6.1.4.1.674.10892.1.600.12.1.10.15.24|2|6 +1.3.6.1.4.1.674.10892.1.600.12.1.10.18.16|2|12 +1.3.6.1.4.1.674.10892.1.600.12.1.10.18.21|2|12 +1.3.6.1.4.1.674.10892.1.600.12.1.10.18.26|2|11 +1.3.6.1.4.1.674.10892.1.600.12.1.10.21.6|2|11 +1.3.6.1.4.1.674.10892.1.600.12.1.10.23.24|2|11 +1.3.6.1.4.1.674.10892.1.600.12.1.11.4.5|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.11.4.17|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.11.8.27|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.11.13.12|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.11.15.24|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.11.18.16|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.11.18.21|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.11.18.26|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.11.21.6|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.11.23.24|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.12.4.5|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.12.4.17|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.8.27|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.13.12|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.15.24|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.18.16|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.12.18.21|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.12.18.26|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.12.21.6|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.23.24|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.13.4.5|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.4.17|2|0 +1.3.6.1.4.1.674.10892.1.600.12.1.13.8.27|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.13.12|2|0 +1.3.6.1.4.1.674.10892.1.600.12.1.13.15.24|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.18.16|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.18.21|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.18.26|2|0 +1.3.6.1.4.1.674.10892.1.600.12.1.13.21.6|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.23.24|2|0 +1.3.6.1.4.1.674.10892.1.600.12.1.14.4.5|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.14.4.17|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.14.8.27|2|13 +1.3.6.1.4.1.674.10892.1.600.12.1.14.13.12|2|19 +1.3.6.1.4.1.674.10892.1.600.12.1.14.15.24|2|31 +1.3.6.1.4.1.674.10892.1.600.12.1.14.18.16|2|13 +1.3.6.1.4.1.674.10892.1.600.12.1.14.18.21|2|30 +1.3.6.1.4.1.674.10892.1.600.12.1.14.18.26|2|31 +1.3.6.1.4.1.674.10892.1.600.12.1.14.21.6|2|12 +1.3.6.1.4.1.674.10892.1.600.12.1.14.23.24|2|23 +1.3.6.1.4.1.674.10892.1.600.12.1.16.4.5|2|29 +1.3.6.1.4.1.674.10892.1.600.12.1.16.4.17|2|19 +1.3.6.1.4.1.674.10892.1.600.20.1.1.12.15|2|12 +1.3.6.1.4.1.674.10892.1.600.20.1.1.22.19|2|22 +1.3.6.1.4.1.674.10892.1.600.20.1.2.12.15|2|15 +1.3.6.1.4.1.674.10892.1.600.20.1.2.22.19|2|19 +1.3.6.1.4.1.674.10892.1.600.20.1.3.12.15|2|6 +1.3.6.1.4.1.674.10892.1.600.20.1.3.22.19|2|2 +1.3.6.1.4.1.674.10892.1.600.20.1.4.12.15|2|1 +1.3.6.1.4.1.674.10892.1.600.20.1.4.22.19|2|1 +1.3.6.1.4.1.674.10892.1.600.20.1.5.12.15|2|5 +1.3.6.1.4.1.674.10892.1.600.20.1.5.22.19|2|6 +1.3.6.1.4.1.674.10892.1.600.20.1.6.12.15|2|19 +1.3.6.1.4.1.674.10892.1.600.20.1.6.22.19|2|29 +1.3.6.1.4.1.674.10892.1.600.20.1.7.12.15|2|6 +1.3.6.1.4.1.674.10892.1.600.20.1.7.22.19|2|3 +1.3.6.1.4.1.674.10892.1.600.20.1.8.12.15|4x|6275742064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.20.1.8.22.19|4x|4a61646564206275742062757420717561696e746c79206f78656e204a61646564206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.600.20.1.9.12.15|2|0 +1.3.6.1.4.1.674.10892.1.600.20.1.9.22.19|2|11 +1.3.6.1.4.1.674.10892.1.600.20.1.10.12.15|2|25 +1.3.6.1.4.1.674.10892.1.600.20.1.10.22.19|2|21 +1.3.6.1.4.1.674.10892.1.600.20.1.11.12.15|2|6 +1.3.6.1.4.1.674.10892.1.600.20.1.11.22.19|2|11 +1.3.6.1.4.1.674.10892.1.600.20.1.12.12.15|2|10 +1.3.6.1.4.1.674.10892.1.600.20.1.12.22.19|2|1 +1.3.6.1.4.1.674.10892.1.600.20.1.13.12.15|2|25 +1.3.6.1.4.1.674.10892.1.600.20.1.13.22.19|2|21 +1.3.6.1.4.1.674.10892.1.600.20.1.14.12.15|2|22 +1.3.6.1.4.1.674.10892.1.600.20.1.14.22.19|2|15 +1.3.6.1.4.1.674.10892.1.600.20.1.15.12.15|2|4 +1.3.6.1.4.1.674.10892.1.600.20.1.15.22.19|2|8 +1.3.6.1.4.1.674.10892.1.600.20.1.16.12.15|2|2 +1.3.6.1.4.1.674.10892.1.600.20.1.16.22.19|2|2 +1.3.6.1.4.1.674.10892.1.600.30.1.1.9.28|2|9 +1.3.6.1.4.1.674.10892.1.600.30.1.1.18.4|2|18 +1.3.6.1.4.1.674.10892.1.600.30.1.2.9.28|2|28 +1.3.6.1.4.1.674.10892.1.600.30.1.2.18.4|2|4 +1.3.6.1.4.1.674.10892.1.600.30.1.3.9.28|2|6 +1.3.6.1.4.1.674.10892.1.600.30.1.3.18.4|2|1 +1.3.6.1.4.1.674.10892.1.600.30.1.4.9.28|2|1 +1.3.6.1.4.1.674.10892.1.600.30.1.4.18.4|2|6 +1.3.6.1.4.1.674.10892.1.600.30.1.5.9.28|2|2 +1.3.6.1.4.1.674.10892.1.600.30.1.5.18.4|2|5 +1.3.6.1.4.1.674.10892.1.600.30.1.6.9.28|2|16 +1.3.6.1.4.1.674.10892.1.600.30.1.6.18.4|2|10 +1.3.6.1.4.1.674.10892.1.600.30.1.7.9.28|2|26 +1.3.6.1.4.1.674.10892.1.600.30.1.7.18.4|2|26 +1.3.6.1.4.1.674.10892.1.600.30.1.8.9.28|4x|64726976696e67207a6f6d626965732064726976696e6720717561696e746c7920717561696e746c79206b657074206163746564 +1.3.6.1.4.1.674.10892.1.600.30.1.8.18.4|4x|4a61646564206b6570742062757420666f7277617264206163746564204a6164656420666f7277617264206b657074207468656972 +1.3.6.1.4.1.674.10892.1.600.30.1.9.9.28|2|1 +1.3.6.1.4.1.674.10892.1.600.30.1.9.18.4|2|14 +1.3.6.1.4.1.674.10892.1.600.30.1.10.9.28|2|2 +1.3.6.1.4.1.674.10892.1.600.30.1.10.18.4|2|19 +1.3.6.1.4.1.674.10892.1.600.30.1.11.9.28|2|25 +1.3.6.1.4.1.674.10892.1.600.30.1.11.18.4|2|13 +1.3.6.1.4.1.674.10892.1.600.30.1.12.9.28|2|12 +1.3.6.1.4.1.674.10892.1.600.30.1.12.18.4|2|10 +1.3.6.1.4.1.674.10892.1.600.30.1.13.9.28|2|19 +1.3.6.1.4.1.674.10892.1.600.30.1.13.18.4|2|19 +1.3.6.1.4.1.674.10892.1.600.30.1.14.9.28|2|31 +1.3.6.1.4.1.674.10892.1.600.30.1.14.18.4|2|23 +1.3.6.1.4.1.674.10892.1.600.30.1.15.9.28|2|8 +1.3.6.1.4.1.674.10892.1.600.30.1.15.18.4|2|8 +1.3.6.1.4.1.674.10892.1.600.30.1.16.9.28|2|2 +1.3.6.1.4.1.674.10892.1.600.30.1.16.18.4|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.1.5.9|2|5 +1.3.6.1.4.1.674.10892.1.600.40.1.1.9.5|2|9 +1.3.6.1.4.1.674.10892.1.600.40.1.1.11.16|2|11 +1.3.6.1.4.1.674.10892.1.600.40.1.1.15.28|2|15 +1.3.6.1.4.1.674.10892.1.600.40.1.1.19.3|2|19 +1.3.6.1.4.1.674.10892.1.600.40.1.1.19.16|2|19 +1.3.6.1.4.1.674.10892.1.600.40.1.1.21.31|2|21 +1.3.6.1.4.1.674.10892.1.600.40.1.1.25.26|2|25 +1.3.6.1.4.1.674.10892.1.600.40.1.1.29.7|2|29 +1.3.6.1.4.1.674.10892.1.600.40.1.1.30.13|2|30 +1.3.6.1.4.1.674.10892.1.600.40.1.2.5.9|2|9 +1.3.6.1.4.1.674.10892.1.600.40.1.2.9.5|2|5 +1.3.6.1.4.1.674.10892.1.600.40.1.2.11.16|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.2.15.28|2|28 +1.3.6.1.4.1.674.10892.1.600.40.1.2.19.3|2|3 +1.3.6.1.4.1.674.10892.1.600.40.1.2.19.16|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.2.21.31|2|31 +1.3.6.1.4.1.674.10892.1.600.40.1.2.25.26|2|26 +1.3.6.1.4.1.674.10892.1.600.40.1.2.29.7|2|7 +1.3.6.1.4.1.674.10892.1.600.40.1.2.30.13|2|13 +1.3.6.1.4.1.674.10892.1.600.40.1.3.5.9|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.3.9.5|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.3.11.16|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.3.15.28|2|14 +1.3.6.1.4.1.674.10892.1.600.40.1.3.19.3|2|30 +1.3.6.1.4.1.674.10892.1.600.40.1.3.19.16|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.3.21.31|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.3.25.26|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.3.29.7|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.3.30.13|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.4.5.9|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.4.9.5|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.4.11.16|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.4.15.28|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.4.19.3|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.4.19.16|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.4.21.31|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.4.25.26|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.4.29.7|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.4.30.13|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.5.5.9|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.5.9.5|2|7 +1.3.6.1.4.1.674.10892.1.600.40.1.5.11.16|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.5.15.28|2|7 +1.3.6.1.4.1.674.10892.1.600.40.1.5.19.3|2|3 +1.3.6.1.4.1.674.10892.1.600.40.1.5.19.16|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.5.21.31|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.5.25.26|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.5.29.7|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.5.30.13|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.6.5.9|2|29 +1.3.6.1.4.1.674.10892.1.600.40.1.6.9.5|2|18 +1.3.6.1.4.1.674.10892.1.600.40.1.6.11.16|2|22 +1.3.6.1.4.1.674.10892.1.600.40.1.6.15.28|2|28 +1.3.6.1.4.1.674.10892.1.600.40.1.6.19.3|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.6.19.16|2|13 +1.3.6.1.4.1.674.10892.1.600.40.1.6.21.31|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.6.25.26|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.6.29.7|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.6.30.13|2|19 +1.3.6.1.4.1.674.10892.1.600.40.1.7.5.9|4x|7468656972206163746564 +1.3.6.1.4.1.674.10892.1.600.40.1.7.9.5|4x|7a6f6d62696573207a6f6d6269657320666f7277617264206b657074204a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.1.600.40.1.7.11.16|4x|6f78656e2064726976696e6720666f7277617264206f78656e206b65707420666f7277617264206b657074204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.40.1.7.15.28|4x|7a6f6d6269657320666f727761726420746865697220666f7277617264206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.600.40.1.7.19.3|4|kept +1.3.6.1.4.1.674.10892.1.600.40.1.7.19.16|4|quaintly +1.3.6.1.4.1.674.10892.1.600.40.1.7.21.31|4|Jaded +1.3.6.1.4.1.674.10892.1.600.40.1.7.25.26|4x|64726976696e67206163746564206b657074204a61646564206163746564204a61646564 +1.3.6.1.4.1.674.10892.1.600.40.1.7.29.7|4x|6b65707420717561696e746c79207468656972207468656972206b6570742064726976696e6720746865697220616374656420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.40.1.7.30.13|4x|64726976696e6720616374656420627574206f78656e20666f727761726420666f7277617264206b657074204a61646564 +1.3.6.1.4.1.674.10892.1.600.40.1.8.5.9|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.9.5|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.11.16|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.15.28|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.19.3|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.19.16|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.21.31|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.8.25.26|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.8.29.7|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.8.30.13|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.9.5.9|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.9.9.5|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.9.11.16|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.9.15.28|2|5 +1.3.6.1.4.1.674.10892.1.600.40.1.9.19.3|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.9.19.16|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.9.21.31|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.9.25.26|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.9.29.7|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.9.30.13|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.1.2.18|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.1.3.3|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.1.3.18|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.1.8.6|2|8 +1.3.6.1.4.1.674.10892.1.600.42.1.1.15.4|2|15 +1.3.6.1.4.1.674.10892.1.600.42.1.1.16.11|2|16 +1.3.6.1.4.1.674.10892.1.600.42.1.1.17.25|2|17 +1.3.6.1.4.1.674.10892.1.600.42.1.1.21.22|2|21 +1.3.6.1.4.1.674.10892.1.600.42.1.1.26.9|2|26 +1.3.6.1.4.1.674.10892.1.600.42.1.1.30.30|2|30 +1.3.6.1.4.1.674.10892.1.600.42.1.2.2.18|2|18 +1.3.6.1.4.1.674.10892.1.600.42.1.2.3.3|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.2.3.18|2|18 +1.3.6.1.4.1.674.10892.1.600.42.1.2.8.6|2|6 +1.3.6.1.4.1.674.10892.1.600.42.1.2.15.4|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.2.16.11|2|11 +1.3.6.1.4.1.674.10892.1.600.42.1.2.17.25|2|25 +1.3.6.1.4.1.674.10892.1.600.42.1.2.21.22|2|22 +1.3.6.1.4.1.674.10892.1.600.42.1.2.26.9|2|9 +1.3.6.1.4.1.674.10892.1.600.42.1.2.30.30|2|30 +1.3.6.1.4.1.674.10892.1.600.42.1.3.2.18|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.3.3.3|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.3.3.18|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.3.8.6|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.3.15.4|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.3.16.11|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.3.17.25|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.3.21.22|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.3.26.9|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.3.30.30|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.4.2.18|2|16 +1.3.6.1.4.1.674.10892.1.600.42.1.4.3.3|2|10 +1.3.6.1.4.1.674.10892.1.600.42.1.4.3.18|2|16 +1.3.6.1.4.1.674.10892.1.600.42.1.4.8.6|2|16 +1.3.6.1.4.1.674.10892.1.600.42.1.4.15.4|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.4.16.11|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.4.17.25|2|26 +1.3.6.1.4.1.674.10892.1.600.42.1.4.21.22|2|10 +1.3.6.1.4.1.674.10892.1.600.42.1.4.26.9|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.4.30.30|2|8 +1.3.6.1.4.1.674.10892.1.600.42.1.5.2.18|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.5.3.3|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.5.3.18|2|6 +1.3.6.1.4.1.674.10892.1.600.42.1.5.8.6|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.5.15.4|2|5 +1.3.6.1.4.1.674.10892.1.600.42.1.5.16.11|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.5.17.25|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.5.21.22|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.5.26.9|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.5.30.30|2|5 +1.3.6.1.4.1.674.10892.1.600.42.1.6.2.18|2|17 +1.3.6.1.4.1.674.10892.1.600.42.1.6.3.3|2|22 +1.3.6.1.4.1.674.10892.1.600.42.1.6.3.18|2|30 +1.3.6.1.4.1.674.10892.1.600.42.1.6.8.6|2|5 +1.3.6.1.4.1.674.10892.1.600.42.1.6.15.4|2|14 +1.3.6.1.4.1.674.10892.1.600.42.1.6.16.11|2|31 +1.3.6.1.4.1.674.10892.1.600.42.1.6.17.25|2|28 +1.3.6.1.4.1.674.10892.1.600.42.1.6.21.22|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.6.26.9|2|22 +1.3.6.1.4.1.674.10892.1.600.42.1.6.30.30|2|5 +1.3.6.1.4.1.674.10892.1.600.42.1.7.2.18|4x|6b6570742062757420746865697220627574206f78656e204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.42.1.7.3.3|4x|7468656972206f78656e204a6164656420627574 +1.3.6.1.4.1.674.10892.1.600.42.1.7.3.18|4x|7a6f6d6269657320746865697220616374656420666f727761726420666f7277617264206b657074207468656972 +1.3.6.1.4.1.674.10892.1.600.42.1.7.8.6|4x|74686569722064726976696e6720666f7277617264207468656972207468656972207a6f6d6269657320717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.42.1.7.15.4|4x|61637465642064726976696e67206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.42.1.7.16.11|4x|616374656420627574207468656972 +1.3.6.1.4.1.674.10892.1.600.42.1.7.17.25|4x|6b65707420627574206b65707420627574204a61646564 +1.3.6.1.4.1.674.10892.1.600.42.1.7.21.22|4x|64726976696e67206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.600.42.1.7.26.9|4x|717561696e746c79207a6f6d626965732064726976696e67207468656972207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.1.600.42.1.7.30.30|4x|7a6f6d626965732064726976696e672064726976696e67207a6f6d6269657320627574204a61646564207468656972207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.1.600.50.1.1.3.17|2|3 +1.3.6.1.4.1.674.10892.1.600.50.1.1.6.19|2|6 +1.3.6.1.4.1.674.10892.1.600.50.1.2.3.17|2|17 +1.3.6.1.4.1.674.10892.1.600.50.1.2.6.19|2|19 +1.3.6.1.4.1.674.10892.1.600.50.1.3.3.17|2|6 +1.3.6.1.4.1.674.10892.1.600.50.1.3.6.19|2|1 +1.3.6.1.4.1.674.10892.1.600.50.1.4.3.17|2|2 +1.3.6.1.4.1.674.10892.1.600.50.1.4.6.19|2|2 +1.3.6.1.4.1.674.10892.1.600.50.1.5.3.17|2|6 +1.3.6.1.4.1.674.10892.1.600.50.1.5.6.19|2|5 +1.3.6.1.4.1.674.10892.1.600.50.1.6.3.17|2|1 +1.3.6.1.4.1.674.10892.1.600.50.1.6.6.19|2|1 +1.3.6.1.4.1.674.10892.1.600.50.1.7.3.17|4x|7a6f6d62696573206b65707420746865697220717561696e746c7920627574 +1.3.6.1.4.1.674.10892.1.600.50.1.7.6.19|4|zombies +1.3.6.1.4.1.674.10892.1.600.60.1.1.12.14|2|12 +1.3.6.1.4.1.674.10892.1.600.60.1.1.22.22|2|22 +1.3.6.1.4.1.674.10892.1.600.60.1.2.12.14|2|14 +1.3.6.1.4.1.674.10892.1.600.60.1.2.22.22|2|22 +1.3.6.1.4.1.674.10892.1.600.60.1.3.12.14|2|2 +1.3.6.1.4.1.674.10892.1.600.60.1.3.22.22|2|2 +1.3.6.1.4.1.674.10892.1.600.60.1.4.12.14|2|6 +1.3.6.1.4.1.674.10892.1.600.60.1.4.22.22|2|6 +1.3.6.1.4.1.674.10892.1.600.60.1.5.12.14|2|4 +1.3.6.1.4.1.674.10892.1.600.60.1.5.22.22|2|3 +1.3.6.1.4.1.674.10892.1.600.60.1.6.12.14|4x|7a6f6d6269657320717561696e746c7920666f727761726420616374656420717561696e746c79206163746564204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.60.1.6.22.22|4x|616374656420717561696e746c79207468656972204a61646564206f78656e20666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.60.1.7.12.14|2|20 +1.3.6.1.4.1.674.10892.1.600.60.1.7.22.22|2|7 +1.3.6.1.4.1.674.10892.1.600.60.1.8.12.14|4x|717561696e746c79206163746564206163746564206f78656e +1.3.6.1.4.1.674.10892.1.600.60.1.8.22.22|4x|746865697220717561696e746c79206b657074207468656972 +1.3.6.1.4.1.674.10892.1.600.60.1.9.12.14|2|15 +1.3.6.1.4.1.674.10892.1.600.60.1.9.22.22|2|26 +1.3.6.1.4.1.674.10892.1.600.60.1.10.12.14|4x|717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.60.1.10.22.22|4x|627574206f78656e20717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.11.12.14|4x|7a6f6d62696573206b657074206f78656e2064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.11.22.22|4x|6b657074206b657074206b657074207468656972206f78656e +1.3.6.1.4.1.674.10892.1.600.60.1.12.12.14|2|21 +1.3.6.1.4.1.674.10892.1.600.60.1.12.22.22|2|29 +1.3.6.1.4.1.674.10892.1.600.60.1.13.12.14|4x|7468656972207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.13.22.22|4x|64726976696e672064726976696e67204a6164656420627574 +1.3.6.1.4.1.674.10892.1.600.60.1.14.12.14|4x|717561696e746c7920717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.14.22.22|4x|6163746564207468656972204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.15.12.14|2|6 +1.3.6.1.4.1.674.10892.1.600.60.1.15.22.22|2|2 +1.3.6.1.4.1.674.10892.1.600.60.1.16.12.14|2|4 +1.3.6.1.4.1.674.10892.1.600.60.1.16.22.22|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.17.12.14|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.17.22.22|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.18.12.14|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.18.22.22|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.19.12.14|2|21 +1.3.6.1.4.1.674.10892.1.600.60.1.19.22.22|2|0 +1.3.6.1.4.1.674.10892.1.600.60.1.20.12.14|2|25 +1.3.6.1.4.1.674.10892.1.600.60.1.20.22.22|2|14 +1.3.6.1.4.1.674.10892.1.600.60.1.21.12.14|2|10 +1.3.6.1.4.1.674.10892.1.600.60.1.21.22.22|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.1.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.1.1.7|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.1.4.9|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.1.6.26|2|6 +1.3.6.1.4.1.674.10892.1.600.70.1.1.8.4|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.1.10.17|2|10 +1.3.6.1.4.1.674.10892.1.600.70.1.1.14.30|2|14 +1.3.6.1.4.1.674.10892.1.600.70.1.1.26.27|2|26 +1.3.6.1.4.1.674.10892.1.600.70.1.1.26.29|2|26 +1.3.6.1.4.1.674.10892.1.600.70.1.1.29.9|2|29 +1.3.6.1.4.1.674.10892.1.600.70.1.2.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.2.1.7|2|7 +1.3.6.1.4.1.674.10892.1.600.70.1.2.4.9|2|9 +1.3.6.1.4.1.674.10892.1.600.70.1.2.6.26|2|26 +1.3.6.1.4.1.674.10892.1.600.70.1.2.8.4|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.2.10.17|2|17 +1.3.6.1.4.1.674.10892.1.600.70.1.2.14.30|2|30 +1.3.6.1.4.1.674.10892.1.600.70.1.2.26.27|2|27 +1.3.6.1.4.1.674.10892.1.600.70.1.2.26.29|2|29 +1.3.6.1.4.1.674.10892.1.600.70.1.2.29.9|2|9 +1.3.6.1.4.1.674.10892.1.600.70.1.3.1.1|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.3.1.7|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.3.4.9|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.3.6.26|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.3.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.3.10.17|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.3.14.30|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.3.26.27|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.3.26.29|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.3.29.9|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.4.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.4.1.7|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.4.4.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.4.6.26|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.4.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.4.10.17|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.4.14.30|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.4.26.27|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.4.26.29|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.4.29.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.5.1.1|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.5.1.7|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.5.4.9|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.5.6.26|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.5.8.4|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.5.10.17|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.5.14.30|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.5.26.27|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.5.26.29|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.5.29.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.6.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.6.1.7|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.6.4.9|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.6.6.26|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.6.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.6.10.17|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.6.14.30|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.6.26.27|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.6.26.29|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.6.29.9|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.1.1|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.1.7|2|16 +1.3.6.1.4.1.674.10892.1.600.70.1.7.4.9|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.6.26|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.7.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.7.10.17|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.7.14.30|2|16 +1.3.6.1.4.1.674.10892.1.600.70.1.7.26.27|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.26.29|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.29.9|2|16 +1.3.6.1.4.1.674.10892.1.600.70.1.8.1.1|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.8.1.7|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.8.4.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.8.6.26|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.8.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.8.10.17|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.8.14.30|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.8.26.27|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.8.26.29|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.8.29.9|2|16 +1.3.6.1.4.1.674.10892.1.600.70.1.9.1.1|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.1.7|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.9.4.9|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.6.26|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.10.17|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.14.30|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.26.27|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.26.29|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.9.29.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.10.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.10.1.7|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.4.9|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.6.26|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.10.17|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.14.30|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.26.27|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.26.29|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.10.29.9|2|2 +1.3.6.1.4.1.674.10892.1.700.10.1.1.1.19|2|1 +1.3.6.1.4.1.674.10892.1.700.10.1.1.6.31|2|6 +1.3.6.1.4.1.674.10892.1.700.10.1.2.1.19|2|19 +1.3.6.1.4.1.674.10892.1.700.10.1.2.6.31|2|31 +1.3.6.1.4.1.674.10892.1.700.10.1.3.1.19|2|2 +1.3.6.1.4.1.674.10892.1.700.10.1.3.6.31|2|1 +1.3.6.1.4.1.674.10892.1.700.10.1.4.1.19|2|6 +1.3.6.1.4.1.674.10892.1.700.10.1.4.6.31|2|4 +1.3.6.1.4.1.674.10892.1.700.10.1.5.1.19|2|4 +1.3.6.1.4.1.674.10892.1.700.10.1.5.6.31|2|7 +1.3.6.1.4.1.674.10892.1.700.10.1.6.1.19|2|6 +1.3.6.1.4.1.674.10892.1.700.10.1.6.6.31|2|29 +1.3.6.1.4.1.674.10892.1.700.10.1.7.1.19|4x|64726976696e67206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.700.10.1.7.6.31|4x|7468656972204a6164656420717561696e746c79206275742062757420746865697220717561696e746c79206b657074206163746564 +1.3.6.1.4.1.674.10892.1.700.10.1.8.1.19|2|3 +1.3.6.1.4.1.674.10892.1.700.10.1.8.6.31|2|6 +1.3.6.1.4.1.674.10892.1.700.12.1.1.8.11|2|8 +1.3.6.1.4.1.674.10892.1.700.12.1.1.19.3|2|19 +1.3.6.1.4.1.674.10892.1.700.12.1.2.8.11|2|11 +1.3.6.1.4.1.674.10892.1.700.12.1.2.19.3|2|3 +1.3.6.1.4.1.674.10892.1.700.12.1.3.8.11|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.3.19.3|2|1 +1.3.6.1.4.1.674.10892.1.700.12.1.4.8.11|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.4.19.3|2|1 +1.3.6.1.4.1.674.10892.1.700.12.1.5.8.11|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.5.19.3|2|5 +1.3.6.1.4.1.674.10892.1.700.12.1.6.8.11|2|11 +1.3.6.1.4.1.674.10892.1.700.12.1.6.19.3|2|21 +1.3.6.1.4.1.674.10892.1.700.12.1.7.8.11|2|9 +1.3.6.1.4.1.674.10892.1.700.12.1.7.19.3|2|10 +1.3.6.1.4.1.674.10892.1.700.12.1.8.8.11|4|acted +1.3.6.1.4.1.674.10892.1.700.12.1.8.19.3|4x|6163746564206f78656e20627574207a6f6d626965732064726976696e67206163746564204a61646564 +1.3.6.1.4.1.674.10892.1.700.12.1.9.8.11|2|23 +1.3.6.1.4.1.674.10892.1.700.12.1.9.19.3|2|18 +1.3.6.1.4.1.674.10892.1.700.12.1.10.8.11|2|3 +1.3.6.1.4.1.674.10892.1.700.12.1.10.19.3|2|26 +1.3.6.1.4.1.674.10892.1.700.12.1.11.8.11|2|13 +1.3.6.1.4.1.674.10892.1.700.12.1.11.19.3|2|18 +1.3.6.1.4.1.674.10892.1.700.12.1.12.8.11|2|7 +1.3.6.1.4.1.674.10892.1.700.12.1.12.19.3|2|17 +1.3.6.1.4.1.674.10892.1.700.12.1.13.8.11|2|21 +1.3.6.1.4.1.674.10892.1.700.12.1.13.19.3|2|7 +1.3.6.1.4.1.674.10892.1.700.12.1.14.8.11|2|7 +1.3.6.1.4.1.674.10892.1.700.12.1.14.19.3|2|30 +1.3.6.1.4.1.674.10892.1.700.12.1.15.8.11|2|11 +1.3.6.1.4.1.674.10892.1.700.12.1.15.19.3|2|4 +1.3.6.1.4.1.674.10892.1.700.12.1.16.8.11|2|4 +1.3.6.1.4.1.674.10892.1.700.12.1.16.19.3|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.17.8.11|2|8 +1.3.6.1.4.1.674.10892.1.700.12.1.17.19.3|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.18.8.11|2|1 +1.3.6.1.4.1.674.10892.1.700.12.1.18.19.3|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.1.11.1|2|11 +1.3.6.1.4.1.674.10892.1.700.20.1.1.13.18|2|13 +1.3.6.1.4.1.674.10892.1.700.20.1.1.14.8|2|14 +1.3.6.1.4.1.674.10892.1.700.20.1.1.18.13|2|18 +1.3.6.1.4.1.674.10892.1.700.20.1.1.19.10|2|19 +1.3.6.1.4.1.674.10892.1.700.20.1.1.21.13|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.1.22.4|2|22 +1.3.6.1.4.1.674.10892.1.700.20.1.1.23.23|2|23 +1.3.6.1.4.1.674.10892.1.700.20.1.1.24.10|2|24 +1.3.6.1.4.1.674.10892.1.700.20.1.1.25.17|2|25 +1.3.6.1.4.1.674.10892.1.700.20.1.2.11.1|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.2.13.18|2|18 +1.3.6.1.4.1.674.10892.1.700.20.1.2.14.8|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.2.18.13|2|13 +1.3.6.1.4.1.674.10892.1.700.20.1.2.19.10|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.2.21.13|2|13 +1.3.6.1.4.1.674.10892.1.700.20.1.2.22.4|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.2.23.23|2|23 +1.3.6.1.4.1.674.10892.1.700.20.1.2.24.10|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.2.25.17|2|17 +1.3.6.1.4.1.674.10892.1.700.20.1.3.11.1|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.3.13.18|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.3.14.8|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.3.18.13|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.3.19.10|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.3.21.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.3.22.4|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.3.23.23|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.3.24.10|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.3.25.17|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.4.11.1|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.4.13.18|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.4.14.8|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.4.18.13|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.4.19.10|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.4.21.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.4.22.4|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.4.23.23|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.4.24.10|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.4.25.17|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.5.4.5|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.5.4.17|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.5.14.8|2|7 +1.3.6.1.4.1.674.10892.1.700.20.1.5.18.13|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.5.18.23|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.5.21.13|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.5.22.4|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.5.23.23|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.5.24.10|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.5.25.17|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.6.11.1|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.6.13.18|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.6.14.8|2|31 +1.3.6.1.4.1.674.10892.1.700.20.1.6.18.13|2|24 +1.3.6.1.4.1.674.10892.1.700.20.1.6.19.10|2|12 +1.3.6.1.4.1.674.10892.1.700.20.1.6.21.13|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.6.22.4|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.6.23.23|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.6.24.10|2|25 +1.3.6.1.4.1.674.10892.1.700.20.1.6.25.17|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.7.11.1|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.7.13.18|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.7.14.8|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.7.18.13|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.7.19.10|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.7.21.13|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.7.22.4|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.7.23.23|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.7.24.10|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.7.25.17|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.8.11.1|4x|62757420666f7277617264206f78656e2064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.700.20.1.8.13.18|4x|616374656420666f727761726420666f7277617264206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.700.20.1.8.14.8|4x|62757420746865697220666f7277617264206f78656e206f78656e +1.3.6.1.4.1.674.10892.1.700.20.1.8.18.13|4x|6163746564204a61646564206b657074206b6570742062757420717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.700.20.1.8.19.10|4x|62757420666f727761726420627574 +1.3.6.1.4.1.674.10892.1.700.20.1.8.21.13|4x|6b657074206f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.700.20.1.8.22.4|4x|62757420627574206f78656e207a6f6d6269657320717561696e746c7920717561696e746c7920627574204a61646564 +1.3.6.1.4.1.674.10892.1.700.20.1.8.23.23|4x|6b6570742064726976696e672064726976696e67204a61646564207a6f6d6269657320666f727761726420717561696e746c79207a6f6d6269657320627574 +1.3.6.1.4.1.674.10892.1.700.20.1.8.24.10|4x|6163746564207468656972206b65707420666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.1.700.20.1.8.25.17|4x|6f78656e207468656972207468656972206f78656e +1.3.6.1.4.1.674.10892.1.700.20.1.9.11.1|2|0 +1.3.6.1.4.1.674.10892.1.700.20.1.9.13.18|2|14 +1.3.6.1.4.1.674.10892.1.700.20.1.9.14.8|2|17 +1.3.6.1.4.1.674.10892.1.700.20.1.9.18.13|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.9.19.10|2|12 +1.3.6.1.4.1.674.10892.1.700.20.1.9.21.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.9.22.4|2|31 +1.3.6.1.4.1.674.10892.1.700.20.1.9.23.23|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.9.24.10|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.9.25.17|2|5 +1.3.6.1.4.1.674.10892.1.700.20.1.10.11.1|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.10.13.18|2|14 +1.3.6.1.4.1.674.10892.1.700.20.1.10.14.8|2|11 +1.3.6.1.4.1.674.10892.1.700.20.1.10.18.13|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.10.19.10|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.10.21.13|2|14 +1.3.6.1.4.1.674.10892.1.700.20.1.10.22.4|2|27 +1.3.6.1.4.1.674.10892.1.700.20.1.10.23.23|2|7 +1.3.6.1.4.1.674.10892.1.700.20.1.10.24.10|2|18 +1.3.6.1.4.1.674.10892.1.700.20.1.10.25.17|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.11.11.1|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.11.13.18|2|27 +1.3.6.1.4.1.674.10892.1.700.20.1.11.14.8|2|26 +1.3.6.1.4.1.674.10892.1.700.20.1.11.18.13|2|12 +1.3.6.1.4.1.674.10892.1.700.20.1.11.19.10|2|5 +1.3.6.1.4.1.674.10892.1.700.20.1.11.21.13|2|19 +1.3.6.1.4.1.674.10892.1.700.20.1.11.22.4|2|30 +1.3.6.1.4.1.674.10892.1.700.20.1.11.23.23|2|25 +1.3.6.1.4.1.674.10892.1.700.20.1.11.24.10|2|5 +1.3.6.1.4.1.674.10892.1.700.20.1.11.25.17|2|29 +1.3.6.1.4.1.674.10892.1.700.20.1.12.11.1|2|0 +1.3.6.1.4.1.674.10892.1.700.20.1.12.13.18|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.12.14.8|2|11 +1.3.6.1.4.1.674.10892.1.700.20.1.12.18.13|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.12.19.10|2|30 +1.3.6.1.4.1.674.10892.1.700.20.1.12.21.13|2|30 +1.3.6.1.4.1.674.10892.1.700.20.1.12.22.4|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.12.23.23|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.12.24.10|2|5 +1.3.6.1.4.1.674.10892.1.700.20.1.12.25.17|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.13.11.1|2|24 +1.3.6.1.4.1.674.10892.1.700.20.1.13.13.18|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.13.14.8|2|25 +1.3.6.1.4.1.674.10892.1.700.20.1.13.18.13|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.13.19.10|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.13.21.13|2|7 +1.3.6.1.4.1.674.10892.1.700.20.1.13.22.4|2|11 +1.3.6.1.4.1.674.10892.1.700.20.1.13.23.23|2|31 +1.3.6.1.4.1.674.10892.1.700.20.1.13.24.10|2|18 +1.3.6.1.4.1.674.10892.1.700.20.1.13.25.17|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.14.11.1|2|27 +1.3.6.1.4.1.674.10892.1.700.20.1.14.13.18|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.14.14.8|2|31 +1.3.6.1.4.1.674.10892.1.700.20.1.14.18.13|2|0 +1.3.6.1.4.1.674.10892.1.700.20.1.14.19.10|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.14.21.13|2|26 +1.3.6.1.4.1.674.10892.1.700.20.1.14.22.4|2|26 +1.3.6.1.4.1.674.10892.1.700.20.1.14.23.23|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.14.24.10|2|17 +1.3.6.1.4.1.674.10892.1.700.20.1.14.25.17|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.15.11.1|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.15.13.18|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.15.14.8|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.15.18.13|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.15.19.10|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.15.21.13|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.15.22.4|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.15.23.23|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.15.24.10|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.15.25.17|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.11.1|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.13.18|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.14.8|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.16.18.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.16.19.10|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.21.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.16.22.4|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.16.23.23|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.24.10|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.25.17|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.3.20|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.4.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.5.21|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.7.27|2|7 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.8.4|2|8 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.19.23|2|19 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.23.3|2|23 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.26.2|2|26 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.26.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.27.22|2|27 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.3.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.4.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.5.21|2|21 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.7.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.8.4|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.19.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.23.3|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.26.2|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.26.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.27.22|2|22 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.3.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.4.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.5.21|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.7.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.8.4|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.19.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.23.3|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.26.2|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.26.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.27.22|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.3.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.4.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.5.21|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.7.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.8.4|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.19.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.23.3|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.26.2|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.26.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.27.22|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.3.20|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.4.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.5.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.7.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.8.4|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.19.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.23.3|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.26.2|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.26.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.27.22|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.3.20|2|22 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.4.8|2|17 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.5.21|2|25 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.7.27|2|23 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.8.4|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.19.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.23.3|2|25 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.26.2|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.26.10|2|9 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.27.22|2|13 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.3.20|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.4.8|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.5.21|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.7.27|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.8.4|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.19.23|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.23.3|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.26.2|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.26.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.27.22|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.3.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.4.8|2|17 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.5.21|2|20 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.7.27|2|25 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.8.4|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.19.23|2|9 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.23.3|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.26.2|2|25 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.26.10|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.27.22|2|28 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.4.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.5.6|2|5 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.7.31|2|7 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.8.24|2|8 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.10.7|2|10 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.10.27|2|10 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.12.16|2|12 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.12.19|2|12 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.18.24|2|18 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.26.20|2|26 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.4.24|2|24 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.5.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.7.31|2|31 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.8.24|2|24 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.10.7|2|7 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.10.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.12.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.12.19|2|19 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.18.24|2|24 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.26.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.4.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.5.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.7.31|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.8.24|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.10.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.10.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.12.16|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.12.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.18.24|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.26.20|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.4.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.5.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.7.31|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.8.24|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.10.7|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.10.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.12.16|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.12.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.18.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.26.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.4.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.5.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.7.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.8.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.10.7|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.10.27|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.12.16|2|3 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.12.19|2|5 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.18.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.26.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.4.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.5.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.7.31|2|16 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.8.24|2|19 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.10.7|2|16 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.10.27|2|24 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.12.16|2|11 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.12.19|2|11 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.18.24|2|30 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.26.20|2|17 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.4.24|4x|64726976696e67204a61646564206b657074 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.5.6|4x|616374656420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.7.31|4|but +1.3.6.1.4.1.674.10892.1.1100.20.1.7.8.24|4x|6f78656e20627574207468656972207468656972204a61646564204a6164656420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.10.7|4x|717561696e746c7920746865697220717561696e746c7920627574206b657074 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.10.27|4x|7a6f6d6269657320627574207a6f6d62696573206b657074206163746564206f78656e207468656972207468656972 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.12.16|4x|6b65707420627574206b657074204a61646564206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.12.19|4x|64726976696e67204a6164656420627574206b657074206f78656e207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.18.24|4x|64726976696e6720666f7277617264206275742064726976696e6720717561696e746c79206f78656e204a61646564 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.26.20|4|Jaded +1.3.6.1.4.1.674.10892.1.1100.20.1.8.4.24|4x|6b6570742062757420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.5.6|4x|717561696e746c79206163746564206f78656e20717561696e746c79206f78656e20616374656420717561696e746c79206f78656e207468656972 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.7.31|4x|4a61646564207468656972206b657074206f78656e +1.3.6.1.4.1.674.10892.1.1100.20.1.8.8.24|4x|6b65707420627574207a6f6d62696573204a61646564204a61646564206163746564 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.10.7|4x|6f78656e2064726976696e67204a6164656420616374656420717561696e746c7920666f7277617264204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.10.27|4|forward +1.3.6.1.4.1.674.10892.1.1100.20.1.8.12.16|4x|627574207a6f6d6269657320627574206163746564206163746564 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.12.19|4|forward +1.3.6.1.4.1.674.10892.1.1100.20.1.8.18.24|4x|627574206b65707420616374656420717561696e746c7920666f7277617264207468656972207468656972 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.26.20|4|but +1.3.6.1.4.1.674.10892.1.1100.30.1.1.5.17|2|5 +1.3.6.1.4.1.674.10892.1.1100.30.1.1.5.28|2|5 +1.3.6.1.4.1.674.10892.1.1100.30.1.2.5.17|2|17 +1.3.6.1.4.1.674.10892.1.1100.30.1.2.5.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.30.1.3.5.17|2|2 +1.3.6.1.4.1.674.10892.1.1100.30.1.3.5.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.30.1.4.5.17|2|2 +1.3.6.1.4.1.674.10892.1.1100.30.1.4.5.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.30.1.5.5.17|2|3 +1.3.6.1.4.1.674.10892.1.1100.30.1.5.5.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.30.1.5.31.4|2|1 +1.3.6.1.4.1.674.10892.1.1100.30.1.6.5.17|2|23 +1.3.6.1.4.1.674.10892.1.1100.30.1.6.5.28|2|21 +1.3.6.1.4.1.674.10892.1.1100.30.1.7.5.17|2|4 +1.3.6.1.4.1.674.10892.1.1100.30.1.7.5.28|2|6 +1.3.6.1.4.1.674.10892.1.1100.30.1.8.5.17|4x|7468656972206163746564 +1.3.6.1.4.1.674.10892.1.1100.30.1.8.5.28|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.30.1.9.5.17|2|5 +1.3.6.1.4.1.674.10892.1.1100.30.1.9.5.28|2|6 +1.3.6.1.4.1.674.10892.1.1100.30.1.10.5.17|2|11 +1.3.6.1.4.1.674.10892.1.1100.30.1.10.5.28|2|8 +1.3.6.1.4.1.674.10892.1.1100.30.1.10.31.4|2|6 +1.3.6.1.4.1.674.10892.1.1100.30.1.11.5.17|2|3 +1.3.6.1.4.1.674.10892.1.1100.30.1.11.5.28|2|10 +1.3.6.1.4.1.674.10892.1.1100.30.1.12.5.17|2|11 +1.3.6.1.4.1.674.10892.1.1100.30.1.12.5.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.30.1.13.5.17|2|9 +1.3.6.1.4.1.674.10892.1.1100.30.1.13.5.28|2|19 +1.3.6.1.4.1.674.10892.1.1100.30.1.14.5.17|2|23 +1.3.6.1.4.1.674.10892.1.1100.30.1.14.5.28|2|29 +1.3.6.1.4.1.674.10892.1.1100.30.1.15.5.17|2|21 +1.3.6.1.4.1.674.10892.1.1100.30.1.15.5.28|2|12 +1.3.6.1.4.1.674.10892.1.1100.30.1.16.5.17|4x|7468656972206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.30.1.16.5.28|4x|627574204a61646564 +1.3.6.1.4.1.674.10892.1.1100.30.1.17.5.17|2|18 +1.3.6.1.4.1.674.10892.1.1100.30.1.17.5.28|2|30 +1.3.6.1.4.1.674.10892.1.1100.30.1.18.5.17|2|9 +1.3.6.1.4.1.674.10892.1.1100.30.1.18.5.28|2|21 +1.3.6.1.4.1.674.10892.1.1100.30.1.19.5.17|2|31 +1.3.6.1.4.1.674.10892.1.1100.30.1.19.5.28|2|25 +1.3.6.1.4.1.674.10892.1.1100.30.1.20.5.17|2|26 +1.3.6.1.4.1.674.10892.1.1100.30.1.20.5.28|2|10 +1.3.6.1.4.1.674.10892.1.1100.30.1.21.5.17|2|22 +1.3.6.1.4.1.674.10892.1.1100.30.1.21.5.28|2|18 +1.3.6.1.4.1.674.10892.1.1100.30.1.22.5.17|2|0 +1.3.6.1.4.1.674.10892.1.1100.30.1.22.5.28|2|24 +1.3.6.1.4.1.674.10892.1.1100.30.1.23.5.17|4x|616374656420666f727761726420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.30.1.23.5.28|4x|6163746564207a6f6d62696573206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.30.1.24.5.17|4x|4a6164656420717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.30.1.24.5.28|4x|64726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.30.1.25.5.17|4x|6f78656e206f78656e20666f727761726420627574207a6f6d62696573206b657074206163746564207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.1.1100.30.1.25.5.28|4x|7468656972206b657074206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.32.1.1.3.11|2|3 +1.3.6.1.4.1.674.10892.1.1100.32.1.1.18.21|2|18 +1.3.6.1.4.1.674.10892.1.1100.32.1.2.3.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.32.1.2.18.21|2|21 +1.3.6.1.4.1.674.10892.1.1100.32.1.3.3.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.32.1.3.18.21|2|4 +1.3.6.1.4.1.674.10892.1.1100.32.1.4.3.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.32.1.4.18.21|2|4 +1.3.6.1.4.1.674.10892.1.1100.32.1.5.3.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.32.1.5.18.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.32.1.6.3.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.32.1.6.18.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.32.1.7.3.11|4x|64726976696e67207a6f6d62696573206f78656e2064726976696e67206b657074204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.32.1.7.18.21|4x|6b657074206b657074 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.3.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.8.7|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.11.15|2|11 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.11.27|2|11 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.12.8|2|12 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.12.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.13.1|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.13.11|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.17.1|2|17 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.25.18|2|25 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.3.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.8.7|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.11.15|2|15 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.11.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.12.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.12.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.13.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.17.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.25.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.3.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.8.7|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.11.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.12.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.12.18|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.13.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.17.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.25.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.3.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.8.7|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.11.15|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.11.27|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.12.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.12.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.13.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.17.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.25.18|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.3.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.8.7|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.11.15|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.12.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.12.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.13.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.13.11|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.17.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.25.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.3.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.8.7|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.11.15|2|21 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.11.27|2|16 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.12.8|2|19 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.12.18|2|9 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.13.1|2|28 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.13.11|2|12 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.17.1|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.25.18|2|16 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.3.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.8.7|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.11.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.12.8|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.12.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.13.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.13.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.17.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.25.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.3.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.8.7|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.11.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.12.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.12.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.13.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.13.11|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.17.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.25.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.3.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.8.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.11.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.11.27|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.12.8|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.13.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.13.11|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.17.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.25.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.3.29|4x|4a616465642064726976696e672064726976696e6720627574 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.8.7|4x|7468656972206f78656e20627574207a6f6d62696573206b657074204a61646564 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.11.15|4x|61637465642064726976696e67207468656972 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.11.27|4x|7a6f6d6269657320717561696e746c7920717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.1.1100.40.1.10.12.8|4x|6f78656e20616374656420717561696e746c79204a61646564 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.12.18|4x|4a61646564207468656972206f78656e206f78656e20627574207a6f6d62696573204a61646564206163746564206f78656e +1.3.6.1.4.1.674.10892.1.1100.40.1.10.13.1|4x|627574204a61646564 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.13.11|4x|7a6f6d6269657320717561696e746c79206f78656e207a6f6d6269657320627574206b657074206f78656e20627574 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.17.1|4x|666f727761726420746865697220627574 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.25.18|4x|6f78656e20666f727761726420666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.3.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.8.7|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.11.15|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.11.27|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.12.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.12.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.13.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.17.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.25.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.3.29|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.8.7|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.11.15|2|10 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.11.27|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.12.8|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.12.18|2|20 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.13.1|2|15 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.13.11|2|20 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.17.1|2|21 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.25.18|2|22 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.3.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.8.7|2|15 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.11.15|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.11.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.12.8|2|24 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.12.18|2|19 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.13.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.13.11|2|28 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.17.1|2|26 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.25.18|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.3.29|2|25 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.8.7|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.11.15|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.11.27|2|18 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.12.8|2|23 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.12.18|2|24 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.13.1|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.13.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.17.1|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.25.18|2|16 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.3.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.8.7|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.11.15|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.11.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.12.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.13.11|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.17.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.25.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.3.29|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.8.7|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.11.15|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.12.8|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.13.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.17.1|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.25.18|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.3.29|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.8.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.11.15|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.11.27|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.12.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.12.18|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.13.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.13.11|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.17.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.25.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.3.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.8.7|2|9 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.11.15|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.11.27|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.12.8|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.12.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.13.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.13.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.17.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.25.18|2|11 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.3.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.8.7|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.11.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.11.27|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.12.8|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.13.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.13.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.17.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.25.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.3.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.8.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.11.15|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.11.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.12.8|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.12.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.13.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.13.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.17.1|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.25.18|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.1.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.4.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.6.9|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.14.8|2|14 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.16.14|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.19.11|2|19 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.26.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.29.10|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.29.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.1.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.1.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.4.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.6.9|2|9 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.14.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.16.14|2|14 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.19.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.26.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.29.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.29.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.1.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.4.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.6.9|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.14.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.16.14|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.19.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.26.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.29.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.29.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.1.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.1.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.4.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.6.9|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.14.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.16.14|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.19.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.26.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.29.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.29.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.1.6|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.1.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.4.20|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.6.9|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.14.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.16.14|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.19.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.26.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.29.10|2|5 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.29.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.1.6|2|9 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.1.10|2|28 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.4.20|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.6.9|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.14.8|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.16.14|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.19.11|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.26.10|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.29.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.29.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.1.6|2|20 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.1.10|2|12 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.4.20|2|15 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.6.9|2|25 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.14.8|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.16.14|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.19.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.26.10|2|13 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.29.10|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.29.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.1.6|4x|717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.1.10|4x|6b657074206b65707420666f727761726420627574206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.4.20|4x|6f78656e204a616465642062757420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.6.9|4x|717561696e746c792064726976696e6720616374656420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.14.8|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.16.14|4x|666f727761726420627574206f78656e2064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.19.11|4x|666f7277617264206b657074207a6f6d626965732064726976696e6720627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.8.26.10|4x|717561696e746c7920616374656420746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.29.10|4x|666f727761726420717561696e746c792064726976696e6720616374656420627574207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.29.29|4x|666f7277617264206f78656e20717561696e746c79206163746564207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.1.6|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.1.10|2|14 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.4.20|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.6.9|2|17 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.14.8|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.16.14|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.19.11|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.26.10|2|15 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.29.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.29.29|2|9 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.1.6|4x|666f7277617264206163746564206b65707420717561696e746c7920717561696e746c7920717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.1.10|4x|64726976696e672064726976696e672064726976696e6720717561696e746c792064726976696e67206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.10.4.20|4x|64726976696e672064726976696e67206f78656e2061637465642061637465642064726976696e67206f78656e206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.10.6.9|4x|64726976696e672061637465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.14.8|4x|62757420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.16.14|4x|616374656420616374656420717561696e746c79207a6f6d6269657320717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.19.11|4x|717561696e746c79206b6570742064726976696e6720746865697220627574206f78656e207468656972207468656972206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.10.26.10|4x|6275742062757420627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.29.10|4x|4a61646564206f78656e20746865697220717561696e746c79206f78656e20746865697220666f7277617264206b657074204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.29.29|4x|7a6f6d626965732064726976696e672061637465642064726976696e6720627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.11.1.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.1.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.4.20|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.6.9|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.14.8|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.16.14|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.19.11|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.26.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.29.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.29.29|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.1.6|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.1.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.4.20|2|13 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.6.9|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.14.8|2|13 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.16.14|2|15 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.19.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.26.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.29.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.29.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.1.6|2|19 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.1.10|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.4.20|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.6.9|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.14.8|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.16.14|2|28 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.19.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.26.10|2|30 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.29.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.29.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.1.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.1.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.4.20|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.6.9|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.14.8|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.16.14|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.19.11|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.26.10|2|20 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.29.10|2|23 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.29.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.1.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.1.10|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.4.20|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.6.9|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.14.8|2|23 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.16.14|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.19.11|2|31 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.26.10|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.29.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.29.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.1.6|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.1.10|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.4.20|2|28 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.6.9|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.14.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.16.14|2|5 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.19.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.26.10|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.29.10|2|5 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.29.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.1.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.1.10|2|30 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.4.20|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.6.9|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.14.8|2|31 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.16.14|2|28 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.19.11|2|12 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.26.10|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.29.10|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.29.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.1.6|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.1.10|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.4.20|2|25 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.6.9|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.14.8|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.16.14|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.19.11|2|13 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.26.10|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.29.10|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.29.29|2|17 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.1.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.4.20|2|12 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.6.9|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.14.8|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.16.14|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.19.11|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.26.10|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.29.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.29.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.1.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.1.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.4.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.6.9|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.14.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.16.14|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.19.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.26.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.29.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.29.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.1.6|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.1.10|4x|4a6164656420666f7277617264207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.4.20|4|their +1.3.6.1.4.1.674.10892.1.1100.50.1.21.6.9|4x|666f7277617264207468656972206b657074 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.14.8|4x|717561696e746c79206f78656e20666f7277617264206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.16.14|4x|62757420666f7277617264206b657074206b6570742064726976696e67206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.19.11|4x|64726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.26.10|4|kept +1.3.6.1.4.1.674.10892.1.1100.50.1.21.29.10|4x|6f78656e206163746564206b657074207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.29.29|4x|64726976696e67206b65707420717561696e746c792064726976696e67206b657074204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.1.6|4|forward +1.3.6.1.4.1.674.10892.1.1100.50.1.22.1.10|4|acted +1.3.6.1.4.1.674.10892.1.1100.50.1.22.4.20|4x|61637465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.6.9|4x|666f727761726420627574204a6164656420627574204a6164656420666f727761726420666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.14.8|4x|627574206b657074 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.16.14|4x|627574206f78656e20666f7277617264206b657074207a6f6d62696573207a6f6d6269657320627574206b657074 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.19.11|4x|62757420666f7277617264204a6164656420627574204a616465642061637465642062757420666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.26.10|4x|6f78656e206f78656e20627574204a61646564207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.29.10|4x|4a61646564207a6f6d6269657320616374656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.29.29|4x|666f7277617264206f78656e20717561696e746c79204a616465642064726976696e67206b65707420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.1.6|4x|666f7277617264207a6f6d62696573206163746564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.1.10|4x|6b657074206f78656e207468656972207468656972206f78656e206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.23.4.20|4x|7468656972206b65707420717561696e746c792062757420666f7277617264206f78656e20627574206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.6.9|4x|64726976696e67206f78656e20666f727761726420666f72776172642062757420717561696e746c79206f78656e2064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.14.8|4x|616374656420717561696e746c792062757420666f7277617264206b657074207a6f6d6269657320666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.16.14|4x|6275742064726976696e672064726976696e6720717561696e746c7920627574204a6164656420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.19.11|4x|6b657074204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.23.26.10|4x|64726976696e67207a6f6d626965732064726976696e67206f78656e207468656972207a6f6d62696573204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.29.10|4x|746865697220717561696e746c79207a6f6d6269657320717561696e746c7920627574207a6f6d62696573206163746564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.29.29|4x|4a61646564204a61646564207468656972207468656972206b657074206163746564206f78656e207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.1.6|4x|62757420717561696e746c79207a6f6d626965732062757420616374656420627574 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.1.10|4x|64726976696e67206b65707420666f7277617264206b657074206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.4.20|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.50.1.24.6.9|4|their +1.3.6.1.4.1.674.10892.1.1100.50.1.24.14.8|4x|4a6164656420746865697220717561696e746c79206b65707420746865697220717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.16.14|4x|627574206f78656e2064726976696e672064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.19.11|4x|64726976696e6720627574 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.26.10|4x|627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.24.29.10|4x|666f7277617264206b65707420717561696e746c792064726976696e6720627574207468656972204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.29.29|4x|6b65707420616374656420666f72776172642064726976696e67206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.1.6|4x|717561696e746c7920666f7277617264204a61646564206163746564206b65707420627574206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.1.10|4x|64726976696e67206b657074206b65707420717561696e746c7920627574206b657074206b657074206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.4.20|4x|6f78656e206b657074206163746564207468656972207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.6.9|4x|7a6f6d62696573204a616465642064726976696e67207468656972206f78656e207a6f6d62696573207468656972204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.14.8|4x|61637465642074686569722064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.16.14|4x|746865697220717561696e746c79207a6f6d6269657320666f7277617264207468656972206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.19.11|4|acted +1.3.6.1.4.1.674.10892.1.1100.50.1.25.26.10|4x|717561696e746c79204a6164656420627574207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.29.10|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.50.1.25.29.29|4x|7a6f6d62696573206b657074206f78656e207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.1.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.4.20|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.6.9|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.14.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.16.14|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.19.11|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.26.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.29.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.29.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.1.10|2|12 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.4.20|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.6.9|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.14.8|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.16.14|2|14 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.19.11|2|19 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.26.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.29.10|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.29.29|2|20 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.1.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.5.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.6.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.9.10|2|9 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.9.16|2|9 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.12.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.12.23|2|12 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.16.27|2|16 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.22.15|2|22 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.31.28|2|31 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.1.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.5.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.6.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.9.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.9.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.12.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.12.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.16.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.22.15|2|15 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.31.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.1.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.5.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.9.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.9.16|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.12.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.12.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.16.27|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.22.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.31.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.1.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.5.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.6.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.9.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.9.16|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.12.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.12.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.16.27|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.22.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.31.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.1.23|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.5.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.6.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.9.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.9.16|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.12.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.12.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.16.27|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.22.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.31.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.1.23|2|8 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.5.29|2|14 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.6.11|2|21 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.9.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.9.16|2|17 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.12.18|2|22 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.12.23|2|17 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.16.27|2|5 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.22.15|2|20 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.31.28|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.1.23|2|11 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.5.29|2|25 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.6.11|2|29 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.9.10|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.9.16|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.12.18|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.12.23|2|15 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.16.27|2|26 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.22.15|2|3 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.31.28|2|5 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.1.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.5.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.6.11|2|15 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.9.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.9.16|2|0 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.12.23|2|19 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.16.27|2|25 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.22.15|2|8 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.31.28|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.1.23|2|17 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.5.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.6.11|2|0 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.9.10|2|14 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.9.16|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.12.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.16.27|2|15 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.22.15|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.31.28|2|19 +1.3.6.1.4.1.674.10892.1.1100.60.1.10.1.23|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.5.29|4x|6b65707420627574 +1.3.6.1.4.1.674.10892.1.1100.60.1.10.6.11|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.9.10|4x|6b65707420627574 +1.3.6.1.4.1.674.10892.1.1100.60.1.10.9.16|4x|6b65707420627574 +1.3.6.1.4.1.674.10892.1.1100.60.1.10.12.18|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.12.23|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.16.27|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.22.15|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.31.28|4x|627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.60.1.11.1.23|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.5.29|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.6.11|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.9.10|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.9.16|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.12.18|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.12.23|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.16.27|4x|627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.60.1.11.22.15|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.31.28|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.70.1.1.7.27|2|7 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.10.29|2|10 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.12.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.17.6|2|17 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.23.22|2|23 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.23.28|2|23 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.27.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.27.30|2|27 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.31.21|2|31 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.7.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.10.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.12.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.17.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.23.22|2|22 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.23.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.27.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.27.30|2|30 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.31.21|2|21 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.7.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.10.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.17.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.23.22|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.23.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.27.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.27.30|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.31.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.7.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.10.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.17.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.23.22|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.23.28|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.27.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.27.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.31.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.7.27|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.10.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.17.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.23.22|2|5 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.23.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.27.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.27.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.31.21|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.7.27|2|22 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.10.29|2|13 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.12.18|2|25 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.17.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.23.22|2|28 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.23.28|2|31 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.27.29|2|9 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.27.30|2|31 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.31.21|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.7.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.10.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.17.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.23.22|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.23.28|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.27.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.27.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.31.21|2|5 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.7.27|4x|64726976696e672064726976696e67206f78656e206b657074207468656972206f78656e207468656972206163746564 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.10.29|4x|6f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.12.18|4x|6b657074207468656972 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.17.6|4x|7468656972206b6570742064726976696e6720746865697220627574206b65707420616374656420616374656420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.23.22|4x|64726976696e67206b657074204a61646564207a6f6d6269657320627574204a6164656420666f7277617264204a61646564206b657074 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.23.28|4x|6f78656e206f78656e +1.3.6.1.4.1.674.10892.1.1100.70.1.8.27.29|4x|4a61646564206f78656e2062757420717561696e746c79206f78656e20666f7277617264206b657074206163746564206b657074 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.27.30|4x|6f78656e207468656972204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.31.21|4x|6b6570742064726976696e672064726976696e6720616374656420717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.1.1100.80.1.1.2.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.80.1.1.7.10|2|7 +1.3.6.1.4.1.674.10892.1.1100.80.1.2.2.24|2|24 +1.3.6.1.4.1.674.10892.1.1100.80.1.2.7.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.80.1.3.2.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.80.1.3.7.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.80.1.4.2.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.80.1.4.7.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.80.1.5.2.24|2|6 +1.3.6.1.4.1.674.10892.1.1100.80.1.5.7.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.80.1.6.2.24|2|11 +1.3.6.1.4.1.674.10892.1.1100.80.1.6.7.10|2| +1.3.6.1.4.1.674.10892.1.1100.80.1.7.2.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.80.1.7.7.10|2|30 +1.3.6.1.4.1.674.10892.1.1100.80.1.8.2.24|4x|666f7277617264207a6f6d626965732064726976696e6720666f727761726420666f7277617264206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.80.1.8.7.10|4x|4a61646564206163746564206b65707420666f7277617264207a6f6d62696573206b657074207468656972 +1.3.6.1.4.1.674.10892.1.1100.80.1.9.2.24|4x|64726976696e67206f78656e206f78656e20627574 +1.3.6.1.4.1.674.10892.1.1100.80.1.9.7.10|4x|6b65707420627574204a61646564206f78656e20717561696e746c79204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.80.1.10.2.24|2|11 +1.3.6.1.4.1.674.10892.1.1100.80.1.10.7.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.80.1.11.2.24|2|1 +1.3.6.1.4.1.674.10892.1.1100.80.1.11.7.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.1.30|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.9.20|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.13.8|2|13 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.14.29|2|14 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.22.8|2|22 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.23.9|2|23 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.23.13|2|23 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.27.22|2|27 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.27.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.29.13|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.1.30|2|30 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.9.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.13.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.14.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.22.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.23.9|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.23.13|2|13 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.27.22|2|22 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.27.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.29.13|2|13 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.1.30|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.9.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.13.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.14.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.22.8|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.23.9|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.23.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.27.22|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.27.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.29.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.1.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.9.20|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.13.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.14.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.22.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.23.9|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.23.13|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.27.22|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.27.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.29.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.1.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.9.20|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.13.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.14.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.22.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.23.9|2|5 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.23.13|2|5 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.27.22|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.27.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.29.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.1.30|2|11 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.9.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.13.8|2|12 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.14.29|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.22.8|2|23 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.23.9|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.23.13|2|7 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.27.22|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.27.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.29.13|2|27 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.1.30|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.9.20|2|18 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.13.8|2|20 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.14.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.22.8|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.23.9|2|21 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.23.13|2|14 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.27.22|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.27.29|2|8 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.29.13|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.1.30|2|28 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.9.20|2|7 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.13.8|2|21 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.14.29|2|10 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.22.8|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.23.9|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.23.13|2|7 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.27.22|2|11 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.27.29|2|24 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.29.13|2|25 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.1.30|2|24 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.9.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.13.8|2|25 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.14.29|2|31 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.22.8|2|21 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.23.9|2|24 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.23.13|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.27.22|2|5 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.27.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.29.13|2|25 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.1.30|4x|4a61646564207468656972204a6164656420666f727761726420666f72776172642061637465642064726976696e67206163746564 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.9.20|4x|64726976696e6720717561696e746c792062757420717561696e746c79207468656972207468656972206f78656e +1.3.6.1.4.1.674.10892.1.1100.82.1.10.13.8|4x|717561696e746c79207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.14.29|4x|6f78656e206163746564206b657074207a6f6d62696573204a6164656420717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.22.8|4x|4a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.23.9|4x|7a6f6d6269657320666f7277617264207a6f6d6269657320717561696e746c79204a61646564204a6164656420717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.23.13|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.27.22|4x|6275742064726976696e6720717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.27.29|4x|627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.29.13|4x|627574207a6f6d62696573206f78656e204a61646564206f78656e20666f7277617264206163746564206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.2.20|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.5.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.5.31|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.11.16|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.13.10|2|13 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.14.18|2|14 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.22.28|2|22 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.23.10|2|23 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.27.8|2|27 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.29.5|2|29 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.2.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.5.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.5.31|2|31 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.11.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.13.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.14.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.22.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.23.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.27.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.29.5|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.2.20|2|3 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.5.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.5.31|2|6 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.11.16|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.13.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.14.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.22.28|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.23.10|2|3 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.27.8|2|3 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.29.5|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.2.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.5.29|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.5.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.11.16|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.13.10|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.14.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.22.28|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.23.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.27.8|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.29.5|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.2.20|4x|6f78656e206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.5.29|4x|4a6164656420717561696e746c79207a6f6d62696573207468656972206f78656e204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.5.5.31|4x|616374656420666f7277617264206f78656e206b65707420717561696e746c7920717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.11.16|4x|627574204a61646564207a6f6d62696573206163746564204a6164656420717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.13.10|4x|717561696e746c792062757420717561696e746c7920666f7277617264206f78656e204a61646564204a616465642061637465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.14.18|4x|6f78656e207a6f6d62696573204a61646564204a61646564206b657074206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.22.28|4x|64726976696e6720666f727761726420746865697220666f7277617264206163746564207a6f6d6269657320717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.23.10|4x|64726976696e6720746865697220666f727761726420627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.27.8|4x|746865697220717561696e746c79206b657074207468656972207468656972206b6570742064726976696e67207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.29.5|4x|7468656972206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.2.20|4x|717561696e746c7920717561696e746c79207468656972206b65707420627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.5.29|4x|6b65707420717561696e746c7920616374656420717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.5.31|4x|666f7277617264206f78656e206b657074206f78656e20627574206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.11.16|4x|74686569722062757420666f7277617264204a61646564207a6f6d62696573207468656972206f78656e20666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.13.10|4x|6b65707420717561696e746c792061637465642064726976696e67204a61646564204a61646564204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.14.18|4x|7a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.6.22.28|4x|4a61646564206163746564206f78656e204a61646564204a6164656420666f7277617264204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.6.23.10|4x|64726976696e6720717561696e746c79206275742062757420627574206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.27.8|4x|666f727761726420666f7277617264206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.6.29.5|4|their +1.3.6.1.4.1.674.10892.1.1100.90.1.7.2.20|4x|666f7277617264206275742064726976696e67204a61646564206f78656e20717561696e746c7920717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.5.29|4x|6b65707420627574206f78656e206b657074206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.5.31|4|Jaded +1.3.6.1.4.1.674.10892.1.1100.90.1.7.11.16|4x|7468656972206f78656e2064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.13.10|4x|7468656972206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.7.14.18|4x|6163746564206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.22.28|4x|7a6f6d6269657320616374656420627574206b657074206f78656e207468656972206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.23.10|4|acted +1.3.6.1.4.1.674.10892.1.1100.90.1.7.27.8|4x|7a6f6d6269657320627574207468656972206163746564206b65707420717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.7.29.5|4|acted +1.3.6.1.4.1.674.10892.1.1100.90.1.8.2.20|4x|717561696e746c792064726976696e67204a61646564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.5.29|4x|64726976696e6720746865697220717561696e746c79206163746564207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.5.31|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.11.16|4|driving +1.3.6.1.4.1.674.10892.1.1100.90.1.8.13.10|4x|746865697220666f727761726420666f7277617264204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.14.18|4x|746865697220717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.22.28|4x|7a6f6d6269657320717561696e746c7920616374656420717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.23.10|4x|6163746564206275742074686569722064726976696e6720666f727761726420627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.27.8|4x|6b657074204a616465642062757420717561696e746c79204a616465642062757420717561696e746c7920627574207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.29.5|4x|7a6f6d6269657320746865697220666f7277617264206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.2.20|4x|64726976696e67206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.5.29|4|their +1.3.6.1.4.1.674.10892.1.1100.90.1.9.5.31|4x|6f78656e206163746564206b65707420717561696e746c79206f78656e204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.11.16|4x|6163746564206f78656e206163746564207468656972206b657074206b65707420666f7277617264206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.13.10|4x|7a6f6d626965732064726976696e6720717561696e746c79206f78656e20666f72776172642074686569722064726976696e67207468656972 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.14.18|4x|64726976696e672064726976696e6720616374656420666f7277617264206163746564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.22.28|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.23.10|4x|74686569722064726976696e67206f78656e207468656972 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.27.8|4x|6f78656e207468656972206163746564207a6f6d626965732064726976696e67206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.29.5|4x|7a6f6d62696573206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.2.20|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.5.29|4x|6f78656e206f78656e206b65707420616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.5.31|4x|4a6164656420666f7277617264206f78656e20627574204a61646564206f78656e206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.11.16|4x|6275742062757420717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.13.10|4x|6163746564207a6f6d62696573207468656972206b65707420666f727761726420717561696e746c79204a61646564 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.14.18|4|forward +1.3.6.1.4.1.674.10892.1.1100.90.1.10.22.28|4x|4a616465642064726976696e6720666f727761726420627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.23.10|4|acted +1.3.6.1.4.1.674.10892.1.1100.90.1.10.27.8|4x|6b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.29.5|4|but +1.3.6.1.4.1.674.10892.1.1100.90.1.11.2.20|64x|85f6a05e +1.3.6.1.4.1.674.10892.1.1100.90.1.11.5.29|64x|9b24b7c1 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.5.31|64x|06b6dd9f +1.3.6.1.4.1.674.10892.1.1100.90.1.11.11.16|64x|74e47488 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.13.10|64x|2d03f39b +1.3.6.1.4.1.674.10892.1.1100.90.1.11.14.18|64x|c73fe9bd +1.3.6.1.4.1.674.10892.1.1100.90.1.11.22.28|64x|3e944c20 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.23.10|64x|dd469461 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.27.8|64x|bff6d3c5 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.29.5|64x|42610167 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.2.20|64x|573a73c3 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.5.29|64x|aaa560f9 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.5.31|64x|1f1395be +1.3.6.1.4.1.674.10892.1.1100.90.1.12.11.16|64x|69ed21b5 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.13.10|64x|810dc7d2 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.14.18|64x|f6832024 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.22.28|64x|493c8253 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.23.10|64x|1ba3a6c2 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.27.8|64x|3bf350c6 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.29.5|64x|f4db8f30 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.2.20|64x|63167384 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.5.29|64x|ed9f4617 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.5.31|64x|69accc18 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.11.16|64x|6b1a6bb3 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.13.10|64x|20fb07a2 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.14.18|64x|c0dc0432 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.22.28|64x|07c2cb42 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.23.10|64x|a9d42443 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.27.8|64x|be92b504 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.29.5|64x|f7d79fd8 +1.3.6.1.4.1.674.10892.1.1100.90.1.14.2.20|64x|b45d7d92 +1.3.6.1.4.1.674.10892.1.1100.90.1.14.5.29|64x|ecd178ae +1.3.6.1.4.1.674.10892.1.1100.90.1.14.5.31|64x|2808b770 +1.3.6.1.4.1.674.10892.1.1100.90.1.14.11.16|64x|ff9098dd +1.3.6.1.4.1.674.10892.1.1100.90.1.14.13.10|64x|b3ac9fed +1.3.6.1.4.1.674.10892.1.1100.90.1.14.14.18|64x|f164ac6b +1.3.6.1.4.1.674.10892.1.1100.90.1.14.22.28|64x|1d96bc8d +1.3.6.1.4.1.674.10892.1.1100.90.1.14.23.10|64x|6cdf4842 +1.3.6.1.4.1.674.10892.1.1100.90.1.14.27.8|64x|48d2370a +1.3.6.1.4.1.674.10892.1.1100.90.1.14.29.5|64x|323cfaf8 +1.3.6.1.4.1.674.10892.1.1100.90.1.15.2.20|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.5.29|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.5.31|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.11.16|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.13.10|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.14.18|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.22.28|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.23.10|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.27.8|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.29.5|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.2.20|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.5.29|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.5.31|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.11.16|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.13.10|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.14.18|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.22.28|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.23.10|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.27.8|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.29.5|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.17.2.20|2|22 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.5.29|2|14 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.5.31|2|30 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.11.16|2|7 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.13.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.14.18|2|9 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.22.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.23.10|2|19 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.27.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.29.5|2|26 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.2.20|2|22 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.5.29|2|23 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.5.31|2|15 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.11.16|2|7 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.13.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.14.18|2|10 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.22.28|2|19 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.23.10|2|30 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.27.8|2|23 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.29.5|2|7 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.2.20|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.5.29|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.5.31|2|21 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.11.16|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.13.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.14.18|2|19 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.22.28|2|26 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.23.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.27.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.29.5|2|18 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.2.20|2|26 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.5.29|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.5.31|2|25 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.11.16|2|30 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.13.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.14.18|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.22.28|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.23.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.27.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.29.5|2|30 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.2.20|2|7 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.5.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.5.31|2|6 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.11.16|2|6 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.13.10|2|14 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.14.18|2|15 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.22.28|2|14 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.23.10|2|20 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.27.8|2|13 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.29.5|2|21 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.2.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.5.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.5.31|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.11.16|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.13.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.14.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.22.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.23.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.27.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.29.5|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.5.29|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.5.31|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.11.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.13.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.14.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.22.28|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.23.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.27.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.29.5|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.5.29|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.5.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.11.16|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.13.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.14.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.22.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.23.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.27.8|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.29.5|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.2.20|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.5.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.5.31|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.11.16|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.13.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.14.18|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.22.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.23.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.27.8|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.29.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.5.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.5.31|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.11.16|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.13.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.14.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.22.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.23.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.27.8|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.29.5|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.5.29|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.5.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.11.16|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.13.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.14.18|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.22.28|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.23.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.27.8|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.29.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.5.29|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.5.31|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.11.16|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.13.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.14.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.22.28|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.23.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.27.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.29.5|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.2.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.5.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.5.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.11.16|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.13.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.14.18|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.22.28|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.23.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.27.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.29.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.1.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.7.26|2|7 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.11.12|2|11 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.11.20|2|11 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.17.23|2|17 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.19.3|2|19 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.20.10|2|20 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.24.23|2|24 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.27.7|2|27 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.28.19|2|28 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.1.13|2|13 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.7.26|2|26 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.11.12|2|12 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.11.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.17.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.19.3|2|3 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.20.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.24.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.27.7|2|7 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.28.19|2|19 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.1.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.7.26|2|2 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.11.12|2|4 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.11.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.17.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.19.3|2|2 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.20.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.24.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.27.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.28.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.1.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.7.26|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.11.12|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.11.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.17.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.19.3|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.20.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.24.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.27.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.28.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.1.13|2|0 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.7.26|2|0 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.11.12|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.11.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.17.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.19.3|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.20.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.24.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.27.7|2|0 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.28.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.1.13|2|12 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.7.26|2|21 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.11.12|2|8 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.11.20|2|8 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.17.23|2|14 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.19.3|2|28 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.20.10|2|25 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.24.23|2|9 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.27.7|2|15 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.28.19|2|12 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.1.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.3.2|2|3 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.9.14|2|9 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.18.23|2|18 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.21.26|2|21 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.22.26|2|22 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.23.16|2|23 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.24.10|2|24 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.26.18|2|26 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.31.10|2|31 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.1.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.3.2|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.9.14|2|14 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.18.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.21.26|2|26 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.22.26|2|26 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.23.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.24.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.26.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.31.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.1.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.3.2|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.9.14|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.18.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.21.26|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.22.26|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.23.16|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.24.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.26.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.31.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.1.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.3.2|2|1 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.9.14|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.18.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.21.26|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.22.26|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.23.16|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.24.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.26.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.31.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.1.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.3.2|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.9.14|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.18.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.21.26|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.22.26|2|3 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.23.16|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.24.10|2|5 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.26.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.31.10|2|3 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.1.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.3.2|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.9.14|2|23 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.18.23|2|19 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.21.26|2|9 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.22.26|2|5 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.23.16|2|13 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.24.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.26.18|2|19 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.31.10|2|14 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.1.8|4x|746865697220666f7277617264207468656972206f78656e +1.3.6.1.4.1.674.10892.1.1100.110.1.7.3.2|4x|717561696e746c7920627574207468656972207a6f6d62696573206b6570742061637465642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.9.14|4x|6f78656e204a61646564204a61646564206f78656e20627574204a61646564207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.18.23|4x|627574207468656972206163746564206b657074 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.21.26|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.110.1.7.22.26|4x|6b6570742064726976696e67206b657074 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.23.16|4|Jaded +1.3.6.1.4.1.674.10892.1.1100.110.1.7.24.10|4x|61637465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.26.18|4x|64726976696e67206f78656e206b65707420666f7277617264206b657074 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.31.10|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.110.1.8.1.8|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.3.2|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.9.14|2|1 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.18.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.21.26|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.22.26|2|5 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.23.16|2|3 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.24.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.26.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.31.10|2|3 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.6.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.8.19|2|8 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.9.5|2|9 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.9.21|2|9 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.11.17|2|11 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.20.15|2|20 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.25.11|2|25 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.25.13|2|25 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.25.19|2|25 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.28.6|2|28 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.6.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.8.19|2|19 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.9.5|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.9.21|2|21 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.11.17|2|17 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.20.15|2|15 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.25.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.25.13|2|13 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.25.19|2|19 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.28.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.8.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.9.5|2|6 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.9.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.11.17|2|6 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.20.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.25.11|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.25.13|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.25.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.28.6|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.6.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.8.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.9.5|2|3 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.9.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.11.17|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.20.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.25.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.25.13|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.25.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.28.6|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.6.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.8.19|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.9.5|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.9.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.11.17|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.20.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.25.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.25.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.25.19|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.28.6|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.8.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.9.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.9.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.11.17|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.20.15|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.25.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.25.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.25.19|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.28.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.6.11|4x|666f7277617264207a6f6d626965732064726976696e672064726976696e67207468656972 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.8.19|4x|6b65707420717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.9.5|4x|7a6f6d62696573204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.9.21|4x|4a6164656420666f72776172642064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.11.17|4x|61637465642064726976696e67206275742064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.20.15|4x|7a6f6d62696573206f78656e2064726976696e67206163746564206f78656e +1.3.6.1.4.1.674.10892.1.1100.112.1.7.25.11|4x|6163746564206f78656e20627574204a61646564 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.25.13|4x|64726976696e67204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.25.19|4x|7a6f6d6269657320627574204a616465642064726976696e67206b65707420717561696e746c7920666f727761726420627574 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.28.6|4|acted +1.3.6.1.4.1.674.10892.1.1100.112.1.8.6.11|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.8.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.9.5|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.9.21|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.11.17|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.20.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.25.11|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.25.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.25.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.28.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.8.19|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.9.5|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.9.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.11.17|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.20.15|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.25.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.25.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.25.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.28.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.6.11|2|13 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.8.19|2|14 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.9.5|2|10 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.9.21|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.11.17|2|12 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.20.15|2|28 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.25.11|2|28 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.25.13|2|17 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.25.19|2|24 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.28.6|2|17 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.6.11|2|25 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.8.19|2|30 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.9.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.9.21|2|7 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.11.17|2|12 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.20.15|2|22 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.25.11|2|13 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.25.13|2|23 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.25.19|2|8 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.28.6|2|31 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.6.11|2|12 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.8.19|2|16 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.9.5|2|19 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.9.21|2|19 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.11.17|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.20.15|2|31 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.25.11|2|18 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.25.13|2|31 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.25.19|2|18 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.28.6|2|13 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.8.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.9.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.9.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.11.17|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.20.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.25.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.25.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.25.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.28.6|2|1 +1.3.6.1.4.1.674.10892.1.1200.10.1.1.19.17|2|19 +1.3.6.1.4.1.674.10892.1.1200.10.1.1.21.21|2|21 +1.3.6.1.4.1.674.10892.1.1200.10.1.2.19.17|2|17 +1.3.6.1.4.1.674.10892.1.1200.10.1.2.21.21|2|21 +1.3.6.1.4.1.674.10892.1.1200.10.1.3.19.17|2|4 +1.3.6.1.4.1.674.10892.1.1200.10.1.3.21.21|2|2 +1.3.6.1.4.1.674.10892.1.1200.10.1.4.19.17|2|2 +1.3.6.1.4.1.674.10892.1.1200.10.1.4.21.21|2|8 +1.3.6.1.4.1.674.10892.1.1200.10.1.5.19.17|2|3 +1.3.6.1.4.1.674.10892.1.1200.10.1.5.21.21|2|1 +1.3.6.1.4.1.674.10892.1.1200.10.1.6.19.17|2|1 +1.3.6.1.4.1.674.10892.1.1200.10.1.6.21.21|2|1 +1.3.6.1.4.1.674.10892.1.1200.10.1.7.19.17|2|13 +1.3.6.1.4.1.674.10892.1.1200.10.1.7.21.21|2|10 +1.3.6.1.4.1.674.10892.1.1200.10.1.8.19.17|4x|7468656972206b657074206b657074207a6f6d62696573206b657074207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.1200.10.1.8.21.21|4x|7a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.1200.10.1.11.19.17|2|5 +1.3.6.1.4.1.674.10892.1.1200.10.1.11.21.21|2|3 +1.3.6.1.4.1.674.10892.1.2000.10.1.1.2.11|2|2 +1.3.6.1.4.1.674.10892.1.2000.10.1.1.8.3|2|8 +1.3.6.1.4.1.674.10892.1.2000.10.1.2.2.11|2|11 +1.3.6.1.4.1.674.10892.1.2000.10.1.2.8.3|2|3 +1.3.6.1.4.1.674.10892.1.2000.10.1.3.2.11|2|1 +1.3.6.1.4.1.674.10892.1.2000.10.1.3.8.3|2|2 +1.3.6.1.4.1.674.10892.1.2000.10.1.6.2.11|4x|666f7277617264206b6570742062757420717561696e746c79206b657074207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.2000.10.1.6.8.3|4x|6b657074204a61646564 +1.3.6.1.4.1.674.10892.1.2000.10.1.7.2.11|4x|6f78656e20717561696e746c79204a61646564207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.1.2000.10.1.7.8.3|4x|6f78656e2064726976696e67206b657074207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.2000.10.1.8.2.11|4x|627574207a6f6d6269657320627574206f78656e206163746564206163746564 +1.3.6.1.4.1.674.10892.1.2000.10.1.8.8.3|4x|666f727761726420666f72776172642061637465642064726976696e67206b6570742064726976696e672064726976696e67204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.2000.10.1.9.2.11|4x|666f72776172642062757420746865697220627574207a6f6d6269657320717561696e746c79207a6f6d62696573204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.1.2000.10.1.9.8.3|4x|7468656972207468656972204a6164656420627574206163746564204a6164656420616374656420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.2.4.1.1.1.1|2|2 +1.3.6.1.4.1.674.10892.2.4.1.1.1.2|2|83 +1.3.6.1.4.1.674.10892.2.4.1.1.6.1|2|2803 +1.3.6.1.4.1.674.10892.2.4.1.1.6.2|2|191739 +1.3.6.1.4.1.674.10892.2.4.1.1.13.1|2|1219 +1.3.6.1.4.1.674.10892.2.4.1.1.13.2|2|113 +1.3.6.1.4.1.674.10892.2.4.1.1.14.1|2|111 +1.3.6.1.4.1.674.10892.2.4.1.1.14.2|2|827 +1.3.6.1.4.1.674.10892.2.4.2.1.2.1|2|27 +1.3.6.1.4.1.674.10892.2.4.2.1.2.2|2|86 +1.3.6.1.4.1.674.10892.5.1.1.1.0|4x|717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.1.1.2.0|4|acted +1.3.6.1.4.1.674.10892.5.1.1.3.0|4x|6f78656e204a61646564206275742064726976696e67206163746564206f78656e +1.3.6.1.4.1.674.10892.5.1.1.4.0|4x|6163746564207a6f6d62696573207a6f6d6269657320717561696e746c792064726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.1.1.5.0|4x|7a6f6d62696573206b65707420616374656420627574207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.1.1.6.0|4x|717561696e746c79206f78656e2062757420746865697220666f727761726420627574 +1.3.6.1.4.1.674.10892.5.1.1.7.0|2|17 +1.3.6.1.4.1.674.10892.5.1.1.8.0|4x|616374656420666f7277617264206f78656e20717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.1.2.1.0|4x|7468656972206163746564206b65707420627574204a61646564 +1.3.6.1.4.1.674.10892.5.1.2.2.0|4x|6f78656e206163746564206b657074204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.2.3.0|4x|746865697220666f727761726420666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.1.3.1.0|4x|7a6f6d62696573204a61646564206b65707420746865697220627574207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.3.2.0|4x|616374656420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.1.3.3.0|4x|7468656972206b657074207468656972206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.1.3.4.0|4x|62757420627574 +1.3.6.1.4.1.674.10892.5.1.3.5.0|4|forward +1.3.6.1.4.1.674.10892.5.1.3.6.0|4x|666f727761726420616374656420666f7277617264206f78656e20717561696e746c79206f78656e20746865697220666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.1.3.7.0|2|3 +1.3.6.1.4.1.674.10892.5.1.3.8.0|4x|4a6164656420666f727761726420717561696e746c79204a61646564206f78656e204a6164656420627574206f78656e +1.3.6.1.4.1.674.10892.5.1.3.9.0|4x|6163746564206163746564 +1.3.6.1.4.1.674.10892.5.1.3.10.0|4x|6f78656e206b6570742064726976696e67206163746564206b657074206b657074206163746564 +1.3.6.1.4.1.674.10892.5.1.3.11.0|4x|7468656972207a6f6d62696573204a6164656420666f7277617264206f78656e207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.3.12.0|4x|6f78656e207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.1.3.13.0|2|20 +1.3.6.1.4.1.674.10892.5.1.3.14.0|4x|4a616465642064726976696e67207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.3.15.0|4x|4a6164656420627574207468656972 +1.3.6.1.4.1.674.10892.5.1.3.16.0|2|28 +1.3.6.1.4.1.674.10892.5.1.3.17.0|2|9 +1.3.6.1.4.1.674.10892.5.1.3.18.0|4x|6163746564207468656972206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.2.1.0|2|1 +1.3.6.1.4.1.674.10892.5.2.2.0|2|2 +1.3.6.1.4.1.674.10892.5.2.3.0|2|6 +1.3.6.1.4.1.674.10892.5.2.4.0|2|4 +1.3.6.1.4.1.674.10892.5.2.5.0|2|21 +1.3.6.1.4.1.674.10892.5.3.1.1.0|4|driving +1.3.6.1.4.1.674.10892.5.3.1.2.0|4x|6f78656e206b657074206163746564206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.5.3.1.3.0|2|1 +1.3.6.1.4.1.674.10892.5.3.1.4.0|4x|7468656972206b657074206f78656e +1.3.6.1.4.1.674.10892.5.3.1.5.0|4x|717561696e746c79206b65707420616374656420666f7277617264206f78656e206f78656e206b657074206b657074 +1.3.6.1.4.1.674.10892.5.3.1.6.0|4x|717561696e746c792064726976696e67206f78656e20666f7277617264207a6f6d62696573206f78656e206f78656e20717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.3.1.7.0|4x|616374656420616374656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.3.1.8.0|4x|666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.3.1.9.0|4|Jaded +1.3.6.1.4.1.674.10892.5.3.1.10.0|4x|6163746564207a6f6d62696573207468656972206f78656e207a6f6d6269657320666f7277617264206b657074204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.3.1.11.0|4x|627574204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1.1.0|2|15 +1.3.6.1.4.1.674.10892.5.4.1.2.0|2|20 +1.3.6.1.4.1.674.10892.5.4.1.3.0|2|12 +1.3.6.1.4.1.674.10892.5.4.300.1.0|2|17 +1.3.6.1.4.1.674.10892.5.4.300.2.0|2|19 +1.3.6.1.4.1.674.10892.5.4.300.10.1.1.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.10.1.1.28|2|28 +1.3.6.1.4.1.674.10892.5.4.300.10.1.2.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.2.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.3.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.3.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.4.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.4.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.5.22|2|3 +1.3.6.1.4.1.674.10892.5.4.300.10.1.5.28|2|21 +1.3.6.1.4.1.674.10892.5.4.300.10.1.6.22|2|23 +1.3.6.1.4.1.674.10892.5.4.300.10.1.6.28|2|17 +1.3.6.1.4.1.674.10892.5.4.300.10.1.7.22|4x|6163746564207468656972207468656972207a6f6d6269657320666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.10.1.7.28|4|their +1.3.6.1.4.1.674.10892.5.4.300.10.1.8.22|4x|6b657074206b657074206f78656e +1.3.6.1.4.1.674.10892.5.4.300.10.1.8.28|4x|7a6f6d6269657320616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.10.1.9.22|4x|666f727761726420746865697220666f7277617264207468656972206f78656e206275742064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.4.300.10.1.9.28|4x|64726976696e67207468656972204a61646564206f78656e2064726976696e67207a6f6d62696573204a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.10.1.10.22|4x|6f78656e204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.10.1.10.28|4|driving +1.3.6.1.4.1.674.10892.5.4.300.10.1.11.22|4|kept +1.3.6.1.4.1.674.10892.5.4.300.10.1.11.28|4|acted +1.3.6.1.4.1.674.10892.5.4.300.10.1.12.22|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.12.28|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.13.22|2|27 +1.3.6.1.4.1.674.10892.5.4.300.10.1.13.28|2|14 +1.3.6.1.4.1.674.10892.5.4.300.10.1.14.22|2|7 +1.3.6.1.4.1.674.10892.5.4.300.10.1.14.28|2|5 +1.3.6.1.4.1.674.10892.5.4.300.10.1.15.22|4|oxen +1.3.6.1.4.1.674.10892.5.4.300.10.1.15.28|4|but +1.3.6.1.4.1.674.10892.5.4.300.10.1.24.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.24.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.25.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.25.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.28.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.28.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.29.22|2|10 +1.3.6.1.4.1.674.10892.5.4.300.10.1.29.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.30.22|2|0 +1.3.6.1.4.1.674.10892.5.4.300.10.1.30.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.31.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.31.28|2|8 +1.3.6.1.4.1.674.10892.5.4.300.10.1.32.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.32.28|2|9 +1.3.6.1.4.1.674.10892.5.4.300.10.1.33.22|2|31 +1.3.6.1.4.1.674.10892.5.4.300.10.1.33.28|2|16 +1.3.6.1.4.1.674.10892.5.4.300.10.1.34.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.34.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.35.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.35.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.36.22|2|19 +1.3.6.1.4.1.674.10892.5.4.300.10.1.36.28|2|25 +1.3.6.1.4.1.674.10892.5.4.300.10.1.38.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.38.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.39.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.39.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.44.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.44.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.45.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.45.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.46.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.46.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.47.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.10.1.47.28|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.48.22|4x|7468656972206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.4.300.10.1.48.28|4x|6b657074204a61646564207468656972206163746564 +1.3.6.1.4.1.674.10892.5.4.300.10.1.49.22|4x|7a6f6d62696573207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.10.1.49.28|4x|616374656420627574204a61646564207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.4.300.40.1.1.10.22|2|10 +1.3.6.1.4.1.674.10892.5.4.300.40.1.1.16.20|2|16 +1.3.6.1.4.1.674.10892.5.4.300.40.1.2.10.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.40.1.2.16.20|2|20 +1.3.6.1.4.1.674.10892.5.4.300.40.1.3.10.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.40.1.3.16.20|2|8 +1.3.6.1.4.1.674.10892.5.4.300.40.1.4.10.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.40.1.4.16.20|2|8 +1.3.6.1.4.1.674.10892.5.4.300.40.1.5.10.22|4x|666f7277617264204a616465642064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.40.1.5.16.20|4x|717561696e746c792064726976696e67204a6164656420717561696e746c79206163746564206b657074207a6f6d62696573207a6f6d6269657320627574 +1.3.6.1.4.1.674.10892.5.4.300.40.1.6.10.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.40.1.6.16.20|2|1 +1.3.6.1.4.1.674.10892.5.4.300.40.1.7.10.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.40.1.7.16.20|2|4 +1.3.6.1.4.1.674.10892.5.4.300.40.1.8.10.22|4x|4a616465642074686569722074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.40.1.8.16.20|4x|62757420627574206b6570742062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.300.60.1.1.3.10|2|3 +1.3.6.1.4.1.674.10892.5.4.300.60.1.1.23.26|2|23 +1.3.6.1.4.1.674.10892.5.4.300.60.1.2.3.10|2|10 +1.3.6.1.4.1.674.10892.5.4.300.60.1.2.23.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.60.1.3.3.10|2|6 +1.3.6.1.4.1.674.10892.5.4.300.60.1.3.23.26|2|1 +1.3.6.1.4.1.674.10892.5.4.300.60.1.4.3.10|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.4.23.26|2|6 +1.3.6.1.4.1.674.10892.5.4.300.60.1.5.3.10|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.5.23.26|2|5 +1.3.6.1.4.1.674.10892.5.4.300.60.1.6.3.10|2|14 +1.3.6.1.4.1.674.10892.5.4.300.60.1.6.23.26|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.7.3.10|2|21 +1.3.6.1.4.1.674.10892.5.4.300.60.1.7.23.26|2|22 +1.3.6.1.4.1.674.10892.5.4.300.60.1.8.3.10|4x|6163746564206163746564204a61646564206f78656e206f78656e207a6f6d6269657320627574206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.60.1.8.23.26|4x|64726976696e67207468656972206163746564207468656972206f78656e20666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.300.60.1.9.3.10|2|1 +1.3.6.1.4.1.674.10892.5.4.300.60.1.9.23.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.60.1.11.3.10|4x|616374656420616374656420746865697220717561696e746c79206f78656e207a6f6d626965732064726976696e67206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.60.1.11.23.26|4x|746865697220627574206163746564206f78656e20627574206b657074 +1.3.6.1.4.1.674.10892.5.4.300.70.1.1.18.23|2|18 +1.3.6.1.4.1.674.10892.5.4.300.70.1.1.29.21|2|29 +1.3.6.1.4.1.674.10892.5.4.300.70.1.2.18.23|2|23 +1.3.6.1.4.1.674.10892.5.4.300.70.1.2.29.21|2|21 +1.3.6.1.4.1.674.10892.5.4.300.70.1.3.18.23|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.3.29.21|2|4 +1.3.6.1.4.1.674.10892.5.4.300.70.1.4.18.23|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.4.29.21|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.5.18.23|2|4 +1.3.6.1.4.1.674.10892.5.4.300.70.1.5.29.21|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.6.18.23|2|3 +1.3.6.1.4.1.674.10892.5.4.300.70.1.6.29.21|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.7.18.23|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.7.29.21|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.8.18.23|4x|4a61646564206f78656e2064726976696e67207a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.674.10892.5.4.300.70.1.8.29.21|4x|6b657074207a6f6d62696573206f78656e206b6570742064726976696e6720666f7277617264206f78656e +1.3.6.1.4.1.674.10892.5.4.300.90.1.1.2.16|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.1.6.30|2|6 +1.3.6.1.4.1.674.10892.5.4.300.90.1.2.2.16|2|16 +1.3.6.1.4.1.674.10892.5.4.300.90.1.2.6.30|2|30 +1.3.6.1.4.1.674.10892.5.4.300.90.1.3.2.16|2|10 +1.3.6.1.4.1.674.10892.5.4.300.90.1.3.6.30|2|13 +1.3.6.1.4.1.674.10892.5.4.300.90.1.4.2.16|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.4.6.30|2|3 +1.3.6.1.4.1.674.10892.5.4.300.90.1.5.2.16|2|3 +1.3.6.1.4.1.674.10892.5.4.300.90.1.5.6.30|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.6.2.16|4x|74686569722061637465642064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.6.6.30|4x|717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.90.1.7.2.16|4x|746865697220666f7277617264206b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.7.6.30|4x|7468656972206f78656e206b65707420746865697220627574206163746564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.8.2.16|4|their +1.3.6.1.4.1.674.10892.5.4.300.90.1.8.6.30|4|Jaded +1.3.6.1.4.1.674.10892.5.4.300.90.1.9.2.16|4x|4a61646564206f78656e204a6164656420717561696e746c7920627574207468656972206275742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.90.1.9.6.30|4x|4a61646564206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.10.2.16|4x|616374656420627574 +1.3.6.1.4.1.674.10892.5.4.300.90.1.10.6.30|4x|666f72776172642064726976696e67204a61646564206b657074207468656972206b6570742062757420627574206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.11.2.16|4|kept +1.3.6.1.4.1.674.10892.5.4.300.90.1.11.6.30|4x|6b657074206b65707420666f7277617264207a6f6d6269657320666f7277617264206b657074204a61646564206163746564206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.12.2.16|4x|7a6f6d62696573206b657074207a6f6d62696573207a6f6d6269657320616374656420627574207468656972 +1.3.6.1.4.1.674.10892.5.4.300.90.1.12.6.30|4|their +1.3.6.1.4.1.674.10892.5.4.600.10.1.1.5.22|2|5 +1.3.6.1.4.1.674.10892.5.4.600.10.1.1.26.20|2|26 +1.3.6.1.4.1.674.10892.5.4.600.10.1.2.5.22|2|22 +1.3.6.1.4.1.674.10892.5.4.600.10.1.2.26.20|2|20 +1.3.6.1.4.1.674.10892.5.4.600.10.1.3.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.3.26.20|2|4 +1.3.6.1.4.1.674.10892.5.4.600.10.1.4.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.4.26.20|2|1 +1.3.6.1.4.1.674.10892.5.4.600.10.1.5.5.22|2|5 +1.3.6.1.4.1.674.10892.5.4.600.10.1.5.26.20|2|6 +1.3.6.1.4.1.674.10892.5.4.600.10.1.6.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.6.26.20|2|9 +1.3.6.1.4.1.674.10892.5.4.600.10.1.7.5.22|4x|717561696e746c7920717561696e746c79206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.600.10.1.7.26.20|4x|6b657074207a6f6d62696573204a616465642064726976696e67207a6f6d62696573204a61646564204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.600.10.1.8.5.22|2|4 +1.3.6.1.4.1.674.10892.5.4.600.10.1.8.26.20|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.1.16.26|2|16 +1.3.6.1.4.1.674.10892.5.4.600.12.1.1.17.15|2|17 +1.3.6.1.4.1.674.10892.5.4.600.12.1.2.16.26|2|26 +1.3.6.1.4.1.674.10892.5.4.600.12.1.2.17.15|2|15 +1.3.6.1.4.1.674.10892.5.4.600.12.1.3.16.26|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.3.17.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.4.16.26|2|10 +1.3.6.1.4.1.674.10892.5.4.600.12.1.4.17.15|2|10 +1.3.6.1.4.1.674.10892.5.4.600.12.1.5.16.26|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.5.17.15|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.6.16.26|2|7 +1.3.6.1.4.1.674.10892.5.4.600.12.1.6.17.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.7.16.26|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.7.17.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.8.16.26|4x|7a6f6d626965732064726976696e672064726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.4.600.12.1.8.17.15|4x|7a6f6d62696573207468656972207a6f6d62696573207468656972206163746564204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.600.12.1.9.16.26|2|26 +1.3.6.1.4.1.674.10892.5.4.600.12.1.9.17.15|2|19 +1.3.6.1.4.1.674.10892.5.4.600.12.1.10.16.26|2|6 +1.3.6.1.4.1.674.10892.5.4.600.12.1.10.17.15|2|11 +1.3.6.1.4.1.674.10892.5.4.600.12.1.11.16.26|2|16 +1.3.6.1.4.1.674.10892.5.4.600.12.1.11.17.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.12.16.26|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.12.17.15|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.13.16.26|2|0 +1.3.6.1.4.1.674.10892.5.4.600.12.1.13.17.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.14.16.26|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.14.17.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.15.16.26|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.12.1.15.17.15|4|zombies +1.3.6.1.4.1.674.10892.5.4.600.12.1.16.16.26|2|19 +1.3.6.1.4.1.674.10892.5.4.600.12.1.16.17.15|2|12 +1.3.6.1.4.1.674.10892.5.4.600.50.1.1.20.31|2|20 +1.3.6.1.4.1.674.10892.5.4.600.50.1.1.21.13|2|21 +1.3.6.1.4.1.674.10892.5.4.600.50.1.2.20.31|2|31 +1.3.6.1.4.1.674.10892.5.4.600.50.1.2.21.13|2|13 +1.3.6.1.4.1.674.10892.5.4.600.50.1.3.20.31|2|1 +1.3.6.1.4.1.674.10892.5.4.600.50.1.3.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.4.20.31|2|6 +1.3.6.1.4.1.674.10892.5.4.600.50.1.4.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.5.20.31|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.5.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.6.20.31|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.6.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.7.20.31|4x|717561696e746c7920627574206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.50.1.7.21.13|4x|6b657074206b6570742074686569722062757420717561696e746c79206b65707420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.4.700.20.1.1.7.28|2|7 +1.3.6.1.4.1.674.10892.5.4.700.20.1.1.15.28|2|15 +1.3.6.1.4.1.674.10892.5.4.700.20.1.2.7.28|2|28 +1.3.6.1.4.1.674.10892.5.4.700.20.1.2.15.28|2|28 +1.3.6.1.4.1.674.10892.5.4.700.20.1.3.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.3.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.4.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.4.15.28|2|6 +1.3.6.1.4.1.674.10892.5.4.700.20.1.5.7.28|2|6 +1.3.6.1.4.1.674.10892.5.4.700.20.1.5.15.28|2|3 +1.3.6.1.4.1.674.10892.5.4.700.20.1.6.7.28|2|12 +1.3.6.1.4.1.674.10892.5.4.700.20.1.6.15.28|2|14 +1.3.6.1.4.1.674.10892.5.4.700.20.1.7.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.7.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.8.7.28|4x|717561696e746c792074686569722062757420666f7277617264206163746564206163746564206b657074204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.700.20.1.8.15.28|4x|6275742064726976696e6720717561696e746c79206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.700.20.1.9.7.28|2|9 +1.3.6.1.4.1.674.10892.5.4.700.20.1.9.15.28|2|24 +1.3.6.1.4.1.674.10892.5.4.700.20.1.10.7.28|2|14 +1.3.6.1.4.1.674.10892.5.4.700.20.1.10.15.28|2|22 +1.3.6.1.4.1.674.10892.5.4.700.20.1.11.7.28|2|27 +1.3.6.1.4.1.674.10892.5.4.700.20.1.11.15.28|2|1 +1.3.6.1.4.1.674.10892.5.4.700.20.1.12.7.28|2|12 +1.3.6.1.4.1.674.10892.5.4.700.20.1.12.15.28|2|25 +1.3.6.1.4.1.674.10892.5.4.700.20.1.13.7.28|2|24 +1.3.6.1.4.1.674.10892.5.4.700.20.1.13.15.28|2|7 +1.3.6.1.4.1.674.10892.5.4.700.20.1.14.7.28|2|31 +1.3.6.1.4.1.674.10892.5.4.700.20.1.14.15.28|2|22 +1.3.6.1.4.1.674.10892.5.4.700.20.1.15.7.28|2|4 +1.3.6.1.4.1.674.10892.5.4.700.20.1.15.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.16.7.28|2|1 +1.3.6.1.4.1.674.10892.5.4.700.20.1.16.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.1.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.1.19.1|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.2.4.24|2|24 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.2.19.1|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.3.4.24|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.3.19.1|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.4.4.24|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.4.19.1|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.5.4.24|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.5.19.1|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.7.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.7.19.1|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.8.4.24|4x|4a61646564206b6570742064726976696e672064726976696e6720666f7277617264207468656972206163746564 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.8.19.1|4|driving +1.3.6.1.4.1.674.10892.5.4.1100.30.1.9.4.24|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.9.19.1|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.10.4.24|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.10.19.1|2|18 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.11.4.24|2|27 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.11.19.1|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.12.4.24|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.12.19.1|2|9 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.13.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.13.19.1|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.14.4.24|2|15 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.14.19.1|2|7 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.16.4.24|4x|7a6f6d6269657320717561696e746c792064726976696e6720717561696e746c7920666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.16.19.1|4x|717561696e746c7920627574206b657074 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.17.4.24|2|25 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.17.19.1|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.18.4.24|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.18.19.1|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.19.4.24|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.19.19.1|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.20.4.24|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.20.19.1|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.21.4.24|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.21.19.1|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.22.4.24|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.22.19.1|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.23.4.24|4x|627574206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.23.19.1|4x|6275742064726976696e67206f78656e206275742064726976696e67206f78656e206f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.26.4.24|4x|746865697220666f7277617264206f78656e +1.3.6.1.4.1.674.10892.5.4.1100.30.1.26.19.1|4x|7a6f6d6269657320717561696e746c79204a6164656420627574204a616465642064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.1.22.21|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.1.29.4|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.2.22.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.2.29.4|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.3.22.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.3.29.4|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.4.22.21|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.4.29.4|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.5.22.21|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.5.29.4|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.7.22.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.7.29.4|2|26 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.8.22.21|4x|717561696e746c7920666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.8.29.4|4x|6b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.10.22.21|4|forward +1.3.6.1.4.1.674.10892.5.4.1100.50.1.10.29.4|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.14.22.21|2|7 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.14.29.4|2|28 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.15.22.21|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.15.29.4|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.21.22.21|4x|666f7277617264207a6f6d62696573204a61646564206b65707420717561696e746c79206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.21.29.4|4|driving +1.3.6.1.4.1.674.10892.5.4.1100.50.1.22.22.21|4x|4a61646564206163746564207468656972204a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.22.29.4|4x|7468656972206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.23.22.21|4x|6163746564204a61646564206163746564206f78656e2061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.23.29.4|4x|4a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.26.22.21|4x|6f78656e20627574206163746564207468656972206f78656e206b6570742061637465642064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.26.29.4|4|kept +1.3.6.1.4.1.674.10892.5.4.1100.50.1.27.22.21|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.27.29.4|2|23 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.1.10.9|2|10 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.1.20.20|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.2.10.9|2|9 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.2.20.20|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.3.10.9|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.3.20.20|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.4.10.9|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.4.20.20|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.5.10.9|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.5.20.20|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.7.10.9|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.7.20.20|2|10 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.8.10.9|4|acted +1.3.6.1.4.1.674.10892.5.4.1100.80.1.8.20.20|4x|4a61646564204a61646564204a61646564206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.9.10.9|4x|4a616465642074686569722064726976696e67207468656972206f78656e206b657074207468656972207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.9.20.20|4x|6163746564206b6570742062757420627574 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.12.10.9|4|kept +1.3.6.1.4.1.674.10892.5.4.1100.80.1.12.20.20|4x|7468656972206b6570742064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.1.3.23|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.1.29.25|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.2.3.23|2|23 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.2.29.25|2|25 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.3.3.23|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.3.29.25|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.4.3.23|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.4.29.25|2|11 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.6.3.23|4x|7a6f6d62696573207468656972207a6f6d62696573206163746564206163746564207468656972206275742062757420627574 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.6.29.25|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.7.3.23|4x|7a6f6d626965732064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.4.1100.90.1.7.29.25|4x|7468656972206b657074206b657074207468656972206b657074204a6164656420666f727761726420616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.15.3.23|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.15.29.25|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.16.3.23|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.16.29.25|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.17.3.23|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.17.29.25|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.18.3.23|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.18.29.25|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.19.3.23|2|12 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.19.29.25|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.23.3.23|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.23.29.25|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.27.3.23|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.27.29.25|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.28.3.23|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.28.29.25|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.29.3.23|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.29.29.25|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.30.3.23|4x|64726976696e67206f78656e20666f72776172642064726976696e67207a6f6d62696573206163746564204a61646564207a6f6d6269657320627574 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.30.29.25|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.4|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.4|4x|7a6f6d62696573207a6f6d62696573206b657074206b65707420717561696e746c792064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.21|4x|4a616465642062757420616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.4|2|10 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.4|4x|616374656420627574206b65707420717561696e746c79206f78656e207a6f6d6269657320717561696e746c7920666f7277617264206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.21|4x|6f78656e206b6570742064726976696e6720746865697220616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.4|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.21|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.4|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.4|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.4|4x|6b657074207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.21|4x|4a61646564206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.4|4x|717561696e746c79206b65707420616374656420616374656420627574206163746564207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.21|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.4|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.21|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.4|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.21|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.4|2|18 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.21|2|27 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.4|2|23 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.21|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.4|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.4|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.21|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.4|4x|717561696e746c79206f78656e2064726976696e6720717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.21|4x|4a6164656420666f7277617264204a6164656420717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.4|4x|717561696e746c79207a6f6d626965732061637465642064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.21|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.4|4x|6b65707420717561696e746c792064726976696e672064726976696e6720627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.21|4x|717561696e746c7920717561696e746c79207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.4|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.21|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.7|2|7 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.26|2|26 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.7|4x|717561696e746c7920717561696e746c79207a6f6d6269657320666f727761726420616374656420717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.26|4x|666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.7|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.26|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.7|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.26|4|Jaded +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.7|4x|6f78656e20627574206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.26|4x|6b65707420627574206b657074206f78656e207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.7|4|kept +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.26|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.7|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.26|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.7|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.26|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.7|4x|4a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.26|4x|4a61646564206f78656e2064726976696e67204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.7|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.26|4x|6f78656e206f78656e2064726976696e67206275742064726976696e67207468656972206f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.7|2|15 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.26|2|23 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.7|2|28 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.26|2|28 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.7|4x|7468656972206f78656e207468656972206163746564204a6164656420666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.26|4x|6275742074686569722074686569722062757420666f72776172642062757420616374656420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.7|4x|6163746564207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.26|4x|717561696e746c79207a6f6d6269657320717561696e746c79204a61646564206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.7|4x|666f7277617264204a61646564206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.26|4x|64726976696e67206b65707420717561696e746c79204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.7|4x|7468656972206f78656e20666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.26|4x|6b657074206b65707420627574206b657074206b657074206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.7|4x|666f7277617264204a6164656420717561696e746c7920666f72776172642061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.26|4x|61637465642074686569722064726976696e67206b6570742064726976696e67206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.7|4x|64726976696e6720717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.26|4x|717561696e746c79204a61646564206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.7|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.26|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.7|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.26|4x|6b65707420666f7277617264204a6164656420666f7277617264206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.7|4x|7468656972204a61646564206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.26|4x|64726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.7|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.26|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.8|4x|6469736b31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.21|4x|6469736b32 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.8|4x|4a61646564204a61646564206f78656e204a61646564206b657074206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.21|4x|666f7277617264206f78656e2062757420627574204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.8|4x|717561696e746c7920717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.21|4x|6163746564206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.8|4x|666f727761726420616374656420616374656420666f7277617264207a6f6d62696573206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.21|4x|6b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.8|4|driving +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.21|4x|627574206b657074204a61646564207a6f6d6269657320616374656420627574206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.8|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.21|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.8|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.21|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.8|4x|74686569722064726976696e67206f78656e207a6f6d6269657320746865697220666f727761726420746865697220717561696e746c7920717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.21|4x|666f727761726420666f7277617264207a6f6d62696573206b65707420717561696e746c79206f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.8|4x|6f78656e206163746564204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.21|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.8|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.8|4x|64726976696e67206f78656e206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.21|4x|717561696e746c7920666f727761726420746865697220627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.8|4|forward +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.21|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.8|4x|4a61646564206f78656e206f78656e206163746564204a61646564207a6f6d62696573206275742062757420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.21|4x|717561696e746c792064726976696e6720666f7277617264207a6f6d62696573206b657074207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.8|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.21|2|19 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.8|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.8|4x|666f7277617264206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.21|4x|6b657074206f78656e206f78656e2064726976696e67206163746564204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.8|4x|6f78656e20666f7277617264206f78656e206f78656e20666f727761726420627574207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.21|4x|627574207a6f6d626965732062757420746865697220717561696e746c7920746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.8|2|29 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.8|4x|666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.21|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.8|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.21|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.8|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.1.19|2|19 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.1.24|2|24 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.2.19|4x|64726976696e6720717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.2.24|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.4.19|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.4.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.11.19|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.11.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.15.19|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.15.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.20.19|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.20.24|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.21.19|4|driving +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.21.24|4x|666f7277617264207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.1.13|2|13 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.1.16|2|16 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.2.13|4x|737570706c7931 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.2.16|4x|737570706c7932 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.4.13|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.4.16|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.7.13|4x|7468656972206275742064726976696e67207a6f6d62696573206b65707420666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.7.16|4x|717561696e746c7920717561696e746c7920666f72776172642074686569722064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.9.13|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.9.16|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.15.13|4x|666f7277617264207468656972206f78656e206163746564206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.15.16|4x|717561696e746c7920627574206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.16.13|4x|4a6164656420627574206b65707420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.16.16|4x|62757420717561696e746c7920627574207a6f6d62696573204a61646564206163746564207468656972204a6164656420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.1.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.2.6|4x|7a6f6d62696573206b657074204a61646564206f78656e2064726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.2.8|4x|6b65707420627574207a6f6d626965732061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.4.6|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.4.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.7.6|2|24 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.7.8|2|25 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.8.6|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.8.8|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.9.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.9.8|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.10.6|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.10.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.11.6|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.11.8|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.13.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.13.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.15.6|4|Jaded +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.15.8|4x|64726976696e6720717561696e746c79204a6164656420717561696e746c79206f78656e20717561696e746c7920627574207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.16.6|4x|7a6f6d626965732064726976696e67204a6164656420616374656420717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.16.8|4x|6b657074204a6164656420627574207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.1.14|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.1.30|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.2.14|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.2.30|4x|6b657074204a616465642064726976696e67204a61646564207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.4.14|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.4.30|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.6.14|4x|64726976696e67204a616465642062757420627574206163746564204a6164656420717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.6.30|4x|666f7277617264206163746564206f78656e20666f7277617264204a6164656420666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.8.14|4x|6f78656e2064726976696e672062757420717561696e746c79206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.8.30|4x|4a6164656420616374656420627574206b657074206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.11.14|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.11.30|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.15.14|4x|717561696e746c79207a6f6d626965732061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.15.30|4x|746865697220627574206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.16.14|4x|7a6f6d626965732064726976696e67207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.16.30|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.1.17|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.1.18|2|18 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.4.17|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.4.18|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.6.17|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.6.18|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.10.17|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.10.18|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.20.17|4x|627574206275742061637465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.20.18|4x|6f78656e206163746564204a6164656420717561696e746c79206b65707420666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.21.17|4x|6163746564204a6164656420717561696e746c7920746865697220717561696e746c7920717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.21.18|4x|7468656972206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.2|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.2|4x|64726976696e6720717561696e746c79206b657074204a6164656420666f72776172642062757420666f7277617264206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.8|4x|7a6f6d6269657320717561696e746c79206b657074206b6570742062757420717561696e746c7920666f727761726420717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.2|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.8|2|25 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.2|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.2|2|7 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.8|2|10 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.2|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.8|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.2|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.2|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.8|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.2|2|12 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.8|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.2|4x|4a6164656420717561696e746c7920717561696e746c792064726976696e67206b657074207468656972206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.8|4x|6f78656e206b6570742064726976696e6720717561696e746c79207a6f6d62696573204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.2|4x|6f78656e2064726976696e67204a61646564206f78656e206f78656e204a61646564204a616465642062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.8|4x|62757420746865697220666f7277617264206b65707420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.2|4x|4a6164656420627574204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.8|4x|6f78656e20616374656420746865697220746865697220666f727761726420627574204a61646564207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.2|4x|6163746564206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.8|4x|4a61646564207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.2|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.8|2|27 diff --git a/test/new-e2e/ndm/snmp/compose/data/dummy.snmprec b/test/new-e2e/ndm/snmp/compose/data/dummy.snmprec new file mode 100644 index 0000000000000..3c0c255574c3f --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/dummy.snmprec @@ -0,0 +1,5 @@ +1.3.6.1.4.1.123456789.1.0|2|10 +1.3.6.1.4.1.123456789.2.0|4x|3930 +1.3.6.1.4.1.123456789.3.0|4x|313230 +1.3.6.1.4.1.123456789.4.0|4|22C +1.3.6.1.4.1.123456789.5.0|4|1.5 diff --git a/test/new-e2e/ndm/snmp/compose/data/entity.snmprec b/test/new-e2e/ndm/snmp/compose/data/entity.snmprec new file mode 100644 index 0000000000000..2d22231069c29 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/entity.snmprec @@ -0,0 +1,67 @@ +1.3.6.1.2.1.47.1.1.1.1.1.14|2|14 +1.3.6.1.2.1.47.1.1.1.1.2.14|4x|7468656972206b6570742074686569722064726976696e6720717561696e746c7920666f7277617264206163746564206b657074 +1.3.6.1.2.1.47.1.1.1.1.3.14|6|1.3.6.1.3.188.55.250.82.5.91.149.89.39 +1.3.6.1.2.1.47.1.1.1.1.4.14|2|13 +1.3.6.1.2.1.47.1.1.1.1.5.14|2|6 +1.3.6.1.2.1.47.1.1.1.1.6.14|2|1 +1.3.6.1.2.1.47.1.1.1.1.7.14|4x|717561696e746c79206f78656e20616374656420717561696e746c7920666f7277617264206275742064726976696e672064726976696e67 +1.3.6.1.2.1.47.1.1.1.1.8.14|4x|62757420666f7277617264206f78656e204a616465642064726976696e67206b65707420627574 +1.3.6.1.2.1.47.1.1.1.1.9.14|4x|4a6164656420627574 +1.3.6.1.2.1.47.1.1.1.1.10.14|4x|717561696e746c79207468656972206163746564207468656972206163746564206163746564207468656972206163746564206163746564 +1.3.6.1.2.1.47.1.1.1.1.11.14|4x|64726976696e67206b657074 +1.3.6.1.2.1.47.1.1.1.1.12.14|4x|6163746564206b65707420746865697220666f7277617264204a61646564 +1.3.6.1.2.1.47.1.1.1.1.13.14|4x|7a6f6d62696573207a6f6d62696573204a6164656420627574206163746564204a6164656420627574207a6f6d62696573 +1.3.6.1.2.1.47.1.1.1.1.14.14|4x|7a6f6d626965732061637465642064726976696e67206f78656e +1.3.6.1.2.1.47.1.1.1.1.15.14|4x|666f7277617264207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.2.1.47.1.1.1.1.16.14|2|1 +1.3.6.1.2.1.47.1.1.1.1.17.14|4x|07d209150d352003 +1.3.6.1.2.1.47.1.1.1.1.18.14|4x|717561696e746c792064726976696e67 +1.3.6.1.2.1.47.1.1.1.1.19.14|4| +1.3.6.1.2.1.47.1.2.1.1.1.5|2|5 +1.3.6.1.2.1.47.1.2.1.1.1.17|2|17 +1.3.6.1.2.1.47.1.2.1.1.2.5|4x|4a6164656420717561696e746c79206b65707420666f7277617264206b657074206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.47.1.2.1.1.2.17|4x|64726976696e67206163746564 +1.3.6.1.2.1.47.1.2.1.1.3.5|6|1.3.6.1.3.64.213.26.118.121 +1.3.6.1.2.1.47.1.2.1.1.3.17|6|1.3.6.1.3.98 +1.3.6.1.2.1.47.1.2.1.1.4.5|4x|6f78656e20627574206f78656e +1.3.6.1.2.1.47.1.2.1.1.4.17|4x|64726976696e6720627574206163746564206f78656e2062757420746865697220717561696e746c79 +1.3.6.1.2.1.47.1.2.1.1.5.5|4x|666f7277617264206f78656e20616374656420717561696e746c79206b65707420746865697220666f7277617264206f78656e +1.3.6.1.2.1.47.1.2.1.1.5.17|4x|6b657074204a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.47.1.2.1.1.6.5|6|1.3.6.1.3.186.48.80.241.211.233.121.131 +1.3.6.1.2.1.47.1.2.1.1.6.17|6|1.3.6.1.3.8 +1.3.6.1.2.1.47.1.2.1.1.7.5|4x|6b657074207a6f6d62696573204a6164656420666f7277617264206163746564 +1.3.6.1.2.1.47.1.2.1.1.7.17|4x|6f78656e207468656972 +1.3.6.1.2.1.47.1.2.1.1.8.5|4x|717561696e746c79206f78656e20717561696e746c7920717561696e746c79 +1.3.6.1.2.1.47.1.2.1.1.8.17|4x|64726976696e6720717561696e746c79207a6f6d62696573207a6f6d6269657320666f7277617264206b657074 +1.3.6.1.2.1.47.1.3.1.1.1.16.29|2|29 +1.3.6.1.2.1.47.1.3.1.1.1.27.9|2|9 +1.3.6.1.2.1.47.1.3.2.1.1.13.23|2|23 +1.3.6.1.2.1.47.1.3.2.1.1.25.23|2|23 +1.3.6.1.2.1.47.1.3.2.1.2.13.23|6|1.3.6.1.3.96.235.172.158.104.173 +1.3.6.1.2.1.47.1.3.2.1.2.25.23|6|1.3.6.1.3.166.89.181.51.175 +1.3.6.1.2.1.47.1.3.3.1.1.5.22|2|22 +1.3.6.1.2.1.47.1.3.3.1.1.14.6|2|6 +1.3.6.1.2.1.47.1.4.1.0|67|3122888737 +1.3.6.1.2.1.99.1.1.1.1.5|2|8 +1.3.6.1.2.1.99.1.1.1.1.17|2|2 +1.3.6.1.2.1.99.1.1.1.2.5|2|2 +1.3.6.1.2.1.99.1.1.1.2.17|2|15 +1.3.6.1.2.1.99.1.1.1.3.5|2|1 +1.3.6.1.2.1.99.1.1.1.3.17|2|4 +1.3.6.1.2.1.99.1.1.1.4.5|2|15 +1.3.6.1.2.1.99.1.1.1.4.17|2|21 +1.3.6.1.2.1.99.1.1.1.5.5|2|3 +1.3.6.1.2.1.99.1.1.1.5.17|2|1 +1.3.6.1.2.1.99.1.1.1.6.5|4x|61637465642064726976696e67207a6f6d62696573206b657074207468656972207a6f6d626965732064726976696e67206b657074 +1.3.6.1.2.1.99.1.1.1.6.17|4x|64726976696e67206b657074207468656972206f78656e2064726976696e6720627574204a61646564 +1.3.6.1.2.1.99.1.1.1.7.5|67|2030232691 +1.3.6.1.2.1.99.1.1.1.7.17|67|963254584 +1.3.6.1.2.1.99.1.1.1.8.5|66|25995 +1.3.6.1.2.1.99.1.1.1.8.17|66|52278 +1.3.6.1.6.3.10.2.1.1.0|4x|616374656420666f7277617264206f78656e +1.3.6.1.6.3.10.2.1.1.0|4x|62757420746865697220746865697220746865697220627574206f78656e +1.3.6.1.6.3.10.2.1.2.0|2|6 +1.3.6.1.6.3.10.2.1.2.0|2|12 +1.3.6.1.6.3.10.2.1.3.0|2|4 +1.3.6.1.6.3.10.2.1.3.0|2|7 +1.3.6.1.6.3.10.2.1.4.0|2|500 diff --git a/test/new-e2e/ndm/snmp/compose/data/f5-big-ip.snmprec b/test/new-e2e/ndm/snmp/compose/data/f5-big-ip.snmprec new file mode 100644 index 0000000000000..d1cc8416b126f --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/f5-big-ip.snmprec @@ -0,0 +1,34555 @@ +1.3.6.1.2.1.1.1.0|4x|4249472d4950205669727475616c2045646974696f6e203a204c696e757820332e31302e302d3836322e31342e342e656c372e76652e7838365f3634203a204249472d495020736f6674776172652072656c656173652031352e302e312c206275696c6420302e302e3131 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.3375.2.1.3.4.43 +1.3.6.1.2.1.1.3.0|67|181235303 +1.3.6.1.2.1.1.4.0|4x|437573746f6d6572204e616d65203c61646d696e40637573746f6d65722e636f6d3e +1.3.6.1.2.1.1.5.0|4x|66352d6269672d69702d6164632d676f6f642d62796f6c2d312d766d2e632e64617461646f672d696e746567726174696f6e732d6c61622e696e7465726e616c +1.3.6.1.2.1.1.6.0|4x|4e6574776f726b20436c6f7365742031 +1.3.6.1.2.1.1.7.0|2|78 +1.3.6.1.2.1.1.8.0|67|8266 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.6.3.11.3.1.1 +1.3.6.1.2.1.1.9.1.2.2|6|1.3.6.1.6.3.15.2.1.1 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.6.3.10.3.1.1 +1.3.6.1.2.1.1.9.1.2.4|6|1.3.6.1.6.3.1 +1.3.6.1.2.1.1.9.1.2.5|6|1.3.6.1.6.3.16.2.2.1 +1.3.6.1.2.1.1.9.1.2.6|6|1.3.6.1.6.3.13.3.1.3 +1.3.6.1.2.1.1.9.1.2.7|6|1.3.6.1.2.1.92 +1.3.6.1.2.1.1.9.1.2.8|6|1.3.6.1.2.1.31 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.2.1.48 +1.3.6.1.2.1.1.9.1.3.1|4x|546865204d494220666f72204d6573736167652050726f63657373696e6720616e64204469737061746368696e672e +1.3.6.1.2.1.1.9.1.3.2|4x|546865206d616e6167656d656e7420696e666f726d6174696f6e20646566696e6974696f6e7320666f722074686520534e4d5020557365722d6261736564205365637572697479204d6f64656c2e +1.3.6.1.2.1.1.9.1.3.3|4x|54686520534e4d50204d616e6167656d656e7420417263686974656374757265204d49422e +1.3.6.1.2.1.1.9.1.3.4|4x|546865204d4942206d6f64756c6520666f7220534e4d50763220656e746974696573 +1.3.6.1.2.1.1.9.1.3.5|4x|566965772d62617365642041636365737320436f6e74726f6c204d6f64656c20666f7220534e4d502e +1.3.6.1.2.1.1.9.1.3.6|4x|546865204d4942206d6f64756c657320666f72206d616e6167696e6720534e4d50204e6f74696669636174696f6e2c20706c75732066696c746572696e672e +1.3.6.1.2.1.1.9.1.3.7|4x|546865204d4942206d6f64756c6520666f72206c6f6767696e6720534e4d50204e6f74696669636174696f6e732e +1.3.6.1.2.1.1.9.1.3.8|4x|546865204d4942206d6f64756c6520746f2064657363726962652067656e65726963206f626a6563747320666f72206e6574776f726b20696e74657266616365207375622d6c6179657273 +1.3.6.1.2.1.1.9.1.3.9|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e6720495020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.4.1|67|92 +1.3.6.1.2.1.1.9.1.4.2|67|92 +1.3.6.1.2.1.1.9.1.4.3|67|92 +1.3.6.1.2.1.1.9.1.4.4|67|96 +1.3.6.1.2.1.1.9.1.4.5|67|96 +1.3.6.1.2.1.1.9.1.4.6|67|108 +1.3.6.1.2.1.1.9.1.4.7|67|108 +1.3.6.1.2.1.1.9.1.4.8|67|8261 +1.3.6.1.2.1.1.9.1.4.9|67|8266 +1.3.6.1.2.1.2.1.0|2|5 +1.3.6.1.2.1.2.2.1.1.32|2|32 +1.3.6.1.2.1.2.2.1.1.48|2|48 +1.3.6.1.2.1.2.2.1.1.80|2|80 +1.3.6.1.2.1.2.2.1.1.96|2|96 +1.3.6.1.2.1.2.2.1.1.112|2|112 +1.3.6.1.2.1.2.2.1.2.32|4|mgmt +1.3.6.1.2.1.2.2.1.2.48|4x|312e30 +1.3.6.1.2.1.2.2.1.2.80|4x|2f436f6d6d6f6e2f687474702d74756e6e656c +1.3.6.1.2.1.2.2.1.2.96|4x|2f436f6d6d6f6e2f736f636b732d74756e6e656c +1.3.6.1.2.1.2.2.1.2.112|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.2.1.2.2.1.3.32|2|6 +1.3.6.1.2.1.2.2.1.3.48|2|6 +1.3.6.1.2.1.2.2.1.3.80|2|0 +1.3.6.1.2.1.2.2.1.3.96|2|0 +1.3.6.1.2.1.2.2.1.3.112|2|6 +1.3.6.1.2.1.2.2.1.4.32|2|1460 +1.3.6.1.2.1.2.2.1.4.48|2|1460 +1.3.6.1.2.1.2.2.1.4.80|2|0 +1.3.6.1.2.1.2.2.1.4.96|2|0 +1.3.6.1.2.1.2.2.1.4.112|2|1460 +1.3.6.1.2.1.2.2.1.5.32|66|100000000 +1.3.6.1.2.1.2.2.1.5.48|66|4294967295 +1.3.6.1.2.1.2.2.1.5.80|66|0 +1.3.6.1.2.1.2.2.1.5.96|66|0 +1.3.6.1.2.1.2.2.1.5.112|66|4294967295 +1.3.6.1.2.1.2.2.1.6.32|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.48|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.80|4x|42010aa40034 +1.3.6.1.2.1.2.2.1.6.96|4x|42010aa40034 +1.3.6.1.2.1.2.2.1.6.112|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.7.32|2|1 +1.3.6.1.2.1.2.2.1.7.48|2|1 +1.3.6.1.2.1.2.2.1.7.80|2|1 +1.3.6.1.2.1.2.2.1.7.96|2|1 +1.3.6.1.2.1.2.2.1.7.112|2|1 +1.3.6.1.2.1.2.2.1.8.32|2|1 +1.3.6.1.2.1.2.2.1.8.48|2|1 +1.3.6.1.2.1.2.2.1.8.80|2|4 +1.3.6.1.2.1.2.2.1.8.96|2|4 +1.3.6.1.2.1.2.2.1.8.112|2|1 +1.3.6.1.2.1.2.2.1.9.32|67|0 +1.3.6.1.2.1.2.2.1.9.48|67|0 +1.3.6.1.2.1.2.2.1.9.80|67|0 +1.3.6.1.2.1.2.2.1.9.96|67|0 +1.3.6.1.2.1.2.2.1.9.112|67|0 +1.3.6.1.2.1.2.2.1.10.32|65|457067217 +1.3.6.1.2.1.2.2.1.10.48|65|601487263 +1.3.6.1.2.1.2.2.1.10.80|65|0 +1.3.6.1.2.1.2.2.1.10.96|65|0 +1.3.6.1.2.1.2.2.1.10.112|65|392203366 +1.3.6.1.2.1.2.2.1.11.32|65|893580 +1.3.6.1.2.1.2.2.1.11.48|65|762482 +1.3.6.1.2.1.2.2.1.11.80|65|0 +1.3.6.1.2.1.2.2.1.11.96|65|0 +1.3.6.1.2.1.2.2.1.11.112|65|861050 +1.3.6.1.2.1.2.2.1.12.32|65|0 +1.3.6.1.2.1.2.2.1.12.48|65|0 +1.3.6.1.2.1.2.2.1.12.80|65|0 +1.3.6.1.2.1.2.2.1.12.96|65|0 +1.3.6.1.2.1.2.2.1.12.112|65|0 +1.3.6.1.2.1.2.2.1.13.32|65|0 +1.3.6.1.2.1.2.2.1.13.48|65|0 +1.3.6.1.2.1.2.2.1.13.80|65|0 +1.3.6.1.2.1.2.2.1.13.96|65|0 +1.3.6.1.2.1.2.2.1.13.112|65|226244 +1.3.6.1.2.1.2.2.1.14.32|65|0 +1.3.6.1.2.1.2.2.1.14.48|65|0 +1.3.6.1.2.1.2.2.1.14.80|65|0 +1.3.6.1.2.1.2.2.1.14.96|65|0 +1.3.6.1.2.1.2.2.1.14.112|65|0 +1.3.6.1.2.1.2.2.1.15.32|65|0 +1.3.6.1.2.1.2.2.1.15.48|65|0 +1.3.6.1.2.1.2.2.1.15.80|65|0 +1.3.6.1.2.1.2.2.1.15.96|65|0 +1.3.6.1.2.1.2.2.1.15.112|65|0 +1.3.6.1.2.1.2.2.1.16.32|65|308158529 +1.3.6.1.2.1.2.2.1.16.48|65|63659219 +1.3.6.1.2.1.2.2.1.16.80|65|0 +1.3.6.1.2.1.2.2.1.16.96|65|0 +1.3.6.1.2.1.2.2.1.16.112|65|401424438 +1.3.6.1.2.1.2.2.1.17.32|65|736668 +1.3.6.1.2.1.2.2.1.17.48|65|487183 +1.3.6.1.2.1.2.2.1.17.80|65|0 +1.3.6.1.2.1.2.2.1.17.96|65|0 +1.3.6.1.2.1.2.2.1.17.112|65|842310 +1.3.6.1.2.1.2.2.1.18.32|65|0 +1.3.6.1.2.1.2.2.1.18.48|65|0 +1.3.6.1.2.1.2.2.1.18.80|65|0 +1.3.6.1.2.1.2.2.1.18.96|65|0 +1.3.6.1.2.1.2.2.1.18.112|65|0 +1.3.6.1.2.1.2.2.1.19.32|65|0 +1.3.6.1.2.1.2.2.1.19.48|65|0 +1.3.6.1.2.1.2.2.1.19.80|65|0 +1.3.6.1.2.1.2.2.1.19.96|65|0 +1.3.6.1.2.1.2.2.1.19.112|65|0 +1.3.6.1.2.1.2.2.1.20.32|65|0 +1.3.6.1.2.1.2.2.1.20.48|65|0 +1.3.6.1.2.1.2.2.1.20.80|65|0 +1.3.6.1.2.1.2.2.1.20.96|65|0 +1.3.6.1.2.1.2.2.1.20.112|65|0 +1.3.6.1.2.1.2.2.1.21.32|66|0 +1.3.6.1.2.1.2.2.1.21.48|66|0 +1.3.6.1.2.1.2.2.1.21.80|66|0 +1.3.6.1.2.1.2.2.1.21.96|66|0 +1.3.6.1.2.1.2.2.1.21.112|66|0 +1.3.6.1.2.1.2.2.1.22.32|6|0.0 +1.3.6.1.2.1.2.2.1.22.48|6|0.0 +1.3.6.1.2.1.2.2.1.22.80|6|0.0 +1.3.6.1.2.1.2.2.1.22.96|6|0.0 +1.3.6.1.2.1.2.2.1.22.112|6|0.0 +1.3.6.1.2.1.4.1.0|2|2 +1.3.6.1.2.1.4.2.0|2|64 +1.3.6.1.2.1.4.13.0|2|30 +1.3.6.1.2.1.4.20.1.1.10.164.0.51|64x|0aa40033 +1.3.6.1.2.1.4.20.1.2.10.164.0.51|2|32 +1.3.6.1.2.1.4.20.1.3.10.164.0.51|64x|ffffffff +1.3.6.1.2.1.4.20.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.25.0|2|2 +1.3.6.1.2.1.4.26.0|2|64 +1.3.6.1.2.1.4.31.1.1.1.1|2|1 +1.3.6.1.2.1.4.31.1.1.1.2|2|2 +1.3.6.1.2.1.4.31.1.1.3.1|65|8543642 +1.3.6.1.2.1.4.31.1.1.3.2|65|15102 +1.3.6.1.2.1.4.31.1.1.4.1|70|8543642 +1.3.6.1.2.1.4.31.1.1.4.2|70|15102 +1.3.6.1.2.1.4.31.1.1.7.1|65|0 +1.3.6.1.2.1.4.31.1.1.7.2|65|0 +1.3.6.1.2.1.4.31.1.1.14.1|65|0 +1.3.6.1.2.1.4.31.1.1.14.2|65|0 +1.3.6.1.2.1.4.31.1.1.16.1|65|0 +1.3.6.1.2.1.4.31.1.1.16.2|65|0 +1.3.6.1.2.1.4.31.1.1.26.1|65|0 +1.3.6.1.2.1.4.31.1.1.26.2|65|0 +1.3.6.1.2.1.4.31.1.1.28.1|65|0 +1.3.6.1.2.1.4.31.1.1.28.2|65|0 +1.3.6.1.2.1.4.31.1.1.30.1|65|8533411 +1.3.6.1.2.1.4.31.1.1.30.2|65|0 +1.3.6.1.2.1.4.31.1.1.31.1|70|8533411 +1.3.6.1.2.1.4.31.1.1.31.2|70|0 +1.3.6.1.2.1.4.31.1.1.34.1|65|0 +1.3.6.1.2.1.4.31.1.1.34.2|65|15102 +1.3.6.1.2.1.4.31.1.1.35.1|70|0 +1.3.6.1.2.1.4.31.1.1.35.2|70|15102 +1.3.6.1.2.1.4.31.1.1.38.1|65|0 +1.3.6.1.2.1.4.31.1.1.38.2|65|0 +1.3.6.1.2.1.4.31.1.1.39.1|70|0 +1.3.6.1.2.1.4.31.1.1.39.2|70|0 +1.3.6.1.2.1.4.31.1.1.47.1|66|2000 +1.3.6.1.2.1.4.31.1.1.47.2|66|2000 +1.3.6.1.2.1.4.32.1.5.32.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.5.112.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.6.32.1.4.10.164.0.51.32|2|1 +1.3.6.1.2.1.4.32.1.6.112.1.4.10.164.0.51.32|2|1 +1.3.6.1.2.1.4.32.1.7.32.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.7.112.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.8.32.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.8.112.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.9.32.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.9.112.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.33.0|2|459515095 +1.3.6.1.2.1.4.34.1.3.1.4.10.164.0.51|2|32 +1.3.6.1.2.1.4.34.1.4.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.5.1.4.10.164.0.51|6|1.3.6.1.2.1.4.32.1.5.32.1.4.10.164.0.51.32 +1.3.6.1.2.1.4.34.1.6.1.4.10.164.0.51|2|2 +1.3.6.1.2.1.4.34.1.7.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.8.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.34.1.10.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.11.1.4.10.164.0.51|2|3 +1.3.6.1.2.1.4.35.1.4.32.1.4.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.112.1.4.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.5.32.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.35.1.5.112.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.35.1.6.32.1.4.10.164.0.51|2|4 +1.3.6.1.2.1.4.35.1.6.112.1.4.10.164.0.51|2|4 +1.3.6.1.2.1.4.35.1.7.32.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.7.112.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.8.32.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.8.112.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.5.29.1.2.1|65|0 +1.3.6.1.2.1.5.29.1.2.2|65|15 +1.3.6.1.2.1.5.29.1.3.1|65|0 +1.3.6.1.2.1.5.29.1.3.2|65|35 +1.3.6.1.2.1.5.29.1.4.1|65|0 +1.3.6.1.2.1.5.29.1.4.2|65|30 +1.3.6.1.2.1.5.29.1.5.1|65|0 +1.3.6.1.2.1.5.29.1.5.2|65|0 +1.3.6.1.2.1.11.1.0|65|140759 +1.3.6.1.2.1.11.2.0|65|140662 +1.3.6.1.2.1.11.3.0|65|0 +1.3.6.1.2.1.11.4.0|65|0 +1.3.6.1.2.1.11.5.0|65|0 +1.3.6.1.2.1.11.6.0|65|0 +1.3.6.1.2.1.11.8.0|65|0 +1.3.6.1.2.1.11.9.0|65|0 +1.3.6.1.2.1.11.10.0|65|0 +1.3.6.1.2.1.11.11.0|65|0 +1.3.6.1.2.1.11.12.0|65|0 +1.3.6.1.2.1.11.13.0|65|761321 +1.3.6.1.2.1.11.14.0|65|0 +1.3.6.1.2.1.11.15.0|65|5815 +1.3.6.1.2.1.11.16.0|65|113502 +1.3.6.1.2.1.11.17.0|65|0 +1.3.6.1.2.1.11.18.0|65|0 +1.3.6.1.2.1.11.19.0|65|0 +1.3.6.1.2.1.11.20.0|65|0 +1.3.6.1.2.1.11.21.0|65|0 +1.3.6.1.2.1.11.22.0|65|0 +1.3.6.1.2.1.11.24.0|65|0 +1.3.6.1.2.1.11.25.0|65|0 +1.3.6.1.2.1.11.26.0|65|0 +1.3.6.1.2.1.11.27.0|65|0 +1.3.6.1.2.1.11.28.0|65|140686 +1.3.6.1.2.1.11.29.0|65|0 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.11.31.0|65|0 +1.3.6.1.2.1.11.32.0|65|0 +1.3.6.1.2.1.25.1.1.0|67|181580115 +1.3.6.1.2.1.25.1.2.0|4x|07e30a15022208002d0700 +1.3.6.1.2.1.25.1.3.0|2|393216 +1.3.6.1.2.1.25.1.4.0|4x|726f20726f6f743d555549443d37313463316461302d646562372d346230332d383830642d34636564383531313965333520636f6e736f6c653d747479302020636f6e736f6c653d74747953302070616e69633d3120706c6174666f726d3d5a3130302064656661756c745f6370755f6f726465722071756965740a +1.3.6.1.2.1.25.1.5.0|66|0 +1.3.6.1.2.1.25.1.6.0|66|190 +1.3.6.1.2.1.25.1.7.0|2|0 +1.3.6.1.2.1.25.2.2.0|2|7660752 +1.3.6.1.2.1.25.2.3.1.1.1|2|1 +1.3.6.1.2.1.25.2.3.1.1.3|2|3 +1.3.6.1.2.1.25.2.3.1.1.6|2|6 +1.3.6.1.2.1.25.2.3.1.1.7|2|7 +1.3.6.1.2.1.25.2.3.1.1.8|2|8 +1.3.6.1.2.1.25.2.3.1.1.10|2|10 +1.3.6.1.2.1.25.2.3.1.1.31|2|31 +1.3.6.1.2.1.25.2.3.1.1.32|2|32 +1.3.6.1.2.1.25.2.3.1.1.37|2|37 +1.3.6.1.2.1.25.2.3.1.1.39|2|39 +1.3.6.1.2.1.25.2.3.1.1.40|2|40 +1.3.6.1.2.1.25.2.3.1.1.44|2|44 +1.3.6.1.2.1.25.2.3.1.1.50|2|50 +1.3.6.1.2.1.25.2.3.1.1.51|2|51 +1.3.6.1.2.1.25.2.3.1.1.52|2|52 +1.3.6.1.2.1.25.2.3.1.1.53|2|53 +1.3.6.1.2.1.25.2.3.1.1.54|2|54 +1.3.6.1.2.1.25.2.3.1.1.55|2|55 +1.3.6.1.2.1.25.2.3.1.1.56|2|56 +1.3.6.1.2.1.25.2.3.1.1.57|2|57 +1.3.6.1.2.1.25.2.3.1.1.58|2|58 +1.3.6.1.2.1.25.2.3.1.1.59|2|59 +1.3.6.1.2.1.25.2.3.1.2.1|6|1.3.6.1.2.1.25.2.1.2 +1.3.6.1.2.1.25.2.3.1.2.3|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.6|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.7|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.8|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.10|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.31|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.32|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.37|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.39|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.40|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.44|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.50|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.51|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.52|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.53|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.54|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.55|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.56|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.57|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.58|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.59|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.3.1|4x|506879736963616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.3|4x|5669727475616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.6|4x|4d656d6f72792062756666657273 +1.3.6.1.2.1.25.2.3.1.3.7|4x|436163686564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.8|4x|536861726564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.10|4x|53776170207370616365 +1.3.6.1.2.1.25.2.3.1.3.31|4x|2f +1.3.6.1.2.1.25.2.3.1.3.32|4x|2f766172 +1.3.6.1.2.1.25.2.3.1.3.37|4x|2f6465762f73686d +1.3.6.1.2.1.25.2.3.1.3.39|4x|2f72756e +1.3.6.1.2.1.25.2.3.1.3.40|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.2.3.1.3.44|4x|2f757372 +1.3.6.1.2.1.25.2.3.1.3.50|4x|2f736861726564 +1.3.6.1.2.1.25.2.3.1.3.51|4x|2f7368617265642f7272642e312e32 +1.3.6.1.2.1.25.2.3.1.3.52|4x|2f61707064617461 +1.3.6.1.2.1.25.2.3.1.3.53|4x|2f636f6e666967 +1.3.6.1.2.1.25.2.3.1.3.54|4x|2f7661722f70726f6d7074 +1.3.6.1.2.1.25.2.3.1.3.55|4x|2f7661722f746d73746174 +1.3.6.1.2.1.25.2.3.1.3.56|4x|2f7661722f6c6f67 +1.3.6.1.2.1.25.2.3.1.3.57|4x|2f7661722f6c6f697063 +1.3.6.1.2.1.25.2.3.1.3.58|4x|2f72756e2f757365722f3931 +1.3.6.1.2.1.25.2.3.1.3.59|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.2.1.25.2.3.1.4.1|2|1024 +1.3.6.1.2.1.25.2.3.1.4.3|2|1024 +1.3.6.1.2.1.25.2.3.1.4.6|2|1024 +1.3.6.1.2.1.25.2.3.1.4.7|2|1024 +1.3.6.1.2.1.25.2.3.1.4.8|2|1024 +1.3.6.1.2.1.25.2.3.1.4.10|2|1024 +1.3.6.1.2.1.25.2.3.1.4.31|2|1024 +1.3.6.1.2.1.25.2.3.1.4.32|2|4096 +1.3.6.1.2.1.25.2.3.1.4.37|2|4096 +1.3.6.1.2.1.25.2.3.1.4.39|2|4096 +1.3.6.1.2.1.25.2.3.1.4.40|2|4096 +1.3.6.1.2.1.25.2.3.1.4.44|2|4096 +1.3.6.1.2.1.25.2.3.1.4.50|2|4096 +1.3.6.1.2.1.25.2.3.1.4.51|2|4096 +1.3.6.1.2.1.25.2.3.1.4.52|2|1024 +1.3.6.1.2.1.25.2.3.1.4.53|2|1024 +1.3.6.1.2.1.25.2.3.1.4.54|2|4096 +1.3.6.1.2.1.25.2.3.1.4.55|2|4096 +1.3.6.1.2.1.25.2.3.1.4.56|2|4096 +1.3.6.1.2.1.25.2.3.1.4.57|2|4096 +1.3.6.1.2.1.25.2.3.1.4.58|2|4096 +1.3.6.1.2.1.25.2.3.1.4.59|2|4096 +1.3.6.1.2.1.25.2.3.1.5.1|2|7660752 +1.3.6.1.2.1.25.2.3.1.5.3|2|8684748 +1.3.6.1.2.1.25.2.3.1.5.6|2|7660752 +1.3.6.1.2.1.25.2.3.1.5.7|2|424284 +1.3.6.1.2.1.25.2.3.1.5.8|2|54064 +1.3.6.1.2.1.25.2.3.1.5.10|2|1023996 +1.3.6.1.2.1.25.2.3.1.5.31|2|428150 +1.3.6.1.2.1.25.2.3.1.5.32|2|235782 +1.3.6.1.2.1.25.2.3.1.5.37|2|957594 +1.3.6.1.2.1.25.2.3.1.5.39|2|957594 +1.3.6.1.2.1.25.2.3.1.5.40|2|957594 +1.3.6.1.2.1.25.2.3.1.5.44|2|1296662 +1.3.6.1.2.1.25.2.3.1.5.50|2|3837692 +1.3.6.1.2.1.25.2.3.1.5.51|2|957594 +1.3.6.1.2.1.25.2.3.1.5.52|2|31729 +1.3.6.1.2.1.25.2.3.1.5.53|2|479716 +1.3.6.1.2.1.25.2.3.1.5.54|2|1024 +1.3.6.1.2.1.25.2.3.1.5.55|2|957594 +1.3.6.1.2.1.25.2.3.1.5.56|2|247878 +1.3.6.1.2.1.25.2.3.1.5.57|2|957594 +1.3.6.1.2.1.25.2.3.1.5.58|2|191519 +1.3.6.1.2.1.25.2.3.1.5.59|2|235782 +1.3.6.1.2.1.25.2.3.1.6.1|2|7572748 +1.3.6.1.2.1.25.2.3.1.6.3|2|8033292 +1.3.6.1.2.1.25.2.3.1.6.6|2|70956 +1.3.6.1.2.1.25.2.3.1.6.7|2|424284 +1.3.6.1.2.1.25.2.3.1.6.8|2|54064 +1.3.6.1.2.1.25.2.3.1.6.10|2|460544 +1.3.6.1.2.1.25.2.3.1.6.31|2|78704 +1.3.6.1.2.1.25.2.3.1.6.32|2|90615 +1.3.6.1.2.1.25.2.3.1.6.37|2|569 +1.3.6.1.2.1.25.2.3.1.6.39|2|511 +1.3.6.1.2.1.25.2.3.1.6.40|2|0 +1.3.6.1.2.1.25.2.3.1.6.44|2|1040421 +1.3.6.1.2.1.25.2.3.1.6.50|2|43151 +1.3.6.1.2.1.25.2.3.1.6.51|2|7937 +1.3.6.1.2.1.25.2.3.1.6.52|2|4516 +1.3.6.1.2.1.25.2.3.1.6.53|2|14722 +1.3.6.1.2.1.25.2.3.1.6.54|2|7 +1.3.6.1.2.1.25.2.3.1.6.55|2|4360 +1.3.6.1.2.1.25.2.3.1.6.56|2|105253 +1.3.6.1.2.1.25.2.3.1.6.57|2|0 +1.3.6.1.2.1.25.2.3.1.6.58|2|0 +1.3.6.1.2.1.25.2.3.1.6.59|2|90615 +1.3.6.1.2.1.25.3.2.1.1.196608|2|196608 +1.3.6.1.2.1.25.3.2.1.1.196609|2|196609 +1.3.6.1.2.1.25.3.2.1.1.786432|2|786432 +1.3.6.1.2.1.25.3.2.1.2.196608|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.196609|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.786432|6|1.3.6.1.2.1.25.3.1.12 +1.3.6.1.2.1.25.3.2.1.3.196608|4x|47656e75696e65496e74656c3a20496e74656c2852292058656f6e28522920435055204020322e303047487a +1.3.6.1.2.1.25.3.2.1.3.196609|4x|47656e75696e65496e74656c3a20496e74656c2852292058656f6e28522920435055204020322e303047487a +1.3.6.1.2.1.25.3.2.1.3.786432|4x|4775657373696e6720746861742074686572652773206120666c6f6174696e6720706f696e7420636f2d70726f636573736f72 +1.3.6.1.2.1.25.3.2.1.4.196608|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.196609|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.786432|6|0.0 +1.3.6.1.2.1.25.3.2.1.5.196608|2|2 +1.3.6.1.2.1.25.3.2.1.5.196609|2|2 +1.3.6.1.2.1.25.3.3.1.1.196608|6|0.0 +1.3.6.1.2.1.25.3.3.1.1.196609|6|0.0 +1.3.6.1.2.1.25.3.3.1.2.196608|2|7 +1.3.6.1.2.1.25.3.3.1.2.196609|2|7 +1.3.6.1.2.1.25.3.8.1.1.1|2|1 +1.3.6.1.2.1.25.3.8.1.1.2|2|2 +1.3.6.1.2.1.25.3.8.1.1.7|2|7 +1.3.6.1.2.1.25.3.8.1.1.9|2|9 +1.3.6.1.2.1.25.3.8.1.1.10|2|10 +1.3.6.1.2.1.25.3.8.1.1.14|2|14 +1.3.6.1.2.1.25.3.8.1.1.20|2|20 +1.3.6.1.2.1.25.3.8.1.1.21|2|21 +1.3.6.1.2.1.25.3.8.1.1.22|2|22 +1.3.6.1.2.1.25.3.8.1.1.23|2|23 +1.3.6.1.2.1.25.3.8.1.1.24|2|24 +1.3.6.1.2.1.25.3.8.1.1.25|2|25 +1.3.6.1.2.1.25.3.8.1.1.26|2|26 +1.3.6.1.2.1.25.3.8.1.1.27|2|27 +1.3.6.1.2.1.25.3.8.1.1.28|2|28 +1.3.6.1.2.1.25.3.8.1.1.29|2|29 +1.3.6.1.2.1.25.3.8.1.2.1|4x|2f +1.3.6.1.2.1.25.3.8.1.2.2|4x|2f766172 +1.3.6.1.2.1.25.3.8.1.2.7|4x|2f6465762f73686d +1.3.6.1.2.1.25.3.8.1.2.9|4x|2f72756e +1.3.6.1.2.1.25.3.8.1.2.10|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.3.8.1.2.14|4x|2f757372 +1.3.6.1.2.1.25.3.8.1.2.20|4x|2f736861726564 +1.3.6.1.2.1.25.3.8.1.2.21|4x|2f7368617265642f7272642e312e32 +1.3.6.1.2.1.25.3.8.1.2.22|4x|2f61707064617461 +1.3.6.1.2.1.25.3.8.1.2.23|4x|2f636f6e666967 +1.3.6.1.2.1.25.3.8.1.2.24|4x|2f7661722f70726f6d7074 +1.3.6.1.2.1.25.3.8.1.2.25|4x|2f7661722f746d73746174 +1.3.6.1.2.1.25.3.8.1.2.26|4x|2f7661722f6c6f67 +1.3.6.1.2.1.25.3.8.1.2.27|4x|2f7661722f6c6f697063 +1.3.6.1.2.1.25.3.8.1.2.28|4x|2f72756e2f757365722f3931 +1.3.6.1.2.1.25.3.8.1.2.29|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.2.1.25.3.8.1.3.1|4| +1.3.6.1.2.1.25.3.8.1.3.2|4| +1.3.6.1.2.1.25.3.8.1.3.7|4| +1.3.6.1.2.1.25.3.8.1.3.9|4| +1.3.6.1.2.1.25.3.8.1.3.10|4| +1.3.6.1.2.1.25.3.8.1.3.14|4| +1.3.6.1.2.1.25.3.8.1.3.20|4| +1.3.6.1.2.1.25.3.8.1.3.21|4| +1.3.6.1.2.1.25.3.8.1.3.22|4| +1.3.6.1.2.1.25.3.8.1.3.23|4| +1.3.6.1.2.1.25.3.8.1.3.24|4| +1.3.6.1.2.1.25.3.8.1.3.25|4| +1.3.6.1.2.1.25.3.8.1.3.26|4| +1.3.6.1.2.1.25.3.8.1.3.27|4| +1.3.6.1.2.1.25.3.8.1.3.28|4| +1.3.6.1.2.1.25.3.8.1.3.29|4| +1.3.6.1.2.1.25.3.8.1.4.1|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.2|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.7|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.9|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.10|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.14|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.20|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.21|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.22|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.23|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.24|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.25|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.26|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.27|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.28|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.29|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.5.1|2|1 +1.3.6.1.2.1.25.3.8.1.5.2|2|1 +1.3.6.1.2.1.25.3.8.1.5.7|2|1 +1.3.6.1.2.1.25.3.8.1.5.9|2|1 +1.3.6.1.2.1.25.3.8.1.5.10|2|2 +1.3.6.1.2.1.25.3.8.1.5.14|2|2 +1.3.6.1.2.1.25.3.8.1.5.20|2|1 +1.3.6.1.2.1.25.3.8.1.5.21|2|1 +1.3.6.1.2.1.25.3.8.1.5.22|2|1 +1.3.6.1.2.1.25.3.8.1.5.23|2|1 +1.3.6.1.2.1.25.3.8.1.5.24|2|1 +1.3.6.1.2.1.25.3.8.1.5.25|2|1 +1.3.6.1.2.1.25.3.8.1.5.26|2|1 +1.3.6.1.2.1.25.3.8.1.5.27|2|1 +1.3.6.1.2.1.25.3.8.1.5.28|2|1 +1.3.6.1.2.1.25.3.8.1.5.29|2|1 +1.3.6.1.2.1.25.3.8.1.6.1|2|1 +1.3.6.1.2.1.25.3.8.1.6.2|2|2 +1.3.6.1.2.1.25.3.8.1.6.7|2|2 +1.3.6.1.2.1.25.3.8.1.6.9|2|2 +1.3.6.1.2.1.25.3.8.1.6.10|2|2 +1.3.6.1.2.1.25.3.8.1.6.14|2|2 +1.3.6.1.2.1.25.3.8.1.6.20|2|2 +1.3.6.1.2.1.25.3.8.1.6.21|2|2 +1.3.6.1.2.1.25.3.8.1.6.22|2|2 +1.3.6.1.2.1.25.3.8.1.6.23|2|2 +1.3.6.1.2.1.25.3.8.1.6.24|2|2 +1.3.6.1.2.1.25.3.8.1.6.25|2|2 +1.3.6.1.2.1.25.3.8.1.6.26|2|2 +1.3.6.1.2.1.25.3.8.1.6.27|2|2 +1.3.6.1.2.1.25.3.8.1.6.28|2|2 +1.3.6.1.2.1.25.3.8.1.6.29|2|2 +1.3.6.1.2.1.25.3.8.1.7.1|2|31 +1.3.6.1.2.1.25.3.8.1.7.2|2|32 +1.3.6.1.2.1.25.3.8.1.7.7|2|37 +1.3.6.1.2.1.25.3.8.1.7.9|2|39 +1.3.6.1.2.1.25.3.8.1.7.10|2|40 +1.3.6.1.2.1.25.3.8.1.7.14|2|44 +1.3.6.1.2.1.25.3.8.1.7.20|2|50 +1.3.6.1.2.1.25.3.8.1.7.21|2|51 +1.3.6.1.2.1.25.3.8.1.7.22|2|52 +1.3.6.1.2.1.25.3.8.1.7.23|2|53 +1.3.6.1.2.1.25.3.8.1.7.24|2|54 +1.3.6.1.2.1.25.3.8.1.7.25|2|55 +1.3.6.1.2.1.25.3.8.1.7.26|2|56 +1.3.6.1.2.1.25.3.8.1.7.27|2|57 +1.3.6.1.2.1.25.3.8.1.7.28|2|58 +1.3.6.1.2.1.25.3.8.1.7.29|2|59 +1.3.6.1.2.1.25.3.8.1.8.1|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.2|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.7|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.9|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.10|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.14|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.20|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.21|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.22|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.23|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.24|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.25|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.26|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.27|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.28|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.29|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.1|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.2|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.7|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.9|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.10|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.14|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.20|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.21|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.22|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.23|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.24|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.25|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.26|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.27|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.28|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.29|4x|0000010100000000 +1.3.6.1.2.1.25.4.2.1.1.1|2|1 +1.3.6.1.2.1.25.4.2.1.1.415|2|415 +1.3.6.1.2.1.25.4.2.1.1.440|2|440 +1.3.6.1.2.1.25.4.2.1.1.447|2|447 +1.3.6.1.2.1.25.4.2.1.1.921|2|921 +1.3.6.1.2.1.25.4.2.1.1.951|2|951 +1.3.6.1.2.1.25.4.2.1.1.977|2|977 +1.3.6.1.2.1.25.4.2.1.1.979|2|979 +1.3.6.1.2.1.25.4.2.1.1.982|2|982 +1.3.6.1.2.1.25.4.2.1.1.984|2|984 +1.3.6.1.2.1.25.4.2.1.1.1038|2|1038 +1.3.6.1.2.1.25.4.2.1.1.1826|2|1826 +1.3.6.1.2.1.25.4.2.1.1.2851|2|2851 +1.3.6.1.2.1.25.4.2.1.1.2852|2|2852 +1.3.6.1.2.1.25.4.2.1.1.2919|2|2919 +1.3.6.1.2.1.25.4.2.1.1.3773|2|3773 +1.3.6.1.2.1.25.4.2.1.1.4068|2|4068 +1.3.6.1.2.1.25.4.2.1.1.4085|2|4085 +1.3.6.1.2.1.25.4.2.1.1.4119|2|4119 +1.3.6.1.2.1.25.4.2.1.1.4122|2|4122 +1.3.6.1.2.1.25.4.2.1.1.4212|2|4212 +1.3.6.1.2.1.25.4.2.1.1.4213|2|4213 +1.3.6.1.2.1.25.4.2.1.1.4214|2|4214 +1.3.6.1.2.1.25.4.2.1.1.4215|2|4215 +1.3.6.1.2.1.25.4.2.1.1.4216|2|4216 +1.3.6.1.2.1.25.4.2.1.1.4217|2|4217 +1.3.6.1.2.1.25.4.2.1.1.4218|2|4218 +1.3.6.1.2.1.25.4.2.1.1.4219|2|4219 +1.3.6.1.2.1.25.4.2.1.1.4220|2|4220 +1.3.6.1.2.1.25.4.2.1.1.4221|2|4221 +1.3.6.1.2.1.25.4.2.1.1.4222|2|4222 +1.3.6.1.2.1.25.4.2.1.1.4224|2|4224 +1.3.6.1.2.1.25.4.2.1.1.4226|2|4226 +1.3.6.1.2.1.25.4.2.1.1.4434|2|4434 +1.3.6.1.2.1.25.4.2.1.1.4435|2|4435 +1.3.6.1.2.1.25.4.2.1.1.4436|2|4436 +1.3.6.1.2.1.25.4.2.1.1.4437|2|4437 +1.3.6.1.2.1.25.4.2.1.1.4438|2|4438 +1.3.6.1.2.1.25.4.2.1.1.4439|2|4439 +1.3.6.1.2.1.25.4.2.1.1.4440|2|4440 +1.3.6.1.2.1.25.4.2.1.1.4441|2|4441 +1.3.6.1.2.1.25.4.2.1.1.4442|2|4442 +1.3.6.1.2.1.25.4.2.1.1.4443|2|4443 +1.3.6.1.2.1.25.4.2.1.1.4451|2|4451 +1.3.6.1.2.1.25.4.2.1.1.4773|2|4773 +1.3.6.1.2.1.25.4.2.1.1.4774|2|4774 +1.3.6.1.2.1.25.4.2.1.1.4775|2|4775 +1.3.6.1.2.1.25.4.2.1.1.4776|2|4776 +1.3.6.1.2.1.25.4.2.1.1.4777|2|4777 +1.3.6.1.2.1.25.4.2.1.1.4778|2|4778 +1.3.6.1.2.1.25.4.2.1.1.4779|2|4779 +1.3.6.1.2.1.25.4.2.1.1.4780|2|4780 +1.3.6.1.2.1.25.4.2.1.1.4781|2|4781 +1.3.6.1.2.1.25.4.2.1.1.4782|2|4782 +1.3.6.1.2.1.25.4.2.1.1.4784|2|4784 +1.3.6.1.2.1.25.4.2.1.1.4786|2|4786 +1.3.6.1.2.1.25.4.2.1.1.4787|2|4787 +1.3.6.1.2.1.25.4.2.1.1.5137|2|5137 +1.3.6.1.2.1.25.4.2.1.1.5138|2|5138 +1.3.6.1.2.1.25.4.2.1.1.5139|2|5139 +1.3.6.1.2.1.25.4.2.1.1.5140|2|5140 +1.3.6.1.2.1.25.4.2.1.1.5141|2|5141 +1.3.6.1.2.1.25.4.2.1.1.5142|2|5142 +1.3.6.1.2.1.25.4.2.1.1.5143|2|5143 +1.3.6.1.2.1.25.4.2.1.1.5144|2|5144 +1.3.6.1.2.1.25.4.2.1.1.5145|2|5145 +1.3.6.1.2.1.25.4.2.1.1.5146|2|5146 +1.3.6.1.2.1.25.4.2.1.1.5148|2|5148 +1.3.6.1.2.1.25.4.2.1.1.5151|2|5151 +1.3.6.1.2.1.25.4.2.1.1.5155|2|5155 +1.3.6.1.2.1.25.4.2.1.1.5159|2|5159 +1.3.6.1.2.1.25.4.2.1.1.5501|2|5501 +1.3.6.1.2.1.25.4.2.1.1.5502|2|5502 +1.3.6.1.2.1.25.4.2.1.1.5503|2|5503 +1.3.6.1.2.1.25.4.2.1.1.5504|2|5504 +1.3.6.1.2.1.25.4.2.1.1.5505|2|5505 +1.3.6.1.2.1.25.4.2.1.1.5506|2|5506 +1.3.6.1.2.1.25.4.2.1.1.5507|2|5507 +1.3.6.1.2.1.25.4.2.1.1.5508|2|5508 +1.3.6.1.2.1.25.4.2.1.1.5509|2|5509 +1.3.6.1.2.1.25.4.2.1.1.5510|2|5510 +1.3.6.1.2.1.25.4.2.1.1.5516|2|5516 +1.3.6.1.2.1.25.4.2.1.1.5522|2|5522 +1.3.6.1.2.1.25.4.2.1.1.5861|2|5861 +1.3.6.1.2.1.25.4.2.1.1.5862|2|5862 +1.3.6.1.2.1.25.4.2.1.1.5863|2|5863 +1.3.6.1.2.1.25.4.2.1.1.5864|2|5864 +1.3.6.1.2.1.25.4.2.1.1.5865|2|5865 +1.3.6.1.2.1.25.4.2.1.1.5866|2|5866 +1.3.6.1.2.1.25.4.2.1.1.5867|2|5867 +1.3.6.1.2.1.25.4.2.1.1.5868|2|5868 +1.3.6.1.2.1.25.4.2.1.1.5869|2|5869 +1.3.6.1.2.1.25.4.2.1.1.5870|2|5870 +1.3.6.1.2.1.25.4.2.1.1.5872|2|5872 +1.3.6.1.2.1.25.4.2.1.1.5875|2|5875 +1.3.6.1.2.1.25.4.2.1.1.5878|2|5878 +1.3.6.1.2.1.25.4.2.1.1.5879|2|5879 +1.3.6.1.2.1.25.4.2.1.1.5884|2|5884 +1.3.6.1.2.1.25.4.2.1.1.6344|2|6344 +1.3.6.1.2.1.25.4.2.1.1.6345|2|6345 +1.3.6.1.2.1.25.4.2.1.1.6346|2|6346 +1.3.6.1.2.1.25.4.2.1.1.6347|2|6347 +1.3.6.1.2.1.25.4.2.1.1.6348|2|6348 +1.3.6.1.2.1.25.4.2.1.1.6349|2|6349 +1.3.6.1.2.1.25.4.2.1.1.6350|2|6350 +1.3.6.1.2.1.25.4.2.1.1.6351|2|6351 +1.3.6.1.2.1.25.4.2.1.1.6352|2|6352 +1.3.6.1.2.1.25.4.2.1.1.6353|2|6353 +1.3.6.1.2.1.25.4.2.1.1.6358|2|6358 +1.3.6.1.2.1.25.4.2.1.1.6366|2|6366 +1.3.6.1.2.1.25.4.2.1.1.6763|2|6763 +1.3.6.1.2.1.25.4.2.1.1.6764|2|6764 +1.3.6.1.2.1.25.4.2.1.1.6765|2|6765 +1.3.6.1.2.1.25.4.2.1.1.6766|2|6766 +1.3.6.1.2.1.25.4.2.1.1.6767|2|6767 +1.3.6.1.2.1.25.4.2.1.1.6768|2|6768 +1.3.6.1.2.1.25.4.2.1.1.6769|2|6769 +1.3.6.1.2.1.25.4.2.1.1.6770|2|6770 +1.3.6.1.2.1.25.4.2.1.1.6771|2|6771 +1.3.6.1.2.1.25.4.2.1.1.6772|2|6772 +1.3.6.1.2.1.25.4.2.1.1.6782|2|6782 +1.3.6.1.2.1.25.4.2.1.1.6784|2|6784 +1.3.6.1.2.1.25.4.2.1.1.7174|2|7174 +1.3.6.1.2.1.25.4.2.1.1.7175|2|7175 +1.3.6.1.2.1.25.4.2.1.1.7176|2|7176 +1.3.6.1.2.1.25.4.2.1.1.7177|2|7177 +1.3.6.1.2.1.25.4.2.1.1.7178|2|7178 +1.3.6.1.2.1.25.4.2.1.1.7179|2|7179 +1.3.6.1.2.1.25.4.2.1.1.7180|2|7180 +1.3.6.1.2.1.25.4.2.1.1.7181|2|7181 +1.3.6.1.2.1.25.4.2.1.1.7182|2|7182 +1.3.6.1.2.1.25.4.2.1.1.7183|2|7183 +1.3.6.1.2.1.25.4.2.1.1.7188|2|7188 +1.3.6.1.2.1.25.4.2.1.1.7192|2|7192 +1.3.6.1.2.1.25.4.2.1.1.7194|2|7194 +1.3.6.1.2.1.25.4.2.1.1.7196|2|7196 +1.3.6.1.2.1.25.4.2.1.1.7523|2|7523 +1.3.6.1.2.1.25.4.2.1.1.7524|2|7524 +1.3.6.1.2.1.25.4.2.1.1.7525|2|7525 +1.3.6.1.2.1.25.4.2.1.1.7526|2|7526 +1.3.6.1.2.1.25.4.2.1.1.7527|2|7527 +1.3.6.1.2.1.25.4.2.1.1.7528|2|7528 +1.3.6.1.2.1.25.4.2.1.1.7529|2|7529 +1.3.6.1.2.1.25.4.2.1.1.7530|2|7530 +1.3.6.1.2.1.25.4.2.1.1.7531|2|7531 +1.3.6.1.2.1.25.4.2.1.1.7532|2|7532 +1.3.6.1.2.1.25.4.2.1.1.7535|2|7535 +1.3.6.1.2.1.25.4.2.1.1.7539|2|7539 +1.3.6.1.2.1.25.4.2.1.1.7543|2|7543 +1.3.6.1.2.1.25.4.2.1.1.7544|2|7544 +1.3.6.1.2.1.25.4.2.1.1.7949|2|7949 +1.3.6.1.2.1.25.4.2.1.1.7950|2|7950 +1.3.6.1.2.1.25.4.2.1.1.7951|2|7951 +1.3.6.1.2.1.25.4.2.1.1.7952|2|7952 +1.3.6.1.2.1.25.4.2.1.1.7953|2|7953 +1.3.6.1.2.1.25.4.2.1.1.7954|2|7954 +1.3.6.1.2.1.25.4.2.1.1.9526|2|9526 +1.3.6.1.2.1.25.4.2.1.1.9602|2|9602 +1.3.6.1.2.1.25.4.2.1.1.11784|2|11784 +1.3.6.1.2.1.25.4.2.1.1.13563|2|13563 +1.3.6.1.2.1.25.4.2.1.1.13565|2|13565 +1.3.6.1.2.1.25.4.2.1.1.13566|2|13566 +1.3.6.1.2.1.25.4.2.1.1.15387|2|15387 +1.3.6.1.2.1.25.4.2.1.1.15921|2|15921 +1.3.6.1.2.1.25.4.2.1.1.16645|2|16645 +1.3.6.1.2.1.25.4.2.1.1.16646|2|16646 +1.3.6.1.2.1.25.4.2.1.1.16648|2|16648 +1.3.6.1.2.1.25.4.2.1.1.16651|2|16651 +1.3.6.1.2.1.25.4.2.1.1.16652|2|16652 +1.3.6.1.2.1.25.4.2.1.1.16653|2|16653 +1.3.6.1.2.1.25.4.2.1.1.16654|2|16654 +1.3.6.1.2.1.25.4.2.1.1.17900|2|17900 +1.3.6.1.2.1.25.4.2.1.1.18651|2|18651 +1.3.6.1.2.1.25.4.2.1.1.23175|2|23175 +1.3.6.1.2.1.25.4.2.1.1.23330|2|23330 +1.3.6.1.2.1.25.4.2.1.1.24570|2|24570 +1.3.6.1.2.1.25.4.2.1.1.25514|2|25514 +1.3.6.1.2.1.25.4.2.1.1.25517|2|25517 +1.3.6.1.2.1.25.4.2.1.1.25518|2|25518 +1.3.6.1.2.1.25.4.2.1.1.25522|2|25522 +1.3.6.1.2.1.25.4.2.1.1.25524|2|25524 +1.3.6.1.2.1.25.4.2.1.1.25531|2|25531 +1.3.6.1.2.1.25.4.2.1.1.25946|2|25946 +1.3.6.1.2.1.25.4.2.1.1.27567|2|27567 +1.3.6.1.2.1.25.4.2.1.1.29431|2|29431 +1.3.6.1.2.1.25.4.2.1.1.29439|2|29439 +1.3.6.1.2.1.25.4.2.1.1.29440|2|29440 +1.3.6.1.2.1.25.4.2.1.1.30092|2|30092 +1.3.6.1.2.1.25.4.2.1.1.30120|2|30120 +1.3.6.1.2.1.25.4.2.1.1.31793|2|31793 +1.3.6.1.2.1.25.4.2.1.2.1|4|systemd +1.3.6.1.2.1.25.4.2.1.2.415|4x|73797374656d642d6a6f75726e616c +1.3.6.1.2.1.25.4.2.1.2.440|4|lvmetad +1.3.6.1.2.1.25.4.2.1.2.447|4x|73797374656d642d7564657664 +1.3.6.1.2.1.25.4.2.1.2.921|4x|6a6974746572656e74726f70792d72 +1.3.6.1.2.1.25.4.2.1.2.951|4|auditd +1.3.6.1.2.1.25.4.2.1.2.977|4x|646275732d6461656d6f6e +1.3.6.1.2.1.25.4.2.1.2.979|4|acpid +1.3.6.1.2.1.25.4.2.1.2.982|4|irqbalance +1.3.6.1.2.1.25.4.2.1.2.984|4x|73797374656d642d6c6f67696e64 +1.3.6.1.2.1.25.4.2.1.2.1038|4x|696e6372656173655f656e74726f70 +1.3.6.1.2.1.25.4.2.1.2.1826|4x|7379736c6f672d6e67 +1.3.6.1.2.1.25.4.2.1.2.2851|4|crond +1.3.6.1.2.1.25.4.2.1.2.2852|4|promptstatusd +1.3.6.1.2.1.25.4.2.1.2.2919|4|overdog +1.3.6.1.2.1.25.4.2.1.2.3773|4|sshd +1.3.6.1.2.1.25.4.2.1.2.4068|4|httpd +1.3.6.1.2.1.25.4.2.1.2.4085|4|runsvdir +1.3.6.1.2.1.25.4.2.1.2.4119|4|agetty +1.3.6.1.2.1.25.4.2.1.2.4122|4|agetty +1.3.6.1.2.1.25.4.2.1.2.4212|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4213|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4214|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4215|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4216|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4217|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4218|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4219|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4220|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4221|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4222|4|eventd +1.3.6.1.2.1.25.4.2.1.2.4224|4x|72756e736d315f6e616d6564 +1.3.6.1.2.1.25.4.2.1.2.4226|4|wccpd +1.3.6.1.2.1.25.4.2.1.2.4434|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4435|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4436|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4437|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4438|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4439|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4440|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4441|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4442|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4443|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4451|4|scriptd +1.3.6.1.2.1.25.4.2.1.2.4773|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4774|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4775|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4776|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4777|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4778|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4779|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4780|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4781|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4782|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4784|4|tmrouted +1.3.6.1.2.1.25.4.2.1.2.4786|4|tamd +1.3.6.1.2.1.25.4.2.1.2.4787|4|alertd +1.3.6.1.2.1.25.4.2.1.2.5137|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5138|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5139|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5140|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5141|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5142|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5143|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5144|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5145|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5146|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5148|4|evrouted +1.3.6.1.2.1.25.4.2.1.2.5151|4|big3d +1.3.6.1.2.1.25.4.2.1.2.5155|4|csyncd +1.3.6.1.2.1.25.4.2.1.2.5159|4|syscalld +1.3.6.1.2.1.25.4.2.1.2.5501|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5502|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5503|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5504|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5505|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5506|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5507|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5508|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5509|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5510|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5516|4|errdefsd +1.3.6.1.2.1.25.4.2.1.2.5522|4|logstatd +1.3.6.1.2.1.25.4.2.1.2.5861|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5862|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5863|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5864|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5865|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5866|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5867|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5868|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5869|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5870|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5872|4|chmand +1.3.6.1.2.1.25.4.2.1.2.5875|4x|6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.2.5878|4|mcpd +1.3.6.1.2.1.25.4.2.1.2.5879|4|statsd +1.3.6.1.2.1.25.4.2.1.2.5884|4|zxfrd +1.3.6.1.2.1.25.4.2.1.2.6344|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6345|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6346|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6347|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6348|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6349|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6350|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6351|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6352|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6353|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6358|4|merged +1.3.6.1.2.1.25.4.2.1.2.6366|4|dynconfd +1.3.6.1.2.1.25.4.2.1.2.6763|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6764|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6765|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6766|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6767|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6768|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6769|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6770|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6771|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6772|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6782|4x|676f6f676c655f6163636f756e7473 +1.3.6.1.2.1.25.4.2.1.2.6784|4|keymgmtd +1.3.6.1.2.1.25.4.2.1.2.7174|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7175|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7176|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7177|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7178|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7179|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7180|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7181|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7182|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7183|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7188|4|java +1.3.6.1.2.1.25.4.2.1.2.7192|4|lacpd +1.3.6.1.2.1.25.4.2.1.2.7194|4|devmgmtd +1.3.6.1.2.1.25.4.2.1.2.7196|4|cbrd +1.3.6.1.2.1.25.4.2.1.2.7523|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7524|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7525|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7526|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7527|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7528|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7529|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7530|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7531|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7532|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7535|4|lind +1.3.6.1.2.1.25.4.2.1.2.7539|4|sod +1.3.6.1.2.1.25.4.2.1.2.7543|4x|73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.2.7544|4x|66352d726573742d6e6f6465 +1.3.6.1.2.1.25.4.2.1.2.7949|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7950|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7951|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7952|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7953|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7954|4|runsv +1.3.6.1.2.1.25.4.2.1.2.9526|4|dhclient +1.3.6.1.2.1.25.4.2.1.2.9602|4|dhclient +1.3.6.1.2.1.25.4.2.1.2.11784|4|su +1.3.6.1.2.1.25.4.2.1.2.13563|4|httpd +1.3.6.1.2.1.25.4.2.1.2.13565|4|httpd +1.3.6.1.2.1.25.4.2.1.2.13566|4|httpd +1.3.6.1.2.1.25.4.2.1.2.15387|4|ntpd +1.3.6.1.2.1.25.4.2.1.2.15921|4|java +1.3.6.1.2.1.25.4.2.1.2.16645|4|logger +1.3.6.1.2.1.25.4.2.1.2.16646|4|logger +1.3.6.1.2.1.25.4.2.1.2.16648|4|httpd +1.3.6.1.2.1.25.4.2.1.2.16651|4|mcpq +1.3.6.1.2.1.25.4.2.1.2.16652|4|rrdstats +1.3.6.1.2.1.25.4.2.1.2.16653|4|rtstats +1.3.6.1.2.1.25.4.2.1.2.16654|4x|69436f6e74726f6c506f7274616c2e +1.3.6.1.2.1.25.4.2.1.2.17900|4|named +1.3.6.1.2.1.25.4.2.1.2.18651|4x|696372645f6368696c64 +1.3.6.1.2.1.25.4.2.1.2.23175|4|rrdshim +1.3.6.1.2.1.25.4.2.1.2.23330|4|snmpd +1.3.6.1.2.1.25.4.2.1.2.24570|4|agetty +1.3.6.1.2.1.25.4.2.1.2.25514|4|pccd +1.3.6.1.2.1.25.4.2.1.2.25517|4|tmipsecd +1.3.6.1.2.1.25.4.2.1.2.25518|4x|746d6d2e7374617274 +1.3.6.1.2.1.25.4.2.1.2.25522|4x|6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.2.25524|4|vxland +1.3.6.1.2.1.25.4.2.1.2.25531|4|iprepd +1.3.6.1.2.1.25.4.2.1.2.25946|4|bigd +1.3.6.1.2.1.25.4.2.1.2.27567|4|ntlmconnpool +1.3.6.1.2.1.25.4.2.1.2.29431|4|httpd +1.3.6.1.2.1.25.4.2.1.2.29439|4|httpd +1.3.6.1.2.1.25.4.2.1.2.29440|4|httpd +1.3.6.1.2.1.25.4.2.1.2.30092|4x|746d6d2e30 +1.3.6.1.2.1.25.4.2.1.2.30120|4|racoon +1.3.6.1.2.1.25.4.2.1.2.31793|4x|61756469745f666f72776172646572 +1.3.6.1.2.1.25.4.2.1.3.1|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.415|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.447|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.921|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.951|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.977|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.979|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.982|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.984|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.1038|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.1826|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2851|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2852|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2919|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.3773|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4068|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4085|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4119|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4122|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4212|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4213|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4214|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4215|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4216|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4217|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4218|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4219|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4220|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4221|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4222|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4224|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4226|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4434|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4435|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4436|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4437|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4438|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4439|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4441|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4442|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4443|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4451|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4773|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4774|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4775|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4776|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4777|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4778|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4779|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4780|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4781|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4782|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4786|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4787|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5137|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5138|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5139|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5140|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5141|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5142|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5143|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5144|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5145|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5146|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5148|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5151|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5155|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5159|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5501|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5502|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5503|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5504|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5505|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5506|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5507|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5508|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5509|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5510|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5516|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5522|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5861|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5862|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5863|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5864|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5865|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5866|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5867|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5868|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5869|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5870|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5872|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5875|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5878|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5879|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5884|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6344|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6345|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6346|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6347|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6348|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6349|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6350|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6351|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6352|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6353|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6358|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6366|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6763|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6764|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6765|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6766|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6767|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6768|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6769|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6770|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6771|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6772|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6782|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7174|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7175|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7176|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7177|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7178|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7179|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7180|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7181|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7182|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7183|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7188|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7192|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7194|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7196|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7523|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7524|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7525|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7526|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7527|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7528|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7529|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7530|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7531|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7532|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7535|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7539|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7543|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7544|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7949|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7950|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7951|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7952|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7953|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7954|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.9526|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.9602|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.11784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13563|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13565|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13566|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.15387|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.15921|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16645|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16646|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16648|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16651|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16652|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16653|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16654|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.17900|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.18651|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.23175|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.23330|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.24570|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25514|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25517|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25518|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25522|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25524|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25531|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25946|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.27567|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29431|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29439|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30092|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30120|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.31793|6|0.0 +1.3.6.1.2.1.25.4.2.1.4.1|4x|2f7573722f6c69622f73797374656d642f73797374656d64 +1.3.6.1.2.1.25.4.2.1.4.415|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6a6f75726e616c64 +1.3.6.1.2.1.25.4.2.1.4.440|4x|2f7573722f7362696e2f6c766d65746164 +1.3.6.1.2.1.25.4.2.1.4.447|4x|2f7573722f6c69622f73797374656d642f73797374656d642d7564657664 +1.3.6.1.2.1.25.4.2.1.4.921|4x|2f7573722f7362696e2f6a6974746572656e74726f70792d726e6764 +1.3.6.1.2.1.25.4.2.1.4.951|4x|2f7362696e2f617564697464 +1.3.6.1.2.1.25.4.2.1.4.977|4x|2f62696e2f646275732d6461656d6f6e +1.3.6.1.2.1.25.4.2.1.4.979|4x|2f7573722f7362696e2f6163706964 +1.3.6.1.2.1.25.4.2.1.4.982|4x|2f7573722f7362696e2f69727162616c616e6365 +1.3.6.1.2.1.25.4.2.1.4.984|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6c6f67696e64 +1.3.6.1.2.1.25.4.2.1.4.1038|4x|696e6372656173655f656e74726f7079 +1.3.6.1.2.1.25.4.2.1.4.1826|4x|2f7573722f7362696e2f7379736c6f672d6e67 +1.3.6.1.2.1.25.4.2.1.4.2851|4x|2f7573722f7362696e2f63726f6e64 +1.3.6.1.2.1.25.4.2.1.4.2852|4x|2f62696e2f70726f6d707473746174757364 +1.3.6.1.2.1.25.4.2.1.4.2919|4x|2f7573722f62696e2f6f766572646f67 +1.3.6.1.2.1.25.4.2.1.4.3773|4x|2f7573722f7362696e2f73736864 +1.3.6.1.2.1.25.4.2.1.4.4068|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.4085|4|runsvdir +1.3.6.1.2.1.25.4.2.1.4.4119|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.4122|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.4212|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4213|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4214|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4215|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4216|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4217|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4218|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4219|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4220|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4221|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4222|4x|2f7573722f62696e2f6576656e7464 +1.3.6.1.2.1.25.4.2.1.4.4224|4x|2f7362696e2f72756e736d315f6e616d6564 +1.3.6.1.2.1.25.4.2.1.4.4226|4x|2f7573722f62696e2f7763637064 +1.3.6.1.2.1.25.4.2.1.4.4434|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4435|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4436|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4437|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4438|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4439|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4440|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4441|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4442|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4443|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4451|4x|2f7573722f62696e2f73637269707464 +1.3.6.1.2.1.25.4.2.1.4.4773|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4774|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4775|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4776|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4777|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4778|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4779|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4780|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4781|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4782|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4784|4x|2f7573722f62696e2f746d726f75746564 +1.3.6.1.2.1.25.4.2.1.4.4786|4x|2f7573722f62696e2f74616d64 +1.3.6.1.2.1.25.4.2.1.4.4787|4x|2f7573722f7362696e2f616c65727464 +1.3.6.1.2.1.25.4.2.1.4.5137|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5138|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5139|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5140|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5141|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5142|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5143|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5144|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5145|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5146|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5148|4x|2f7573722f62696e2f6576726f75746564 +1.3.6.1.2.1.25.4.2.1.4.5151|4x|2f7368617265642f62696e2f6269673364 +1.3.6.1.2.1.25.4.2.1.4.5155|4x|2f7573722f62696e2f6373796e6364 +1.3.6.1.2.1.25.4.2.1.4.5159|4x|2f7573722f62696e2f73797363616c6c64 +1.3.6.1.2.1.25.4.2.1.4.5501|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5502|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5503|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5504|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5505|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5506|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5507|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5508|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5509|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5510|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5516|4x|2f7573722f62696e2f6572726465667364 +1.3.6.1.2.1.25.4.2.1.4.5522|4x|2f7573722f7362696e2f6c6f677374617464 +1.3.6.1.2.1.25.4.2.1.4.5861|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5862|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5863|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5864|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5865|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5866|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5867|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5868|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5869|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5870|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5872|4x|2f7573722f62696e2f63686d616e64 +1.3.6.1.2.1.25.4.2.1.4.5875|4x|2f7573722f62696e2f6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.4.5878|4x|2f7573722f62696e2f6d637064 +1.3.6.1.2.1.25.4.2.1.4.5879|4x|2f7573722f62696e2f737461747364 +1.3.6.1.2.1.25.4.2.1.4.5884|4x|2f7573722f62696e2f7a78667264 +1.3.6.1.2.1.25.4.2.1.4.6344|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6345|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6346|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6347|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6348|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6349|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6350|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6351|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6352|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6353|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6358|4x|2f7573722f62696e2f6d6572676564 +1.3.6.1.2.1.25.4.2.1.4.6366|4x|2f7573722f62696e2f64796e636f6e6664 +1.3.6.1.2.1.25.4.2.1.4.6763|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6764|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6765|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6766|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6767|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6768|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6769|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6770|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6771|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6772|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6782|4x|2f7573722f62696e2f707974686f6e +1.3.6.1.2.1.25.4.2.1.4.6784|4x|2f7573722f62696e2f6b65796d676d7464 +1.3.6.1.2.1.25.4.2.1.4.7174|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7175|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7176|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7177|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7178|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7179|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7180|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7181|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7182|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7183|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7188|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661 +1.3.6.1.2.1.25.4.2.1.4.7192|4x|2f7573722f62696e2f6c61637064 +1.3.6.1.2.1.25.4.2.1.4.7194|4x|2f7573722f62696e2f6465766d676d7464 +1.3.6.1.2.1.25.4.2.1.4.7196|4x|2f7573722f73686172652f6362722f62696e2f63627264 +1.3.6.1.2.1.25.4.2.1.4.7523|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7524|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7525|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7526|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7527|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7528|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7529|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7530|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7531|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7532|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7535|4x|2f7573722f62696e2f6c696e64 +1.3.6.1.2.1.25.4.2.1.4.7539|4x|2f7573722f62696e2f736f64 +1.3.6.1.2.1.25.4.2.1.4.7543|4x|2f7573722f7362696e2f73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.4.7544|4x|2f7573722f62696e2f66352d726573742d6e6f6465 +1.3.6.1.2.1.25.4.2.1.4.7949|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7950|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7951|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7952|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7953|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7954|4|runsv +1.3.6.1.2.1.25.4.2.1.4.9526|4x|2f7362696e2f6468636c69656e74 +1.3.6.1.2.1.25.4.2.1.4.9602|4x|2f7362696e2f6468636c69656e74 +1.3.6.1.2.1.25.4.2.1.4.11784|4|su +1.3.6.1.2.1.25.4.2.1.4.13563|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.13565|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.13566|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.15387|4|ntpd +1.3.6.1.2.1.25.4.2.1.4.15921|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661 +1.3.6.1.2.1.25.4.2.1.4.16645|4x|2f7573722f62696e2f6c6f67676572 +1.3.6.1.2.1.25.4.2.1.4.16646|4x|2f7573722f62696e2f6c6f67676572 +1.3.6.1.2.1.25.4.2.1.4.16648|4x|2f7573722f7362696e2f666367692d +1.3.6.1.2.1.25.4.2.1.4.16651|4x|2f7573722f6c6f63616c2f7777772f6d6370712f6d637071 +1.3.6.1.2.1.25.4.2.1.4.16652|4x|2f7573722f6c6f63616c2f7777772f72726473746174732f7272647374617473 +1.3.6.1.2.1.25.4.2.1.4.16653|4x|2f7573722f6c6f63616c2f7777772f727473746174732f72747374617473 +1.3.6.1.2.1.25.4.2.1.4.16654|4x|2f7573722f6c6f63616c2f7777772f69436f6e74726f6c2f69436f6e74726f6c506f7274616c2e636769 +1.3.6.1.2.1.25.4.2.1.4.17900|4x|2f7573722f7362696e2f6e616d6564 +1.3.6.1.2.1.25.4.2.1.4.18651|4x|696372645f6368696c64 +1.3.6.1.2.1.25.4.2.1.4.23175|4x|2f7573722f7362696e2f7272647368696d +1.3.6.1.2.1.25.4.2.1.4.23330|4x|2f7573722f7362696e2f736e6d7064 +1.3.6.1.2.1.25.4.2.1.4.24570|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.25514|4x|2f7573722f62696e2f70636364 +1.3.6.1.2.1.25.4.2.1.4.25517|4x|2f7573722f62696e2f746d697073656364 +1.3.6.1.2.1.25.4.2.1.4.25518|4x|2f6574632f62696773746172742f736372697074732f746d6d2e7374617274 +1.3.6.1.2.1.25.4.2.1.4.25522|4x|2f7573722f62696e2f6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.4.25524|4x|2f7573722f62696e2f76786c616e64 +1.3.6.1.2.1.25.4.2.1.4.25531|4x|2f7573722f73686172652f6970726570642f62696e2f697072657064 +1.3.6.1.2.1.25.4.2.1.4.25946|4|bigd +1.3.6.1.2.1.25.4.2.1.4.27567|4x|2f7573722f7362696e2f6e746c6d636f6e6e706f6f6c +1.3.6.1.2.1.25.4.2.1.4.29431|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.29439|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.29440|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.30092|4x|746d6d2e30 +1.3.6.1.2.1.25.4.2.1.4.30120|4x|2f7573722f7362696e2f7261636f6f6e +1.3.6.1.2.1.25.4.2.1.4.31793|4x|2f7573722f62696e2f61756469745f666f72776172646572 +1.3.6.1.2.1.25.4.2.1.5.1|4x|2d2d73776974636865642d726f6f74202d2d73797374656d202d2d646573657269616c697a65203230 +1.3.6.1.2.1.25.4.2.1.5.415|4| +1.3.6.1.2.1.25.4.2.1.5.440|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.447|4| +1.3.6.1.2.1.25.4.2.1.5.921|4| +1.3.6.1.2.1.25.4.2.1.5.951|4x|2d6e +1.3.6.1.2.1.25.4.2.1.5.977|4x|2d2d73797374656d202d2d616464726573733d73797374656d643a202d2d6e6f666f726b202d2d6e6f70696466696c65202d2d73797374656d642d61637469766174696f6e +1.3.6.1.2.1.25.4.2.1.5.979|4| +1.3.6.1.2.1.25.4.2.1.5.982|4x|2d2d666f726567726f756e64 +1.3.6.1.2.1.25.4.2.1.5.984|4| +1.3.6.1.2.1.25.4.2.1.5.1038|4x|2d64202d652034303030202d72202d712038 +1.3.6.1.2.1.25.4.2.1.5.1826|4x|2d46202d70202f7661722f72756e2f7379736c6f67642e706964 +1.3.6.1.2.1.25.4.2.1.5.2851|4x|2d6e +1.3.6.1.2.1.25.4.2.1.5.2852|4| +1.3.6.1.2.1.25.4.2.1.5.2919|4| +1.3.6.1.2.1.25.4.2.1.5.3773|4x|2d44 +1.3.6.1.2.1.25.4.2.1.5.4068|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.4085|4x|2f7661722f73657276696365206c6f673a202e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e +1.3.6.1.2.1.25.4.2.1.5.4119|4x|2d2d6e6f636c6561722074747931206c696e7578 +1.3.6.1.2.1.25.4.2.1.5.4122|4x|2d2d6b6565702d62617564203131353230302c33383430302c39363030207474795330207674323230 +1.3.6.1.2.1.25.4.2.1.5.4212|4|datastor +1.3.6.1.2.1.25.4.2.1.5.4213|4|eventd +1.3.6.1.2.1.25.4.2.1.5.4214|4|named +1.3.6.1.2.1.25.4.2.1.5.4215|4|sdmd +1.3.6.1.2.1.25.4.2.1.5.4216|4x|6f767364622d736572766572 +1.3.6.1.2.1.25.4.2.1.5.4217|4|wocd +1.3.6.1.2.1.25.4.2.1.5.4218|4|nlad +1.3.6.1.2.1.25.4.2.1.5.4219|4|wccpd +1.3.6.1.2.1.25.4.2.1.5.4220|4|dnscached +1.3.6.1.2.1.25.4.2.1.5.4221|4|rba +1.3.6.1.2.1.25.4.2.1.5.4222|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.4224|4x|2f7573722f7362696e2f6e616d6564202d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66202d6e2031 +1.3.6.1.2.1.25.4.2.1.5.4226|4| +1.3.6.1.2.1.25.4.2.1.5.4434|4|tmipsecd +1.3.6.1.2.1.25.4.2.1.5.4435|4|ntlmconnpool +1.3.6.1.2.1.25.4.2.1.5.4436|4|pgadmind +1.3.6.1.2.1.25.4.2.1.5.4437|4|antserver +1.3.6.1.2.1.25.4.2.1.5.4438|4x|64656475705f61646d696e +1.3.6.1.2.1.25.4.2.1.5.4439|4x|61706d5f77656273736f +1.3.6.1.2.1.25.4.2.1.5.4440|4|samlidpd +1.3.6.1.2.1.25.4.2.1.5.4441|4|eca +1.3.6.1.2.1.25.4.2.1.5.4442|4|autodosd +1.3.6.1.2.1.25.4.2.1.5.4443|4|scriptd +1.3.6.1.2.1.25.4.2.1.5.4451|4| +1.3.6.1.2.1.25.4.2.1.5.4773|4|tmrouted +1.3.6.1.2.1.25.4.2.1.5.4774|4|vdi +1.3.6.1.2.1.25.4.2.1.5.4775|4|alertd +1.3.6.1.2.1.25.4.2.1.5.4776|4|fpuserd +1.3.6.1.2.1.25.4.2.1.5.4777|4|bdosd +1.3.6.1.2.1.25.4.2.1.5.4778|4|pccd +1.3.6.1.2.1.25.4.2.1.5.4779|4|asm +1.3.6.1.2.1.25.4.2.1.5.4780|4|eam +1.3.6.1.2.1.25.4.2.1.5.4781|4|tamd +1.3.6.1.2.1.25.4.2.1.5.4782|4|rtconfd +1.3.6.1.2.1.25.4.2.1.5.4784|4x|2d642030202d6f202f7661722f746d702f746d726f757465642e6f7574 +1.3.6.1.2.1.25.4.2.1.5.4786|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.4787|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.5137|4|evrouted +1.3.6.1.2.1.25.4.2.1.5.5138|4|syscalld +1.3.6.1.2.1.25.4.2.1.5.5139|4|csyncd +1.3.6.1.2.1.25.4.2.1.5.5140|4|natstatsd +1.3.6.1.2.1.25.4.2.1.5.5141|4x|6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.5.5142|4x|616466735f70726f7879 +1.3.6.1.2.1.25.4.2.1.5.5143|4|rewrite +1.3.6.1.2.1.25.4.2.1.5.5144|4|big3d +1.3.6.1.2.1.25.4.2.1.5.5145|4|omapd +1.3.6.1.2.1.25.4.2.1.5.5146|4|updated +1.3.6.1.2.1.25.4.2.1.5.5148|4| +1.3.6.1.2.1.25.4.2.1.5.5151|4x|2d746c7320544c537631202d636970686572732041455347434d3a4145533a214144483a2141454344483a2150534b3a2161454344483a214453533a2145434453413a214145533132383a2d534841313a4145533235362d534841202d72656e6567203836343030 +1.3.6.1.2.1.25.4.2.1.5.5155|4| +1.3.6.1.2.1.25.4.2.1.5.5159|4| +1.3.6.1.2.1.25.4.2.1.5.5501|4|botd +1.3.6.1.2.1.25.4.2.1.5.5502|4|clusterd +1.3.6.1.2.1.25.4.2.1.5.5503|4|bigd +1.3.6.1.2.1.25.4.2.1.5.5504|4|urldb +1.3.6.1.2.1.25.4.2.1.5.5505|4|logstatd +1.3.6.1.2.1.25.4.2.1.5.5506|4|errdefsd +1.3.6.1.2.1.25.4.2.1.5.5507|4|mysql +1.3.6.1.2.1.25.4.2.1.5.5508|4|logmysqld +1.3.6.1.2.1.25.4.2.1.5.5509|4|flowspecd +1.3.6.1.2.1.25.4.2.1.5.5510|4|ecmd +1.3.6.1.2.1.25.4.2.1.5.5516|4| +1.3.6.1.2.1.25.4.2.1.5.5522|4| +1.3.6.1.2.1.25.4.2.1.5.5861|4x|6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.5.5862|4|debugd +1.3.6.1.2.1.25.4.2.1.5.5863|4|statsd +1.3.6.1.2.1.25.4.2.1.5.5864|4|mcpd +1.3.6.1.2.1.25.4.2.1.5.5865|4|zxfrd +1.3.6.1.2.1.25.4.2.1.5.5866|4x|646f736c37645f61747461636b5f6d6f6e69746f72 +1.3.6.1.2.1.25.4.2.1.5.5867|4|chmand +1.3.6.1.2.1.25.4.2.1.5.5868|4|autodiscd +1.3.6.1.2.1.25.4.2.1.5.5869|4|mdmsyncmgr +1.3.6.1.2.1.25.4.2.1.5.5870|4|apmd +1.3.6.1.2.1.25.4.2.1.5.5872|4x|2d66202d2d76617269616e7420316e6963 +1.3.6.1.2.1.25.4.2.1.5.5875|4| +1.3.6.1.2.1.25.4.2.1.5.5878|4x|2d64626d656d20353132202d6c697374656e203132372e302e302e31202d666f7263656c6f6164202d66 +1.3.6.1.2.1.25.4.2.1.5.5879|4x|2d532030202d66 +1.3.6.1.2.1.25.4.2.1.5.5884|4| +1.3.6.1.2.1.25.4.2.1.5.6344|4|gtmd +1.3.6.1.2.1.25.4.2.1.5.6345|4|dynconfd +1.3.6.1.2.1.25.4.2.1.5.6346|4|sshplugin +1.3.6.1.2.1.25.4.2.1.5.6347|4|tmm +1.3.6.1.2.1.25.4.2.1.5.6348|4|avrd +1.3.6.1.2.1.25.4.2.1.5.6349|4x|70696e675f6163636573735f6167656e74 +1.3.6.1.2.1.25.4.2.1.5.6350|4|dwbld +1.3.6.1.2.1.25.4.2.1.5.6351|4|merged +1.3.6.1.2.1.25.4.2.1.5.6352|4|wamd +1.3.6.1.2.1.25.4.2.1.5.6353|4|tomcat +1.3.6.1.2.1.25.4.2.1.5.6358|4x|2d532030202d66 +1.3.6.1.2.1.25.4.2.1.5.6366|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.6763|4|vxland +1.3.6.1.2.1.25.4.2.1.5.6764|4|hwpd +1.3.6.1.2.1.25.4.2.1.5.6765|4|tasd +1.3.6.1.2.1.25.4.2.1.5.6766|4|pkcs11d +1.3.6.1.2.1.25.4.2.1.5.6767|4|admd +1.3.6.1.2.1.25.4.2.1.5.6768|4|iprepd +1.3.6.1.2.1.25.4.2.1.5.6769|4x|676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.2.1.25.4.2.1.5.6770|4|snmpd +1.3.6.1.2.1.25.4.2.1.5.6771|4|keymgmtd +1.3.6.1.2.1.25.4.2.1.5.6772|4|oauth +1.3.6.1.2.1.25.4.2.1.5.6782|4x|2f7573722f62696e2f676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.2.1.25.4.2.1.5.6784|4| +1.3.6.1.2.1.25.4.2.1.5.7174|4|captured +1.3.6.1.2.1.25.4.2.1.5.7175|4|cbrd +1.3.6.1.2.1.25.4.2.1.5.7176|4|zrd +1.3.6.1.2.1.25.4.2.1.5.7177|4|lacpd +1.3.6.1.2.1.25.4.2.1.5.7178|4|monpd +1.3.6.1.2.1.25.4.2.1.5.7179|4|restjavad +1.3.6.1.2.1.25.4.2.1.5.7180|4|shmmapd +1.3.6.1.2.1.25.4.2.1.5.7181|4|websso +1.3.6.1.2.1.25.4.2.1.5.7182|4|devmgmtd +1.3.6.1.2.1.25.4.2.1.5.7183|4x|68747470645f61706d +1.3.6.1.2.1.25.4.2.1.5.7188|4x|2d446a6176612e7574696c2e6c6f6767696e672e6d616e616765723d636f6d2e66352e726573742e636f6d6d6f6e2e526573744c6f674d616e61676572202d446a6176612e7574696c2e6c6f6767696e672e636f6e6669672e66696c653d2f6574632f726573746a617661642e6c6f672e636f6e66202d446c6f67346a2e6465 +1.3.6.1.2.1.25.4.2.1.5.7192|4| +1.3.6.1.2.1.25.4.2.1.5.7194|4x|2d6c206e6f74696365 +1.3.6.1.2.1.25.4.2.1.5.7196|4x|2d2d746872656164733d32202d2d686f73742d6d656d6f72793d343032363533313834202d2d756d755f7468726573686f6c643d3930202d2d70656e64696e675f7472616e733d35303030202d2d726571756573745f73697a653d3130323430202d2d6269675f726571756573745f73697a652031303438353736202d2d6d61 +1.3.6.1.2.1.25.4.2.1.5.7523|4|sod +1.3.6.1.2.1.25.4.2.1.5.7524|4|wocplugin +1.3.6.1.2.1.25.4.2.1.5.7525|4x|73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.5.7526|4|urldbmgrd +1.3.6.1.2.1.25.4.2.1.5.7527|4x|66355f7570646174655f636865636b6572 +1.3.6.1.2.1.25.4.2.1.5.7528|4|nsyncd +1.3.6.1.2.1.25.4.2.1.5.7529|4|lind +1.3.6.1.2.1.25.4.2.1.5.7530|4|aced +1.3.6.1.2.1.25.4.2.1.5.7531|4|restnoded +1.3.6.1.2.1.25.4.2.1.5.7532|4|datasyncd +1.3.6.1.2.1.25.4.2.1.5.7535|4| +1.3.6.1.2.1.25.4.2.1.5.7539|4| +1.3.6.1.2.1.25.4.2.1.5.7543|4x|2d66202d4c462035202f7661722f6c6f672f73666c6f775f6167656e742e6c6f67 +1.3.6.1.2.1.25.4.2.1.5.7544|4x|2f7573722f73686172652f726573742f6e6f64652f7372632f726573746e6f64652e6a73202d702038313035202d2d6c6f674c6576656c2066696e657374202d69202f7661722f6c6f672f726573746e6f6465642f726573746e6f6465642e6c6f67202d73206e6f6e65 +1.3.6.1.2.1.25.4.2.1.5.7949|4|fslogd +1.3.6.1.2.1.25.4.2.1.5.7950|4|ipsd +1.3.6.1.2.1.25.4.2.1.5.7951|4|nokiasnmpd +1.3.6.1.2.1.25.4.2.1.5.7952|4|dosl7d +1.3.6.1.2.1.25.4.2.1.5.7953|4|localdbmgr +1.3.6.1.2.1.25.4.2.1.5.7954|4x|77725f75726c646264 +1.3.6.1.2.1.25.4.2.1.5.9526|4x|2d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f6468636c69656e742f6468636c69656e742e6c6561736573202d7066202f7661722f72756e2f6468636c69656e742e706964 +1.3.6.1.2.1.25.4.2.1.5.9602|4x|2d36202d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f6468636c69656e742f6468636c69656e74362d6d676d742e6c6561736573202d7066202f7661722f72756e2f6468636c69656e74362d6d676d742e706964 +1.3.6.1.2.1.25.4.2.1.5.11784|4x|746f6d636174202d73202f62696e2f62617368202d63206578706f7274204a4156415f4f5054533d272d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d44707974686f6e2e63616368656469723d2f7661722f746d70202d446a6176612e6c6962726172792e706174683d2f7573722f6c +1.3.6.1.2.1.25.4.2.1.5.13563|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.13565|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.13566|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.15387|4x|2d67 +1.3.6.1.2.1.25.4.2.1.5.15921|4x|2d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d44707974686f6e2e63616368656469723d2f7661722f746d70202d446a6176612e6c6962726172792e706174683d2f7573722f6c6962202d4466696c652e656e636f64696e673d5554462d38202d636c69656e74202d586d783133306d +1.3.6.1.2.1.25.4.2.1.5.16645|4x|2d70206c6f63616c362e696e666f +1.3.6.1.2.1.25.4.2.1.5.16646|4x|2d70206c6f63616c362e696e666f +1.3.6.1.2.1.25.4.2.1.5.16648|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.16651|4| +1.3.6.1.2.1.25.4.2.1.5.16652|4| +1.3.6.1.2.1.25.4.2.1.5.16653|4| +1.3.6.1.2.1.25.4.2.1.5.16654|4| +1.3.6.1.2.1.25.4.2.1.5.17900|4x|2d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66202d6e2031 +1.3.6.1.2.1.25.4.2.1.5.18651|4x|2d702038313030202d6c2032202d692034343038353361662d376362352d346530302d393631632d373133303033336265613235 +1.3.6.1.2.1.25.4.2.1.5.23175|4| +1.3.6.1.2.1.25.4.2.1.5.23330|4x|2d66202d63202f636f6e6669672f736e6d702f736e6d70642e636f6e66202d4c7364202d4c462036202f7661722f6c6f672f736e6d70642e6c6f67202d70202f7661722f72756e2f736e6d70642e706964 +1.3.6.1.2.1.25.4.2.1.5.24570|4x|2d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.2.1.25.4.2.1.5.25514|4| +1.3.6.1.2.1.25.4.2.1.5.25517|4x|2d2d746d6d636f756e742032 +1.3.6.1.2.1.25.4.2.1.5.25518|4x|2f7661722f72756e203220322030202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.2.1.25.4.2.1.5.25522|4| +1.3.6.1.2.1.25.4.2.1.5.25524|4| +1.3.6.1.2.1.25.4.2.1.5.25531|4| +1.3.6.1.2.1.25.4.2.1.5.25946|4x|2d53 +1.3.6.1.2.1.25.4.2.1.5.27567|4x|2d63206d656d3a2f2f6e746c6d +1.3.6.1.2.1.25.4.2.1.5.29431|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.29439|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.29440|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.30092|4x|2d542032202d2d746d69642030202d2d6e7075732032202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.2.1.25.4.2.1.5.30120|4x|2d6c202f7661722f6c6f672f7261636f6f6e2e6c6f67202d66202f6574632f7261636f6f6e2f7261636f6f6e2e636f6e66 +1.3.6.1.2.1.25.4.2.1.5.31793|4| +1.3.6.1.2.1.25.4.2.1.6.1|2|4 +1.3.6.1.2.1.25.4.2.1.6.415|2|4 +1.3.6.1.2.1.25.4.2.1.6.440|2|4 +1.3.6.1.2.1.25.4.2.1.6.447|2|4 +1.3.6.1.2.1.25.4.2.1.6.921|2|4 +1.3.6.1.2.1.25.4.2.1.6.951|2|4 +1.3.6.1.2.1.25.4.2.1.6.977|2|4 +1.3.6.1.2.1.25.4.2.1.6.979|2|4 +1.3.6.1.2.1.25.4.2.1.6.982|2|4 +1.3.6.1.2.1.25.4.2.1.6.984|2|4 +1.3.6.1.2.1.25.4.2.1.6.1038|2|4 +1.3.6.1.2.1.25.4.2.1.6.1826|2|4 +1.3.6.1.2.1.25.4.2.1.6.2851|2|4 +1.3.6.1.2.1.25.4.2.1.6.2852|2|4 +1.3.6.1.2.1.25.4.2.1.6.2919|2|4 +1.3.6.1.2.1.25.4.2.1.6.3773|2|4 +1.3.6.1.2.1.25.4.2.1.6.4068|2|4 +1.3.6.1.2.1.25.4.2.1.6.4085|2|4 +1.3.6.1.2.1.25.4.2.1.6.4119|2|4 +1.3.6.1.2.1.25.4.2.1.6.4122|2|4 +1.3.6.1.2.1.25.4.2.1.6.4212|2|4 +1.3.6.1.2.1.25.4.2.1.6.4213|2|4 +1.3.6.1.2.1.25.4.2.1.6.4214|2|4 +1.3.6.1.2.1.25.4.2.1.6.4215|2|4 +1.3.6.1.2.1.25.4.2.1.6.4216|2|4 +1.3.6.1.2.1.25.4.2.1.6.4217|2|4 +1.3.6.1.2.1.25.4.2.1.6.4218|2|4 +1.3.6.1.2.1.25.4.2.1.6.4219|2|4 +1.3.6.1.2.1.25.4.2.1.6.4220|2|4 +1.3.6.1.2.1.25.4.2.1.6.4221|2|4 +1.3.6.1.2.1.25.4.2.1.6.4222|2|4 +1.3.6.1.2.1.25.4.2.1.6.4224|2|4 +1.3.6.1.2.1.25.4.2.1.6.4226|2|4 +1.3.6.1.2.1.25.4.2.1.6.4434|2|4 +1.3.6.1.2.1.25.4.2.1.6.4435|2|4 +1.3.6.1.2.1.25.4.2.1.6.4436|2|4 +1.3.6.1.2.1.25.4.2.1.6.4437|2|4 +1.3.6.1.2.1.25.4.2.1.6.4438|2|4 +1.3.6.1.2.1.25.4.2.1.6.4439|2|4 +1.3.6.1.2.1.25.4.2.1.6.4440|2|4 +1.3.6.1.2.1.25.4.2.1.6.4441|2|4 +1.3.6.1.2.1.25.4.2.1.6.4442|2|4 +1.3.6.1.2.1.25.4.2.1.6.4443|2|4 +1.3.6.1.2.1.25.4.2.1.6.4451|2|4 +1.3.6.1.2.1.25.4.2.1.6.4773|2|4 +1.3.6.1.2.1.25.4.2.1.6.4774|2|4 +1.3.6.1.2.1.25.4.2.1.6.4775|2|4 +1.3.6.1.2.1.25.4.2.1.6.4776|2|4 +1.3.6.1.2.1.25.4.2.1.6.4777|2|4 +1.3.6.1.2.1.25.4.2.1.6.4778|2|4 +1.3.6.1.2.1.25.4.2.1.6.4779|2|4 +1.3.6.1.2.1.25.4.2.1.6.4780|2|4 +1.3.6.1.2.1.25.4.2.1.6.4781|2|4 +1.3.6.1.2.1.25.4.2.1.6.4782|2|4 +1.3.6.1.2.1.25.4.2.1.6.4784|2|4 +1.3.6.1.2.1.25.4.2.1.6.4786|2|4 +1.3.6.1.2.1.25.4.2.1.6.4787|2|4 +1.3.6.1.2.1.25.4.2.1.6.5137|2|4 +1.3.6.1.2.1.25.4.2.1.6.5138|2|4 +1.3.6.1.2.1.25.4.2.1.6.5139|2|4 +1.3.6.1.2.1.25.4.2.1.6.5140|2|4 +1.3.6.1.2.1.25.4.2.1.6.5141|2|4 +1.3.6.1.2.1.25.4.2.1.6.5142|2|4 +1.3.6.1.2.1.25.4.2.1.6.5143|2|4 +1.3.6.1.2.1.25.4.2.1.6.5144|2|4 +1.3.6.1.2.1.25.4.2.1.6.5145|2|4 +1.3.6.1.2.1.25.4.2.1.6.5146|2|4 +1.3.6.1.2.1.25.4.2.1.6.5148|2|4 +1.3.6.1.2.1.25.4.2.1.6.5151|2|4 +1.3.6.1.2.1.25.4.2.1.6.5155|2|4 +1.3.6.1.2.1.25.4.2.1.6.5159|2|4 +1.3.6.1.2.1.25.4.2.1.6.5501|2|4 +1.3.6.1.2.1.25.4.2.1.6.5502|2|4 +1.3.6.1.2.1.25.4.2.1.6.5503|2|4 +1.3.6.1.2.1.25.4.2.1.6.5504|2|4 +1.3.6.1.2.1.25.4.2.1.6.5505|2|4 +1.3.6.1.2.1.25.4.2.1.6.5506|2|4 +1.3.6.1.2.1.25.4.2.1.6.5507|2|4 +1.3.6.1.2.1.25.4.2.1.6.5508|2|4 +1.3.6.1.2.1.25.4.2.1.6.5509|2|4 +1.3.6.1.2.1.25.4.2.1.6.5510|2|4 +1.3.6.1.2.1.25.4.2.1.6.5516|2|4 +1.3.6.1.2.1.25.4.2.1.6.5522|2|4 +1.3.6.1.2.1.25.4.2.1.6.5861|2|4 +1.3.6.1.2.1.25.4.2.1.6.5862|2|4 +1.3.6.1.2.1.25.4.2.1.6.5863|2|4 +1.3.6.1.2.1.25.4.2.1.6.5864|2|4 +1.3.6.1.2.1.25.4.2.1.6.5865|2|4 +1.3.6.1.2.1.25.4.2.1.6.5866|2|4 +1.3.6.1.2.1.25.4.2.1.6.5867|2|4 +1.3.6.1.2.1.25.4.2.1.6.5868|2|4 +1.3.6.1.2.1.25.4.2.1.6.5869|2|4 +1.3.6.1.2.1.25.4.2.1.6.5870|2|4 +1.3.6.1.2.1.25.4.2.1.6.5872|2|4 +1.3.6.1.2.1.25.4.2.1.6.5875|2|4 +1.3.6.1.2.1.25.4.2.1.6.5878|2|4 +1.3.6.1.2.1.25.4.2.1.6.5879|2|4 +1.3.6.1.2.1.25.4.2.1.6.5884|2|4 +1.3.6.1.2.1.25.4.2.1.6.6344|2|4 +1.3.6.1.2.1.25.4.2.1.6.6345|2|4 +1.3.6.1.2.1.25.4.2.1.6.6346|2|4 +1.3.6.1.2.1.25.4.2.1.6.6347|2|4 +1.3.6.1.2.1.25.4.2.1.6.6348|2|4 +1.3.6.1.2.1.25.4.2.1.6.6349|2|4 +1.3.6.1.2.1.25.4.2.1.6.6350|2|4 +1.3.6.1.2.1.25.4.2.1.6.6351|2|4 +1.3.6.1.2.1.25.4.2.1.6.6352|2|4 +1.3.6.1.2.1.25.4.2.1.6.6353|2|4 +1.3.6.1.2.1.25.4.2.1.6.6358|2|4 +1.3.6.1.2.1.25.4.2.1.6.6366|2|4 +1.3.6.1.2.1.25.4.2.1.6.6763|2|4 +1.3.6.1.2.1.25.4.2.1.6.6764|2|4 +1.3.6.1.2.1.25.4.2.1.6.6765|2|4 +1.3.6.1.2.1.25.4.2.1.6.6766|2|4 +1.3.6.1.2.1.25.4.2.1.6.6767|2|4 +1.3.6.1.2.1.25.4.2.1.6.6768|2|4 +1.3.6.1.2.1.25.4.2.1.6.6769|2|4 +1.3.6.1.2.1.25.4.2.1.6.6770|2|4 +1.3.6.1.2.1.25.4.2.1.6.6771|2|4 +1.3.6.1.2.1.25.4.2.1.6.6772|2|4 +1.3.6.1.2.1.25.4.2.1.6.6782|2|4 +1.3.6.1.2.1.25.4.2.1.6.6784|2|4 +1.3.6.1.2.1.25.4.2.1.6.7174|2|4 +1.3.6.1.2.1.25.4.2.1.6.7175|2|4 +1.3.6.1.2.1.25.4.2.1.6.7176|2|4 +1.3.6.1.2.1.25.4.2.1.6.7177|2|4 +1.3.6.1.2.1.25.4.2.1.6.7178|2|4 +1.3.6.1.2.1.25.4.2.1.6.7179|2|4 +1.3.6.1.2.1.25.4.2.1.6.7180|2|4 +1.3.6.1.2.1.25.4.2.1.6.7181|2|4 +1.3.6.1.2.1.25.4.2.1.6.7182|2|4 +1.3.6.1.2.1.25.4.2.1.6.7183|2|4 +1.3.6.1.2.1.25.4.2.1.6.7188|2|4 +1.3.6.1.2.1.25.4.2.1.6.7192|2|4 +1.3.6.1.2.1.25.4.2.1.6.7194|2|4 +1.3.6.1.2.1.25.4.2.1.6.7196|2|4 +1.3.6.1.2.1.25.4.2.1.6.7523|2|4 +1.3.6.1.2.1.25.4.2.1.6.7524|2|4 +1.3.6.1.2.1.25.4.2.1.6.7525|2|4 +1.3.6.1.2.1.25.4.2.1.6.7526|2|4 +1.3.6.1.2.1.25.4.2.1.6.7527|2|4 +1.3.6.1.2.1.25.4.2.1.6.7528|2|4 +1.3.6.1.2.1.25.4.2.1.6.7529|2|4 +1.3.6.1.2.1.25.4.2.1.6.7530|2|4 +1.3.6.1.2.1.25.4.2.1.6.7531|2|4 +1.3.6.1.2.1.25.4.2.1.6.7532|2|4 +1.3.6.1.2.1.25.4.2.1.6.7535|2|4 +1.3.6.1.2.1.25.4.2.1.6.7539|2|4 +1.3.6.1.2.1.25.4.2.1.6.7543|2|4 +1.3.6.1.2.1.25.4.2.1.6.7544|2|4 +1.3.6.1.2.1.25.4.2.1.6.7949|2|4 +1.3.6.1.2.1.25.4.2.1.6.7950|2|4 +1.3.6.1.2.1.25.4.2.1.6.7951|2|4 +1.3.6.1.2.1.25.4.2.1.6.7952|2|4 +1.3.6.1.2.1.25.4.2.1.6.7953|2|4 +1.3.6.1.2.1.25.4.2.1.6.7954|2|4 +1.3.6.1.2.1.25.4.2.1.6.9526|2|4 +1.3.6.1.2.1.25.4.2.1.6.9602|2|4 +1.3.6.1.2.1.25.4.2.1.6.11784|2|4 +1.3.6.1.2.1.25.4.2.1.6.13563|2|4 +1.3.6.1.2.1.25.4.2.1.6.13565|2|4 +1.3.6.1.2.1.25.4.2.1.6.13566|2|4 +1.3.6.1.2.1.25.4.2.1.6.15387|2|4 +1.3.6.1.2.1.25.4.2.1.6.15921|2|4 +1.3.6.1.2.1.25.4.2.1.6.16645|2|4 +1.3.6.1.2.1.25.4.2.1.6.16646|2|4 +1.3.6.1.2.1.25.4.2.1.6.16648|2|4 +1.3.6.1.2.1.25.4.2.1.6.16651|2|4 +1.3.6.1.2.1.25.4.2.1.6.16652|2|4 +1.3.6.1.2.1.25.4.2.1.6.16653|2|4 +1.3.6.1.2.1.25.4.2.1.6.16654|2|4 +1.3.6.1.2.1.25.4.2.1.6.17900|2|4 +1.3.6.1.2.1.25.4.2.1.6.18651|2|4 +1.3.6.1.2.1.25.4.2.1.6.23175|2|4 +1.3.6.1.2.1.25.4.2.1.6.23330|2|4 +1.3.6.1.2.1.25.4.2.1.6.24570|2|4 +1.3.6.1.2.1.25.4.2.1.6.25514|2|4 +1.3.6.1.2.1.25.4.2.1.6.25517|2|4 +1.3.6.1.2.1.25.4.2.1.6.25518|2|4 +1.3.6.1.2.1.25.4.2.1.6.25522|2|4 +1.3.6.1.2.1.25.4.2.1.6.25524|2|4 +1.3.6.1.2.1.25.4.2.1.6.25531|2|4 +1.3.6.1.2.1.25.4.2.1.6.25946|2|4 +1.3.6.1.2.1.25.4.2.1.6.27567|2|4 +1.3.6.1.2.1.25.4.2.1.6.29431|2|4 +1.3.6.1.2.1.25.4.2.1.6.29439|2|4 +1.3.6.1.2.1.25.4.2.1.6.29440|2|4 +1.3.6.1.2.1.25.4.2.1.6.30092|2|4 +1.3.6.1.2.1.25.4.2.1.6.30120|2|4 +1.3.6.1.2.1.25.4.2.1.6.31793|2|4 +1.3.6.1.2.1.25.4.2.1.7.1|2|2 +1.3.6.1.2.1.25.4.2.1.7.415|2|2 +1.3.6.1.2.1.25.4.2.1.7.440|2|2 +1.3.6.1.2.1.25.4.2.1.7.447|2|2 +1.3.6.1.2.1.25.4.2.1.7.921|2|2 +1.3.6.1.2.1.25.4.2.1.7.951|2|2 +1.3.6.1.2.1.25.4.2.1.7.977|2|2 +1.3.6.1.2.1.25.4.2.1.7.979|2|2 +1.3.6.1.2.1.25.4.2.1.7.982|2|2 +1.3.6.1.2.1.25.4.2.1.7.984|2|2 +1.3.6.1.2.1.25.4.2.1.7.1038|2|2 +1.3.6.1.2.1.25.4.2.1.7.1826|2|2 +1.3.6.1.2.1.25.4.2.1.7.2851|2|2 +1.3.6.1.2.1.25.4.2.1.7.2852|2|2 +1.3.6.1.2.1.25.4.2.1.7.2919|2|2 +1.3.6.1.2.1.25.4.2.1.7.3773|2|2 +1.3.6.1.2.1.25.4.2.1.7.4068|2|2 +1.3.6.1.2.1.25.4.2.1.7.4085|2|2 +1.3.6.1.2.1.25.4.2.1.7.4119|2|2 +1.3.6.1.2.1.25.4.2.1.7.4122|2|2 +1.3.6.1.2.1.25.4.2.1.7.4212|2|2 +1.3.6.1.2.1.25.4.2.1.7.4213|2|2 +1.3.6.1.2.1.25.4.2.1.7.4214|2|2 +1.3.6.1.2.1.25.4.2.1.7.4215|2|2 +1.3.6.1.2.1.25.4.2.1.7.4216|2|2 +1.3.6.1.2.1.25.4.2.1.7.4217|2|2 +1.3.6.1.2.1.25.4.2.1.7.4218|2|2 +1.3.6.1.2.1.25.4.2.1.7.4219|2|2 +1.3.6.1.2.1.25.4.2.1.7.4220|2|2 +1.3.6.1.2.1.25.4.2.1.7.4221|2|2 +1.3.6.1.2.1.25.4.2.1.7.4222|2|2 +1.3.6.1.2.1.25.4.2.1.7.4224|2|2 +1.3.6.1.2.1.25.4.2.1.7.4226|2|2 +1.3.6.1.2.1.25.4.2.1.7.4434|2|2 +1.3.6.1.2.1.25.4.2.1.7.4435|2|2 +1.3.6.1.2.1.25.4.2.1.7.4436|2|2 +1.3.6.1.2.1.25.4.2.1.7.4437|2|2 +1.3.6.1.2.1.25.4.2.1.7.4438|2|2 +1.3.6.1.2.1.25.4.2.1.7.4439|2|2 +1.3.6.1.2.1.25.4.2.1.7.4440|2|2 +1.3.6.1.2.1.25.4.2.1.7.4441|2|2 +1.3.6.1.2.1.25.4.2.1.7.4442|2|2 +1.3.6.1.2.1.25.4.2.1.7.4443|2|2 +1.3.6.1.2.1.25.4.2.1.7.4451|2|2 +1.3.6.1.2.1.25.4.2.1.7.4773|2|2 +1.3.6.1.2.1.25.4.2.1.7.4774|2|2 +1.3.6.1.2.1.25.4.2.1.7.4775|2|2 +1.3.6.1.2.1.25.4.2.1.7.4776|2|2 +1.3.6.1.2.1.25.4.2.1.7.4777|2|2 +1.3.6.1.2.1.25.4.2.1.7.4778|2|2 +1.3.6.1.2.1.25.4.2.1.7.4779|2|2 +1.3.6.1.2.1.25.4.2.1.7.4780|2|2 +1.3.6.1.2.1.25.4.2.1.7.4781|2|2 +1.3.6.1.2.1.25.4.2.1.7.4782|2|2 +1.3.6.1.2.1.25.4.2.1.7.4784|2|2 +1.3.6.1.2.1.25.4.2.1.7.4786|2|2 +1.3.6.1.2.1.25.4.2.1.7.4787|2|2 +1.3.6.1.2.1.25.4.2.1.7.5137|2|2 +1.3.6.1.2.1.25.4.2.1.7.5138|2|2 +1.3.6.1.2.1.25.4.2.1.7.5139|2|2 +1.3.6.1.2.1.25.4.2.1.7.5140|2|2 +1.3.6.1.2.1.25.4.2.1.7.5141|2|2 +1.3.6.1.2.1.25.4.2.1.7.5142|2|2 +1.3.6.1.2.1.25.4.2.1.7.5143|2|2 +1.3.6.1.2.1.25.4.2.1.7.5144|2|2 +1.3.6.1.2.1.25.4.2.1.7.5145|2|2 +1.3.6.1.2.1.25.4.2.1.7.5146|2|2 +1.3.6.1.2.1.25.4.2.1.7.5148|2|2 +1.3.6.1.2.1.25.4.2.1.7.5151|2|2 +1.3.6.1.2.1.25.4.2.1.7.5155|2|2 +1.3.6.1.2.1.25.4.2.1.7.5159|2|2 +1.3.6.1.2.1.25.4.2.1.7.5501|2|2 +1.3.6.1.2.1.25.4.2.1.7.5502|2|2 +1.3.6.1.2.1.25.4.2.1.7.5503|2|2 +1.3.6.1.2.1.25.4.2.1.7.5504|2|2 +1.3.6.1.2.1.25.4.2.1.7.5505|2|2 +1.3.6.1.2.1.25.4.2.1.7.5506|2|2 +1.3.6.1.2.1.25.4.2.1.7.5507|2|2 +1.3.6.1.2.1.25.4.2.1.7.5508|2|2 +1.3.6.1.2.1.25.4.2.1.7.5509|2|2 +1.3.6.1.2.1.25.4.2.1.7.5510|2|2 +1.3.6.1.2.1.25.4.2.1.7.5516|2|2 +1.3.6.1.2.1.25.4.2.1.7.5522|2|2 +1.3.6.1.2.1.25.4.2.1.7.5861|2|2 +1.3.6.1.2.1.25.4.2.1.7.5862|2|2 +1.3.6.1.2.1.25.4.2.1.7.5863|2|2 +1.3.6.1.2.1.25.4.2.1.7.5864|2|2 +1.3.6.1.2.1.25.4.2.1.7.5865|2|2 +1.3.6.1.2.1.25.4.2.1.7.5866|2|2 +1.3.6.1.2.1.25.4.2.1.7.5867|2|2 +1.3.6.1.2.1.25.4.2.1.7.5868|2|2 +1.3.6.1.2.1.25.4.2.1.7.5869|2|2 +1.3.6.1.2.1.25.4.2.1.7.5870|2|2 +1.3.6.1.2.1.25.4.2.1.7.5872|2|2 +1.3.6.1.2.1.25.4.2.1.7.5875|2|2 +1.3.6.1.2.1.25.4.2.1.7.5878|2|2 +1.3.6.1.2.1.25.4.2.1.7.5879|2|2 +1.3.6.1.2.1.25.4.2.1.7.5884|2|2 +1.3.6.1.2.1.25.4.2.1.7.6344|2|2 +1.3.6.1.2.1.25.4.2.1.7.6345|2|2 +1.3.6.1.2.1.25.4.2.1.7.6346|2|2 +1.3.6.1.2.1.25.4.2.1.7.6347|2|2 +1.3.6.1.2.1.25.4.2.1.7.6348|2|2 +1.3.6.1.2.1.25.4.2.1.7.6349|2|2 +1.3.6.1.2.1.25.4.2.1.7.6350|2|2 +1.3.6.1.2.1.25.4.2.1.7.6351|2|2 +1.3.6.1.2.1.25.4.2.1.7.6352|2|2 +1.3.6.1.2.1.25.4.2.1.7.6353|2|2 +1.3.6.1.2.1.25.4.2.1.7.6358|2|2 +1.3.6.1.2.1.25.4.2.1.7.6366|2|2 +1.3.6.1.2.1.25.4.2.1.7.6763|2|2 +1.3.6.1.2.1.25.4.2.1.7.6764|2|2 +1.3.6.1.2.1.25.4.2.1.7.6765|2|2 +1.3.6.1.2.1.25.4.2.1.7.6766|2|2 +1.3.6.1.2.1.25.4.2.1.7.6767|2|2 +1.3.6.1.2.1.25.4.2.1.7.6768|2|2 +1.3.6.1.2.1.25.4.2.1.7.6769|2|2 +1.3.6.1.2.1.25.4.2.1.7.6770|2|2 +1.3.6.1.2.1.25.4.2.1.7.6771|2|2 +1.3.6.1.2.1.25.4.2.1.7.6772|2|2 +1.3.6.1.2.1.25.4.2.1.7.6782|2|2 +1.3.6.1.2.1.25.4.2.1.7.6784|2|2 +1.3.6.1.2.1.25.4.2.1.7.7174|2|2 +1.3.6.1.2.1.25.4.2.1.7.7175|2|2 +1.3.6.1.2.1.25.4.2.1.7.7176|2|2 +1.3.6.1.2.1.25.4.2.1.7.7177|2|2 +1.3.6.1.2.1.25.4.2.1.7.7178|2|2 +1.3.6.1.2.1.25.4.2.1.7.7179|2|2 +1.3.6.1.2.1.25.4.2.1.7.7180|2|2 +1.3.6.1.2.1.25.4.2.1.7.7181|2|2 +1.3.6.1.2.1.25.4.2.1.7.7182|2|2 +1.3.6.1.2.1.25.4.2.1.7.7183|2|2 +1.3.6.1.2.1.25.4.2.1.7.7188|2|2 +1.3.6.1.2.1.25.4.2.1.7.7192|2|2 +1.3.6.1.2.1.25.4.2.1.7.7194|2|2 +1.3.6.1.2.1.25.4.2.1.7.7196|2|2 +1.3.6.1.2.1.25.4.2.1.7.7523|2|2 +1.3.6.1.2.1.25.4.2.1.7.7524|2|2 +1.3.6.1.2.1.25.4.2.1.7.7525|2|2 +1.3.6.1.2.1.25.4.2.1.7.7526|2|2 +1.3.6.1.2.1.25.4.2.1.7.7527|2|2 +1.3.6.1.2.1.25.4.2.1.7.7528|2|2 +1.3.6.1.2.1.25.4.2.1.7.7529|2|2 +1.3.6.1.2.1.25.4.2.1.7.7530|2|2 +1.3.6.1.2.1.25.4.2.1.7.7531|2|2 +1.3.6.1.2.1.25.4.2.1.7.7532|2|2 +1.3.6.1.2.1.25.4.2.1.7.7535|2|2 +1.3.6.1.2.1.25.4.2.1.7.7539|2|2 +1.3.6.1.2.1.25.4.2.1.7.7543|2|2 +1.3.6.1.2.1.25.4.2.1.7.7544|2|2 +1.3.6.1.2.1.25.4.2.1.7.7949|2|2 +1.3.6.1.2.1.25.4.2.1.7.7950|2|2 +1.3.6.1.2.1.25.4.2.1.7.7951|2|2 +1.3.6.1.2.1.25.4.2.1.7.7952|2|2 +1.3.6.1.2.1.25.4.2.1.7.7953|2|2 +1.3.6.1.2.1.25.4.2.1.7.7954|2|2 +1.3.6.1.2.1.25.4.2.1.7.9526|2|2 +1.3.6.1.2.1.25.4.2.1.7.9602|2|2 +1.3.6.1.2.1.25.4.2.1.7.11784|2|2 +1.3.6.1.2.1.25.4.2.1.7.13563|2|2 +1.3.6.1.2.1.25.4.2.1.7.13565|2|2 +1.3.6.1.2.1.25.4.2.1.7.13566|2|2 +1.3.6.1.2.1.25.4.2.1.7.15387|2|2 +1.3.6.1.2.1.25.4.2.1.7.15921|2|2 +1.3.6.1.2.1.25.4.2.1.7.16645|2|2 +1.3.6.1.2.1.25.4.2.1.7.16646|2|2 +1.3.6.1.2.1.25.4.2.1.7.16648|2|2 +1.3.6.1.2.1.25.4.2.1.7.16651|2|2 +1.3.6.1.2.1.25.4.2.1.7.16652|2|2 +1.3.6.1.2.1.25.4.2.1.7.16653|2|2 +1.3.6.1.2.1.25.4.2.1.7.16654|2|2 +1.3.6.1.2.1.25.4.2.1.7.17900|2|2 +1.3.6.1.2.1.25.4.2.1.7.18651|2|2 +1.3.6.1.2.1.25.4.2.1.7.23175|2|2 +1.3.6.1.2.1.25.4.2.1.7.23330|2|1 +1.3.6.1.2.1.25.4.2.1.7.24620|2|2 +1.3.6.1.2.1.25.4.2.1.7.25514|2|2 +1.3.6.1.2.1.25.4.2.1.7.25517|2|2 +1.3.6.1.2.1.25.4.2.1.7.25518|2|2 +1.3.6.1.2.1.25.4.2.1.7.25522|2|2 +1.3.6.1.2.1.25.4.2.1.7.25524|2|2 +1.3.6.1.2.1.25.4.2.1.7.25531|2|2 +1.3.6.1.2.1.25.4.2.1.7.25946|2|2 +1.3.6.1.2.1.25.4.2.1.7.27567|2|2 +1.3.6.1.2.1.25.4.2.1.7.29431|2|2 +1.3.6.1.2.1.25.4.2.1.7.29439|2|2 +1.3.6.1.2.1.25.4.2.1.7.29440|2|2 +1.3.6.1.2.1.25.4.2.1.7.30092|2|2 +1.3.6.1.2.1.25.4.2.1.7.30120|2|2 +1.3.6.1.2.1.25.4.2.1.7.31793|2|2 +1.3.6.1.2.1.25.5.1.1.1.1|2|164793 +1.3.6.1.2.1.25.5.1.1.1.415|2|61212 +1.3.6.1.2.1.25.5.1.1.1.440|2|4 +1.3.6.1.2.1.25.5.1.1.1.447|2|39 +1.3.6.1.2.1.25.5.1.1.1.921|2|30296 +1.3.6.1.2.1.25.5.1.1.1.951|2|5675 +1.3.6.1.2.1.25.5.1.1.1.977|2|40364 +1.3.6.1.2.1.25.5.1.1.1.979|2|0 +1.3.6.1.2.1.25.5.1.1.1.982|2|12182 +1.3.6.1.2.1.25.5.1.1.1.984|2|25717 +1.3.6.1.2.1.25.5.1.1.1.1038|2|4453 +1.3.6.1.2.1.25.5.1.1.1.1826|2|48057 +1.3.6.1.2.1.25.5.1.1.1.2851|2|7041 +1.3.6.1.2.1.25.5.1.1.1.2852|2|17916 +1.3.6.1.2.1.25.5.1.1.1.2919|2|42140 +1.3.6.1.2.1.25.5.1.1.1.3773|2|6 +1.3.6.1.2.1.25.5.1.1.1.4068|2|8817 +1.3.6.1.2.1.25.5.1.1.1.4085|2|7800 +1.3.6.1.2.1.25.5.1.1.1.4119|2|1 +1.3.6.1.2.1.25.5.1.1.1.4122|2|0 +1.3.6.1.2.1.25.5.1.1.1.4212|2|8 +1.3.6.1.2.1.25.5.1.1.1.4213|2|7 +1.3.6.1.2.1.25.5.1.1.1.4214|2|6 +1.3.6.1.2.1.25.5.1.1.1.4215|2|7 +1.3.6.1.2.1.25.5.1.1.1.4216|2|13 +1.3.6.1.2.1.25.5.1.1.1.4217|2|7 +1.3.6.1.2.1.25.5.1.1.1.4218|2|7 +1.3.6.1.2.1.25.5.1.1.1.4219|2|6 +1.3.6.1.2.1.25.5.1.1.1.4220|2|6 +1.3.6.1.2.1.25.5.1.1.1.4221|2|6 +1.3.6.1.2.1.25.5.1.1.1.4222|2|6273 +1.3.6.1.2.1.25.5.1.1.1.4224|2|5518 +1.3.6.1.2.1.25.5.1.1.1.4226|2|7778 +1.3.6.1.2.1.25.5.1.1.1.4434|2|6 +1.3.6.1.2.1.25.5.1.1.1.4435|2|5 +1.3.6.1.2.1.25.5.1.1.1.4436|2|7 +1.3.6.1.2.1.25.5.1.1.1.4437|2|7 +1.3.6.1.2.1.25.5.1.1.1.4438|2|7 +1.3.6.1.2.1.25.5.1.1.1.4439|2|6 +1.3.6.1.2.1.25.5.1.1.1.4440|2|6 +1.3.6.1.2.1.25.5.1.1.1.4441|2|6 +1.3.6.1.2.1.25.5.1.1.1.4442|2|9 +1.3.6.1.2.1.25.5.1.1.1.4443|2|7 +1.3.6.1.2.1.25.5.1.1.1.4451|2|5329 +1.3.6.1.2.1.25.5.1.1.1.4773|2|6 +1.3.6.1.2.1.25.5.1.1.1.4774|2|6 +1.3.6.1.2.1.25.5.1.1.1.4775|2|14 +1.3.6.1.2.1.25.5.1.1.1.4776|2|6 +1.3.6.1.2.1.25.5.1.1.1.4777|2|6 +1.3.6.1.2.1.25.5.1.1.1.4778|2|8 +1.3.6.1.2.1.25.5.1.1.1.4779|2|10 +1.3.6.1.2.1.25.5.1.1.1.4780|2|6 +1.3.6.1.2.1.25.5.1.1.1.4781|2|6 +1.3.6.1.2.1.25.5.1.1.1.4782|2|6 +1.3.6.1.2.1.25.5.1.1.1.4784|2|24 +1.3.6.1.2.1.25.5.1.1.1.4786|2|6096 +1.3.6.1.2.1.25.5.1.1.1.4787|2|18120 +1.3.6.1.2.1.25.5.1.1.1.5137|2|8 +1.3.6.1.2.1.25.5.1.1.1.5138|2|6 +1.3.6.1.2.1.25.5.1.1.1.5139|2|289 +1.3.6.1.2.1.25.5.1.1.1.5140|2|8 +1.3.6.1.2.1.25.5.1.1.1.5141|2|6 +1.3.6.1.2.1.25.5.1.1.1.5142|2|7 +1.3.6.1.2.1.25.5.1.1.1.5143|2|7 +1.3.6.1.2.1.25.5.1.1.1.5144|2|231 +1.3.6.1.2.1.25.5.1.1.1.5145|2|6 +1.3.6.1.2.1.25.5.1.1.1.5146|2|6 +1.3.6.1.2.1.25.5.1.1.1.5148|2|10673 +1.3.6.1.2.1.25.5.1.1.1.5151|2|764 +1.3.6.1.2.1.25.5.1.1.1.5155|2|248494 +1.3.6.1.2.1.25.5.1.1.1.5159|2|19 +1.3.6.1.2.1.25.5.1.1.1.5501|2|6 +1.3.6.1.2.1.25.5.1.1.1.5502|2|6 +1.3.6.1.2.1.25.5.1.1.1.5503|2|252 +1.3.6.1.2.1.25.5.1.1.1.5504|2|6 +1.3.6.1.2.1.25.5.1.1.1.5505|2|6 +1.3.6.1.2.1.25.5.1.1.1.5506|2|231 +1.3.6.1.2.1.25.5.1.1.1.5507|2|7 +1.3.6.1.2.1.25.5.1.1.1.5508|2|6 +1.3.6.1.2.1.25.5.1.1.1.5509|2|6 +1.3.6.1.2.1.25.5.1.1.1.5510|2|5 +1.3.6.1.2.1.25.5.1.1.1.5516|2|6688 +1.3.6.1.2.1.25.5.1.1.1.5522|2|9286 +1.3.6.1.2.1.25.5.1.1.1.5861|2|7 +1.3.6.1.2.1.25.5.1.1.1.5862|2|7 +1.3.6.1.2.1.25.5.1.1.1.5863|2|6 +1.3.6.1.2.1.25.5.1.1.1.5864|2|253 +1.3.6.1.2.1.25.5.1.1.1.5865|2|254 +1.3.6.1.2.1.25.5.1.1.1.5866|2|6 +1.3.6.1.2.1.25.5.1.1.1.5867|2|8 +1.3.6.1.2.1.25.5.1.1.1.5868|2|8 +1.3.6.1.2.1.25.5.1.1.1.5869|2|6 +1.3.6.1.2.1.25.5.1.1.1.5870|2|6 +1.3.6.1.2.1.25.5.1.1.1.5872|2|88851 +1.3.6.1.2.1.25.5.1.1.1.5875|2|1574 +1.3.6.1.2.1.25.5.1.1.1.5878|2|314954 +1.3.6.1.2.1.25.5.1.1.1.5879|2|135525 +1.3.6.1.2.1.25.5.1.1.1.5884|2|124 +1.3.6.1.2.1.25.5.1.1.1.6344|2|8 +1.3.6.1.2.1.25.5.1.1.1.6345|2|225 +1.3.6.1.2.1.25.5.1.1.1.6346|2|7 +1.3.6.1.2.1.25.5.1.1.1.6347|2|7 +1.3.6.1.2.1.25.5.1.1.1.6348|2|6 +1.3.6.1.2.1.25.5.1.1.1.6349|2|6 +1.3.6.1.2.1.25.5.1.1.1.6350|2|7 +1.3.6.1.2.1.25.5.1.1.1.6351|2|7 +1.3.6.1.2.1.25.5.1.1.1.6352|2|6 +1.3.6.1.2.1.25.5.1.1.1.6353|2|6 +1.3.6.1.2.1.25.5.1.1.1.6358|2|1121128 +1.3.6.1.2.1.25.5.1.1.1.6366|2|24803 +1.3.6.1.2.1.25.5.1.1.1.6763|2|7 +1.3.6.1.2.1.25.5.1.1.1.6764|2|6 +1.3.6.1.2.1.25.5.1.1.1.6765|2|7 +1.3.6.1.2.1.25.5.1.1.1.6766|2|9 +1.3.6.1.2.1.25.5.1.1.1.6767|2|6 +1.3.6.1.2.1.25.5.1.1.1.6768|2|8 +1.3.6.1.2.1.25.5.1.1.1.6769|2|6 +1.3.6.1.2.1.25.5.1.1.1.6770|2|278 +1.3.6.1.2.1.25.5.1.1.1.6771|2|6 +1.3.6.1.2.1.25.5.1.1.1.6772|2|6 +1.3.6.1.2.1.25.5.1.1.1.6782|2|16886 +1.3.6.1.2.1.25.5.1.1.1.6784|2|13602 +1.3.6.1.2.1.25.5.1.1.1.7174|2|7 +1.3.6.1.2.1.25.5.1.1.1.7175|2|247 +1.3.6.1.2.1.25.5.1.1.1.7176|2|6 +1.3.6.1.2.1.25.5.1.1.1.7177|2|6 +1.3.6.1.2.1.25.5.1.1.1.7178|2|7 +1.3.6.1.2.1.25.5.1.1.1.7179|2|7 +1.3.6.1.2.1.25.5.1.1.1.7180|2|11 +1.3.6.1.2.1.25.5.1.1.1.7181|2|7 +1.3.6.1.2.1.25.5.1.1.1.7182|2|230 +1.3.6.1.2.1.25.5.1.1.1.7183|2|6 +1.3.6.1.2.1.25.5.1.1.1.7188|2|443110 +1.3.6.1.2.1.25.5.1.1.1.7192|2|58060 +1.3.6.1.2.1.25.5.1.1.1.7194|2|374 +1.3.6.1.2.1.25.5.1.1.1.7196|2|19690 +1.3.6.1.2.1.25.5.1.1.1.7523|2|25 +1.3.6.1.2.1.25.5.1.1.1.7524|2|7 +1.3.6.1.2.1.25.5.1.1.1.7525|2|5 +1.3.6.1.2.1.25.5.1.1.1.7526|2|9 +1.3.6.1.2.1.25.5.1.1.1.7527|2|6 +1.3.6.1.2.1.25.5.1.1.1.7528|2|7 +1.3.6.1.2.1.25.5.1.1.1.7529|2|7 +1.3.6.1.2.1.25.5.1.1.1.7530|2|6 +1.3.6.1.2.1.25.5.1.1.1.7531|2|7 +1.3.6.1.2.1.25.5.1.1.1.7532|2|6 +1.3.6.1.2.1.25.5.1.1.1.7535|2|12611 +1.3.6.1.2.1.25.5.1.1.1.7539|2|249329 +1.3.6.1.2.1.25.5.1.1.1.7543|2|1616 +1.3.6.1.2.1.25.5.1.1.1.7544|2|464 +1.3.6.1.2.1.25.5.1.1.1.7949|2|6 +1.3.6.1.2.1.25.5.1.1.1.7950|2|6 +1.3.6.1.2.1.25.5.1.1.1.7951|2|6 +1.3.6.1.2.1.25.5.1.1.1.7952|2|6 +1.3.6.1.2.1.25.5.1.1.1.7953|2|6 +1.3.6.1.2.1.25.5.1.1.1.7954|2|8 +1.3.6.1.2.1.25.5.1.1.1.9526|2|19 +1.3.6.1.2.1.25.5.1.1.1.9602|2|2900 +1.3.6.1.2.1.25.5.1.1.1.11784|2|5 +1.3.6.1.2.1.25.5.1.1.1.13563|2|8 +1.3.6.1.2.1.25.5.1.1.1.13565|2|19 +1.3.6.1.2.1.25.5.1.1.1.13566|2|164 +1.3.6.1.2.1.25.5.1.1.1.15387|2|1373 +1.3.6.1.2.1.25.5.1.1.1.15921|2|2400923 +1.3.6.1.2.1.25.5.1.1.1.16645|2|553 +1.3.6.1.2.1.25.5.1.1.1.16646|2|353 +1.3.6.1.2.1.25.5.1.1.1.16648|2|23 +1.3.6.1.2.1.25.5.1.1.1.16651|2|372 +1.3.6.1.2.1.25.5.1.1.1.16652|2|1145 +1.3.6.1.2.1.25.5.1.1.1.16653|2|4450 +1.3.6.1.2.1.25.5.1.1.1.16654|2|75 +1.3.6.1.2.1.25.5.1.1.1.17900|2|77 +1.3.6.1.2.1.25.5.1.1.1.18651|2|168616 +1.3.6.1.2.1.25.5.1.1.1.23175|2|39844 +1.3.6.1.2.1.25.5.1.1.1.23330|2|33915 +1.3.6.1.2.1.25.5.1.1.1.24620|2|0 +1.3.6.1.2.1.25.5.1.1.1.25514|2|213 +1.3.6.1.2.1.25.5.1.1.1.25517|2|1968 +1.3.6.1.2.1.25.5.1.1.1.25518|2|4 +1.3.6.1.2.1.25.5.1.1.1.25522|2|54954 +1.3.6.1.2.1.25.5.1.1.1.25524|2|1523 +1.3.6.1.2.1.25.5.1.1.1.25531|2|6683 +1.3.6.1.2.1.25.5.1.1.1.25946|2|105377 +1.3.6.1.2.1.25.5.1.1.1.27567|2|1 +1.3.6.1.2.1.25.5.1.1.1.29431|2|390 +1.3.6.1.2.1.25.5.1.1.1.29439|2|397 +1.3.6.1.2.1.25.5.1.1.1.29440|2|562 +1.3.6.1.2.1.25.5.1.1.1.30092|2|30637277 +1.3.6.1.2.1.25.5.1.1.1.30120|2|501 +1.3.6.1.2.1.25.5.1.1.1.31793|2|27 +1.3.6.1.2.1.25.5.1.1.2.1|2|4500 +1.3.6.1.2.1.25.5.1.1.2.415|2|1788 +1.3.6.1.2.1.25.5.1.1.2.440|2|220 +1.3.6.1.2.1.25.5.1.1.2.447|2|144 +1.3.6.1.2.1.25.5.1.1.2.921|2|40 +1.3.6.1.2.1.25.5.1.1.2.951|2|492 +1.3.6.1.2.1.25.5.1.1.2.977|2|1040 +1.3.6.1.2.1.25.5.1.1.2.979|2|48 +1.3.6.1.2.1.25.5.1.1.2.982|2|444 +1.3.6.1.2.1.25.5.1.1.2.984|2|1108 +1.3.6.1.2.1.25.5.1.1.2.1038|2|16 +1.3.6.1.2.1.25.5.1.1.2.1826|2|5136 +1.3.6.1.2.1.25.5.1.1.2.2851|2|436 +1.3.6.1.2.1.25.5.1.1.2.2852|2|15216 +1.3.6.1.2.1.25.5.1.1.2.2919|2|89012 +1.3.6.1.2.1.25.5.1.1.2.3773|2|140 +1.3.6.1.2.1.25.5.1.1.2.4068|2|6820 +1.3.6.1.2.1.25.5.1.1.2.4085|2|188 +1.3.6.1.2.1.25.5.1.1.2.4119|2|48 +1.3.6.1.2.1.25.5.1.1.2.4122|2|44 +1.3.6.1.2.1.25.5.1.1.2.4212|2|212 +1.3.6.1.2.1.25.5.1.1.2.4213|2|152 +1.3.6.1.2.1.25.5.1.1.2.4214|2|172 +1.3.6.1.2.1.25.5.1.1.2.4215|2|336 +1.3.6.1.2.1.25.5.1.1.2.4216|2|304 +1.3.6.1.2.1.25.5.1.1.2.4217|2|312 +1.3.6.1.2.1.25.5.1.1.2.4218|2|276 +1.3.6.1.2.1.25.5.1.1.2.4219|2|172 +1.3.6.1.2.1.25.5.1.1.2.4220|2|296 +1.3.6.1.2.1.25.5.1.1.2.4221|2|276 +1.3.6.1.2.1.25.5.1.1.2.4222|2|15716 +1.3.6.1.2.1.25.5.1.1.2.4224|2|2548 +1.3.6.1.2.1.25.5.1.1.2.4226|2|4060 +1.3.6.1.2.1.25.5.1.1.2.4434|2|312 +1.3.6.1.2.1.25.5.1.1.2.4435|2|348 +1.3.6.1.2.1.25.5.1.1.2.4436|2|280 +1.3.6.1.2.1.25.5.1.1.2.4437|2|304 +1.3.6.1.2.1.25.5.1.1.2.4438|2|272 +1.3.6.1.2.1.25.5.1.1.2.4439|2|296 +1.3.6.1.2.1.25.5.1.1.2.4440|2|296 +1.3.6.1.2.1.25.5.1.1.2.4441|2|280 +1.3.6.1.2.1.25.5.1.1.2.4442|2|300 +1.3.6.1.2.1.25.5.1.1.2.4443|2|164 +1.3.6.1.2.1.25.5.1.1.2.4451|2|16160 +1.3.6.1.2.1.25.5.1.1.2.4773|2|152 +1.3.6.1.2.1.25.5.1.1.2.4774|2|348 +1.3.6.1.2.1.25.5.1.1.2.4775|2|380 +1.3.6.1.2.1.25.5.1.1.2.4776|2|348 +1.3.6.1.2.1.25.5.1.1.2.4777|2|292 +1.3.6.1.2.1.25.5.1.1.2.4778|2|308 +1.3.6.1.2.1.25.5.1.1.2.4779|2|256 +1.3.6.1.2.1.25.5.1.1.2.4780|2|264 +1.3.6.1.2.1.25.5.1.1.2.4781|2|172 +1.3.6.1.2.1.25.5.1.1.2.4782|2|364 +1.3.6.1.2.1.25.5.1.1.2.4784|2|760 +1.3.6.1.2.1.25.5.1.1.2.4786|2|3064 +1.3.6.1.2.1.25.5.1.1.2.4787|2|5052 +1.3.6.1.2.1.25.5.1.1.2.5137|2|176 +1.3.6.1.2.1.25.5.1.1.2.5138|2|176 +1.3.6.1.2.1.25.5.1.1.2.5139|2|164 +1.3.6.1.2.1.25.5.1.1.2.5140|2|324 +1.3.6.1.2.1.25.5.1.1.2.5141|2|356 +1.3.6.1.2.1.25.5.1.1.2.5142|2|332 +1.3.6.1.2.1.25.5.1.1.2.5143|2|296 +1.3.6.1.2.1.25.5.1.1.2.5144|2|176 +1.3.6.1.2.1.25.5.1.1.2.5145|2|280 +1.3.6.1.2.1.25.5.1.1.2.5146|2|300 +1.3.6.1.2.1.25.5.1.1.2.5148|2|16600 +1.3.6.1.2.1.25.5.1.1.2.5151|2|1032 +1.3.6.1.2.1.25.5.1.1.2.5155|2|16436 +1.3.6.1.2.1.25.5.1.1.2.5159|2|16788 +1.3.6.1.2.1.25.5.1.1.2.5501|2|324 +1.3.6.1.2.1.25.5.1.1.2.5502|2|348 +1.3.6.1.2.1.25.5.1.1.2.5503|2|256 +1.3.6.1.2.1.25.5.1.1.2.5504|2|284 +1.3.6.1.2.1.25.5.1.1.2.5505|2|152 +1.3.6.1.2.1.25.5.1.1.2.5506|2|176 +1.3.6.1.2.1.25.5.1.1.2.5507|2|296 +1.3.6.1.2.1.25.5.1.1.2.5508|2|304 +1.3.6.1.2.1.25.5.1.1.2.5509|2|284 +1.3.6.1.2.1.25.5.1.1.2.5510|2|304 +1.3.6.1.2.1.25.5.1.1.2.5516|2|4252 +1.3.6.1.2.1.25.5.1.1.2.5522|2|4436 +1.3.6.1.2.1.25.5.1.1.2.5861|2|144 +1.3.6.1.2.1.25.5.1.1.2.5862|2|324 +1.3.6.1.2.1.25.5.1.1.2.5863|2|144 +1.3.6.1.2.1.25.5.1.1.2.5864|2|140 +1.3.6.1.2.1.25.5.1.1.2.5865|2|392 +1.3.6.1.2.1.25.5.1.1.2.5866|2|308 +1.3.6.1.2.1.25.5.1.1.2.5867|2|384 +1.3.6.1.2.1.25.5.1.1.2.5868|2|324 +1.3.6.1.2.1.25.5.1.1.2.5869|2|268 +1.3.6.1.2.1.25.5.1.1.2.5870|2|284 +1.3.6.1.2.1.25.5.1.1.2.5872|2|21036 +1.3.6.1.2.1.25.5.1.1.2.5875|2|17260 +1.3.6.1.2.1.25.5.1.1.2.5878|2|92724 +1.3.6.1.2.1.25.5.1.1.2.5879|2|22224 +1.3.6.1.2.1.25.5.1.1.2.5884|2|384 +1.3.6.1.2.1.25.5.1.1.2.6344|2|328 +1.3.6.1.2.1.25.5.1.1.2.6345|2|144 +1.3.6.1.2.1.25.5.1.1.2.6346|2|280 +1.3.6.1.2.1.25.5.1.1.2.6347|2|300 +1.3.6.1.2.1.25.5.1.1.2.6348|2|280 +1.3.6.1.2.1.25.5.1.1.2.6349|2|280 +1.3.6.1.2.1.25.5.1.1.2.6350|2|296 +1.3.6.1.2.1.25.5.1.1.2.6351|2|144 +1.3.6.1.2.1.25.5.1.1.2.6352|2|280 +1.3.6.1.2.1.25.5.1.1.2.6353|2|388 +1.3.6.1.2.1.25.5.1.1.2.6358|2|14944 +1.3.6.1.2.1.25.5.1.1.2.6366|2|832 +1.3.6.1.2.1.25.5.1.1.2.6763|2|328 +1.3.6.1.2.1.25.5.1.1.2.6764|2|356 +1.3.6.1.2.1.25.5.1.1.2.6765|2|268 +1.3.6.1.2.1.25.5.1.1.2.6766|2|356 +1.3.6.1.2.1.25.5.1.1.2.6767|2|268 +1.3.6.1.2.1.25.5.1.1.2.6768|2|320 +1.3.6.1.2.1.25.5.1.1.2.6769|2|144 +1.3.6.1.2.1.25.5.1.1.2.6770|2|340 +1.3.6.1.2.1.25.5.1.1.2.6771|2|144 +1.3.6.1.2.1.25.5.1.1.2.6772|2|296 +1.3.6.1.2.1.25.5.1.1.2.6782|2|7868 +1.3.6.1.2.1.25.5.1.1.2.6784|2|17968 +1.3.6.1.2.1.25.5.1.1.2.7174|2|292 +1.3.6.1.2.1.25.5.1.1.2.7175|2|144 +1.3.6.1.2.1.25.5.1.1.2.7176|2|332 +1.3.6.1.2.1.25.5.1.1.2.7177|2|144 +1.3.6.1.2.1.25.5.1.1.2.7178|2|332 +1.3.6.1.2.1.25.5.1.1.2.7179|2|144 +1.3.6.1.2.1.25.5.1.1.2.7180|2|320 +1.3.6.1.2.1.25.5.1.1.2.7181|2|268 +1.3.6.1.2.1.25.5.1.1.2.7182|2|136 +1.3.6.1.2.1.25.5.1.1.2.7183|2|292 +1.3.6.1.2.1.25.5.1.1.2.7188|2|171092 +1.3.6.1.2.1.25.5.1.1.2.7192|2|32956 +1.3.6.1.2.1.25.5.1.1.2.7194|2|17216 +1.3.6.1.2.1.25.5.1.1.2.7196|2|14212 +1.3.6.1.2.1.25.5.1.1.2.7523|2|140 +1.3.6.1.2.1.25.5.1.1.2.7524|2|300 +1.3.6.1.2.1.25.5.1.1.2.7525|2|144 +1.3.6.1.2.1.25.5.1.1.2.7526|2|280 +1.3.6.1.2.1.25.5.1.1.2.7527|2|336 +1.3.6.1.2.1.25.5.1.1.2.7528|2|288 +1.3.6.1.2.1.25.5.1.1.2.7529|2|136 +1.3.6.1.2.1.25.5.1.1.2.7530|2|296 +1.3.6.1.2.1.25.5.1.1.2.7531|2|144 +1.3.6.1.2.1.25.5.1.1.2.7532|2|276 +1.3.6.1.2.1.25.5.1.1.2.7535|2|15752 +1.3.6.1.2.1.25.5.1.1.2.7539|2|81804 +1.3.6.1.2.1.25.5.1.1.2.7543|2|1900 +1.3.6.1.2.1.25.5.1.1.2.7544|2|20220 +1.3.6.1.2.1.25.5.1.1.2.7949|2|288 +1.3.6.1.2.1.25.5.1.1.2.7950|2|284 +1.3.6.1.2.1.25.5.1.1.2.7951|2|280 +1.3.6.1.2.1.25.5.1.1.2.7952|2|276 +1.3.6.1.2.1.25.5.1.1.2.7953|2|284 +1.3.6.1.2.1.25.5.1.1.2.7954|2|328 +1.3.6.1.2.1.25.5.1.1.2.9526|2|896 +1.3.6.1.2.1.25.5.1.1.2.9602|2|560 +1.3.6.1.2.1.25.5.1.1.2.11784|2|68 +1.3.6.1.2.1.25.5.1.1.2.13563|2|5956 +1.3.6.1.2.1.25.5.1.1.2.13565|2|5788 +1.3.6.1.2.1.25.5.1.1.2.13566|2|5064 +1.3.6.1.2.1.25.5.1.1.2.15387|2|1948 +1.3.6.1.2.1.25.5.1.1.2.15921|2|226040 +1.3.6.1.2.1.25.5.1.1.2.16645|2|272 +1.3.6.1.2.1.25.5.1.1.2.16646|2|300 +1.3.6.1.2.1.25.5.1.1.2.16648|2|3144 +1.3.6.1.2.1.25.5.1.1.2.16651|2|18536 +1.3.6.1.2.1.25.5.1.1.2.16652|2|1256 +1.3.6.1.2.1.25.5.1.1.2.16653|2|1440 +1.3.6.1.2.1.25.5.1.1.2.16654|2|17096 +1.3.6.1.2.1.25.5.1.1.2.17900|2|1456 +1.3.6.1.2.1.25.5.1.1.2.18651|2|93160 +1.3.6.1.2.1.25.5.1.1.2.23175|2|1200 +1.3.6.1.2.1.25.5.1.1.2.23330|2|32636 +1.3.6.1.2.1.25.5.1.1.2.24620|2|832 +1.3.6.1.2.1.25.5.1.1.2.25514|2|21768 +1.3.6.1.2.1.25.5.1.1.2.25517|2|25124 +1.3.6.1.2.1.25.5.1.1.2.25518|2|584 +1.3.6.1.2.1.25.5.1.1.2.25522|2|25256 +1.3.6.1.2.1.25.5.1.1.2.25524|2|25460 +1.3.6.1.2.1.25.5.1.1.2.25531|2|25184 +1.3.6.1.2.1.25.5.1.1.2.25946|2|25848 +1.3.6.1.2.1.25.5.1.1.2.27567|2|1228 +1.3.6.1.2.1.25.5.1.1.2.29431|2|14544 +1.3.6.1.2.1.25.5.1.1.2.29439|2|8036 +1.3.6.1.2.1.25.5.1.1.2.29440|2|8220 +1.3.6.1.2.1.25.5.1.1.2.30092|2|108020 +1.3.6.1.2.1.25.5.1.1.2.30120|2|1132 +1.3.6.1.2.1.25.5.1.1.2.31793|2|23800 +1.3.6.1.2.1.31.1.1.1.1.32|4|mgmt +1.3.6.1.2.1.31.1.1.1.1.48|4x|312e30 +1.3.6.1.2.1.31.1.1.1.1.80|4x|2f436f6d6d6f6e2f687474702d74756e6e656c +1.3.6.1.2.1.31.1.1.1.1.96|4x|2f436f6d6d6f6e2f736f636b732d74756e6e656c +1.3.6.1.2.1.31.1.1.1.1.112|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.2.1.31.1.1.1.2.32|65|0 +1.3.6.1.2.1.31.1.1.1.2.48|65|0 +1.3.6.1.2.1.31.1.1.1.2.80|65|0 +1.3.6.1.2.1.31.1.1.1.2.96|65|0 +1.3.6.1.2.1.31.1.1.1.2.112|65|15088 +1.3.6.1.2.1.31.1.1.1.3.32|65|0 +1.3.6.1.2.1.31.1.1.1.3.48|65|0 +1.3.6.1.2.1.31.1.1.1.3.80|65|0 +1.3.6.1.2.1.31.1.1.1.3.96|65|0 +1.3.6.1.2.1.31.1.1.1.3.112|65|2918 +1.3.6.1.2.1.31.1.1.1.4.32|65|0 +1.3.6.1.2.1.31.1.1.1.4.48|65|0 +1.3.6.1.2.1.31.1.1.1.4.80|65|0 +1.3.6.1.2.1.31.1.1.1.4.96|65|0 +1.3.6.1.2.1.31.1.1.1.4.112|65|15103 +1.3.6.1.2.1.31.1.1.1.5.32|65|0 +1.3.6.1.2.1.31.1.1.1.5.48|65|0 +1.3.6.1.2.1.31.1.1.1.5.80|65|0 +1.3.6.1.2.1.31.1.1.1.5.96|65|0 +1.3.6.1.2.1.31.1.1.1.5.112|65|607 +1.3.6.1.2.1.31.1.1.1.6.32|70|457265376 +1.3.6.1.2.1.31.1.1.1.6.48|70|601695323 +1.3.6.1.2.1.31.1.1.1.6.80|70|0 +1.3.6.1.2.1.31.1.1.1.6.96|70|0 +1.3.6.1.2.1.31.1.1.1.6.112|70|392412410 +1.3.6.1.2.1.31.1.1.1.7.32|70|895729 +1.3.6.1.2.1.31.1.1.1.7.48|70|764742 +1.3.6.1.2.1.31.1.1.1.7.80|70|0 +1.3.6.1.2.1.31.1.1.1.7.96|70|0 +1.3.6.1.2.1.31.1.1.1.7.112|70|863320 +1.3.6.1.2.1.31.1.1.1.8.32|70|0 +1.3.6.1.2.1.31.1.1.1.8.48|70|0 +1.3.6.1.2.1.31.1.1.1.8.80|70|0 +1.3.6.1.2.1.31.1.1.1.8.96|70|0 +1.3.6.1.2.1.31.1.1.1.8.112|70|15088 +1.3.6.1.2.1.31.1.1.1.9.32|70|0 +1.3.6.1.2.1.31.1.1.1.9.48|70|0 +1.3.6.1.2.1.31.1.1.1.9.80|70|0 +1.3.6.1.2.1.31.1.1.1.9.96|70|0 +1.3.6.1.2.1.31.1.1.1.9.112|70|2918 +1.3.6.1.2.1.31.1.1.1.10.32|70|308353370 +1.3.6.1.2.1.31.1.1.1.10.48|70|63858761 +1.3.6.1.2.1.31.1.1.1.10.80|70|0 +1.3.6.1.2.1.31.1.1.1.10.96|70|0 +1.3.6.1.2.1.31.1.1.1.10.112|70|401634634 +1.3.6.1.2.1.31.1.1.1.11.32|70|738778 +1.3.6.1.2.1.31.1.1.1.11.48|70|489344 +1.3.6.1.2.1.31.1.1.1.11.80|70|0 +1.3.6.1.2.1.31.1.1.1.11.96|70|0 +1.3.6.1.2.1.31.1.1.1.11.112|70|844482 +1.3.6.1.2.1.31.1.1.1.12.32|70|0 +1.3.6.1.2.1.31.1.1.1.12.48|70|0 +1.3.6.1.2.1.31.1.1.1.12.80|70|0 +1.3.6.1.2.1.31.1.1.1.12.96|70|0 +1.3.6.1.2.1.31.1.1.1.12.112|70|15103 +1.3.6.1.2.1.31.1.1.1.13.32|70|0 +1.3.6.1.2.1.31.1.1.1.13.48|70|0 +1.3.6.1.2.1.31.1.1.1.13.80|70|0 +1.3.6.1.2.1.31.1.1.1.13.96|70|0 +1.3.6.1.2.1.31.1.1.1.13.112|70|607 +1.3.6.1.2.1.31.1.1.1.14.32|2|1 +1.3.6.1.2.1.31.1.1.1.14.48|2|1 +1.3.6.1.2.1.31.1.1.1.14.80|2|2 +1.3.6.1.2.1.31.1.1.1.14.96|2|2 +1.3.6.1.2.1.31.1.1.1.14.112|2|2 +1.3.6.1.2.1.31.1.1.1.15.32|66|100 +1.3.6.1.2.1.31.1.1.1.15.48|66|10000 +1.3.6.1.2.1.31.1.1.1.15.80|66|0 +1.3.6.1.2.1.31.1.1.1.15.96|66|0 +1.3.6.1.2.1.31.1.1.1.15.112|66|10000 +1.3.6.1.2.1.31.1.1.1.16.32|2|2 +1.3.6.1.2.1.31.1.1.1.16.48|2|2 +1.3.6.1.2.1.31.1.1.1.16.80|2|2 +1.3.6.1.2.1.31.1.1.1.16.96|2|2 +1.3.6.1.2.1.31.1.1.1.16.112|2|2 +1.3.6.1.2.1.31.1.1.1.17.32|2|1 +1.3.6.1.2.1.31.1.1.1.17.48|2|1 +1.3.6.1.2.1.31.1.1.1.17.80|2|2 +1.3.6.1.2.1.31.1.1.1.17.96|2|2 +1.3.6.1.2.1.31.1.1.1.17.112|2|2 +1.3.6.1.2.1.31.1.1.1.18.32|4|desc1 +1.3.6.1.2.1.31.1.1.1.18.48|4|desc2 +1.3.6.1.2.1.31.1.1.1.18.80|4|desc3 +1.3.6.1.2.1.31.1.1.1.18.96|4|desc4 +1.3.6.1.2.1.31.1.1.1.18.112|4|desc5 +1.3.6.1.2.1.31.1.1.1.19.32|67|0 +1.3.6.1.2.1.31.1.1.1.19.48|67|0 +1.3.6.1.2.1.31.1.1.1.19.80|67|0 +1.3.6.1.2.1.31.1.1.1.19.96|67|0 +1.3.6.1.2.1.31.1.1.1.19.112|67|0 +1.3.6.1.2.1.92.1.1.1.0|66|1000 +1.3.6.1.2.1.92.1.1.2.0|66|1440 +1.3.6.1.2.1.92.1.2.1.0|65|0 +1.3.6.1.2.1.92.1.2.2.0|65|0 +1.3.6.1.4.1.2021.2.1.1.1|2|1 +1.3.6.1.4.1.2021.2.1.1.2|2|2 +1.3.6.1.4.1.2021.2.1.1.3|2|3 +1.3.6.1.4.1.2021.2.1.1.4|2|4 +1.3.6.1.4.1.2021.2.1.1.5|2|5 +1.3.6.1.4.1.2021.2.1.1.6|2|6 +1.3.6.1.4.1.2021.2.1.2.1|4|bigd +1.3.6.1.4.1.2021.2.1.2.2|4|chmand +1.3.6.1.4.1.2021.2.1.2.3|4|httpd +1.3.6.1.4.1.2021.2.1.2.4|4|mcpd +1.3.6.1.4.1.2021.2.1.2.5|4|sod +1.3.6.1.4.1.2021.2.1.2.6|4|tmm +1.3.6.1.4.1.2021.2.1.3.1|2|1 +1.3.6.1.4.1.2021.2.1.3.2|2|1 +1.3.6.1.4.1.2021.2.1.3.3|2|1 +1.3.6.1.4.1.2021.2.1.3.4|2|1 +1.3.6.1.4.1.2021.2.1.3.5|2|1 +1.3.6.1.4.1.2021.2.1.3.6|2|1 +1.3.6.1.4.1.2021.2.1.4.1|2|0 +1.3.6.1.4.1.2021.2.1.4.2|2|1 +1.3.6.1.4.1.2021.2.1.4.3|2|0 +1.3.6.1.4.1.2021.2.1.4.4|2|1 +1.3.6.1.4.1.2021.2.1.4.5|2|1 +1.3.6.1.4.1.2021.2.1.4.6|2|0 +1.3.6.1.4.1.2021.2.1.5.1|2|1 +1.3.6.1.4.1.2021.2.1.5.2|2|1 +1.3.6.1.4.1.2021.2.1.5.3|2|8 +1.3.6.1.4.1.2021.2.1.5.4|2|1 +1.3.6.1.4.1.2021.2.1.5.5|2|1 +1.3.6.1.4.1.2021.2.1.5.6|2|1 +1.3.6.1.4.1.2021.2.1.100.1|2|0 +1.3.6.1.4.1.2021.2.1.100.2|2|0 +1.3.6.1.4.1.2021.2.1.100.3|2|0 +1.3.6.1.4.1.2021.2.1.100.4|2|0 +1.3.6.1.4.1.2021.2.1.100.5|2|0 +1.3.6.1.4.1.2021.2.1.100.6|2|0 +1.3.6.1.4.1.2021.2.1.101.1|4| +1.3.6.1.4.1.2021.2.1.101.2|4| +1.3.6.1.4.1.2021.2.1.101.3|4| +1.3.6.1.4.1.2021.2.1.101.4|4| +1.3.6.1.4.1.2021.2.1.101.5|4| +1.3.6.1.4.1.2021.2.1.101.6|4| +1.3.6.1.4.1.2021.2.1.102.1|2|0 +1.3.6.1.4.1.2021.2.1.102.2|2|0 +1.3.6.1.4.1.2021.2.1.102.3|2|0 +1.3.6.1.4.1.2021.2.1.102.4|2|0 +1.3.6.1.4.1.2021.2.1.102.5|2|0 +1.3.6.1.4.1.2021.2.1.102.6|2|0 +1.3.6.1.4.1.2021.2.1.103.1|4| +1.3.6.1.4.1.2021.2.1.103.2|4| +1.3.6.1.4.1.2021.2.1.103.3|4| +1.3.6.1.4.1.2021.2.1.103.4|4| +1.3.6.1.4.1.2021.2.1.103.5|4| +1.3.6.1.4.1.2021.2.1.103.6|4| +1.3.6.1.4.1.2021.4.1.0|2|0 +1.3.6.1.4.1.2021.4.2.0|4|swap +1.3.6.1.4.1.2021.4.3.0|2|1023996 +1.3.6.1.4.1.2021.4.4.0|2|563452 +1.3.6.1.4.1.2021.4.5.0|2|7660752 +1.3.6.1.4.1.2021.4.6.0|2|86248 +1.3.6.1.4.1.2021.4.11.0|2|649700 +1.3.6.1.4.1.2021.4.12.0|2|16000 +1.3.6.1.4.1.2021.4.13.0|2|54036 +1.3.6.1.4.1.2021.4.14.0|2|71048 +1.3.6.1.4.1.2021.4.15.0|2|424332 +1.3.6.1.4.1.2021.4.100.0|2|0 +1.3.6.1.4.1.2021.4.101.0|4| +1.3.6.1.4.1.2021.9.1.1.1|2|1 +1.3.6.1.4.1.2021.9.1.1.2|2|2 +1.3.6.1.4.1.2021.9.1.2.1|4x|2f +1.3.6.1.4.1.2021.9.1.2.2|4x|2f766172 +1.3.6.1.4.1.2021.9.1.3.1|4x|2f6465762f6d61707065722f76672d2d64622d2d7664612d7365742e312e726f6f74 +1.3.6.1.4.1.2021.9.1.3.2|4x|2f6465762f6d61707065722f76672d2d64622d2d7664612d7365742e312e5f766172 +1.3.6.1.4.1.2021.9.1.4.1|2|2000 +1.3.6.1.4.1.2021.9.1.4.2|2|10000 +1.3.6.1.4.1.2021.9.1.5.1|2|-1 +1.3.6.1.4.1.2021.9.1.5.2|2|-1 +1.3.6.1.4.1.2021.9.1.6.1|2|428150 +1.3.6.1.4.1.2021.9.1.6.2|2|943128 +1.3.6.1.4.1.2021.9.1.7.1|2|322822 +1.3.6.1.4.1.2021.9.1.7.2|2|515544 +1.3.6.1.4.1.2021.9.1.8.1|2|78704 +1.3.6.1.4.1.2021.9.1.8.2|2|362460 +1.3.6.1.4.1.2021.9.1.9.1|2|18 +1.3.6.1.4.1.2021.9.1.9.2|2|38 +1.3.6.1.4.1.2021.9.1.10.1|2|4 +1.3.6.1.4.1.2021.9.1.10.2|2|17 +1.3.6.1.4.1.2021.9.1.11.1|66|428150 +1.3.6.1.4.1.2021.9.1.11.2|66|943128 +1.3.6.1.4.1.2021.9.1.12.1|66|0 +1.3.6.1.4.1.2021.9.1.12.2|66|0 +1.3.6.1.4.1.2021.9.1.13.1|66|322822 +1.3.6.1.4.1.2021.9.1.13.2|66|515544 +1.3.6.1.4.1.2021.9.1.14.1|66|0 +1.3.6.1.4.1.2021.9.1.14.2|66|0 +1.3.6.1.4.1.2021.9.1.15.1|66|78704 +1.3.6.1.4.1.2021.9.1.15.2|66|362460 +1.3.6.1.4.1.2021.9.1.16.1|66|0 +1.3.6.1.4.1.2021.9.1.16.2|66|0 +1.3.6.1.4.1.2021.9.1.100.1|2|0 +1.3.6.1.4.1.2021.9.1.100.2|2|0 +1.3.6.1.4.1.2021.9.1.101.1|4| +1.3.6.1.4.1.2021.9.1.101.2|4| +1.3.6.1.4.1.2021.10.1.1.1|2|1 +1.3.6.1.4.1.2021.10.1.1.2|2|2 +1.3.6.1.4.1.2021.10.1.1.3|2|3 +1.3.6.1.4.1.2021.10.1.2.1|4x|4c6f61642d31 +1.3.6.1.4.1.2021.10.1.2.2|4x|4c6f61642d35 +1.3.6.1.4.1.2021.10.1.2.3|4x|4c6f61642d3135 +1.3.6.1.4.1.2021.10.1.3.1|4x|302e3237 +1.3.6.1.4.1.2021.10.1.3.2|4x|302e3234 +1.3.6.1.4.1.2021.10.1.3.3|4x|302e3233 +1.3.6.1.4.1.2021.10.1.4.1|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.4.2|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.4.3|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.5.1|2|27 +1.3.6.1.4.1.2021.10.1.5.2|2|24 +1.3.6.1.4.1.2021.10.1.5.3|2|23 +1.3.6.1.4.1.2021.10.1.6.1|68x|9f78043e8a3d71 +1.3.6.1.4.1.2021.10.1.6.2|68x|9f78043e75c28f +1.3.6.1.4.1.2021.10.1.6.3|68x|9f78043e6b851f +1.3.6.1.4.1.2021.10.1.100.1|2|0 +1.3.6.1.4.1.2021.10.1.100.2|2|0 +1.3.6.1.4.1.2021.10.1.100.3|2|0 +1.3.6.1.4.1.2021.10.1.101.1|4| +1.3.6.1.4.1.2021.10.1.101.2|4| +1.3.6.1.4.1.2021.10.1.101.3|4| +1.3.6.1.4.1.2021.11.1.0|2|1 +1.3.6.1.4.1.2021.11.2.0|4|systemStats +1.3.6.1.4.1.2021.11.3.0|2|0 +1.3.6.1.4.1.2021.11.4.0|2|0 +1.3.6.1.4.1.2021.11.5.0|2|82 +1.3.6.1.4.1.2021.11.6.0|2|3 +1.3.6.1.4.1.2021.11.7.0|2|16467 +1.3.6.1.4.1.2021.11.8.0|2|31310 +1.3.6.1.4.1.2021.11.9.0|2|2 +1.3.6.1.4.1.2021.11.10.0|2|3 +1.3.6.1.4.1.2021.11.11.0|2|92 +1.3.6.1.4.1.2021.11.50.0|65|8458649 +1.3.6.1.4.1.2021.11.51.0|65|943954 +1.3.6.1.4.1.2021.11.52.0|65|11839421 +1.3.6.1.4.1.2021.11.53.0|65|318900977 +1.3.6.1.4.1.2021.11.54.0|65|869594 +1.3.6.1.4.1.2021.11.55.0|65|0 +1.3.6.1.4.1.2021.11.56.0|65|0 +1.3.6.1.4.1.2021.11.57.0|65|164771618 +1.3.6.1.4.1.2021.11.58.0|65|71445552 +1.3.6.1.4.1.2021.11.59.0|65|2356812896 +1.3.6.1.4.1.2021.11.60.0|65|1712163215 +1.3.6.1.4.1.2021.11.61.0|65|220796 +1.3.6.1.4.1.2021.11.62.0|65|79704 +1.3.6.1.4.1.2021.11.63.0|65|164009 +1.3.6.1.4.1.2021.11.64.0|65|0 +1.3.6.1.4.1.2021.11.65.0|65|0 +1.3.6.1.4.1.2021.11.66.0|65|0 +1.3.6.1.4.1.2021.13.14.1.0|2|31 +1.3.6.1.4.1.2021.13.14.2.1.2.30|4|bigipTrafficMgmt +1.3.6.1.4.1.2021.13.14.2.1.3.30|4x|2f7573722f6c696236342f6269676970547261666669634d676d742e736f +1.3.6.1.4.1.2021.13.14.2.1.4.30|4| +1.3.6.1.4.1.2021.13.14.2.1.5.30|2|1 +1.3.6.1.4.1.2021.16.1.0|2|250 +1.3.6.1.4.1.2021.100.1.0|2|1 +1.3.6.1.4.1.2021.100.2.0|4x|352e372e32 +1.3.6.1.4.1.2021.100.3.0|4x|244461746524 +1.3.6.1.4.1.2021.100.4.0|4x|4d6f6e204f63742032312030323a33353a30342032303139 +1.3.6.1.4.1.2021.100.5.0|4x|24496424 +1.3.6.1.4.1.2021.100.6.0|4x|20272d2d7072656669783d2f7573722720272d2d737973636f6e666469723d2f6574632720272d2d6c69626469723d2f7573722f6c696236342720272d2d776974682d6f70656e73736c3d2f686f6d652f6635636d2f636d2f626967697031352e302e312f313132383538372f66355f6275696c642f64657666735f7838365f36342f7573722720272d2d656e61626c652d7368617265643d7965732720272d2d656e61626c652d7374617469633d7965732720272d2d64697361626c652d656d6265646465642d7065726c2720272d2d776974682d64656661756c74732720272d2d776974682d6c6962777261702720272d2d776974682d6d6962646972733d2f7573722f73686172652f736e6d702f6d6962732720272d2d776974682d6d6962733d616c6c2720272d2d776974682d64656661756c742d736e6d702d76657273696f6e3d322720272d2d776974682d70657273697374656e742d6469726563746f72793d2f636f6e6669672f6e65742d736e6d702720272d2d776974682d7065726c2d6d6f64756c65733d5052454649583d2f686f6d652f6635636d2f636d2f626967697031352e302e312f313132383538372f66355f6275696c642f5f696e7374726f6f742f7838365f36342f6e65742d736e6d702d352e372e322f75737220494e5354414c4c444952533d76656e646f722720272d2d656e61626c652d697076362720272d2d776974682d656e74657270726973652d6f69643d333337352720272d2d776974682d656e74657270726973652d6e6f74696669636174696f6e2d6f69643d2e312e332e362e312e342e312e333337352e322e342720272d2d776974686f75742d72706d2720272d2d776974682d6f75742d6d69622d6d6f64756c65733d6167656e74206167656e745f6d696273206469736d616e2f6576656e74206469736d616e2f7363686564756c65206d696249492f69665461626c65206d696249492f746370206d696249492f7463705461626c65206d696249492f756470206d696249492f7564705461626c65206d696249492f6970206d696249492f69707636206d696249492f69636d70206d696249492f61742069662d6d69622f6966585461626c652069662d6d69622f69665461626c65207463702d6d69622f746370436f6e6e656374696f6e5461626c65207463702d6d69622f7463704c697374656e65725461626c65207564702d6d69622f756470456e64706f696e745461626c652069702d6d69622f6970416464726573735461626c652069702d6d69622f6970416464726573735072656669785461626c652069702d6d69622f696e65744e6574546f4d656469615461626c652069702d6d69622f697053797374656d53746174735461626c652069702d6d69622f697049665374617473 +1.3.6.1.4.1.2021.100.10.0|2|0 +1.3.6.1.4.1.2021.100.11.0|2|0 +1.3.6.1.4.1.2021.100.12.0|2|0 +1.3.6.1.4.1.2021.100.13.0|2|0 +1.3.6.1.4.1.2021.100.20.0|2|0 +1.3.6.1.4.1.2021.101.1.0|2|0 +1.3.6.1.4.1.2021.101.2.0|4|snmp +1.3.6.1.4.1.2021.101.100.0|2|0 +1.3.6.1.4.1.2021.101.101.0|4| +1.3.6.1.4.1.3375.2.1.1.1.1.1.0|66|8192 +1.3.6.1.4.1.3375.2.1.1.1.1.2.0|2|1 +1.3.6.1.4.1.3375.2.1.1.1.1.3.0|66|300 +1.3.6.1.4.1.3375.2.1.1.1.1.4.0|66|6 +1.3.6.1.4.1.3375.2.1.1.1.1.5.0|2|1 +1.3.6.1.4.1.3375.2.1.1.1.1.6.0|4| +1.3.6.1.4.1.3375.2.1.1.1.1.7.0|66|95 +1.3.6.1.4.1.3375.2.1.1.1.1.8.0|66|85 +1.3.6.1.4.1.3375.2.1.1.1.1.9.0|2|1 +1.3.6.1.4.1.3375.2.1.1.1.1.10.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.11.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.12.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.13.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.14.0|66|0 +1.3.6.1.4.1.3375.2.1.1.1.1.15.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.16.0|66|0 +1.3.6.1.4.1.3375.2.1.1.1.1.17.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.18.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.19.0|66|0 +1.3.6.1.4.1.3375.2.1.1.1.1.20.0|66|0 +1.3.6.1.4.1.3375.2.1.1.1.1.21.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.22.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.23.0|2|1 +1.3.6.1.4.1.3375.2.1.1.1.1.24.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.25.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.26.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.27.0|2|2 +1.3.6.1.4.1.3375.2.1.1.1.1.28.0|66|300 +1.3.6.1.4.1.3375.2.1.1.1.1.29.0|2|1 +1.3.6.1.4.1.3375.2.1.1.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.1.2.0|70|465922 +1.3.6.1.4.1.3375.2.1.1.2.1.3.0|70|45551151 +1.3.6.1.4.1.3375.2.1.1.2.1.4.0|70|481666 +1.3.6.1.4.1.3375.2.1.1.2.1.5.0|70|364502697 +1.3.6.1.4.1.3375.2.1.1.2.1.6.0|70|17 +1.3.6.1.4.1.3375.2.1.1.2.1.7.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.1.8.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.1.9.0|70|453523 +1.3.6.1.4.1.3375.2.1.1.2.1.10.0|70|44851350 +1.3.6.1.4.1.3375.2.1.1.2.1.11.0|70|485042 +1.3.6.1.4.1.3375.2.1.1.2.1.12.0|70|364639481 +1.3.6.1.4.1.3375.2.1.1.2.1.13.0|70|17 +1.3.6.1.4.1.3375.2.1.1.2.1.14.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.1.15.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.1.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.22.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.29.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.31.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.35.0|70|4803 +1.3.6.1.4.1.3375.2.1.1.2.1.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.38.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.1.39.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.1.40.0|2|1 +1.3.6.1.4.1.3375.2.1.1.2.1.41.0|70|7248386504413460 +1.3.6.1.4.1.3375.2.1.1.2.1.42.0|70|125154350310912 +1.3.6.1.4.1.3375.2.1.1.2.1.43.0|70|7080812734355185 +1.3.6.1.4.1.3375.2.1.1.2.1.44.0|70|6098518016 +1.3.6.1.4.1.3375.2.1.1.2.1.45.0|70|191364000 +1.3.6.1.4.1.3375.2.1.1.2.1.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.50.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.59.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.60.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.61.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.62.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.63.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.1.64.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.65.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.66.0|66|65 +1.3.6.1.4.1.3375.2.1.1.2.1.67.0|66|4790 +1.3.6.1.4.1.3375.2.1.1.2.1.68.0|66|65 +1.3.6.1.4.1.3375.2.1.1.2.1.69.0|66|4877 +1.3.6.1.4.1.3375.2.1.1.2.1.70.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.1.71.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.72.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.73.0|66|34 +1.3.6.1.4.1.3375.2.1.1.2.1.74.0|66|2524 +1.3.6.1.4.1.3375.2.1.1.2.1.75.0|66|34 +1.3.6.1.4.1.3375.2.1.1.2.1.76.0|66|2854 +1.3.6.1.4.1.3375.2.1.1.2.1.77.0|66|5 +1.3.6.1.4.1.3375.2.1.1.2.1.78.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.79.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.80.0|66|35 +1.3.6.1.4.1.3375.2.1.1.2.1.81.0|66|2587 +1.3.6.1.4.1.3375.2.1.1.2.1.82.0|66|35 +1.3.6.1.4.1.3375.2.1.1.2.1.83.0|66|2919 +1.3.6.1.4.1.3375.2.1.1.2.1.84.0|66|5 +1.3.6.1.4.1.3375.2.1.1.2.1.85.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.86.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.87.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.1.88.0|66|623 +1.3.6.1.4.1.3375.2.1.1.2.1.89.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.1.90.0|66|826 +1.3.6.1.4.1.3375.2.1.1.2.1.91.0|66|5 +1.3.6.1.4.1.3375.2.1.1.2.1.92.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.93.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.94.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.1.95.0|66|635 +1.3.6.1.4.1.3375.2.1.1.2.1.96.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.1.97.0|66|840 +1.3.6.1.4.1.3375.2.1.1.2.1.98.0|66|5 +1.3.6.1.4.1.3375.2.1.1.2.1.99.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.100.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.101.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.102.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.103.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.104.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.105.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.106.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.107.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.108.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.109.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.110.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.111.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.112.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.113.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.114.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.115.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.116.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.117.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.118.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.119.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.120.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.121.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.122.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.123.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.124.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.125.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.126.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.127.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.128.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.129.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.130.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.131.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.132.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.133.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.134.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.135.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.136.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.137.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.138.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.139.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.140.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.141.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.142.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.143.0|66|5955584 +1.3.6.1.4.1.3375.2.1.1.2.1.144.0|66|186878 +1.3.6.1.4.1.3375.2.1.1.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.2.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.3.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.2.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.3.2.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.3.3.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.3.4.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.3.5.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.4.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.5.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.6.2.0|70|30 +1.3.6.1.4.1.3375.2.1.1.2.6.3.0|70|15 +1.3.6.1.4.1.3375.2.1.1.2.6.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.10.0|70|35 +1.3.6.1.4.1.3375.2.1.1.2.6.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.7.2.0|70|8538932 +1.3.6.1.4.1.3375.2.1.1.2.7.3.0|70|8549205 +1.3.6.1.4.1.3375.2.1.1.2.7.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.17.0|70|69 +1.3.6.1.4.1.3375.2.1.1.2.7.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.8.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.3.0|70|15103 +1.3.6.1.4.1.3375.2.1.1.2.8.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.20.0|70|15103 +1.3.6.1.4.1.3375.2.1.1.2.8.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.9.2.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.4.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.7.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.21.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.52.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.53.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.54.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.59.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.60.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.61.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.62.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.63.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.64.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.65.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.66.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.67.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.68.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.69.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.70.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.71.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.72.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.73.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.74.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.75.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.76.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.77.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.78.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.79.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.80.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.81.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.82.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.83.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.84.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.85.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.86.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.87.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.88.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.89.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.90.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.91.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.92.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.93.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.94.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.95.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.96.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.97.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.98.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.99.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.100.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.101.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.102.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.103.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.104.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.105.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.10.2.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.10.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.4.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.10.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.7.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.10.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.21.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.10.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.59.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.60.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.61.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.62.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.63.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.64.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.65.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.66.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.67.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.68.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.69.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.70.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.71.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.72.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.73.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.74.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.75.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.76.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.77.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.78.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.79.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.80.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.81.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.82.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.83.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.84.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.85.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.86.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.87.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.88.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.89.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.90.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.91.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.92.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.93.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.94.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.11.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.11.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.12.2.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.12.3.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.12.4.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.12.5.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.12.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.8.0|70|8 +1.3.6.1.4.1.3375.2.1.1.2.12.9.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.12.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.20.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.13.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.13.2.0|66|6 +1.3.6.1.4.1.3375.2.1.1.2.13.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.5.0|70|6 +1.3.6.1.4.1.3375.2.1.1.2.13.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.13.0|70|60 +1.3.6.1.4.1.3375.2.1.1.2.14.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.14.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.5.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.14.6.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.14.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.17.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.17.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.17.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.17.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.17.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.18.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.12.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.13.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.14.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.15.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.16.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.17.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.19.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.19.2.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.19.3.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.19.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.5.0|70|30820 +1.3.6.1.4.1.3375.2.1.1.2.19.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.7.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.19.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.20.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.20.2.0|70|7844610048 +1.3.6.1.4.1.3375.2.1.1.2.20.3.0|70|1341733792 +1.3.6.1.4.1.3375.2.1.1.2.20.4.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.20.5.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.20.6.0|70|4229365 +1.3.6.1.4.1.3375.2.1.1.2.20.7.0|70|471979 +1.3.6.1.4.1.3375.2.1.1.2.20.8.0|70|5919762 +1.3.6.1.4.1.3375.2.1.1.2.20.9.0|70|159451735 +1.3.6.1.4.1.3375.2.1.1.2.20.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.20.11.0|70|110399 +1.3.6.1.4.1.3375.2.1.1.2.20.12.0|70|434800 +1.3.6.1.4.1.3375.2.1.1.2.20.13.0|66|6 +1.3.6.1.4.1.3375.2.1.1.2.20.14.0|66|2 +1.3.6.1.4.1.3375.2.1.1.2.20.15.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.16.0|66|3 +1.3.6.1.4.1.3375.2.1.1.2.20.17.0|66|87 +1.3.6.1.4.1.3375.2.1.1.2.20.18.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.19.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.20.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.21.0|66|6 +1.3.6.1.4.1.3375.2.1.1.2.20.22.0|66|2 +1.3.6.1.4.1.3375.2.1.1.2.20.23.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.24.0|66|3 +1.3.6.1.4.1.3375.2.1.1.2.20.25.0|66|86 +1.3.6.1.4.1.3375.2.1.1.2.20.26.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.27.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.28.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.29.0|66|7 +1.3.6.1.4.1.3375.2.1.1.2.20.30.0|66|2 +1.3.6.1.4.1.3375.2.1.1.2.20.31.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.32.0|66|3 +1.3.6.1.4.1.3375.2.1.1.2.20.33.0|66|87 +1.3.6.1.4.1.3375.2.1.1.2.20.34.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.35.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.36.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.37.0|66|6 +1.3.6.1.4.1.3375.2.1.1.2.20.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.20.39.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.40.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.41.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.42.0|66|7660752 +1.3.6.1.4.1.3375.2.1.1.2.20.43.0|66|1310286 +1.3.6.1.4.1.3375.2.1.1.2.20.44.0|70|1746092032 +1.3.6.1.4.1.3375.2.1.1.2.20.45.0|70|1150369792 +1.3.6.1.4.1.3375.2.1.1.2.20.46.0|70|1048571904 +1.3.6.1.4.1.3375.2.1.1.2.20.47.0|70|428797952 +1.3.6.1.4.1.3375.2.1.1.2.20.48.0|66|1705168 +1.3.6.1.4.1.3375.2.1.1.2.20.49.0|66|1123408 +1.3.6.1.4.1.3375.2.1.1.2.20.50.0|66|1023996 +1.3.6.1.4.1.3375.2.1.1.2.20.51.0|66|418748 +1.3.6.1.4.1.3375.2.1.1.2.21.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.21.2.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.21.3.0|70|466559 +1.3.6.1.4.1.3375.2.1.1.2.21.4.0|70|45598995 +1.3.6.1.4.1.3375.2.1.1.2.21.5.0|70|482303 +1.3.6.1.4.1.3375.2.1.1.2.21.6.0|70|364552584 +1.3.6.1.4.1.3375.2.1.1.2.21.7.0|70|17 +1.3.6.1.4.1.3375.2.1.1.2.21.8.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.21.9.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.21.10.0|70|454160 +1.3.6.1.4.1.3375.2.1.1.2.21.11.0|70|44899349 +1.3.6.1.4.1.3375.2.1.1.2.21.12.0|70|485679 +1.3.6.1.4.1.3375.2.1.1.2.21.13.0|70|364689511 +1.3.6.1.4.1.3375.2.1.1.2.21.14.0|70|17 +1.3.6.1.4.1.3375.2.1.1.2.21.15.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.21.16.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.21.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.21.0|70|4803 +1.3.6.1.4.1.3375.2.1.1.2.21.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.28.0|70|6098518016 +1.3.6.1.4.1.3375.2.1.1.2.21.29.0|70|191364000 +1.3.6.1.4.1.3375.2.1.1.2.21.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.34.0|66|1 +1.3.6.1.4.1.3375.2.1.1.2.21.35.0|66|1 +1.3.6.1.4.1.3375.2.1.1.2.21.36.0|66|1 +1.3.6.1.4.1.3375.2.1.1.2.21.37.0|66|5955584 +1.3.6.1.4.1.3375.2.1.1.2.21.38.0|66|186878 +1.3.6.1.4.1.3375.2.1.1.2.21.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.22.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.23.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.24.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.25.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.25.0|4|0 +1.3.6.1.4.1.3375.2.1.1.2.26.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.26.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.27.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.27.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.27.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.27.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.27.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.28.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.29.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.30.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.30.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.30.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.30.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.30.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.31.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.32.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.32.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.32.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.32.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.33.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.33.2.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.34.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.34.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.34.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.34.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.34.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.34.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.35.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.36.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.37.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.36.38.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.36.39.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.36.40.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.37.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.37.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.59.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.38.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.37.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.38.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.39.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.40.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.41.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.42.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.43.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.39.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.39.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.12.0|4|0 +1.3.6.1.4.1.3375.2.1.1.2.39.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.40.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.40.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.1.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.1.1.4.10.164.0.51|2|1 +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.2.1.4.10.164.0.51|4x|0aa40033 +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.3.1.4.10.164.0.51|2|1 +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.4.1.4.10.164.0.51|4x|ffffffff +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.5.1.4.10.164.0.51|4x|31302e3136342e302e3531 +1.3.6.1.4.1.3375.2.1.2.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.3.1.3.0|2|0 +1.3.6.1.4.1.3375.2.1.2.3.1.4.0|2|0 +1.3.6.1.4.1.3375.2.1.2.3.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.1.0|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.1.3.49.46.48|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.1.4.109.103.109.116|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.2.3.49.46.48|66|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.2.4.109.103.109.116|66|100 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.3.3.49.46.48|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.3.4.109.103.109.116|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.4.3.49.46.48|66|10000 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.4.4.109.103.109.116|66|100 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.5.3.49.46.48|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.5.4.109.103.109.116|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.6.3.49.46.48|4x|42010aa40033 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.6.4.109.103.109.116|4x|42010aa40033 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.7.3.49.46.48|66|1460 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.7.4.109.103.109.116|66|1460 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.8.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.8.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.9.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.9.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.10.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.10.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.11.3.49.46.48|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.11.4.109.103.109.116|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.12.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.12.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.13.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.13.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.14.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.14.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.15.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.15.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.16.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.16.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.17.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.17.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.18.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.18.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.19.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.19.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.20.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.20.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.21.3.49.46.48|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.21.4.109.103.109.116|2|2 +1.3.6.1.4.1.3375.2.1.2.4.2.1.0|2|9 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.3.49.46.48.1|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.3.49.46.48.2|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.3.49.46.48.3|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.1|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.2|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.3|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.4|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.5|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.6|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.3.49.46.48.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.3.49.46.48.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.3.49.46.48.3|2|3 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.3|2|3 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.4|2|4 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.5|2|5 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.6|2|6 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.3.49.46.48.1|2|10 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.3.49.46.48.2|2|14 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.3.49.46.48.3|2|13 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.1|2|14 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.2|2|13 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.3|2|2 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.4|2|1 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.5|2|4 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.6|2|3 +1.3.6.1.4.1.3375.2.1.2.4.3.1.0|2|2 +1.3.6.1.4.1.3375.2.1.2.4.3.2.1.1.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.3.2.1.1.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.3.2.1.2.1|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.3.2.1.2.2|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.4.4.2.0|2|2 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.1.3.49.46.48|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.1.4.109.103.109.116|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.2.3.49.46.48|70|766261 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.2.4.109.103.109.116|70|897197 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.3.3.49.46.48|70|601841092 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.3.4.109.103.109.116|70|457405873 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.4.3.49.46.48|70|490862 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.4.4.109.103.109.116|70|740246 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.5.3.49.46.48|70|63998013 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.5.4.109.103.109.116|70|308487474 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.6.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.6.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.7.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.7.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.8.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.8.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.9.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.9.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.10.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.10.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.11.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.11.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.12.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.12.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.13.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.13.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.14.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.14.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.15.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.15.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.4.5.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.4.6.1.0|2|4 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.1.3.49.46.48.1|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.1.3.49.46.48.2|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.1.4.109.103.109.116.1|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.1.4.109.103.109.116.2|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.2.3.49.46.48.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.2.3.49.46.48.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.2.4.109.103.109.116.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.2.4.109.103.109.116.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.3.3.49.46.48.1|2|14 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.3.3.49.46.48.2|2|13 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.3.4.109.103.109.116.1|2|14 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.3.4.109.103.109.116.2|2|13 +1.3.6.1.4.1.3375.2.1.2.4.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.5.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.5.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.5.3.1.0|4|all +1.3.6.1.4.1.3375.2.1.2.6.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.5.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.7.1.1.0|2|2 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.1.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.1.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.2.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|00000000 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.2.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|0aa40001 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.3.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.3.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.4.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|00000000 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.4.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|ffffffff +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.5.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|0 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.5.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|2 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.6.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.6.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|2 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.7.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|0aa40001 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.7.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.8.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|0 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.8.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|0 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.9.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|2f436f6d6d6f6e2f64656661756c74 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.9.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|2f436f6d6d6f6e2f6468636c69656e745f726f75746531 +1.3.6.1.4.1.3375.2.1.2.7.2.1.0|2|2 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.1.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.1.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.2.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|00000000 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.2.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|0aa40001 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.3.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.3.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.4.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|00000000 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.4.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|ffffffff +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.5.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|0 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.5.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|2 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.6.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4| +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.6.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.7.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.7.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|2 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.8.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|0aa40001 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.8.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.9.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4| +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.9.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4| +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.10.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|0 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.10.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|0 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.11.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|2f436f6d6d6f6e2f64656661756c74 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.11.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|2f436f6d6d6f6e2f6468636c69656e745f726f75746531 +1.3.6.1.4.1.3375.2.1.2.8.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.1.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|2|1 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.2.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|4x|0aa40033 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.3.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|2|1 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.4.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|4x|ffffffff +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.5.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|66|0 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.6.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|2|0 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.7.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.8.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|4x|2f436f6d6d6f6e2f73656c665f316e6963 +1.3.6.1.4.1.3375.2.1.2.9.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.1.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|2|2 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.2.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.3.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|2|256 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.4.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|66|0 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.5.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|4x|2f436f6d6d6f6e2f73656c665f316e6963 +1.3.6.1.4.1.3375.2.1.2.9.2.1.0|2|13 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.2.0|2|2 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.22|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.53|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.161|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.4353|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.8443|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.53|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.161|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.520|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.1026|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.4353|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.89.0|2|89 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.103.0|2|103 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.2.0|66|0 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.22|66|22 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.53|66|53 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.161|66|161 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.4353|66|4353 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.8443|66|8443 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.53|66|53 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.161|66|161 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.520|66|520 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.1026|66|1026 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.4353|66|4353 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.89.0|66|0 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.103.0|66|0 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.2.0|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.22|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.53|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.161|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.4353|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.8443|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.53|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.161|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.520|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.1026|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.4353|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.89.0|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.103.0|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.10.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.1.12.47.67.111.109.109.111.110.47.99.105.115.116|66|0 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.2.12.47.67.111.109.109.111.110.47.99.105.115.116|2|61440 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.3.12.47.67.111.109.109.111.110.47.99.105.115.116|4x|000000000000 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.4.12.47.67.111.109.109.111.110.47.99.105.115.116|4x|000000000000 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.5.12.47.67.111.109.109.111.110.47.99.105.115.116|4x|2f436f6d6d6f6e2f63697374 +1.3.6.1.4.1.3375.2.1.2.10.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.3.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.4.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.5.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.6.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.7.0|4| +1.3.6.1.4.1.3375.2.1.2.10.2.8.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.3.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.1.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|66|0 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.2.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.3.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.4.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|5 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.5.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.6.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|128 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.7.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|66|500 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.8.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|5 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.9.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|4x|2f436f6d6d6f6e2f63697374 +1.3.6.1.4.1.3375.2.1.2.10.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.10.4.2.1.1.12.47.67.111.109.109.111.110.47.99.105.115.116.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|66|0 +1.3.6.1.4.1.3375.2.1.2.10.4.2.1.2.12.47.67.111.109.109.111.110.47.99.105.115.116.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.10.4.2.1.3.12.47.67.111.109.109.111.110.47.99.105.115.116.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|2f436f6d6d6f6e2f63697374 +1.3.6.1.4.1.3375.2.1.2.10.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.3.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.4.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.5.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.6.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.7.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.8.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.9.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.10.0|66|0 +1.3.6.1.4.1.3375.2.1.2.10.5.11.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.7.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.8.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.9.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.1.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|4 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.2.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|15 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.3.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|2 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.4.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|20 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.5.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|6 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.6.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|20 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.7.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|4| +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.8.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|0 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.9.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|4x|2f436f6d6d6f6e2f7374702d676c6f62616c73 +1.3.6.1.4.1.3375.2.1.2.11.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.11.1.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.12.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.12.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.12.2.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.12.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.1.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.2.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|4094 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.3.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.4.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|000000000000 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.5.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|42010aa40033 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.6.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.7.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.8.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|1460 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.9.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|66|90 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.10.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|7 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.11.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.12.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.2.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.13.2.2.1.1.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108.3.49.46.48|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.13.2.2.1.2.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108.3.49.46.48|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.13.2.2.1.3.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.13.2.2.1.4.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.13.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.13.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.13.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.13.6.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.1.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.2.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|766453 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.3.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|601860927 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.4.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|491054 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.5.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|64018584 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.6.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.7.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.8.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.9.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.10.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.11.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.12.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.14.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.1.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|2f436f6d6d6f6e2f626967697031 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.2.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|0aa40033 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.3.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|1 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.4.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|66352d6269672d69702d6164632d676f6f642d62796f6c2d312d766d2e632e64617461646f672d696e746567726174696f6e732d6c61622e696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.5.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.6.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|2 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.7.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.8.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|2 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.9.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4| +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.10.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.11.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|2 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.12.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|66|0 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.13.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|31352e302e31 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.14.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|4249472d4950 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.15.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4|Final +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.16.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|4249472d4950205669727475616c2045646974696f6e +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.17.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4|Z100 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.18.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|32366666346134642d313930652d313261632d643432353765643336626136 +1.3.6.1.4.1.3375.2.1.2.14.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.14.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.14.4.2.1.1.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49.1|4x|2f436f6d6d6f6e2f626967697031 +1.3.6.1.4.1.3375.2.1.2.14.4.2.1.2.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49.1|2|1 +1.3.6.1.4.1.3375.2.1.2.14.4.2.1.3.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49.1|4x|4249472d49502c20564520547269616c7c424f504a5743432d55454352574b4f7c526174652053686170696e677c45787465726e616c20496e7465726661636520616e64204e6574776f726b2048534d2c2056457c53444e2053657276696365732c2056457c53534c2c20466f72776172642050726f78792c2056457c4249472d49502056452c204d756c74696361737420526f7574696e677c41504d2c204c696d697465647c53534c2c2056457c444e532028314b20515053292c2056457c526f7574696e672042756e646c652c2056457c41534d2c2056457c43727974706f204f66666c6f61642c2056452c20546965722031202832354d202d203230304d297c4d617820436f6d7072657373696f6e2c2056457c41464d2c2056457c444e535345437c416e74692d566972757320436865636b737c4261736520456e64706f696e7420536563757269747920436865636b737c4669726577616c6c20436865636b737c4e6574776f726b204163636573737c536563757265205669727475616c204b6579626f6172647c41504d2c20576562204170706c69636174696f6e7c4d616368696e6520436572746966696361746520436865636b737c50726f74656374656420576f726b73706163657c52656d6f7465204465736b746f707c4170702054756e6e656c7c56452c2043617272696572204772616465204e4154202841464d204f4e4c59297c50534d2c205645 +1.3.6.1.4.1.3375.2.1.2.14.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.14.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.14.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.15.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.15.1.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.16.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.17.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.17.1.2.0|2|0 +1.3.6.1.4.1.3375.2.1.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.3.1.0|4|Z100 +1.3.6.1.4.1.3375.2.1.3.3.2.0|4|deprecated +1.3.6.1.4.1.3375.2.1.3.3.3.0|4x|32366666346134642d313930652d313261632d643432353765643336626136 +1.3.6.1.4.1.3375.2.1.3.5.1.0|4|Z100 +1.3.6.1.4.1.3375.2.1.3.5.2.0|4x|4249472d4950205669727475616c2045646974696f6e +1.3.6.1.4.1.3375.2.1.3.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.4.1.0|4x|4249472d4950 +1.3.6.1.4.1.3375.2.1.4.2.0|4x|31352e302e31 +1.3.6.1.4.1.3375.2.1.4.3.0|4x|302e302e3131 +1.3.6.1.4.1.3375.2.1.4.4.0|4|Final +1.3.6.1.4.1.3375.2.1.4.5.0|4x|467269204175672020322032313a33383a3033205044542032303139 +1.3.6.1.4.1.3375.2.1.4.6.0|4|deprecated +1.3.6.1.4.1.3375.2.1.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.5.2.0|2|0 +1.3.6.1.4.1.3375.2.1.6.1.0|4|Linux +1.3.6.1.4.1.3375.2.1.6.2.0|4x|66352d6269672d69702d6164632d676f6f642d62796f6c2d312d766d2e632e64617461646f672d696e746567726174696f6e732d6c61622e696e7465726e616c +1.3.6.1.4.1.3375.2.1.6.3.0|4x|332e31302e302d3836322e31342e342e656c372e76652e7838365f3634 +1.3.6.1.4.1.3375.2.1.6.4.0|4x|233120534d50204672692041756720322031393a33343a3135205044542032303139 +1.3.6.1.4.1.3375.2.1.6.5.0|4x|7838365f3634 +1.3.6.1.4.1.3375.2.1.6.6.0|67|181588900 +1.3.6.1.4.1.3375.2.1.6.7.0|66|1815889 +1.3.6.1.4.1.3375.2.1.7.1.1.0|70|7844610048 +1.3.6.1.4.1.3375.2.1.7.1.2.0|70|1341751080 +1.3.6.1.4.1.3375.2.1.7.1.3.0|66|7660752 +1.3.6.1.4.1.3375.2.1.7.1.4.0|66|1310303 +1.3.6.1.4.1.3375.2.1.7.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.7.3.1.0|2|8 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.1.47|4x|2f +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.4.47.117.115.114|4x|2f757372 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.4.47.118.97.114|4x|2f766172 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.7.47.99.111.110.102.105.103|4x|2f636f6e666967 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.7.47.115.104.97.114.101.100|4x|2f736861726564 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.8.47.97.112.112.100.97.116.97|4x|2f61707064617461 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.8.47.118.97.114.47.108.111.103|4x|2f7661722f6c6f67 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.1.47|66|1024 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.4.47.117.115.114|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.4.47.118.97.114|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.7.47.99.111.110.102.105.103|66|1024 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.7.47.115.104.97.114.101.100|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.8.47.97.112.112.100.97.116.97|66|1024 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.8.47.118.97.114.47.108.111.103|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.1.47|66|428150 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.4.47.117.115.114|66|1296662 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.4.47.118.97.114|66|235782 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.7.47.99.111.110.102.105.103|66|479716 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.7.47.115.104.97.114.101.100|66|3837692 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.8.47.97.112.112.100.97.116.97|66|31729 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.8.47.118.97.114.47.108.111.103|66|247878 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|235782 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.1.47|66|322822 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.4.47.117.115.114|66|184613 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.4.47.118.97.114|66|128886 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.7.47.99.111.110.102.105.103|66|435708 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.7.47.115.104.97.114.101.100|66|3593837 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.8.47.97.112.112.100.97.116.97|66|25575 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.8.47.118.97.114.47.108.111.103|66|125719 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|128886 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.1.47|66|112640 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.4.47.117.115.114|66|338016 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.4.47.118.97.114|66|60928 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.7.47.99.111.110.102.105.103|66|125984 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.7.47.115.104.97.114.101.100|66|983040 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.8.47.97.112.112.100.97.116.97|66|8192 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.8.47.118.97.114.47.108.111.103|66|64000 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|60928 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.1.47|66|108402 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.4.47.117.115.114|66|253046 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.4.47.118.97.114|66|50550 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.7.47.99.111.110.102.105.103|66|125686 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.7.47.115.104.97.114.101.100|66|982681 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.8.47.97.112.112.100.97.116.97|66|8176 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.8.47.118.97.114.47.108.111.103|66|63760 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|50550 +1.3.6.1.4.1.3375.2.1.7.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.7.4.2.1.1.1.48|4|0 +1.3.6.1.4.1.3375.2.1.7.4.2.1.2.1.48|70|7844610048 +1.3.6.1.4.1.3375.2.1.7.4.2.1.3.1.48|70|1341877992 +1.3.6.1.4.1.3375.2.1.7.4.2.1.4.1.48|2|1 +1.3.6.1.4.1.3375.2.1.7.4.2.1.5.1.48|70|2 +1.3.6.1.4.1.3375.2.1.7.4.2.1.6.1.48|70|2 +1.3.6.1.4.1.3375.2.1.7.4.2.1.7.1.48|70|1746092032 +1.3.6.1.4.1.3375.2.1.7.4.2.1.8.1.48|70|1150513152 +1.3.6.1.4.1.3375.2.1.7.4.2.1.9.1.48|70|1048571904 +1.3.6.1.4.1.3375.2.1.7.4.2.1.10.1.48|70|428797952 +1.3.6.1.4.1.3375.2.1.7.4.2.1.11.1.48|66|7660752 +1.3.6.1.4.1.3375.2.1.7.4.2.1.12.1.48|66|1310427 +1.3.6.1.4.1.3375.2.1.7.4.2.1.13.1.48|66|1705168 +1.3.6.1.4.1.3375.2.1.7.4.2.1.14.1.48|66|1123548 +1.3.6.1.4.1.3375.2.1.7.4.2.1.15.1.48|66|1023996 +1.3.6.1.4.1.3375.2.1.7.4.2.1.16.1.48|66|418748 +1.3.6.1.4.1.3375.2.1.7.5.1.0|2|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.1.1.48.1|4|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.1.1.48.2|4|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.2.1.48.1|2|1 +1.3.6.1.4.1.3375.2.1.7.5.2.1.2.1.48.2|2|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.3.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.3.1.48.2|66|1 +1.3.6.1.4.1.3375.2.1.7.5.2.1.4.1.48.1|70|3990585 +1.3.6.1.4.1.3375.2.1.7.5.2.1.4.1.48.2|70|4468255 +1.3.6.1.4.1.3375.2.1.7.5.2.1.5.1.48.1|70|474468 +1.3.6.1.4.1.3375.2.1.7.5.2.1.5.1.48.2|70|469498 +1.3.6.1.4.1.3375.2.1.7.5.2.1.6.1.48.1|70|5873688 +1.3.6.1.4.1.3375.2.1.7.5.2.1.6.1.48.2|70|5965975 +1.3.6.1.4.1.3375.2.1.7.5.2.1.7.1.48.1|70|159394504 +1.3.6.1.4.1.3375.2.1.7.5.2.1.7.1.48.2|70|159512430 +1.3.6.1.4.1.3375.2.1.7.5.2.1.8.1.48.1|70|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.8.1.48.2|70|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.9.1.48.1|70|120654 +1.3.6.1.4.1.3375.2.1.7.5.2.1.9.1.48.2|70|100147 +1.3.6.1.4.1.3375.2.1.7.5.2.1.10.1.48.1|70|463951 +1.3.6.1.4.1.3375.2.1.7.5.2.1.10.1.48.2|70|405665 +1.3.6.1.4.1.3375.2.1.7.5.2.1.11.1.48.1|66|5 +1.3.6.1.4.1.3375.2.1.7.5.2.1.11.1.48.2|66|7 +1.3.6.1.4.1.3375.2.1.7.5.2.1.12.1.48.1|66|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.12.1.48.2|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.13.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.13.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.14.1.48.1|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.14.1.48.2|66|4 +1.3.6.1.4.1.3375.2.1.7.5.2.1.15.1.48.1|66|87 +1.3.6.1.4.1.3375.2.1.7.5.2.1.15.1.48.2|66|86 +1.3.6.1.4.1.3375.2.1.7.5.2.1.16.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.16.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.17.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.17.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.18.1.48.1|66|1 +1.3.6.1.4.1.3375.2.1.7.5.2.1.18.1.48.2|66|1 +1.3.6.1.4.1.3375.2.1.7.5.2.1.19.1.48.1|66|6 +1.3.6.1.4.1.3375.2.1.7.5.2.1.19.1.48.2|66|7 +1.3.6.1.4.1.3375.2.1.7.5.2.1.20.1.48.1|66|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.20.1.48.2|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.21.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.21.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.22.1.48.1|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.22.1.48.2|66|4 +1.3.6.1.4.1.3375.2.1.7.5.2.1.23.1.48.1|66|87 +1.3.6.1.4.1.3375.2.1.7.5.2.1.23.1.48.2|66|86 +1.3.6.1.4.1.3375.2.1.7.5.2.1.24.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.24.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.25.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.25.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.26.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.26.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.27.1.48.1|66|7 +1.3.6.1.4.1.3375.2.1.7.5.2.1.27.1.48.2|66|7 +1.3.6.1.4.1.3375.2.1.7.5.2.1.28.1.48.1|66|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.28.1.48.2|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.29.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.29.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.30.1.48.1|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.30.1.48.2|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.31.1.48.1|66|87 +1.3.6.1.4.1.3375.2.1.7.5.2.1.31.1.48.2|66|87 +1.3.6.1.4.1.3375.2.1.7.5.2.1.32.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.32.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.33.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.33.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.34.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.34.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.35.1.48.1|66|6 +1.3.6.1.4.1.3375.2.1.7.5.2.1.35.1.48.2|66|6 +1.3.6.1.4.1.3375.2.1.7.5.2.1.36.1.48.1|70|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.36.1.48.2|70|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.37.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.37.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.38.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.38.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.39.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.39.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.40.1.48.1|2|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.40.1.48.2|2|0 +1.3.6.1.4.1.3375.2.1.7.6.1.0|2|1 +1.3.6.1.4.1.3375.2.1.7.6.2.1.1.0.3.72.68.49|2|0 +1.3.6.1.4.1.3375.2.1.7.6.2.1.2.0.3.72.68.49|4|HD1 +1.3.6.1.4.1.3375.2.1.7.6.2.1.3.0.3.72.68.49|4|sda +1.3.6.1.4.1.3375.2.1.7.6.2.1.4.0.3.72.68.49|4|hd +1.3.6.1.4.1.3375.2.1.7.6.2.1.5.0.3.72.68.49|66|40960 +1.3.6.1.4.1.3375.2.1.7.6.2.1.6.0.3.72.68.49|4|volumes +1.3.6.1.4.1.3375.2.1.7.7.1.0|2|1 +1.3.6.1.4.1.3375.2.1.7.7.2.1.1.10.118.105.114.116.105.111.45.115.100.97|4x|76697274696f2d736461 +1.3.6.1.4.1.3375.2.1.7.7.2.1.2.10.118.105.114.116.105.111.45.115.100.97|2|0 +1.3.6.1.4.1.3375.2.1.7.7.2.1.3.10.118.105.114.116.105.111.45.115.100.97|4|HD1 +1.3.6.1.4.1.3375.2.1.7.7.2.1.4.10.118.105.114.116.105.111.45.115.100.97|2|0 +1.3.6.1.4.1.3375.2.1.7.7.2.1.5.10.118.105.114.116.105.111.45.115.100.97|2|0 +1.3.6.1.4.1.3375.2.1.7.8.1.0|2|0 +1.3.6.1.4.1.3375.2.1.7.9.1.0|2|1 +1.3.6.1.4.1.3375.2.1.7.9.2.1.1.3.115.100.97.10.118.105.114.116.105.111.45.115.100.97|4|sda +1.3.6.1.4.1.3375.2.1.7.9.2.1.2.3.115.100.97.10.118.105.114.116.105.111.45.115.100.97|4x|76697274696f2d736461 +1.3.6.1.4.1.3375.2.1.7.9.2.1.3.3.115.100.97.10.118.105.114.116.105.111.45.115.100.97|2|0 +1.3.6.1.4.1.3375.2.1.8.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.8.1.2.0|2|2 +1.3.6.1.4.1.3375.2.1.8.1.3.1.1.3.48.46.48|4x|302e30 +1.3.6.1.4.1.3375.2.1.8.1.3.1.1.3.48.46.49|4x|302e31 +1.3.6.1.4.1.3375.2.1.8.1.3.1.2.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.2.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.3.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.3.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.4.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.4.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.5.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.5.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.6.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.6.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.7.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.7.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.8.3.48.46.48|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.8.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.9.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.9.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.10.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.10.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.11.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.11.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.12.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.12.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.13.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.13.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.14.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.14.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.15.3.48.46.48|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.15.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.16.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.16.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.17.3.48.46.48|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.17.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.18.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.18.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.19.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.19.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.8.2.2.0|2|2 +1.3.6.1.4.1.3375.2.1.8.2.3.1.1.3.48.46.48|4x|302e30 +1.3.6.1.4.1.3375.2.1.8.2.3.1.1.3.48.46.49|4x|302e31 +1.3.6.1.4.1.3375.2.1.8.2.3.1.2.3.48.46.48|70|30092 +1.3.6.1.4.1.3375.2.1.8.2.3.1.2.3.48.46.49|70|30092 +1.3.6.1.4.1.3375.2.1.8.2.3.1.3.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.3.3.48.46.49|70|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.4.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.4.3.48.46.49|70|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.5.3.48.46.48|70|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.5.3.48.46.49|70|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.6.3.48.46.48|70|324182 +1.3.6.1.4.1.3375.2.1.8.2.3.1.6.3.48.46.49|70|143341 +1.3.6.1.4.1.3375.2.1.8.2.3.1.7.3.48.46.48|70|24129976 +1.3.6.1.4.1.3375.2.1.8.2.3.1.7.3.48.46.49|70|21545233 +1.3.6.1.4.1.3375.2.1.8.2.3.1.8.3.48.46.48|70|340082 +1.3.6.1.4.1.3375.2.1.8.2.3.1.8.3.48.46.49|70|143186 +1.3.6.1.4.1.3375.2.1.8.2.3.1.9.3.48.46.48|70|334863650 +1.3.6.1.4.1.3375.2.1.8.2.3.1.9.3.48.46.49|70|29776444 +1.3.6.1.4.1.3375.2.1.8.2.3.1.10.3.48.46.48|70|15 +1.3.6.1.4.1.3375.2.1.8.2.3.1.10.3.48.46.49|70|17 +1.3.6.1.4.1.3375.2.1.8.2.3.1.11.3.48.46.48|70|45009 +1.3.6.1.4.1.3375.2.1.8.2.3.1.11.3.48.46.49|70|14590 +1.3.6.1.4.1.3375.2.1.8.2.3.1.12.3.48.46.48|66|4 +1.3.6.1.4.1.3375.2.1.8.2.3.1.12.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.13.3.48.46.48|70|311782 +1.3.6.1.4.1.3375.2.1.8.2.3.1.13.3.48.46.49|70|143340 +1.3.6.1.4.1.3375.2.1.8.2.3.1.14.3.48.46.48|70|23430711 +1.3.6.1.4.1.3375.2.1.8.2.3.1.14.3.48.46.49|70|21545193 +1.3.6.1.4.1.3375.2.1.8.2.3.1.15.3.48.46.48|70|343457 +1.3.6.1.4.1.3375.2.1.8.2.3.1.15.3.48.46.49|70|143185 +1.3.6.1.4.1.3375.2.1.8.2.3.1.16.3.48.46.48|70|335001017 +1.3.6.1.4.1.3375.2.1.8.2.3.1.16.3.48.46.49|70|29776404 +1.3.6.1.4.1.3375.2.1.8.2.3.1.17.3.48.46.48|70|15 +1.3.6.1.4.1.3375.2.1.8.2.3.1.17.3.48.46.49|70|17 +1.3.6.1.4.1.3375.2.1.8.2.3.1.18.3.48.46.48|70|45009 +1.3.6.1.4.1.3375.2.1.8.2.3.1.18.3.48.46.49|70|14590 +1.3.6.1.4.1.3375.2.1.8.2.3.1.19.3.48.46.48|66|4 +1.3.6.1.4.1.3375.2.1.8.2.3.1.19.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.20.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.20.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.21.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.21.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.22.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.22.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.23.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.23.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.24.3.48.46.48|70|4803 +1.3.6.1.4.1.3375.2.1.8.2.3.1.24.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.25.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.25.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.26.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.26.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.27.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.27.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.28.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.28.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.29.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.29.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.30.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.30.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.31.3.48.46.48|70|6098518016 +1.3.6.1.4.1.3375.2.1.8.2.3.1.31.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.32.3.48.46.48|70|191364840 +1.3.6.1.4.1.3375.2.1.8.2.3.1.32.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.33.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.33.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.34.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.34.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.35.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.35.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.36.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.36.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.37.3.48.46.48|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.37.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.38.3.48.46.48|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.38.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.39.3.48.46.48|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.39.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.40.3.48.46.48|2|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.40.3.48.46.49|2|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.41.3.48.46.48|66|5955584 +1.3.6.1.4.1.3375.2.1.8.2.3.1.41.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.42.3.48.46.48|66|186879 +1.3.6.1.4.1.3375.2.1.8.2.3.1.42.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.43.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.43.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.44.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.44.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.45.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.45.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.46.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.46.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.47.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.47.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.48.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.48.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.49.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.49.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.50.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.50.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.51.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.51.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.52.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.52.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.53.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.53.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.54.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.54.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.55.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.55.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.3.1.0|2|1 +1.3.6.1.4.1.3375.2.1.8.3.2.1.1.0.30092|2|0 +1.3.6.1.4.1.3375.2.1.8.3.2.1.2.0.30092|2|30092 +1.3.6.1.4.1.3375.2.1.8.3.2.1.3.0.30092|66|5955584 +1.3.6.1.4.1.3375.2.1.8.3.2.1.4.0.30092|66|186879 +1.3.6.1.4.1.3375.2.1.9.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.9.1.2.1.1.0.5.72.68.49.46.49|2|0 +1.3.6.1.4.1.3375.2.1.9.1.2.1.2.0.5.72.68.49.46.49|4x|4844312e31 +1.3.6.1.4.1.3375.2.1.9.1.2.1.3.0.5.72.68.49.46.49|4|default +1.3.6.1.4.1.3375.2.1.9.1.2.1.4.0.5.72.68.49.46.49|2|1 +1.3.6.1.4.1.3375.2.1.9.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.9.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.9.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.9.4.2.1.1.0.5.72.68.49.46.49|2|0 +1.3.6.1.4.1.3375.2.1.9.4.2.1.2.0.5.72.68.49.46.49|4x|4844312e31 +1.3.6.1.4.1.3375.2.1.9.4.2.1.3.0.5.72.68.49.46.49|4x|4249472d4950 +1.3.6.1.4.1.3375.2.1.9.4.2.1.4.0.5.72.68.49.46.49|4x|31352e302e31 +1.3.6.1.4.1.3375.2.1.9.4.2.1.5.0.5.72.68.49.46.49|4x|302e302e3131 +1.3.6.1.4.1.3375.2.1.9.4.2.1.6.0.5.72.68.49.46.49|2|1 +1.3.6.1.4.1.3375.2.1.10.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.10.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.10.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.11.1.1.0|2|16 +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.2.97.109|4|am +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.2.108.99|4|lc +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.97.102.109|4|afm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.97.112.109|4|apm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.97.115.109|4|asm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.97.118.114|4|avr +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.100.111.115|4|dos +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.102.112.115|4|fps +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.103.116.109|4|gtm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.105.108.120|4|ilx +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.108.116.109|4|ltm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.112.101.109|4|pem +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.115.119.103|4|swg +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.4.115.115.108.111|4|sslo +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.5.99.103.110.97.116|4|cgnat +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.5.117.114.108.100.98|4|urldb +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.2.97.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.2.108.99|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.97.102.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.97.112.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.97.115.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.97.118.114|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.100.111.115|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.102.112.115|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.103.116.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.105.108.120|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.108.116.109|2|3 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.112.101.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.115.119.103|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.4.115.115.108.111|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.5.99.103.110.97.116|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.5.117.114.108.100.98|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.2.97.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.2.108.99|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.97.102.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.97.112.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.97.115.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.97.118.114|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.100.111.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.102.112.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.103.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.105.108.120|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.108.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.112.101.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.115.119.103|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.4.115.115.108.111|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.5.99.103.110.97.116|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.5.117.114.108.100.98|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.2.97.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.2.108.99|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.97.102.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.97.112.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.97.115.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.97.118.114|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.100.111.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.102.112.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.103.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.105.108.120|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.108.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.112.101.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.115.119.103|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.4.115.115.108.111|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.5.99.103.110.97.116|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.5.117.114.108.100.98|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.2.97.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.2.108.99|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.97.102.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.97.112.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.97.115.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.97.118.114|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.100.111.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.102.112.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.103.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.105.108.120|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.108.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.112.101.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.115.119.103|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.4.115.115.108.111|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.5.99.103.110.97.116|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.5.117.114.108.100.98|2|0 +1.3.6.1.4.1.3375.2.1.12.1.1.0|2|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1|2|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2|2|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.3|2|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5|2|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7|2|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.8|2|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.9|2|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.10|2|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.11|2|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.12|2|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.13|2|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.14|2|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16|2|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.18|2|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.19|2|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.20|2|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.21|2|21 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.22|2|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23|2|23 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24|2|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25|2|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.26|2|26 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.27|2|27 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.34|2|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.35|2|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.36|2|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.49|2|49 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.51|2|51 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.52|2|52 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.53|2|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.55|2|55 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.68|2|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.99|2|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.219|2|219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.220|2|220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.221|2|221 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.286|2|286 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.287|2|287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.288|2|288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.290|2|290 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.292|2|292 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.293|2|293 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.295|2|295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.298|2|298 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.299|2|299 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.300|2|300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.302|2|302 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.304|2|304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.307|2|307 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.310|2|310 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.313|2|313 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.315|2|315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.317|2|317 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.318|2|318 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.352|2|352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.353|2|353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.381|2|381 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.382|2|382 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.415|2|415 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.440|2|440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.447|2|447 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.885|2|885 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.886|2|886 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.887|2|887 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.905|2|905 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.906|2|906 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.907|2|907 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.910|2|910 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.911|2|911 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.921|2|921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.928|2|928 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.929|2|929 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.951|2|951 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.977|2|977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.979|2|979 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.982|2|982 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.984|2|984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1038|2|1038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1130|2|1130 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1138|2|1138 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1139|2|1139 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1140|2|1140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1142|2|1142 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1143|2|1143 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1212|2|1212 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1222|2|1222 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1826|2|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2031|2|2031 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2851|2|2851 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2852|2|2852 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2919|2|2919 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.3773|2|3773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4068|2|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4085|2|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4119|2|4119 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4122|2|4122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4212|2|4212 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4213|2|4213 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4214|2|4214 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4215|2|4215 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4216|2|4216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4217|2|4217 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4218|2|4218 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4219|2|4219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4220|2|4220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4221|2|4221 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4222|2|4222 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4224|2|4224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4226|2|4226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4434|2|4434 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4435|2|4435 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4436|2|4436 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4437|2|4437 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4438|2|4438 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4439|2|4439 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4440|2|4440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4441|2|4441 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4442|2|4442 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4443|2|4443 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4451|2|4451 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4773|2|4773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4774|2|4774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4775|2|4775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4776|2|4776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4777|2|4777 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4778|2|4778 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4779|2|4779 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4780|2|4780 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4781|2|4781 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4782|2|4782 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4784|2|4784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4786|2|4786 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4787|2|4787 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5137|2|5137 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5138|2|5138 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5139|2|5139 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5140|2|5140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5141|2|5141 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5142|2|5142 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5143|2|5143 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5144|2|5144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5145|2|5145 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5146|2|5146 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5148|2|5148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5151|2|5151 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5155|2|5155 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5159|2|5159 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5501|2|5501 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5502|2|5502 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5503|2|5503 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5504|2|5504 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5505|2|5505 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5506|2|5506 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5507|2|5507 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5508|2|5508 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5509|2|5509 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5510|2|5510 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5516|2|5516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5522|2|5522 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5861|2|5861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5862|2|5862 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5863|2|5863 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5864|2|5864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5865|2|5865 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5866|2|5866 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5867|2|5867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5868|2|5868 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5869|2|5869 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5870|2|5870 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5872|2|5872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5875|2|5875 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5878|2|5878 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5879|2|5879 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5884|2|5884 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6344|2|6344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6345|2|6345 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6346|2|6346 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6347|2|6347 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6348|2|6348 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6349|2|6349 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6350|2|6350 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6351|2|6351 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6352|2|6352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6353|2|6353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6358|2|6358 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6366|2|6366 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6763|2|6763 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6764|2|6764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6765|2|6765 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6766|2|6766 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6767|2|6767 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6768|2|6768 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6769|2|6769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6770|2|6770 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6771|2|6771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6772|2|6772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6782|2|6782 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6784|2|6784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7174|2|7174 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7175|2|7175 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7176|2|7176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7177|2|7177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7178|2|7178 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7179|2|7179 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7180|2|7180 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7181|2|7181 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7182|2|7182 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7183|2|7183 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7188|2|7188 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7192|2|7192 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7194|2|7194 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7196|2|7196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7523|2|7523 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7524|2|7524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7525|2|7525 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7526|2|7526 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7527|2|7527 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7528|2|7528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7529|2|7529 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7530|2|7530 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7531|2|7531 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7532|2|7532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7535|2|7535 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7539|2|7539 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7543|2|7543 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7544|2|7544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7949|2|7949 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7950|2|7950 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7951|2|7951 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7952|2|7952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7953|2|7953 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7954|2|7954 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.9526|2|9526 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.9602|2|9602 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.11784|2|11784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.13563|2|13563 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.13565|2|13565 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.13566|2|13566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.14596|2|14596 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.15387|2|15387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.15921|2|15921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16645|2|16645 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16646|2|16646 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16648|2|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16651|2|16651 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16652|2|16652 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16653|2|16653 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16654|2|16654 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.17900|2|17900 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.18651|2|18651 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.21085|2|21085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23175|2|23175 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23206|2|23206 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23330|2|23330 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23416|2|23416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23554|2|23554 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23740|2|23740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23891|2|23891 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24265|2|24265 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24341|2|24341 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24415|2|24415 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24648|2|24648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24673|2|24673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24686|2|24686 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24697|2|24697 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25514|2|25514 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25517|2|25517 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25518|2|25518 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25522|2|25522 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25524|2|25524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25531|2|25531 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25946|2|25946 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.27567|2|27567 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.29431|2|29431 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.29439|2|29439 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.29440|2|29440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.29574|2|29574 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.30092|2|30092 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.30120|2|30120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.31793|2|31793 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1|4|systemd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2|4|kthreadd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.3|4x|6b736f6674697271642f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5|4x|6b776f726b65722f303a3048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7|4x|6d6967726174696f6e2f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.8|4x|7263755f6268 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.9|4x|7263755f7363686564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.10|4x|6c72752d6164642d647261696e +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.11|4x|7761746368646f672f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.12|4x|7761746368646f672f31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.13|4x|6d6967726174696f6e2f31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.14|4x|6b736f6674697271642f31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16|4x|6b776f726b65722f313a3048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.18|4|kdevtmpfs +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.19|4|netns +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.20|4|khungtaskd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.21|4|writeback +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.22|4|kintegrityd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.26|4|kblockd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.27|4|md +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.34|4|kswapd0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.35|4|ksmd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.36|4|crypto +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.49|4|kthrotld +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.51|4x|6b6d706174685f7264616364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.52|4|kaluad +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.53|4|kpsmoused +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.55|4x|697076365f61646472636f6e66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.68|4|deferwq +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.99|4|kauditd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.219|4x|76697274736373692d7363616e +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.220|4x|736373695f65685f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.221|4x|736373695f746d665f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.286|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.287|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.288|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.290|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.292|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.293|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.295|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.298|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.299|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.300|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.302|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.304|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.307|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.310|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.313|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.315|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.317|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.318|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.352|4x|6a6264322f646d2d352d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.353|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.381|4x|6a6264322f646d2d362d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.382|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.415|4x|73797374656d642d6a6f75726e616c +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.440|4|lvmetad +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.447|4x|73797374656d642d7564657664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.885|4x|6b776f726b65722f303a3148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.886|4x|6a6264322f646d2d312d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.887|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.905|4|kjournald +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.906|4x|6a6264322f646d2d372d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.907|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.910|4x|6a6264322f646d2d382d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.911|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.921|4x|6a6974746572656e74726f70792d72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.928|4x|6a6264322f646d2d332d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.929|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.951|4|auditd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.977|4x|646275732d6461656d6f6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.979|4|acpid +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.982|4|irqbalance +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.984|4x|73797374656d642d6c6f67696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1038|4x|696e6372656173655f656e74726f70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1130|4|mlx4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1138|4x|69622d636f6d702d7771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1139|4x|69625f6d63617374 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1140|4x|69625f6e6c5f73615f7771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1142|4x|6d6c78345f6962 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1143|4x|6d6c78345f69625f6d6367 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1212|4x|69706f69625f666c757368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1222|4x|72646d615f636d +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1826|4x|7379736c6f672d6e67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2031|4x|6b776f726b65722f313a3148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2851|4|crond +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2852|4|promptstatusd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2919|4|overdog +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.3773|4|sshd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4068|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4085|4|runsvdir +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4119|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4122|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4212|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4213|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4214|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4215|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4216|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4217|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4218|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4219|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4220|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4221|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4222|4|eventd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4224|4x|72756e736d315f6e616d6564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4226|4|wccpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4434|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4435|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4436|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4437|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4438|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4439|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4440|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4441|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4442|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4443|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4451|4|scriptd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4773|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4774|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4775|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4776|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4777|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4778|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4779|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4780|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4781|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4782|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4784|4|tmrouted +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4786|4|tamd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4787|4|alertd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5137|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5138|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5139|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5140|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5141|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5142|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5143|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5144|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5145|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5146|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5148|4|evrouted +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5151|4|big3d +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5155|4|csyncd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5159|4|syscalld +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5501|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5502|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5503|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5504|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5505|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5506|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5507|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5508|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5509|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5510|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5516|4|errdefsd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5522|4|logstatd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5861|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5862|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5863|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5864|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5865|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5866|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5867|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5868|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5869|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5870|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5872|4|chmand +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5875|4x|6963725f6576656e7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5878|4|mcpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5879|4|statsd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5884|4|zxfrd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6344|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6345|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6346|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6347|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6348|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6349|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6350|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6351|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6352|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6353|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6358|4|merged +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6366|4|dynconfd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6763|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6764|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6765|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6766|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6767|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6768|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6769|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6770|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6771|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6772|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6782|4x|676f6f676c655f6163636f756e7473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6784|4|keymgmtd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7174|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7175|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7176|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7177|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7178|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7179|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7180|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7181|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7182|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7183|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7188|4|java +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7192|4|lacpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7194|4|devmgmtd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7196|4|cbrd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7523|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7524|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7525|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7526|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7527|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7528|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7529|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7530|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7531|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7532|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7535|4|lind +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7539|4|sod +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7543|4x|73666c6f775f6167656e74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7544|4x|66352d726573742d6e6f6465 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7949|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7950|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7951|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7952|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7953|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7954|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.9526|4|dhclient +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.9602|4|dhclient +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.11784|4|su +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.13563|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.13565|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.13566|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.14596|4|systemctl +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.15387|4|ntpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.15921|4|java +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16645|4|logger +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16646|4|logger +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16648|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16651|4|mcpq +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16652|4|rrdstats +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16653|4|rtstats +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16654|4x|69436f6e74726f6c506f7274616c2e +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.17900|4|named +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.18651|4x|696372645f6368696c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.21085|4x|6b776f726b65722f75343a32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23175|4|rrdshim +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23206|4x|6b776f726b65722f313a32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23330|4|snmpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23416|4x|6b776f726b65722f303a30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23554|4x|6b776f726b65722f75343a30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23740|4x|6b776f726b65722f313a31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23891|4x|6b776f726b65722f303a31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24265|4x|6b776f726b65722f313a30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24341|4x|6b776f726b65722f303a32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24415|4x|6b776f726b65722f313a33 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24648|4x|6b776f726b65722f75343a31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24673|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24686|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24697|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25514|4|pccd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25517|4|tmipsecd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25518|4x|746d6d2e7374617274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25522|4x|6d676d745f61636c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25524|4|vxland +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25531|4|iprepd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25946|4|bigd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.27567|4|ntlmconnpool +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.29431|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.29439|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.29440|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.29574|4|rm +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.30092|4x|746d6d2e30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.30120|4|racoon +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.31793|4x|61756469745f666f72776172646572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1|4x|2f7573722f6c69622f73797374656d642f73797374656d64202d2d73776974636865642d726f6f74202d2d73797374656d202d2d646573657269616c697a65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.3|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.8|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.9|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.10|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.11|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.12|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.13|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.14|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.18|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.19|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.20|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.21|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.22|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.26|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.27|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.34|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.35|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.36|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.49|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.51|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.52|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.53|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.55|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.68|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.99|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.219|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.220|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.221|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.286|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.287|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.288|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.290|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.292|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.293|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.295|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.298|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.299|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.300|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.302|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.304|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.307|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.310|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.313|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.315|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.317|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.318|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.352|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.353|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.381|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.382|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.415|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6a6f75726e616c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.440|4x|2f7573722f7362696e2f6c766d65746164202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.447|4x|2f7573722f6c69622f73797374656d642f73797374656d642d7564657664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.885|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.886|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.887|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.905|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.906|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.907|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.910|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.911|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.921|4x|2f7573722f7362696e2f6a6974746572656e74726f70792d726e6764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.928|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.929|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.951|4x|2f7362696e2f617564697464202d6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.977|4x|2f62696e2f646275732d6461656d6f6e202d2d73797374656d202d2d616464726573733d73797374656d643a202d2d6e6f666f726b202d2d6e6f7069646669 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.979|4x|2f7573722f7362696e2f6163706964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.982|4x|2f7573722f7362696e2f69727162616c616e6365202d2d666f726567726f756e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.984|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6c6f67696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1038|4x|696e6372656173655f656e74726f7079202d64202d652034303030202d72202d712038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1130|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1138|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1139|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1140|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1142|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1143|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1212|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1222|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1826|4x|2f7573722f7362696e2f7379736c6f672d6e67202d46202d70202f7661722f72756e2f7379736c6f67642e706964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2031|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2851|4x|2f7573722f7362696e2f63726f6e64202d6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2852|4x|2f62696e2f70726f6d707473746174757364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2919|4x|2f7573722f62696e2f6f766572646f67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.3773|4x|2f7573722f7362696e2f73736864202d44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4068|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4085|4x|72756e7376646972202f7661722f73657276696365206c6f673a202e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4119|4x|2f7362696e2f616765747479202d2d6e6f636c6561722074747931206c696e7578 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4122|4x|2f7362696e2f616765747479202d2d6b6565702d62617564203131353230302c33383430302c39363030207474795330207674323230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4212|4x|72756e7376206461746173746f72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4213|4x|72756e7376206576656e7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4214|4x|72756e7376206e616d6564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4215|4x|72756e73762073646d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4216|4x|72756e7376206f767364622d736572766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4217|4x|72756e737620776f6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4218|4x|72756e7376206e6c6164 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4219|4x|72756e7376207763637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4220|4x|72756e737620646e73636163686564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4221|4x|72756e737620726261 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4222|4x|2f7573722f62696e2f6576656e7464202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4224|4x|2f7362696e2f72756e736d315f6e616d6564202f7573722f7362696e2f6e616d6564202d66202d74202f7661722f6e616d6564202d75206e616d6564202d63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4226|4x|2f7573722f62696e2f7763637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4434|4x|72756e737620746d697073656364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4435|4x|72756e7376206e746c6d636f6e6e706f6f6c +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4436|4x|72756e737620706761646d696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4437|4x|72756e737620616e74736572766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4438|4x|72756e73762064656475705f61646d696e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4439|4x|72756e73762061706d5f77656273736f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4440|4x|72756e73762073616d6c69647064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4441|4x|72756e737620656361 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4442|4x|72756e7376206175746f646f7364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4443|4x|72756e73762073637269707464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4451|4x|2f7573722f62696e2f73637269707464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4773|4x|72756e737620746d726f75746564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4774|4x|72756e737620766469 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4775|4x|72756e737620616c65727464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4776|4x|72756e73762066707573657264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4777|4x|72756e73762062646f7364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4778|4x|72756e73762070636364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4779|4x|72756e73762061736d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4780|4x|72756e73762065616d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4781|4x|72756e73762074616d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4782|4x|72756e7376207274636f6e6664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4784|4x|2f7573722f62696e2f746d726f75746564202d642030202d6f202f7661722f746d702f746d726f757465642e6f7574 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4786|4x|2f7573722f62696e2f74616d64202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4787|4x|2f7573722f7362696e2f616c65727464202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5137|4x|72756e7376206576726f75746564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5138|4x|72756e73762073797363616c6c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5139|4x|72756e7376206373796e6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5140|4x|72756e7376206e6174737461747364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5141|4x|72756e7376206d676d745f61636c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5142|4x|72756e737620616466735f70726f7879 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5143|4x|72756e73762072657772697465 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5144|4x|72756e7376206269673364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5145|4x|72756e7376206f6d617064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5146|4x|72756e73762075706461746564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5148|4x|2f7573722f62696e2f6576726f75746564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5151|4x|2f7368617265642f62696e2f6269673364202d746c7320544c537631202d636970686572732041455347434d3a4145533a214144483a2141454344483a2150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5155|4x|2f7573722f62696e2f6373796e6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5159|4x|2f7573722f62696e2f73797363616c6c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5501|4x|72756e737620626f7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5502|4x|72756e737620636c757374657264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5503|4x|72756e73762062696764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5504|4x|72756e73762075726c6462 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5505|4x|72756e7376206c6f677374617464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5506|4x|72756e7376206572726465667364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5507|4x|72756e7376206d7973716c +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5508|4x|72756e7376206c6f676d7973716c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5509|4x|72756e737620666c6f777370656364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5510|4x|72756e73762065636d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5516|4x|2f7573722f62696e2f6572726465667364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5522|4x|2f7573722f7362696e2f6c6f677374617464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5861|4x|72756e7376206963725f6576656e7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5862|4x|72756e737620646562756764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5863|4x|72756e737620737461747364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5864|4x|72756e7376206d637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5865|4x|72756e7376207a78667264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5866|4x|72756e737620646f736c37645f61747461636b5f6d6f6e69746f72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5867|4x|72756e73762063686d616e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5868|4x|72756e7376206175746f6469736364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5869|4x|72756e7376206d646d73796e636d6772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5870|4x|72756e73762061706d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5872|4x|2f7573722f62696e2f63686d616e64202d66202d2d76617269616e7420316e6963 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5875|4x|2f7573722f62696e2f6963725f6576656e7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5878|4x|2f7573722f62696e2f6d637064202d64626d656d20353132202d6c697374656e203132372e302e302e31202d666f7263656c6f6164202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5879|4x|2f7573722f62696e2f737461747364202d532030202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5884|4x|2f7573722f62696e2f7a78667264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6344|4x|72756e73762067746d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6345|4x|72756e73762064796e636f6e6664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6346|4x|72756e737620737368706c7567696e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6347|4x|72756e737620746d6d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6348|4x|72756e73762061767264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6349|4x|72756e73762070696e675f6163636573735f6167656e74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6350|4x|72756e7376206477626c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6351|4x|72756e7376206d6572676564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6352|4x|72756e73762077616d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6353|4x|72756e737620746f6d636174 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6358|4x|2f7573722f62696e2f6d6572676564202d532030202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6366|4x|2f7573722f62696e2f64796e636f6e6664202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6763|4x|72756e73762076786c616e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6764|4x|72756e73762068777064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6765|4x|72756e73762074617364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6766|4x|72756e737620706b6373313164 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6767|4x|72756e73762061646d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6768|4x|72756e737620697072657064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6769|4x|72756e737620676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6770|4x|72756e737620736e6d7064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6771|4x|72756e7376206b65796d676d7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6772|4x|72756e7376206f61757468 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6782|4x|2f7573722f62696e2f707974686f6e202f7573722f62696e2f676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6784|4x|2f7573722f62696e2f6b65796d676d7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7174|4x|72756e7376206361707475726564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7175|4x|72756e73762063627264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7176|4x|72756e7376207a7264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7177|4x|72756e7376206c61637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7178|4x|72756e7376206d6f6e7064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7179|4x|72756e737620726573746a61766164 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7180|4x|72756e73762073686d6d617064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7181|4x|72756e73762077656273736f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7182|4x|72756e7376206465766d676d7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7183|4x|72756e73762068747470645f61706d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7188|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661202d446a6176612e7574696c2e6c6f6767696e672e6d616e616765723d636f6d2e66352e7265 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7192|4x|2f7573722f62696e2f6c61637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7194|4x|2f7573722f62696e2f6465766d676d7464202d6c206e6f74696365 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7196|4x|2f7573722f73686172652f6362722f62696e2f63627264202d2d746872656164733d32202d2d686f73742d6d656d6f72793d343032363533313834202d2d75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7523|4x|72756e737620736f64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7524|4x|72756e737620776f63706c7567696e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7525|4x|72756e73762073666c6f775f6167656e74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7526|4x|72756e73762075726c64626d677264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7527|4x|72756e73762066355f7570646174655f636865636b6572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7528|4x|72756e7376206e73796e6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7529|4x|72756e7376206c696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7530|4x|72756e73762061636564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7531|4x|72756e737620726573746e6f646564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7532|4x|72756e7376206461746173796e6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7535|4x|2f7573722f62696e2f6c696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7539|4x|2f7573722f62696e2f736f64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7543|4x|2f7573722f7362696e2f73666c6f775f6167656e74202d66202d4c462035202f7661722f6c6f672f73666c6f775f6167656e742e6c6f67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7544|4x|2f7573722f62696e2f66352d726573742d6e6f6465202f7573722f73686172652f726573742f6e6f64652f7372632f726573746e6f64652e6a73202d702038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7949|4x|72756e73762066736c6f6764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7950|4x|72756e73762069707364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7951|4x|72756e7376206e6f6b6961736e6d7064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7952|4x|72756e737620646f736c3764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7953|4x|72756e7376206c6f63616c64626d6772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7954|4x|72756e73762077725f75726c646264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.9526|4x|2f7362696e2f6468636c69656e74202d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f646863 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.9602|4x|2f7362696e2f6468636c69656e74202d36202d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.11784|4x|737520746f6d636174202d73202f62696e2f62617368202d63206578706f7274204a4156415f4f5054533d272d4468747470732e70726f746f636f6c733d54 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.13563|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.13565|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.13566|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.14596|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.15387|4x|6e747064202d67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.15921|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661202d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d4470 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16645|4x|2f7573722f62696e2f6c6f67676572202d70206c6f63616c362e696e666f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16646|4x|2f7573722f62696e2f6c6f67676572202d70206c6f63616c362e696e666f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16648|4x|2f7573722f7362696e2f666367692d202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16651|4x|2f7573722f6c6f63616c2f7777772f6d6370712f6d637071 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16652|4x|2f7573722f6c6f63616c2f7777772f72726473746174732f7272647374617473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16653|4x|2f7573722f6c6f63616c2f7777772f727473746174732f72747374617473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16654|4x|2f7573722f6c6f63616c2f7777772f69436f6e74726f6c2f69436f6e74726f6c506f7274616c2e636769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.17900|4x|2f7573722f7362696e2f6e616d6564202d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.18651|4x|696372645f6368696c64202d702038313030202d6c2032202d692034343038353361662d376362352d346530302d393631632d373133303033336265613235 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.21085|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23175|4x|2f7573722f7362696e2f7272647368696d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23206|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23330|4x|2f7573722f7362696e2f736e6d7064202d66202d63202f636f6e6669672f736e6d702f736e6d70642e636f6e66202d4c7364202d4c462036202f7661722f6c +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23416|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23554|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23740|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23891|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24265|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24341|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24415|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24648|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24673|4x|2f7362696e2f616765747479202d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24686|4x|2f7362696e2f616765747479202d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24697|4x|2f7362696e2f616765747479202d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25514|4x|2f7573722f62696e2f70636364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25517|4x|2f7573722f62696e2f746d697073656364202d2d746d6d636f756e742032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25518|4x|2f6574632f62696773746172742f736372697074732f746d6d2e7374617274202f7661722f72756e203220322030202d2d706c6174666f726d205a31303020 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25522|4x|2f7573722f62696e2f6d676d745f61636c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25524|4x|2f7573722f62696e2f76786c616e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25531|4x|2f7573722f73686172652f6970726570642f62696e2f697072657064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25946|4x|62696764202d53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.27567|4x|2f7573722f7362696e2f6e746c6d636f6e6e706f6f6c202d63206d656d3a2f2f6e746c6d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.29431|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.29439|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.29440|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.29574|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.30092|4x|746d6d2e30202d542032202d2d746d69642030202d2d6e7075732032202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.30120|4x|2f7573722f7362696e2f7261636f6f6e202d6c202f7661722f6c6f672f7261636f6f6e2e6c6f67202d66202f6574632f7261636f6f6e2f7261636f6f6e2e63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.31793|4x|2f7573722f62696e2f61756469745f666f72776172646572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.3|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.8|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.9|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.10|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.11|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.12|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.13|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.14|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.18|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.19|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.20|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.21|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.22|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.26|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.27|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.34|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.35|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.36|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.49|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.51|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.52|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.53|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.55|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.68|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.99|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.219|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.220|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.221|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.286|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.287|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.288|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.290|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.292|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.293|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.295|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.298|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.299|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.300|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.302|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.304|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.307|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.310|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.313|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.315|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.317|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.318|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.352|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.353|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.381|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.382|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.415|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.440|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.447|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.885|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.886|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.887|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.905|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.906|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.907|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.910|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.911|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.921|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.928|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.929|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.951|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.977|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.979|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.982|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.984|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1038|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1130|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1138|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1139|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1140|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1142|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1143|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1212|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1222|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1826|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2031|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2851|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2852|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2919|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.3773|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4068|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4085|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4119|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4122|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4212|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4213|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4214|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4215|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4216|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4217|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4218|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4219|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4220|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4221|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4222|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4224|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4226|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4434|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4435|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4436|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4437|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4438|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4439|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4440|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4441|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4442|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4443|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4451|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4773|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4774|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4775|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4776|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4777|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4778|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4779|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4780|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4781|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4782|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4784|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4786|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4787|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5137|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5138|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5139|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5140|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5141|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5142|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5143|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5144|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5145|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5146|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5148|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5151|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5155|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5159|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5501|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5502|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5503|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5504|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5505|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5506|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5507|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5508|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5509|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5510|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5516|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5522|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5861|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5862|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5863|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5864|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5865|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5866|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5867|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5868|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5869|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5870|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5872|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5875|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5878|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5879|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5884|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6344|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6345|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6346|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6347|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6348|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6349|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6350|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6351|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6352|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6353|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6358|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6366|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6763|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6764|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6765|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6766|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6767|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6768|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6769|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6770|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6771|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6772|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6782|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6784|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7174|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7175|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7176|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7177|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7178|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7179|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7180|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7181|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7182|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7183|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7188|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7192|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7194|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7196|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7523|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7524|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7525|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7526|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7527|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7528|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7529|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7530|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7531|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7532|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7535|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7539|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7543|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7544|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7949|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7950|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7951|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7952|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7953|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7954|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.9526|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.9602|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.11784|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.13563|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.13565|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.13566|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.14596|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.15387|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.15921|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16645|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16646|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16648|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16651|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16652|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16653|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16654|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.17900|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.18651|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.21085|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23175|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23206|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23330|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23416|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23554|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23740|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23891|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24265|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24341|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24415|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24648|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24673|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24686|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24697|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25514|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25517|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25518|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25522|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25524|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25531|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25946|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.27567|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.29431|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.29439|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.29440|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.29574|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.30092|4|tmm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.30120|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.31793|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.3|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.8|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.9|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.10|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.11|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.12|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.13|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.14|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.18|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.19|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.20|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.21|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.22|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.26|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.27|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.34|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.35|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.36|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.49|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.51|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.52|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.53|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.55|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.68|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.99|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.219|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.220|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.221|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.286|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.287|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.288|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.290|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.292|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.293|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.295|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.298|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.299|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.300|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.302|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.304|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.307|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.310|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.313|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.315|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.317|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.318|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.352|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.353|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.381|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.382|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.415|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.440|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.447|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.885|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.886|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.887|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.905|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.906|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.907|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.910|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.911|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.921|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.928|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.929|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.951|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.977|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.979|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.982|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.984|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1038|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1130|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1138|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1139|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1140|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1142|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1143|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1212|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1222|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1826|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2031|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2851|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2852|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2919|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.3773|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4068|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4085|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4119|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4122|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4212|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4213|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4214|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4215|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4216|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4217|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4218|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4219|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4220|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4221|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4222|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4224|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4226|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4434|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4435|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4436|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4437|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4438|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4439|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4440|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4441|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4442|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4443|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4451|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4773|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4774|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4775|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4776|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4777|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4778|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4779|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4780|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4781|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4782|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4784|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4786|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4787|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5137|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5138|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5139|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5140|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5141|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5142|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5143|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5144|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5145|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5146|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5148|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5151|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5155|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5159|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5501|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5502|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5503|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5504|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5505|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5506|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5507|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5508|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5509|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5510|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5516|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5522|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5861|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5862|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5863|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5864|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5865|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5866|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5867|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5868|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5869|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5870|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5872|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5875|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5878|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5879|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5884|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6344|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6345|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6346|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6347|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6348|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6349|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6350|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6351|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6352|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6353|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6358|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6366|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6763|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6764|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6765|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6766|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6767|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6768|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6769|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6770|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6771|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6772|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6782|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6784|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7174|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7175|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7176|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7177|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7178|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7179|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7180|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7181|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7182|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7183|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7188|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7192|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7194|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7196|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7523|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7524|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7525|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7526|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7527|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7528|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7529|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7530|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7531|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7532|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7535|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7539|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7543|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7544|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7949|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7950|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7951|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7952|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7953|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7954|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.9526|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.9602|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.11784|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.13563|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.13565|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.13566|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.14596|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.15387|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.15921|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16645|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16646|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16648|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16651|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16652|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16653|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16654|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.17900|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.18651|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.21085|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23175|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23206|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23330|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23416|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23554|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23740|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23891|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24265|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24341|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24415|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24648|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24673|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24686|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24697|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25514|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25517|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25518|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25522|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25524|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25531|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25946|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.27567|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.29431|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.29439|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.29440|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.29574|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.30092|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.30120|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.31793|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.8|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.12|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.13|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.14|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.19|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.20|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.22|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.27|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.34|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.49|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.51|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.52|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.53|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.68|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.220|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.221|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.286|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.292|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.293|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.295|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.298|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.299|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.300|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.302|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.304|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.315|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.318|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.353|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.382|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.447|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.887|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.905|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.907|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.910|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.982|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1038|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1138|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1139|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1140|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1142|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2031|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.3773|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4068|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4216|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4217|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4219|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4220|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4221|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4224|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4438|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4440|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4442|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4443|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4451|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4774|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4778|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4779|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4780|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4784|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4786|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5137|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5141|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5142|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5144|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5145|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5146|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5148|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5502|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5506|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5507|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5510|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5522|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5861|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5862|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5863|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5864|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5865|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5867|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5868|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5869|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5870|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5872|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5884|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6349|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6350|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6352|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6353|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6366|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6766|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6772|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6782|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7175|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7177|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7178|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7179|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7181|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7194|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7525|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7527|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7529|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7532|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7535|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7544|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7951|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7952|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.9526|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.13563|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.15387|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16645|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16652|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16653|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16654|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23206|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23554|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23740|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24265|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24415|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24697|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24706|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24734|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25514|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25946|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.27567|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.29431|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.29574|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.30120|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.31793|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.3|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.8|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.9|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.10|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.11|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.12|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.13|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.14|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.18|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.19|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.20|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.21|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.22|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.26|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.27|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.34|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.35|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.36|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.49|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.51|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.52|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.53|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.55|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.68|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.99|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.219|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.220|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.221|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.286|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.287|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.288|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.290|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.292|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.293|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.295|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.298|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.299|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.300|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.302|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.304|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.307|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.310|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.313|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.315|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.317|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.318|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.352|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.353|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.381|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.382|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.415|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.440|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.447|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.885|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.886|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.887|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.905|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.906|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.907|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.910|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.911|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.921|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.928|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.929|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.951|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.977|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.979|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.982|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.984|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1038|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1130|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1138|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1139|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1140|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1142|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1143|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1212|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1222|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1826|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2031|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2851|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2852|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2919|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.3773|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4068|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4085|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4119|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4122|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4212|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4213|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4214|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4215|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4216|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4217|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4218|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4219|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4220|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4221|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4222|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4224|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4226|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4434|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4435|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4436|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4437|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4438|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4439|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4440|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4441|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4442|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4443|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4451|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4773|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4774|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4775|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4776|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4777|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4778|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4779|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4780|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4781|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4782|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4784|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4786|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4787|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5137|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5138|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5139|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5140|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5141|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5142|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5143|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5144|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5145|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5146|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5148|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5151|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5155|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5159|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5501|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5502|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5503|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5504|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5505|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5506|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5507|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5508|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5509|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5510|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5516|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5522|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5861|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5862|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5863|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5864|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5865|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5866|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5867|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5868|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5869|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5870|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5872|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5875|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5878|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5879|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5884|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6344|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6345|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6346|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6347|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6348|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6349|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6350|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6351|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6352|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6353|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6358|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6366|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6763|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6764|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6765|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6766|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6767|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6768|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6769|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6770|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6771|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6772|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6782|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6784|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7174|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7175|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7176|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7177|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7178|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7179|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7180|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7181|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7182|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7183|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7188|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7192|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7194|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7196|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7523|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7524|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7525|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7526|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7527|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7528|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7529|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7530|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7531|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7532|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7535|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7539|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7543|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7544|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7949|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7950|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7951|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7952|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7953|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7954|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.9526|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.9602|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.11784|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.13563|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.13565|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.13566|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.14596|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.15387|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.15921|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16645|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16646|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16648|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16651|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16652|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16653|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16654|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.17900|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.18651|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.21085|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23175|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23206|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23330|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23416|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23554|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23740|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23891|66|1571650560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24265|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24341|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24415|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24648|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24717|66|1571650560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24734|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24745|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25514|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25517|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25518|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25522|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25524|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25531|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25946|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.27567|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.29431|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.29439|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.29440|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.29574|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.30092|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.30120|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.31793|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.15921|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23330|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24734|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.30092|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.15921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24734|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.30092|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.15921|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24734|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.30092|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.15921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24734|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.30092|66|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.15921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24758|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.30092|66|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.15921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24758|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.30092|66|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.3|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.8|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.9|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.10|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.11|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.12|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.13|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.14|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.18|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.19|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.20|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.21|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.22|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.26|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.27|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.34|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.35|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.36|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.49|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.51|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.52|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.53|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.55|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.68|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.99|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.219|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.220|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.221|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.286|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.287|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.288|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.290|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.292|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.293|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.295|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.298|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.299|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.300|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.302|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.304|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.307|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.310|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.313|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.315|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.317|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.318|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.352|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.353|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.381|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.382|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.415|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.440|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.447|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.885|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.886|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.887|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.905|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.906|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.907|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.910|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.911|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.928|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.929|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.951|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.977|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.979|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.982|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.984|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1038|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1130|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1138|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1139|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1140|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1142|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1143|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1212|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1222|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1826|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2031|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2851|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2852|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2919|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.3773|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4068|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4085|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4119|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4122|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4212|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4213|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4214|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4215|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4216|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4217|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4218|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4219|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4220|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4221|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4222|66|4213 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4224|66|4214 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4226|66|4219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4434|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4435|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4436|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4437|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4438|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4439|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4440|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4441|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4442|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4443|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4451|66|4443 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4773|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4774|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4775|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4776|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4777|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4778|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4779|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4780|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4781|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4782|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4784|66|4773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4786|66|4781 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4787|66|4775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5137|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5138|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5139|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5140|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5141|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5142|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5143|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5144|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5145|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5146|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5148|66|5137 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5151|66|5144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5155|66|5139 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5159|66|5138 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5501|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5502|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5503|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5504|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5505|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5506|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5507|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5508|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5509|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5510|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5516|66|5506 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5522|66|5505 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5861|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5862|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5863|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5864|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5865|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5866|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5867|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5868|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5869|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5870|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5872|66|5867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5875|66|5861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5878|66|5864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5879|66|5863 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5884|66|5865 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6344|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6345|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6346|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6347|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6348|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6349|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6350|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6351|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6352|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6353|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6358|66|6351 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6366|66|6345 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6763|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6764|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6765|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6766|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6767|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6768|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6769|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6770|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6771|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6772|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6782|66|6769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6784|66|6771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7174|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7175|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7176|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7177|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7178|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7179|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7180|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7181|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7182|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7183|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7188|66|7179 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7192|66|7177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7194|66|7182 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7196|66|7175 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7523|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7524|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7525|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7526|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7527|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7528|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7529|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7530|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7531|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7532|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7535|66|7529 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7539|66|7523 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7543|66|7525 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7544|66|7531 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7949|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7950|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7951|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7952|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7953|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7954|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.9526|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.9602|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.11784|66|6353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.13563|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.13565|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.13566|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.14596|66|5878 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.15387|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.15921|66|11784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16645|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16646|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16648|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16651|66|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16652|66|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16653|66|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16654|66|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.17900|66|4224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.18651|66|7188 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.21085|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23175|66|5879 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23206|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23330|66|6770 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23416|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23554|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23740|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24265|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24341|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24415|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24648|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24745|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24758|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24769|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24781|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25514|66|4778 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25517|66|4434 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25518|66|6347 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25522|66|5141 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25524|66|6763 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25531|66|6768 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25946|66|5503 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.27567|66|4435 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.29431|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.29439|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.29440|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.29574|66|25517 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.30092|66|25518 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.30120|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.31793|66|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.415|66|415 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.440|66|440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.447|66|447 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.921|66|921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.951|66|951 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.977|66|977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.979|66|979 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.982|66|982 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.984|66|984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1038|66|1038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1826|66|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2851|66|2851 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2852|66|2852 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2919|66|2919 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.3773|66|3773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4068|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4085|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4119|66|4119 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4122|66|4122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4212|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4213|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4214|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4215|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4216|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4217|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4218|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4219|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4220|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4221|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4222|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4224|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4226|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4434|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4435|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4436|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4437|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4438|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4439|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4440|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4441|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4442|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4443|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4451|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4773|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4774|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4775|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4776|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4777|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4778|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4779|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4780|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4781|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4782|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4786|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4787|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5137|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5138|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5139|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5140|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5141|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5142|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5143|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5144|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5145|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5146|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5148|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5151|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5155|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5159|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5501|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5502|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5503|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5504|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5505|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5506|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5507|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5508|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5509|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5510|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5516|66|5516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5522|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5861|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5862|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5863|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5864|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5865|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5866|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5867|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5868|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5869|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5870|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5872|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5875|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5878|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5879|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5884|66|5884 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6344|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6345|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6346|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6347|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6348|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6349|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6350|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6351|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6352|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6353|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6358|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6366|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6763|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6764|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6765|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6766|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6767|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6768|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6769|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6770|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6771|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6772|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6782|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7174|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7175|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7176|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7177|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7178|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7179|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7180|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7181|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7182|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7183|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7188|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7192|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7194|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7196|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7523|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7524|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7525|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7526|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7527|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7528|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7529|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7530|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7531|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7532|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7535|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7539|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7543|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7544|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7949|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7950|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7951|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7952|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7953|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7954|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.9526|66|9526 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.9602|66|9602 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.11784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.13563|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.13565|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.13566|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.14596|66|14596 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.15387|66|15387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.15921|66|15921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16645|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16646|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16648|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16651|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16652|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16653|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16654|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.17900|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.18651|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23175|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23330|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24745|66|24745 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24758|66|24758 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24769|66|24769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24781|66|24781 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25514|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25517|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25518|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25522|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25524|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25531|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25946|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.27567|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.29431|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.29439|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.29440|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.29574|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.30092|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.30120|66|30120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.31793|66|31793 +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.3|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.8|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.9|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.10|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.11|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.12|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.13|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.14|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.18|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.19|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.20|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.21|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.22|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.26|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.27|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.34|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.35|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.36|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.49|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.51|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.52|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.53|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.55|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.68|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.99|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.219|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.220|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.221|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.286|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.287|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.288|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.290|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.292|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.293|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.295|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.298|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.299|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.300|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.302|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.304|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.307|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.310|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.313|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.315|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.317|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.318|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.352|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.353|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.381|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.382|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.415|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.440|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.447|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.885|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.886|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.887|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.905|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.906|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.907|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.910|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.911|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.921|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.928|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.929|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.951|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.977|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.979|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.982|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.984|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1038|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1130|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1138|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1139|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1140|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1142|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1143|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1212|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1222|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1826|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2031|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2851|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2852|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2919|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.3773|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4068|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4085|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4119|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4122|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4212|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4213|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4214|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4215|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4216|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4217|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4218|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4219|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4220|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4221|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4222|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4224|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4226|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4434|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4435|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4436|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4437|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4438|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4439|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4440|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4441|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4442|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4443|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4451|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4773|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4774|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4775|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4776|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4777|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4778|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4779|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4780|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4781|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4782|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4784|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4786|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4787|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5137|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5138|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5139|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5140|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5141|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5142|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5143|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5144|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5145|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5146|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5148|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5151|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5155|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5159|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5501|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5502|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5503|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5504|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5505|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5506|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5507|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5508|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5509|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5510|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5516|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5522|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5861|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5862|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5863|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5864|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5865|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5866|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5867|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5868|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5869|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5870|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5872|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5875|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5878|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5879|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5884|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6344|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6345|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6346|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6347|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6348|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6349|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6350|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6351|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6352|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6353|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6358|4|R +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6366|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6763|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6764|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6765|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6766|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6767|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6768|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6769|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6770|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6771|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6772|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6782|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6784|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7174|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7175|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7176|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7177|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7178|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7179|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7180|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7181|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7182|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7183|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7188|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7192|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7194|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7196|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7523|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7524|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7525|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7526|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7527|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7528|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7529|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7530|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7531|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7532|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7535|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7539|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7543|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7544|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7949|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7950|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7951|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7952|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7953|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7954|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.9526|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.9602|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.11784|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.13563|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.13565|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.13566|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.14596|4|Z +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.15387|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.15921|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16645|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16646|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16648|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16651|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16652|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16653|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16654|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.17900|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.18651|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.21085|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23175|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23206|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23330|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23416|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23554|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23740|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24265|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24341|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24415|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24648|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24745|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24758|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24769|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24781|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25514|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25517|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25518|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25522|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25524|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25531|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25946|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.27567|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.29431|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.29439|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.29440|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.29574|4|Z +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.30092|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.30120|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.31793|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.415|66|415 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.440|66|440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.447|66|447 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.921|66|921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.951|66|951 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.977|66|977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.979|66|979 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.982|66|982 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.984|66|984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1038|66|1038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1826|66|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2851|66|2851 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2852|66|2852 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2919|66|2919 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.3773|66|3773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4068|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4085|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4119|66|4119 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4122|66|4122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4212|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4213|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4214|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4215|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4216|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4217|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4218|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4219|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4220|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4221|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4222|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4224|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4226|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4434|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4435|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4436|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4437|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4438|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4439|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4440|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4441|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4442|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4443|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4451|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4773|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4774|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4775|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4776|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4777|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4778|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4779|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4780|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4781|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4782|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4786|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4787|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5137|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5138|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5139|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5140|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5141|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5142|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5143|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5144|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5145|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5146|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5148|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5151|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5155|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5159|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5501|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5502|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5503|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5504|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5505|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5506|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5507|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5508|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5509|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5510|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5516|66|5516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5522|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5861|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5862|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5863|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5864|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5865|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5866|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5867|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5868|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5869|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5870|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5872|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5875|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5878|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5879|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5884|66|5884 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6344|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6345|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6346|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6347|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6348|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6349|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6350|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6351|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6352|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6353|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6358|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6366|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6763|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6764|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6765|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6766|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6767|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6768|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6769|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6770|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6771|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6772|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6782|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7174|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7175|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7176|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7177|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7178|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7179|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7180|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7181|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7182|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7183|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7188|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7192|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7194|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7196|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7523|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7524|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7525|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7526|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7527|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7528|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7529|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7530|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7531|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7532|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7535|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7539|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7543|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7544|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7949|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7950|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7951|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7952|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7953|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7954|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.9526|66|9526 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.9602|66|9602 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.11784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.13563|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.13565|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.13566|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.14596|66|14596 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.15387|66|15387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.15921|66|15921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16645|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16646|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16648|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16651|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16652|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16653|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16654|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.17900|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.18651|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23175|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23330|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24745|66|24745 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24758|66|24758 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24769|66|24769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24781|66|24781 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25514|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25517|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25518|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25522|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25524|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25531|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25946|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.27567|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.29431|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.29439|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.29440|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.29574|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.30092|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.30120|66|30120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.31793|66|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4119|66|1025 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4122|66|1088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24792|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24804|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24816|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.3|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.8|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.9|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.10|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.11|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.12|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.13|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.14|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.18|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.19|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.20|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.21|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.22|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.26|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.27|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.34|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.35|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.36|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.49|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.51|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.52|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.53|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.55|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.68|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.99|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.219|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.220|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.221|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.286|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.287|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.288|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.290|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.292|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.293|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.295|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.298|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.299|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.300|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.302|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.304|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.307|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.310|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.313|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.315|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.317|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.318|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.352|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.353|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.381|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.382|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.415|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.440|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.447|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.885|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.886|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.887|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.905|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.906|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.907|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.910|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.911|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.921|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.928|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.929|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.951|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.977|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.979|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.982|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.984|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1038|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1130|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1138|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1139|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1140|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1142|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1143|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1212|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1222|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1826|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2031|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2851|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2852|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2919|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.3773|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4068|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4085|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4119|66|4119 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4122|66|4122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4212|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4213|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4214|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4215|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4216|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4217|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4218|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4219|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4220|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4221|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4222|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4224|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4226|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4434|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4435|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4436|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4437|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4438|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4439|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4440|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4441|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4442|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4443|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4451|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4773|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4774|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4775|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4776|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4777|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4778|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4779|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4780|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4781|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4782|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4784|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4786|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4787|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5137|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5138|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5139|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5140|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5141|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5142|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5143|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5144|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5145|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5146|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5148|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5151|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5155|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5159|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5501|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5502|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5503|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5504|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5505|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5506|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5507|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5508|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5509|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5510|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5516|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5522|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5861|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5862|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5863|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5864|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5865|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5866|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5867|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5868|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5869|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5870|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5872|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5875|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5878|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5879|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5884|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6344|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6345|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6346|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6347|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6348|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6349|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6350|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6351|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6352|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6353|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6358|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6366|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6763|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6764|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6765|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6766|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6767|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6768|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6769|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6770|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6771|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6772|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6782|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6784|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7174|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7175|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7176|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7177|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7178|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7179|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7180|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7181|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7182|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7183|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7188|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7192|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7194|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7196|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7523|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7524|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7525|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7526|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7527|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7528|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7529|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7530|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7531|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7532|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7535|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7539|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7543|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7544|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7949|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7950|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7951|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7952|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7953|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7954|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.9526|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.9602|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.11784|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.13563|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.13565|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.13566|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.14596|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.15387|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.15921|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16645|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16646|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16648|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16651|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16652|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16653|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16654|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.17900|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.18651|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.21085|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23175|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23206|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23330|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23416|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23554|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23740|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24265|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24341|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24415|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24648|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24792|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24804|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24816|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25514|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25517|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25518|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25522|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25524|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25531|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25946|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.27567|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.29431|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.29439|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.29440|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.29574|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.30092|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.30120|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.31793|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.3|70|69247040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7|70|69247040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.8|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.9|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.10|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.11|70|69247296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.12|70|69247296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.13|70|69247040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.14|70|69247040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.18|70|2138432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.19|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.20|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.21|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.22|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.26|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.27|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.34|70|10758208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.35|70|1075847232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.36|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.49|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.51|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.52|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.53|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.55|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.68|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.99|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.219|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.220|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.221|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.286|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.287|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.288|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.290|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.292|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.293|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.295|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.298|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.299|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.300|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.302|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.304|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.307|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.310|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.313|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.315|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.317|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.318|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.352|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.353|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.381|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.382|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.415|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.440|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.447|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.885|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.886|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.887|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.905|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.906|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.907|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.910|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.911|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.921|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.928|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.929|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.951|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.977|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.979|70|1077944384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.982|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.984|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1038|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1130|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1138|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1139|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1140|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1142|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1143|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1212|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1222|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1826|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2031|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2851|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2852|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2919|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.3773|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4068|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4085|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4119|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4122|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4212|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4213|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4214|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4215|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4216|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4217|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4218|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4219|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4220|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4221|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4222|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4224|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4226|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4434|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4435|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4436|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4437|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4438|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4439|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4440|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4441|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4442|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4443|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4451|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4773|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4774|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4775|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4776|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4777|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4778|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4779|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4780|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4781|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4782|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4784|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4786|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4787|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5137|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5138|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5139|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5140|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5141|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5142|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5143|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5144|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5145|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5146|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5148|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5151|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5155|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5159|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5501|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5502|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5503|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5504|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5505|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5506|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5507|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5508|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5509|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5510|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5516|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5522|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5861|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5862|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5863|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5864|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5865|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5866|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5867|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5868|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5869|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5870|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5872|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5875|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5878|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5879|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5884|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6344|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6345|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6346|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6347|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6348|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6349|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6350|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6351|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6352|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6353|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6358|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6366|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6763|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6764|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6765|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6766|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6767|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6768|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6769|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6770|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6771|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6772|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6782|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6784|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7174|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7175|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7176|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7177|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7178|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7179|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7180|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7181|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7182|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7183|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7188|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7192|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7194|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7196|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7523|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7524|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7525|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7526|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7527|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7528|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7529|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7530|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7531|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7532|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7535|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7539|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7543|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7544|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7949|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7950|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7951|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7952|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7953|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7954|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.9526|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.9602|70|1077944384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.11784|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.13563|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.13565|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.13566|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.14596|70|4227340 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.15387|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.15921|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16645|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16646|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16648|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16651|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16652|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16653|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16654|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.17900|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.18651|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.21085|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23175|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23206|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23330|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23416|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23554|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23740|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24265|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24341|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24415|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24648|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24792|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24804|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24816|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25514|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25517|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25518|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25522|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25524|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25531|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25946|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.27567|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.29431|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.29439|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.29440|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.29574|70|4227084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.30092|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.30120|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.31793|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1|70|47815593 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.415|70|11704595 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.440|70|1641 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.447|70|2939 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.921|70|661 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.951|70|1988 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.977|70|42258 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.979|70|130 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.982|70|2183120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.984|70|609353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1038|70|108 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1826|70|343860 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2851|70|599691 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2852|70|30429 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2919|70|23150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.3773|70|1799 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4068|70|8509 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4085|70|2084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4119|70|412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4122|70|408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4212|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4213|70|240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4214|70|241 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4215|70|259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4216|70|266 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4217|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4218|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4219|70|241 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4220|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4221|70|274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4222|70|8067 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4224|70|2621 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4226|70|2804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4434|70|268 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4435|70|259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4436|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4437|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4438|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4439|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4440|70|274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4441|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4442|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4443|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4451|70|45584 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4773|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4774|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4775|70|226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4776|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4777|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4778|70|269 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4779|70|281 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4780|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4781|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4782|70|260 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4784|70|3791 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4786|70|2825 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4787|70|7117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5137|70|240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5138|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5139|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5140|70|270 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5141|70|258 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5142|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5143|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5144|70|241 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5145|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5146|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5148|70|10863 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5151|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5155|70|10970 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5159|70|10594 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5501|70|261 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5502|70|257 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5503|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5504|70|278 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5505|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5506|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5507|70|270 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5508|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5509|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5510|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5516|70|4836 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5522|70|21124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5861|70|246 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5862|70|270 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5863|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5864|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5865|70|246 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5866|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5867|70|238 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5868|70|269 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5869|70|279 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5870|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5872|70|41429 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5875|70|19365 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5878|70|46991648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5879|70|52821098 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5884|70|3435 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6344|70|267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6345|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6346|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6347|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6348|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6349|70|278 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6350|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6351|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6352|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6353|70|250 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6358|70|445561210 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6366|70|13054 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6763|70|266 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6764|70|261 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6765|70|282 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6766|70|260 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6767|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6768|70|263 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6769|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6770|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6771|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6772|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6782|70|58843 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6784|70|10064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7174|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7175|70|245 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7176|70|267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7177|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7178|70|266 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7179|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7180|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7181|70|278 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7182|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7183|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7188|70|932720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7192|70|9561 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7194|70|9381 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7196|70|614030 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7523|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7524|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7525|70|245 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7526|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7527|70|258 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7528|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7529|70|247 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7530|70|274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7531|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7532|70|281 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7535|70|9124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7539|70|23453 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7543|70|18685 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7544|70|48354 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7949|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7950|70|271 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7951|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7952|70|278 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7953|70|279 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7954|70|270 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.9526|70|3147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.9602|70|1782 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.11784|70|3144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.13563|70|1155 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.13565|70|1111 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.13566|70|840 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.14596|70|576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.15387|70|7184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.15921|70|428696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16645|70|398 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16646|70|417 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16648|70|452 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16651|70|7854 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16652|70|11563 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16653|70|337047 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16654|70|48671 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.17900|70|9419 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.18651|70|49729 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23175|70|17447163 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23206|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23330|70|288617 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24792|70|420 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24804|70|420 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24816|70|424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25514|70|14706 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25517|70|9466 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25518|70|3390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25522|70|21261189 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25524|70|9292 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25531|70|7991 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25946|70|9042 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.27567|70|2019 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.29431|70|7802 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.29439|70|4630 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.29440|70|4717 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.29574|70|168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.30092|70|48958 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.30120|70|298 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.31793|70|6593 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1|70|907472918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.447|70|211940 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.951|70|247 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1826|70|153898 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2851|70|404783385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.3773|70|58976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4068|70|213554 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4085|70|99544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4212|70|180175 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4215|70|46638 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4216|70|20835 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4217|70|39234 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4218|70|39314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4220|70|40886 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4221|70|39287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4222|70|6715 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4224|70|22797 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4226|70|9124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4434|70|51688 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4435|70|38313 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4436|70|17535 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4437|70|71126 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4438|70|47536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4439|70|67988 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4440|70|39251 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4441|70|39284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4442|70|50695 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4451|70|6777 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4774|70|20439 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4776|70|21515 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4777|70|47629 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4778|70|43156 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4779|70|275888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4780|70|39345 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4782|70|11007 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4784|70|13181 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4786|70|7538 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4787|70|9134 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5140|70|30041 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5141|70|178493 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5142|70|20444 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5143|70|79859 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5145|70|39283 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5146|70|42436 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5148|70|4870 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5151|70|36016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5155|70|58150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5159|70|1186216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5501|70|25576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5502|70|18927 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5503|70|97287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5504|70|49110 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5507|70|270259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5508|70|91707 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5509|70|48412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5510|70|75707 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5516|70|6099 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5522|70|11911 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5862|70|26127 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5866|70|49264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5868|70|26087 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5869|70|39313 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5870|70|39330 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5872|70|117929 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5875|70|157340 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5878|70|2043571 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5879|70|15964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5884|70|19762 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6344|70|78330 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6346|70|70555 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6347|70|751174 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6348|70|99836 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6349|70|41644 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6350|70|63325 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6352|70|80116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6353|70|7061 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6358|70|9773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6366|70|8816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6763|70|37608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6764|70|28410 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6765|70|39121 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6766|70|113498 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6767|70|52459 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6768|70|23267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6770|70|22750 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6772|70|39275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6782|70|88394 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6784|70|6706 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7174|70|52391 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7176|70|35904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7178|70|102653 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7180|70|22668 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7181|70|68020 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7183|70|47585 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7188|70|237547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7192|70|7853 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7194|70|6437 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7196|70|38537 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7524|70|39224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7526|70|198067 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7527|70|16238 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7528|70|49092 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7530|70|39285 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7532|70|63215 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7535|70|74317 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7539|70|18910 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7543|70|44737 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7544|70|14293 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7949|70|91353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7950|70|34267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7951|70|36861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7952|70|129112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7953|70|39300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7954|70|72025 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.9526|70|5403503 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.11784|70|18465 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.15921|70|2825516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16652|70|870295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23330|70|7315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25514|70|9110 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25517|70|21193 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25518|70|426710 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25522|70|58155066 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25524|70|19364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25531|70|6933 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25946|70|32594 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.27567|70|30892 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.30092|70|16903 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1|70|2544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.415|70|5561 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.440|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.447|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.921|70|182 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.951|70|126 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.977|70|556 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.982|70|216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.984|70|696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1038|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1826|70|4218 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2851|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2852|70|455 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2919|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.3773|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4068|70|300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4085|70|172 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4119|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4212|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4215|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4216|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4218|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4220|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4221|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4222|70|218 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4224|70|263 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4226|70|148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4434|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4435|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4436|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4438|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4439|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4441|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4443|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4451|70|373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4775|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4777|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4778|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4779|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4780|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4784|70|106 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4786|70|252 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4787|70|733 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5139|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5141|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5142|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5143|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5145|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5146|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5148|70|595 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5151|70|430 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5155|70|714 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5159|70|194 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5501|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5502|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5503|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5504|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5507|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5508|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5509|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5516|70|387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5522|70|792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5861|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5862|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5863|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5864|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5865|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5866|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5867|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5868|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5869|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5870|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5872|70|1264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5875|70|597 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5878|70|29412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5879|70|427 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5884|70|111 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6344|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6345|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6346|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6347|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6348|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6349|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6351|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6352|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6353|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6358|70|929 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6366|70|137 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6763|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6765|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6766|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6767|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6768|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6769|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6770|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6771|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6772|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6782|70|463 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6784|70|967 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7174|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7175|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7177|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7178|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7179|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7180|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7181|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7182|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7183|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7188|70|43595 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7192|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7194|70|389 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7196|70|980 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7523|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7524|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7525|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7526|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7527|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7528|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7529|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7530|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7531|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7532|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7535|70|684 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7539|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7543|70|942 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7544|70|4227 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7949|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7950|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7951|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7952|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7953|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7954|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.9526|70|252 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.9602|70|159 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.11784|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.13563|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.14596|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.15387|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.15921|70|30006 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16645|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16646|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16648|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16651|70|174 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16652|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16653|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16654|70|520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.17900|70|490 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.18651|70|2671 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23175|70|182 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23330|70|3649 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25514|70|298 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25517|70|248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25518|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25522|70|466 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25524|70|143 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25531|70|97 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25946|70|159 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.27567|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.29431|70|161 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.29439|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.29440|70|23 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.30092|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.30120|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.31793|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1|70|18660 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.447|70|59 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.951|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1826|70|452 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2851|70|22839 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.3773|70|2237 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4068|70|5574 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4085|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4212|70|303 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4215|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4218|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4220|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4224|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4226|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4434|70|1121 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4435|70|21 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4436|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4437|70|33 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4438|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4439|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4442|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4777|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4778|70|1027 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4779|70|250 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4780|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4782|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4784|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4786|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5140|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5141|70|4127 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5142|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5143|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5145|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5151|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5155|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5159|70|14440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5501|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5502|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5503|70|557 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5507|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5522|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5862|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5866|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5868|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5869|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5870|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5872|70|795 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5875|70|2582 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5878|70|9135 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5879|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5884|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6344|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6346|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6347|70|1150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6349|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6350|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6352|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6366|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6763|70|1109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6764|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6766|70|648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6767|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6768|70|522 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6770|70|865 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6782|70|408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7176|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7178|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7180|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7181|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7183|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7188|70|6133 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7526|70|225 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7530|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7532|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7539|70|47 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7543|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7544|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7951|70|28 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7952|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7954|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.9526|70|41073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.11784|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.15921|70|1711 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16652|70|197 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23330|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25514|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25517|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25518|70|1410 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25522|70|1518 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25524|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25531|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25946|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.27567|70|49 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.30092|70|158 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1|70|47039 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.9|70|40 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.11|70|245 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.12|70|311 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.20|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.415|70|13954 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.440|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.447|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.921|70|22489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.951|70|1732 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.977|70|24657 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.982|70|1100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.984|70|5582 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1038|70|331 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1826|70|32144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2851|70|217 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2852|70|1599 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2919|70|35176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4068|70|1660 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4085|70|210 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4212|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4213|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4215|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4216|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4217|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4218|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4219|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4220|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4222|70|2981 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4224|70|607 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4226|70|2862 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4434|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4435|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4436|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4437|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4438|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4439|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4440|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4441|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4442|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4443|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4451|70|2287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4773|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4774|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4775|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4776|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4778|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4779|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4780|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4781|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4782|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4784|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4786|70|3993 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4787|70|11480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5137|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5138|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5139|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5140|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5141|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5142|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5143|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5144|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5145|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5146|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5148|70|5524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5151|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5155|70|97367 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5159|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5501|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5502|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5503|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5504|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5505|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5506|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5507|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5508|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5509|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5510|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5516|70|4198 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5522|70|6084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5861|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5862|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5863|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5864|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5865|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5866|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5867|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5868|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5869|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5870|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5872|70|31159 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5875|70|822 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5878|70|195238 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5879|70|78077 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5884|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6344|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6345|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6346|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6347|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6348|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6349|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6350|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6351|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6352|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6353|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6358|70|686592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6366|70|12776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6763|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6764|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6765|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6766|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6767|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6768|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6769|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6770|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6771|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6772|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6782|70|13772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6784|70|6321 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7174|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7175|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7176|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7177|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7178|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7179|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7181|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7182|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7183|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7188|70|307921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7192|70|18348 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7194|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7196|70|3067 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7523|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7524|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7525|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7526|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7527|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7528|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7529|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7530|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7531|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7532|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7535|70|7094 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7539|70|50777 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7543|70|1066 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7544|70|364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7949|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7950|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7951|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7952|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7953|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7954|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.9526|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.9602|70|121 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.11784|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.13563|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.13565|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.13566|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.15387|70|54 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.15921|70|1378579 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16645|70|234 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16646|70|154 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16648|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16651|70|193 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16652|70|1021 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16653|70|3921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16654|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.17900|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.18651|70|95298 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23175|70|14954 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23330|70|19766 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25514|70|92 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25517|70|1219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25518|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25522|70|9725 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25524|70|882 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25531|70|3647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25946|70|71905 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.27567|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.29431|70|296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.29439|70|281 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.29440|70|340 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.30092|70|10383960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.30120|70|196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.31793|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1|70|117771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.3|70|10067 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7|70|6232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.9|70|165096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.11|70|172 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.13|70|6195 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.14|70|11539 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.20|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.34|70|1640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.99|70|1224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.352|70|1465 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.415|70|47264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.440|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.447|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.885|70|1852 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.886|70|2793 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.906|70|2684 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.910|70|2433 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.921|70|7808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.928|70|3285 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.951|70|3945 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.977|70|15712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.982|70|11084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.984|70|20138 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1038|70|4123 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1826|70|15918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2031|70|66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2851|70|6824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2852|70|16319 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2919|70|6967 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.3773|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4068|70|7158 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4085|70|7591 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4119|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4212|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4213|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4214|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4215|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4216|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4217|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4218|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4219|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4220|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4221|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4222|70|3293 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4224|70|4912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4226|70|4918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4434|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4435|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4436|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4437|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4438|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4439|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4440|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4441|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4442|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4443|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4451|70|3044 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4773|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4774|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4775|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4776|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4777|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4778|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4779|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4780|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4781|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4782|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4784|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4786|70|2105 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4787|70|6642 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5137|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5138|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5139|70|288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5140|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5141|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5142|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5143|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5144|70|230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5145|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5146|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5148|70|5150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5151|70|484 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5155|70|151153 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5159|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5501|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5502|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5503|70|251 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5504|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5505|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5506|70|230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5507|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5508|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5509|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5510|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5516|70|2491 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5522|70|3204 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5861|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5862|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5863|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5864|70|252 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5865|70|253 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5866|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5867|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5868|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5869|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5870|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5872|70|57700 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5875|70|752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5878|70|119765 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5879|70|57462 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5884|70|109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6344|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6345|70|224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6346|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6347|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6348|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6349|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6350|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6351|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6352|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6353|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6358|70|434649 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6366|70|12030 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6763|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6764|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6765|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6766|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6767|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6768|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6769|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6770|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6771|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6772|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6782|70|3117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6784|70|7283 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7174|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7175|70|246 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7176|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7177|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7178|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7179|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7180|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7181|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7182|70|228 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7183|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7188|70|135233 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7192|70|39719 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7194|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7196|70|16626 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7523|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7524|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7525|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7526|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7527|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7528|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7529|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7530|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7531|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7532|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7535|70|5517 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7539|70|198579 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7543|70|550 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7544|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7949|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7950|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7951|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7952|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7953|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7954|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.9526|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.9602|70|2779 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.11784|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.13563|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.13565|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.13566|70|120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.14596|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.15387|70|1319 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.15921|70|1022608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16645|70|319 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16646|70|199 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16648|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16651|70|179 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16652|70|124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16653|70|529 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16654|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.17900|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.18651|70|73337 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.21085|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23175|70|24894 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23330|70|14396 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23416|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23554|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23740|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25514|70|122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25517|70|749 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25518|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25522|70|45233 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25524|70|641 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25531|70|3036 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25946|70|33483 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.29431|70|94 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.29439|70|116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.29440|70|222 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.30092|70|20256468 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.30120|70|305 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.31793|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1|70|1006275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.447|70|52 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1826|70|384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2851|70|573116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.3773|70|54 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4068|70|9124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4085|70|134 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4212|70|390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4215|70|21 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4216|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4217|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4218|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4220|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4221|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4222|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4224|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4226|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4434|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4435|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4436|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4437|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4438|70|23 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4439|70|26 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4440|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4441|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4442|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4451|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4774|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4776|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4777|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4778|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4779|70|618 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4780|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4782|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4784|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4786|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4787|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5140|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5141|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5142|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5143|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5145|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5146|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5148|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5151|70|51 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5155|70|163 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5159|70|2336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5501|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5502|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5503|70|261 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5504|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5507|70|135 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5508|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5509|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5510|70|27 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5516|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5522|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5862|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5866|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5868|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5869|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5870|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5872|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5875|70|190 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5878|70|2285 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5879|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5884|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6344|70|82 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6346|70|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6347|70|12397 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6348|70|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6349|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6350|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6352|70|78 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6353|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6358|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6366|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6763|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6764|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6765|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6766|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6767|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6768|70|42 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6770|70|156 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6772|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6782|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6784|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7174|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7176|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7178|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7180|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7181|70|26 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7183|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7188|70|287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7192|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7196|70|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7524|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7526|70|457 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7527|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7528|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7530|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7532|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7535|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7539|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7543|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7544|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7949|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7950|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7951|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7952|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7953|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7954|70|47 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.9526|70|3775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.11784|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.15921|70|7746 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16652|70|404 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23330|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24880|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24890|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25514|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25517|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25518|70|327 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25522|70|6389 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25524|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25531|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25946|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.27567|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.30092|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1|70|354220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.447|70|124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1826|70|249 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2851|70|177444 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.3773|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4068|70|3312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4085|70|42 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4212|70|144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4215|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4216|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4217|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4218|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4220|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4221|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4222|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4224|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4226|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4434|70|59 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4435|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4436|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4437|70|29 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4438|70|33 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4439|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4440|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4441|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4442|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4451|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4774|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4776|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4777|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4778|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4779|70|116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4780|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4782|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4784|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4786|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4787|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5140|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5141|70|251 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5142|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5143|70|21 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5145|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5146|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5151|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5155|70|26 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5159|70|717 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5501|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5502|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5503|70|122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5504|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5507|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5508|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5509|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5510|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5516|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5522|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5862|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5866|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5868|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5869|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5870|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5872|70|48 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5875|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5878|70|1030 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5879|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5884|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6344|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6346|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6347|70|12442 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6348|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6349|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6350|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6352|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6353|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6358|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6366|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6763|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6764|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6765|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6766|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6767|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6768|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6770|70|49 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6772|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6782|70|46 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6784|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7174|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7176|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7178|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7180|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7181|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7183|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7188|70|166 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7192|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7194|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7196|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7524|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7526|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7527|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7528|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7530|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7532|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7535|70|48 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7539|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7543|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7544|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7949|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7950|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7951|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7952|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7953|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7954|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.9526|70|1954 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.11784|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.15921|70|1052 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16652|70|431 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23330|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24880|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24890|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25514|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25517|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25518|70|337 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25522|70|39081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25524|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25946|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.27567|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.30092|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.3|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7|66|4294967196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.8|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.9|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.11|66|4294967196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.12|66|4294967196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.13|66|4294967196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.14|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.18|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.20|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.34|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.35|66|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.99|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.220|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.352|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.381|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.415|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.440|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.447|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.886|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.905|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.906|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.910|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.921|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.928|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.951|66|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.977|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.979|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.982|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.984|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1038|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1826|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2851|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2852|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.3773|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4068|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4085|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4119|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4122|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4212|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4213|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4214|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4215|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4216|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4217|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4218|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4219|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4220|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4221|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4222|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4224|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4226|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4434|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4435|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4436|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4437|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4438|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4439|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4440|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4441|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4442|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4443|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4451|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4773|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4774|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4775|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4776|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4777|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4778|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4779|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4780|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4781|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4782|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4784|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4786|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4787|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5137|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5138|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5139|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5140|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5141|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5142|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5143|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5144|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5145|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5146|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5148|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5151|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5155|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5159|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5501|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5502|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5503|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5504|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5505|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5506|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5507|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5508|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5509|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5510|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5516|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5522|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5861|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5862|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5863|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5864|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5865|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5866|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5867|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5868|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5869|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5870|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5872|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5875|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5878|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5879|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5884|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6344|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6345|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6346|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6347|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6348|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6349|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6350|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6351|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6352|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6353|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6358|66|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6366|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6763|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6764|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6765|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6766|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6767|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6768|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6769|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6770|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6771|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6772|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6782|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6784|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7174|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7175|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7176|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7177|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7178|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7179|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7180|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7181|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7182|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7183|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7188|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7192|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7194|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7196|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7523|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7524|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7525|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7526|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7527|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7528|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7529|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7530|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7531|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7532|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7535|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7539|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7543|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7544|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7949|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7950|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7951|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7952|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7953|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7954|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.9526|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.9602|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.11784|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.13563|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.13565|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.13566|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.14596|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.15387|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.15921|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16645|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16646|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16648|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16651|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16652|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16653|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16654|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.17900|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.18651|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.21085|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23175|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23330|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23416|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23554|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23740|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24265|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24341|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24415|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24648|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24829|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24868|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24890|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24902|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24912|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25514|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25517|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25518|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25522|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25524|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25531|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25946|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.27567|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.29431|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.29439|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.29440|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.29574|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.30092|66|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.30120|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.31793|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.10|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.19|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.21|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.22|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.26|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.27|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.35|66|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.36|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.49|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.51|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.52|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.53|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.55|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.68|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.219|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.221|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.286|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.287|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.288|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.290|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.292|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.293|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.295|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.298|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.299|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.300|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.302|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.304|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.307|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.310|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.313|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.315|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.317|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.318|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.353|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.382|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.885|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.887|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.907|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.911|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.929|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.951|66|4294967292 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1130|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1138|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1139|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1140|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1142|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1143|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1212|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1222|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2031|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2919|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6358|66|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24890|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24902|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24912|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.30092|66|4294967283 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.3|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.8|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.9|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.10|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.11|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.12|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.13|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.14|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.18|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.19|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.20|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.21|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.22|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.26|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.27|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.34|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.35|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.36|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.49|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.51|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.52|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.53|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.55|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.68|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.99|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.219|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.220|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.221|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.286|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.287|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.288|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.290|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.292|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.293|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.295|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.298|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.299|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.300|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.302|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.304|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.307|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.310|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.313|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.315|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.317|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.318|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.352|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.353|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.381|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.382|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.415|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.440|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.447|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.885|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.886|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.887|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.905|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.906|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.907|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.910|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.911|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.928|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.929|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.951|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.977|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.979|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.982|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.984|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1038|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1130|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1138|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1139|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1140|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1142|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1143|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1212|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1222|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1826|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2031|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2851|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2852|66|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2919|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.3773|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4068|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4085|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4119|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4122|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4212|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4213|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4214|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4215|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4216|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4217|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4218|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4219|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4220|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4221|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4222|66|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4224|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4226|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4434|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4435|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4436|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4437|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4438|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4439|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4440|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4441|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4442|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4443|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4451|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4773|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4774|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4775|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4776|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4777|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4778|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4779|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4780|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4781|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4782|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4784|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4786|66|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4787|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5137|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5138|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5139|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5140|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5141|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5142|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5143|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5144|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5145|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5146|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5148|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5151|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5155|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5159|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5501|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5502|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5503|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5504|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5505|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5506|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5507|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5508|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5509|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5510|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5516|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5522|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5861|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5862|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5863|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5864|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5865|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5866|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5867|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5868|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5869|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5870|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5872|66|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5875|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5878|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5879|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5884|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6344|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6345|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6346|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6347|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6348|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6349|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6350|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6351|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6352|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6353|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6366|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6763|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6764|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6765|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6766|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6767|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6768|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6769|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6770|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6771|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6772|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6782|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6784|66|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7174|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7175|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7176|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7177|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7178|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7179|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7180|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7181|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7182|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7183|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7188|66|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7192|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7194|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7196|66|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7523|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7524|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7525|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7526|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7527|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7528|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7529|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7530|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7531|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7532|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7535|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7539|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7543|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7544|66|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7949|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7950|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7951|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7952|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7953|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7954|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.9526|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.9602|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.11784|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.13563|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.13565|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.13566|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.14596|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.15387|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.15921|66|49 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16645|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16646|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16648|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16651|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16652|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16653|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16654|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.17900|66|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.18651|66|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.21085|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23175|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23330|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23416|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23554|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23740|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24265|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24341|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24415|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24648|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24829|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24868|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24890|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24902|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24912|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25514|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25517|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25518|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25522|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25524|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25531|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25946|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.27567|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.29431|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.29439|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.29440|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.29574|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.30092|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.30120|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.31793|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24890|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24902|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24912|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.3|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.8|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.9|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.10|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.11|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.12|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.13|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.14|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.18|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.19|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.20|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.21|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.22|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.26|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.27|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.34|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.35|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.36|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.49|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.51|70|52 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.52|70|52 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.53|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.55|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.68|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.99|70|58 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.219|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.220|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.221|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.286|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.287|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.288|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.290|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.292|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.293|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.295|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.298|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.299|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.300|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.302|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.304|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.307|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.310|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.313|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.315|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.317|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.318|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.352|70|116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.353|70|116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.381|70|125 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.382|70|125 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.415|70|234 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.440|70|290 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.447|70|315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.885|70|478 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.886|70|478 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.887|70|478 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.905|70|501 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.906|70|502 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.907|70|502 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.910|70|505 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.911|70|505 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.921|70|514 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.928|70|547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.929|70|547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.951|70|592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.977|70|610 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.979|70|612 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.982|70|620 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.984|70|620 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1038|70|645 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1130|70|722 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1138|70|730 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1139|70|730 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1140|70|730 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1142|70|732 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1143|70|732 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1212|70|812 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1222|70|821 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1826|70|1272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2031|70|1872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2851|70|3471 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2852|70|3472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2919|70|3549 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.3773|70|5544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4068|70|5715 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4085|70|5736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4119|70|5789 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4122|70|5791 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4212|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4213|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4214|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4215|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4216|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4217|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4218|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4219|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4220|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4221|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4222|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4224|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4226|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4434|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4435|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4436|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4437|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4438|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4439|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4440|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4441|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4442|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4443|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4451|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4773|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4774|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4775|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4776|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4777|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4778|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4779|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4780|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4781|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4782|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4784|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4786|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4787|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5137|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5138|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5139|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5140|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5141|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5142|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5143|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5144|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5145|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5146|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5148|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5151|70|6274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5155|70|6274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5159|70|6275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5501|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5502|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5503|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5504|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5505|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5506|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5507|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5508|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5509|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5510|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5516|70|6374 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5522|70|6375 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5861|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5862|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5863|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5864|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5865|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5866|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5867|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5868|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5869|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5870|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5872|70|6474 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5875|70|6474 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5878|70|6474 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5879|70|6474 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5884|70|6475 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6344|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6345|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6346|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6347|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6348|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6349|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6350|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6351|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6352|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6353|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6358|70|6574 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6366|70|6575 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6763|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6764|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6765|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6766|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6767|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6768|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6769|70|6674 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6770|70|6674 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6771|70|6674 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6772|70|6674 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6782|70|6675 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6784|70|6675 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7174|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7175|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7176|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7177|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7178|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7179|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7180|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7181|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7182|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7183|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7188|70|6775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7192|70|6775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7194|70|6775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7196|70|6776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7523|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7524|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7525|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7526|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7527|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7528|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7529|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7530|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7531|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7532|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7535|70|6875 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7539|70|6876 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7543|70|6876 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7544|70|6876 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7949|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7950|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7951|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7952|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7953|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7954|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.9526|70|7966 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.9602|70|7993 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.11784|70|10074 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.13563|70|131991877 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.13565|70|131991978 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.13566|70|131991978 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.14596|70|10549 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.15387|70|3740161 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.15921|70|11089 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16645|70|11973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16646|70|11973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16648|70|11976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16651|70|11976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16652|70|11977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16653|70|11977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16654|70|11977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.17900|70|14608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.18651|70|51135 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.21085|70|181345385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23175|70|340220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23330|70|342244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23416|70|181499095 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23554|70|181505145 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23740|70|181519405 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24265|70|181560701 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24341|70|181561468 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24415|70|181567387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24648|70|181585424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24829|70|181600077 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24868|70|181603386 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24890|70|181605125 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24902|70|181606134 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24912|70|181607143 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25514|70|370941 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25517|70|370941 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25518|70|370941 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25522|70|370942 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25524|70|370943 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25531|70|370946 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25946|70|371401 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.27567|70|371629 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.29431|70|35645721 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.29439|70|35645821 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.29440|70|35645821 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.29574|70|371925 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.30092|70|375282 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.30120|70|376493 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.31793|70|173191645 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1|70|49713152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.415|70|33943552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.440|70|141217792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.447|70|47235072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.921|70|4435968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.951|70|57036800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.977|70|61444096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.979|70|4464640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.982|70|22003712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.984|70|24870912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1038|70|8642560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1826|70|269340672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2851|70|129306624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2852|70|86798336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2919|70|92344320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.3773|70|128389120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4068|70|123240448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4085|70|2330624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4119|70|112705536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4122|70|112705536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4212|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4213|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4214|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4215|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4216|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4217|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4218|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4219|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4220|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4221|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4222|70|54636544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4224|70|26431488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4226|70|30048256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4434|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4435|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4436|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4437|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4438|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4439|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4440|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4441|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4442|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4443|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4451|70|290471936 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4773|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4774|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4775|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4776|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4777|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4778|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4779|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4780|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4781|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4782|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4784|70|62533632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4786|70|39739392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4787|70|38821888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5137|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5138|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5139|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5140|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5141|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5142|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5143|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5144|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5145|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5146|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5148|70|33505280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5151|70|10104832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5155|70|33701888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5159|70|30638080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5501|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5502|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5503|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5504|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5505|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5506|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5507|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5508|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5509|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5510|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5516|70|102584320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5522|70|131997696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5861|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5862|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5863|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5864|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5865|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5866|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5867|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5868|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5869|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5870|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5872|70|153038848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5875|70|44605440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5878|70|263057408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5879|70|49266688 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5884|70|73691136 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6344|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6345|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6346|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6347|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6348|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6349|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6350|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6351|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6352|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6353|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6358|70|101949440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6366|70|99876864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6763|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6764|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6765|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6766|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6767|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6768|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6769|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6770|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6771|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6772|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6782|70|17645568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6784|70|135647232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7174|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7175|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7176|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7177|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7178|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7179|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7180|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7181|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7182|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7183|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7188|70|480456704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7192|70|33775616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7194|70|39104512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7196|70|59047936 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7523|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7524|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7525|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7526|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7527|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7528|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7529|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7530|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7531|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7532|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7535|70|30617600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7539|70|84951040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7543|70|155557888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7544|70|1276493824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7949|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7950|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7951|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7952|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7953|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7954|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.9526|70|105476096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.9602|70|105476096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.11784|70|117710848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.13563|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.13565|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.13566|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.15387|70|50196480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.15921|70|341299200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16645|70|6615040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16646|70|6615040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16648|70|123240448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16651|70|64565248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16652|70|4423680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16653|70|4186112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16654|70|318685184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.17900|70|67162112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.18651|70|387264512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23175|70|10960896 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23330|70|142557184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24890|70|6631424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24902|70|6631424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24912|70|6631424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25514|70|131899392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25517|70|55631872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25518|70|4431872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25522|70|168435712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25524|70|34631680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25531|70|33611776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25946|70|60416000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.27567|70|6381568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.29431|70|126652416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.29439|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.29440|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.30092|70|6445785088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.30120|70|13733888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.31793|70|43233280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1|70|4608000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.415|70|1953792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.440|70|225280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.447|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.921|70|40960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.951|70|503808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.977|70|1064960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.979|70|49152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.982|70|454656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.984|70|1134592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1038|70|16384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1826|70|5361664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2851|70|446464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2852|70|15581184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2919|70|91148288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.3773|70|143360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4068|70|6983680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4085|70|192512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4119|70|49152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4122|70|45056 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4212|70|217088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4213|70|155648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4214|70|176128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4215|70|344064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4216|70|311296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4217|70|319488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4218|70|282624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4219|70|176128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4220|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4221|70|282624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4222|70|16093184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4224|70|2609152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4226|70|4157440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4434|70|319488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4435|70|356352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4436|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4437|70|311296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4438|70|278528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4439|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4440|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4441|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4442|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4443|70|167936 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4451|70|16547840 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4773|70|155648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4774|70|356352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4775|70|389120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4776|70|356352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4777|70|299008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4778|70|315392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4779|70|262144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4780|70|270336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4781|70|176128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4782|70|372736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4784|70|778240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4786|70|3137536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4787|70|5173248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5137|70|180224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5138|70|180224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5139|70|167936 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5140|70|331776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5141|70|364544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5142|70|339968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5143|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5144|70|180224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5145|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5146|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5148|70|16998400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5151|70|1056768 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5155|70|16830464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5159|70|17190912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5501|70|331776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5502|70|356352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5503|70|262144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5504|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5505|70|155648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5506|70|180224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5507|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5508|70|311296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5509|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5510|70|311296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5516|70|4354048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5522|70|4542464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5861|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5862|70|331776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5863|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5864|70|143360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5865|70|401408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5866|70|315392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5867|70|393216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5868|70|331776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5869|70|274432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5870|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5872|70|21540864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5875|70|17674240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5878|70|95326208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5879|70|22757376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5884|70|393216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6344|70|335872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6345|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6346|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6347|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6348|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6349|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6350|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6351|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6352|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6353|70|397312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6358|70|15302656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6366|70|851968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6763|70|335872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6764|70|364544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6765|70|274432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6766|70|364544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6767|70|274432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6768|70|327680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6769|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6770|70|348160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6771|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6772|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6782|70|8056832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6784|70|18399232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7174|70|299008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7175|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7176|70|339968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7177|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7178|70|339968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7179|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7180|70|327680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7181|70|274432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7182|70|139264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7183|70|299008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7188|70|175198208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7192|70|33746944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7194|70|17629184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7196|70|14553088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7523|70|143360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7524|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7525|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7526|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7527|70|344064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7528|70|294912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7529|70|139264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7530|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7531|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7532|70|282624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7535|70|16130048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7539|70|83767296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7543|70|1945600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7544|70|20705280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7949|70|294912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7950|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7951|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7952|70|282624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7953|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7954|70|335872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.9526|70|917504 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.9602|70|573440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.11784|70|69632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.13563|70|6098944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.13565|70|5926912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.13566|70|5185536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.15387|70|1994752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.15921|70|231464960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16645|70|278528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16646|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16648|70|3219456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16651|70|18980864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16652|70|1286144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16653|70|1474560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16654|70|17506304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.17900|70|1490944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.18651|70|95395840 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23175|70|1228800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23330|70|35278848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24912|70|856064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24925|70|851968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24937|70|851968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24949|70|864256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25514|70|22290432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25517|70|25726976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25518|70|598016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25522|70|25862144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25524|70|26071040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25531|70|25788416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25946|70|26468352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.27567|70|1257472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.29431|70|14893056 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.29439|70|8228864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.29440|70|8417280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.30092|70|110612480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.30120|70|1159168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.31793|70|24371200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.3|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.8|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.9|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.10|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.11|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.12|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.13|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.14|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.18|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.19|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.20|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.21|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.22|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.26|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.27|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.34|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.35|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.36|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.49|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.51|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.52|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.53|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.55|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.68|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.99|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.219|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.220|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.221|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.286|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.287|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.288|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.290|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.292|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.293|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.295|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.298|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.299|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.300|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.302|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.304|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.307|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.310|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.313|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.315|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.317|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.318|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.352|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.353|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.381|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.382|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.415|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.440|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.447|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.885|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.886|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.887|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.905|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.906|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.907|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.910|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.911|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.921|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.928|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.929|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.951|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.977|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.979|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.982|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.984|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1038|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1130|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1138|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1139|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1140|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1142|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1143|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1212|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1222|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1826|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2031|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2851|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2852|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2919|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.3773|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4068|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4085|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4119|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4122|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4212|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4213|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4214|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4215|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4216|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4217|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4218|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4219|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4220|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4221|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4222|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4224|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4226|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4434|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4435|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4436|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4437|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4438|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4439|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4440|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4441|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4442|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4443|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4451|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4773|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4774|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4775|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4776|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4777|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4778|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4779|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4780|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4781|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4782|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4784|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4786|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4787|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5137|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5138|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5139|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5140|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5141|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5142|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5143|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5144|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5145|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5146|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5148|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5151|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5155|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5159|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5501|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5502|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5503|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5504|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5505|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5506|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5507|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5508|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5509|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5510|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5516|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5522|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5861|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5862|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5863|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5864|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5865|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5866|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5867|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5868|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5869|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5870|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5872|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5875|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5878|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5879|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5884|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6344|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6345|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6346|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6347|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6348|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6349|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6350|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6351|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6352|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6353|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6358|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6366|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6763|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6764|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6765|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6766|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6767|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6768|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6769|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6770|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6771|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6772|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6782|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6784|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7174|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7175|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7176|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7177|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7178|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7179|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7180|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7181|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7182|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7183|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7188|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7192|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7194|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7196|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7523|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7524|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7525|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7526|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7527|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7528|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7529|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7530|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7531|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7532|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7535|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7539|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7543|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7544|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7949|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7950|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7951|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7952|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7953|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7954|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.9526|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.9602|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.11784|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.13563|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.13565|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.13566|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.14596|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.15387|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.15921|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16645|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16646|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16648|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16651|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16652|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16653|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16654|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.17900|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.18651|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.21085|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23175|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23330|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23416|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23554|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23740|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24265|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24341|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24415|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24648|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24829|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24868|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24912|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24925|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24937|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24949|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25514|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25517|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25518|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25522|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25524|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25531|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25946|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.27567|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.29431|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.29439|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.29440|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.29574|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.30092|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.30120|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.31793|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1|70|94346280902656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.415|70|94425133027328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.440|70|94857912774656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.447|70|94129310830592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.921|70|94485268529152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.951|70|94098792108032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.977|70|94355467161600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.979|70|93976630431744 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.982|70|94107871502336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.984|70|93847942225920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1038|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1826|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2851|70|94072984322048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2852|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2919|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.3773|70|94745531465728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4068|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4085|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4119|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4122|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4212|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4213|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4214|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4215|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4216|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4217|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4218|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4219|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4220|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4221|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4222|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4224|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4226|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4434|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4435|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4436|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4437|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4438|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4439|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4440|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4441|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4442|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4443|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4451|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4773|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4774|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4775|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4776|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4777|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4778|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4779|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4780|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4781|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4782|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4784|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4786|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4787|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5137|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5138|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5139|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5140|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5141|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5142|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5143|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5144|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5145|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5146|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5148|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5151|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5155|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5159|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5501|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5502|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5503|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5504|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5505|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5506|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5507|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5508|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5509|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5510|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5516|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5522|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5861|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5862|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5863|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5864|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5865|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5866|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5867|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5868|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5869|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5870|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5872|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5875|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5878|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5879|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5884|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6344|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6345|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6346|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6347|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6348|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6349|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6350|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6351|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6352|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6353|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6358|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6366|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6763|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6764|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6765|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6766|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6767|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6768|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6769|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6770|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6771|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6772|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6782|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6784|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7174|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7175|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7176|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7177|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7178|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7179|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7180|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7181|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7182|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7183|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7188|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7192|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7194|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7196|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7523|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7524|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7525|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7526|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7527|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7528|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7529|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7530|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7531|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7532|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7535|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7539|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7543|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7544|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7949|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7950|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7951|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7952|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7953|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7954|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.9526|70|94884366323712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.9602|70|93935795552256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.11784|70|94089056813056 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.13563|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.13565|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.13566|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.15387|70|94922591174656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.15921|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16645|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16646|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16648|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16651|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16652|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16653|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16654|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.17900|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.18651|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23175|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23330|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24937|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24949|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24959|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25514|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25517|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25518|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25522|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25524|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25531|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25946|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.27567|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.29431|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.29439|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.29440|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.30092|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.30120|70|1448448000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.31793|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1|70|94346282237616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.415|70|94425133284104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.440|70|94857912837404 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.447|70|94129311134192 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.921|70|94485268545932 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.951|70|94098792218652 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.977|70|94355467578284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.979|70|93976630475108 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.982|70|94107871543300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.984|70|93847942756952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1038|70|4206060 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1826|70|4202636 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2851|70|94072984381548 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2852|70|134919186 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2919|70|134536564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.3773|70|94745532287748 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4068|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4085|70|134529492 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4119|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4122|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4212|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4213|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4214|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4215|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4216|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4217|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4218|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4219|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4220|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4221|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4222|70|134981023 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4224|70|134531971 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4226|70|134682980 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4434|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4435|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4436|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4437|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4438|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4439|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4440|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4441|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4442|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4443|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4451|70|135983196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4773|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4774|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4775|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4776|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4777|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4778|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4779|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4780|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4781|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4782|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4784|70|4711036 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4786|70|134609472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4787|70|134762383 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5137|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5138|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5139|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5140|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5141|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5142|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5143|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5144|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5145|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5146|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5148|70|135144380 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5151|70|139997850 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5155|70|135084855 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5159|70|134749296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5501|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5502|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5503|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5504|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5505|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5506|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5507|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5508|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5509|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5510|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5516|70|4384068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5522|70|4933648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5861|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5862|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5863|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5864|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5865|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5866|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5867|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5868|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5869|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5870|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5872|70|134891524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5875|70|135202884 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5878|70|138002848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5879|70|134928616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5884|70|4571836 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6344|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6345|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6346|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6347|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6348|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6349|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6350|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6351|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6352|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6353|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6358|70|135058942 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6366|70|4490669 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6763|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6764|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6765|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6766|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6767|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6768|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6769|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6770|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6771|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6772|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6782|70|134514660 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6784|70|135869367 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7174|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7175|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7176|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7177|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7178|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7179|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7180|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7181|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7182|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7183|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7188|70|134514716 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7192|70|134813894 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7194|70|135488239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7196|70|136947495 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7523|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7524|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7525|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7526|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7527|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7528|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7529|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7530|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7531|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7532|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7535|70|136799079 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7539|70|135035883 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7543|70|4497788 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7544|70|31481328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7949|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7950|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7951|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7952|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7953|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7954|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.9526|70|94884366724572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.9602|70|93935795953116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.11784|70|94089056838084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.13563|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.13565|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.13566|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.15387|70|94922591840116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.15921|70|134514716 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16645|70|4212076 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16646|70|4212076 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16648|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16651|70|142468913 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16652|70|134698152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16653|70|134728030 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16654|70|137412196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.17900|70|135207764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.18651|70|134633080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23175|70|134519412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23330|70|4219948 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24959|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24970|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24981|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25514|70|4814432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25517|70|136199459 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25518|70|4205412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25522|70|6216072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25524|70|136080339 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25531|70|135084667 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25946|70|135897564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.27567|70|134534924 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.29431|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.29439|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.29440|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.30092|70|61374939 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.30120|70|1449459400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.31793|70|134860908 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1|70|140732766786352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.415|70|140721758066368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.440|70|140731499222656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.447|70|140732891572384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.921|70|140733613925856 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.951|70|140730624358624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.977|70|140724594581040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.979|70|140733472443312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.982|70|140733876277760 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.984|70|140720738944912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1038|70|140723899688240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1826|70|140722242821376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2851|70|140734565503824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2852|70|4292325408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2919|70|4294440720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.3773|70|140730125576880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4068|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4085|70|4293351552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4119|70|140725382887920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4122|70|140723316694560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4212|70|4287489568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4213|70|4293986800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4214|70|4289328080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4215|70|4294445600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4216|70|4291935968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4217|70|4289703376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4218|70|4292756496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4219|70|4294513744 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4220|70|4291117600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4221|70|4292853408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4222|70|4286991808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4224|70|4292363312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4226|70|4292525680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4434|70|4294832560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4435|70|4287015584 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4436|70|4288987344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4437|70|4293374224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4438|70|4293846800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4439|70|4291522960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4440|70|4289794976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4441|70|4290656304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4442|70|4291588800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4443|70|4293195920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4451|70|4293533520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4773|70|4294732944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4774|70|4288887968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4775|70|4290211680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4776|70|4294483632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4777|70|4291875184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4778|70|4294880304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4779|70|4288679264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4780|70|4287485568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4781|70|4291050064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4782|70|4293145024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4784|70|140730893949088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4786|70|4288706976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4787|70|4292692448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5137|70|4292674880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5138|70|4291111088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5139|70|4289792752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5140|70|4292719184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5141|70|4286929264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5142|70|4287505680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5143|70|4288357376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5144|70|4292965216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5145|70|4292314256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5146|70|4291626272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5148|70|4293754320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5151|70|4289031952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5155|70|4288322400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5159|70|4290637504 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5501|70|4286645984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5502|70|4289633248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5503|70|4289228672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5504|70|4294403584 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5505|70|4286594496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5506|70|4291186144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5507|70|4294411440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5508|70|4291913792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5509|70|4288302880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5510|70|4288457536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5516|70|140735832122880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5522|70|140729354123712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5861|70|4287136832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5862|70|4289574800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5863|70|4291120320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5864|70|4288947808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5865|70|4290187952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5866|70|4294212928 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5867|70|4293525072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5868|70|4292464192 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5869|70|4287035440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5870|70|4291962352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5872|70|4290437920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5875|70|4291297920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5878|70|4289252848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5879|70|4291265664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5884|70|140736910470784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6344|70|4287815904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6345|70|4294724528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6346|70|4290962032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6347|70|4293920736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6348|70|4292734080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6349|70|4289813888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6350|70|4293015152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6351|70|4290208032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6352|70|4292000672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6353|70|4291706944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6358|70|4293146112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6366|70|140728188951872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6763|70|4294749072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6764|70|4288063232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6765|70|4289995312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6766|70|4293695712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6767|70|4291392720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6768|70|4293346048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6769|70|4287458816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6770|70|4286902272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6771|70|4293823984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6772|70|4291579072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6782|70|4294855904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6784|70|4293534512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7174|70|4287874832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7175|70|4291819536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7176|70|4293358544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7177|70|4294355568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7178|70|4289270384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7179|70|4290711744 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7180|70|4293474160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7181|70|4289841920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7182|70|4286670624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7183|70|4287157424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7188|70|4287091520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7192|70|4294876576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7194|70|4288912144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7196|70|4291264960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7523|70|4293564304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7524|70|4290690160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7525|70|4286817680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7526|70|4291985984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7527|70|4289521808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7528|70|4290590064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7529|70|4289720960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7530|70|4290056128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7531|70|4291370368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7532|70|4291151152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7535|70|4293372912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7539|70|4293670848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7543|70|140732176812672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7544|70|140735184362704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7949|70|4287648544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7950|70|4294565152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7951|70|4290050880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7952|70|4294614016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7953|70|4291006016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7954|70|4293249616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.9526|70|140726487098160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.9602|70|140726560751680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.11784|70|140728703830320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.13563|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.13565|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.13566|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.15387|70|140724663555776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.15921|70|4286590512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16645|70|140725167277552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16646|70|140725725288096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16648|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16651|70|4292212240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16652|70|4286632176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16653|70|4287934624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16654|70|4290916928 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.17900|70|4289663520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.18651|70|4292495440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23175|70|4289708384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23330|70|140734326725328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24959|70|140724777098784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24970|70|140726176479568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24981|70|140723622028160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25514|70|140722861115168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25517|70|4289440944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25518|70|140722276450480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25522|70|140736876610384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25524|70|4288663248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25531|70|4288061104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25946|70|4290285840 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.27567|70|4292665696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.29431|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.29439|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.29440|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.30092|70|140721301273248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.30120|70|4291970640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.31793|70|4290252096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1|70|140732766782744 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.415|70|140721758064920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.440|70|140731499220544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.447|70|140732891569736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.921|70|140733613925384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.951|70|140730624339344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.977|70|140724594578896 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.979|70|140733472442376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.982|70|140733876276776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.984|70|140720738943960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1038|70|140723899687800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1826|70|140722242820352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2851|70|140734565502536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2852|70|4292322572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2919|70|4294440236 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.3773|70|140730125574280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4068|70|4286897148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4085|70|4293351080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4119|70|140725382877256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4122|70|140723316683896 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4212|70|4287488856 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4213|70|4293986088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4214|70|4289327368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4215|70|4294444888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4216|70|4291935256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4217|70|4289702664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4218|70|4292755784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4219|70|4294513032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4220|70|4291116888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4221|70|4292852696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4222|70|4286991448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4224|70|4292361580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4226|70|4292524976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4434|70|4294831848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4435|70|4287014872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4436|70|4288986632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4437|70|4293373512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4438|70|4293846088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4439|70|4291522248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4440|70|4289794264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4441|70|4290655592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4442|70|4291588088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4443|70|4293195208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4451|70|4293529688 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4773|70|4294732232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4774|70|4288887256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4775|70|4290210968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4776|70|4294482920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4777|70|4291874472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4778|70|4294879592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4779|70|4288678552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4780|70|4287484856 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4781|70|4291049352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4782|70|4293144312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4784|70|140730893947920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4786|70|4288703544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4787|70|4292687440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5137|70|4292674168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5138|70|4291110376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5139|70|4289792040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5140|70|4292718472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5141|70|4286928552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5142|70|4287504968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5143|70|4288356664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5144|70|4292964504 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5145|70|4292313544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5146|70|4291625560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5148|70|4293752012 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5151|70|4289030620 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5155|70|4288319948 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5159|70|4290636684 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5501|70|4286645272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5502|70|4289632536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5503|70|4289227960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5504|70|4294402872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5505|70|4286593784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5506|70|4291185432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5507|70|4294410728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5508|70|4291913080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5509|70|4288302168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5510|70|4288456824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5516|70|140735832122368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5522|70|140729354123128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5861|70|4287136120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5862|70|4289574088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5863|70|4291119608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5864|70|4288947096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5865|70|4290187240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5866|70|4294212216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5867|70|4293524360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5868|70|4292463480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5869|70|4287034728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5870|70|4291961640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5872|70|4290435364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5875|70|4291297404 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5878|70|4289251740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5879|70|4291264988 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5884|70|47493968305664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6344|70|4287815192 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6345|70|4294723816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6346|70|4290961320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6347|70|4293920024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6348|70|4292733368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6349|70|4289813176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6350|70|4293014440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6351|70|4290207320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6352|70|4291999960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6353|70|4291706232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6358|70|4293132552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6366|70|140728188949224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6763|70|4294748360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6764|70|4288062520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6765|70|4289994600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6766|70|4293695000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6767|70|4291392008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6768|70|4293345336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6769|70|4287458104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6770|70|4286901560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6771|70|4293823272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6772|70|4291578360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6782|70|4294848472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6784|70|4293532236 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7174|70|4287874120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7175|70|4291818824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7176|70|4293357832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7177|70|4294354856 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7178|70|4289269672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7179|70|4290711032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7180|70|4293473448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7181|70|4289841208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7182|70|4286669912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7183|70|4287156712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7188|70|4287074272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7192|70|4294875964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7194|70|4288909308 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7196|70|4291264492 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7523|70|4293563592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7524|70|4290689448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7525|70|4286816968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7526|70|4291985272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7527|70|4289521096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7528|70|4290589352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7529|70|4289720248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7530|70|4290055416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7531|70|4291369656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7532|70|4291150440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7535|70|4293370812 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7539|70|4293669900 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7543|70|140732176812040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7544|70|140735184345848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7949|70|4287647832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7950|70|4294564440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7951|70|4290050168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7952|70|4294613304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7953|70|4291005304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7954|70|4293248904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.9526|70|140726487097096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.9602|70|140726560750616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.11784|70|140728703829384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.13563|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.13565|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.13566|70|4286896944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.15387|70|140724663555288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.15921|70|4286573264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16645|70|140725167275880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16646|70|140725725286424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16648|70|4286896812 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16651|70|4292209804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16652|70|4286627228 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16653|70|4287929644 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16654|70|4290912492 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.17900|70|4289662832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.18651|70|4292494880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23175|70|4289703800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23330|70|140734326723760 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24959|70|140724777087416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24970|70|140726176468200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24981|70|140723622016792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24992|70|140733967253416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25514|70|140722861110416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25517|70|4289437348 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25518|70|140722276437528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25522|70|140736876606288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25524|70|4288658604 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25531|70|4288058524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25946|70|4290285236 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.27567|70|4292665240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.29431|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.29439|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.29440|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.30092|70|94558004171520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.30120|70|4291965888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.31793|70|4290242268 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1|70|47627409845491 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.415|70|47323536116979 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.440|70|46986588298131 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.447|70|47986283310323 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.921|70|47136718375795 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.951|70|47549278190867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.977|70|47093558488339 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.979|70|47979494984563 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.982|70|47837183442928 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.984|70|47780355079411 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1038|70|47972738981392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1826|70|47663091748115 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2851|70|47067289817072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2852|70|1457514643 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2919|70|1431925808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.3773|70|47160180738931 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4068|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4085|70|1432753200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4119|70|47897375533984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4122|70|47118343572384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4212|70|1432523824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4213|70|1432650800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4214|70|1432364080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4215|70|1432220720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4216|70|1432278064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4217|70|1432626224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4218|70|1432245296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4219|70|1432396848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4220|70|1432577072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4221|70|1432597552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4222|70|1432646704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4224|70|1432200240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4226|70|1432163376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4434|70|1432024112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4435|70|1432818736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4436|70|1432237104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4437|70|1432421424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4438|70|1432319024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4439|70|1432568880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4440|70|1432310832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4441|70|1432052784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4442|70|1432192048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4443|70|1432056880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4451|70|1432110128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4773|70|1432572976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4774|70|1432687664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4775|70|1432228912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4776|70|1432073264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4777|70|1431946288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4778|70|1432134704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4779|70|1432245296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4780|70|1432491056 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4781|70|1432372272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4782|70|1432003632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4784|70|47733961268235 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4786|70|1432507440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4787|70|1432499248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5137|70|1431807024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5138|70|1432007728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5139|70|1432310832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5140|70|1432171568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5141|70|1431843888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5142|70|1432593456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5143|70|1431921712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5144|70|1432466480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5145|70|1432716336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5146|70|1432806448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5148|70|1457031315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5151|70|1434097811 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5155|70|1457875091 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5159|70|1432310832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5501|70|1431938096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5502|70|1432286256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5503|70|1431925808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5504|70|1432204336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5505|70|1432011824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5506|70|1432425520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5507|70|1432020016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5508|70|1431999536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5509|70|1432548400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5510|70|1432708144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5516|70|47642156997907 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5522|70|47306113899379 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5861|70|1432724528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5862|70|1431852080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5863|70|1432400944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5864|70|1432110128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5865|70|1431798832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5866|70|1432618032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5867|70|1431790640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5868|70|1431880752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5869|70|1432298544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5870|70|1431974960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5872|70|1431987248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5875|70|1432204336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5878|70|1545078931 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5879|70|1459964051 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5884|70|47493950430219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6344|70|1431815216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6345|70|1431974960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6346|70|1432425520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6347|70|1432679472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6348|70|1431946288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6349|70|1432470576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6350|70|1432040496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6351|70|1432618032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6352|70|1432577072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6353|70|1432204336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6358|70|1432749104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6366|70|47119478271219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6763|70|1431901232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6764|70|1431938096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6765|70|1431794736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6766|70|1432106032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6767|70|1432757296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6768|70|1431819312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6769|70|1432118320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6770|70|1432835120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6771|70|1431901232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6772|70|1432331312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6782|70|1432769584 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6784|70|1458915475 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7174|70|1431905328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7175|70|1432138800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7176|70|1432118320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7177|70|1431962672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7178|70|1432794160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7179|70|1432171568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7180|70|1432413232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7181|70|1432507440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7182|70|1432663088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7183|70|1432532016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7188|70|1432269872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7192|70|1459021971 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7194|70|1458845843 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7196|70|1432020016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7523|70|1432593456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7524|70|1432818736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7525|70|1432671280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7526|70|1431938096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7527|70|1432241200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7528|70|1432495152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7529|70|1432802352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7530|70|1432110128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7531|70|1431999536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7532|70|1432003632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7535|70|1454700691 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7539|70|1480325267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7543|70|47235317930867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7544|70|48010185595881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7949|70|1432200240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7950|70|1432626224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7951|70|1431839792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7952|70|1432568880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7953|70|1432683568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7954|70|1432749104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.9526|70|47405977721715 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.9602|70|47670331878259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.11784|70|47963304819740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.13563|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.13565|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.13566|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.15387|70|47203279956851 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.15921|70|1432446000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16645|70|47677498370976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16646|70|47021884324768 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16648|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16651|70|1432269872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16652|70|1432007728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16653|70|1432736816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16654|70|1432335408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.17900|70|1432658992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.18651|70|1432683568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23175|70|1432167472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23330|70|47740347538323 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24981|70|47780493475824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24992|70|47661043736560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25004|70|47149384757232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25514|70|47796091816971 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25517|70|1431888944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25518|70|47518685990800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25522|70|47944454302731 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25524|70|1457707155 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25531|70|1457100947 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25946|70|1432699952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.27567|70|1432585264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.29431|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.29439|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.29440|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.30092|70|47952520835085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.30120|70|1432470576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.31793|70|1458043027 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24981|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24992|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25004|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1|70|671173123 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.415|70|18946 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.447|70|2147221247 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2852|70|2560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4085|70|65536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4451|70|524288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7196|70|16416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.11784|70|2147196665 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16648|70|16896 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.18651|70|16390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24981|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24992|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25004|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.3|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.8|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.9|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.10|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.11|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.12|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.13|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.14|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.18|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.19|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.20|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.21|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.22|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.26|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.27|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.34|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.35|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.36|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.49|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.51|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.52|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.53|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.55|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.68|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.99|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.219|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.220|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.221|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.286|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.287|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.288|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.290|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.292|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.293|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.295|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.298|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.299|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.300|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.302|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.304|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.307|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.310|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.313|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.315|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.317|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.318|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.352|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.353|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.381|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.382|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.415|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.440|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.447|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.885|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.886|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.887|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.905|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.906|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.907|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.910|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.911|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.921|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.928|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.929|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.951|70|2147136766 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.977|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.979|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.982|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.984|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1130|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1138|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1139|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1140|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1142|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1143|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1212|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1222|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1826|70|4198400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2031|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2851|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2852|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2919|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.3773|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4068|70|16781312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4085|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4119|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4122|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4212|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4213|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4214|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4215|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4216|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4217|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4218|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4219|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4220|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4221|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4222|70|3676676 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4224|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4226|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4434|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4435|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4436|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4437|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4438|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4439|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4440|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4441|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4442|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4443|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4451|70|14848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4773|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4774|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4775|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4776|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4777|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4778|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4779|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4780|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4781|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4782|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4784|70|20451328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4786|70|4102 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4787|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5137|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5138|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5139|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5140|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5141|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5142|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5143|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5144|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5145|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5146|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5148|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5151|70|4097 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5155|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5159|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5501|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5502|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5503|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5504|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5505|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5506|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5507|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5508|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5509|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5510|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5516|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5522|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5861|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5862|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5863|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5864|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5865|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5866|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5867|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5868|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5869|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5870|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5872|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5878|70|3676676 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5879|70|3674116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5884|70|4108 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6344|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6345|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6346|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6347|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6348|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6349|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6350|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6351|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6352|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6353|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6358|70|3674116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6366|70|4097 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6763|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6764|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6765|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6766|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6767|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6768|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6769|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6770|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6771|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6772|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6782|70|16781318 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6784|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7174|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7175|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7176|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7177|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7178|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7179|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7180|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7181|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7182|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7183|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7188|70|4098 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7192|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7194|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7196|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7523|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7524|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7525|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7526|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7527|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7528|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7529|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7530|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7531|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7532|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7535|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7539|70|6659 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7543|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7544|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7949|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7950|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7951|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7952|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7953|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7954|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.13563|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.13565|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.13566|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.14596|70|3676676 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.15387|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.15921|70|4098 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16645|70|16781825 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16646|70|16781825 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16648|70|16781312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16651|70|16781312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.17900|70|16781312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.18651|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.21085|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23175|70|3873431 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23330|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23416|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23554|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23740|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24265|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24341|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24415|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24648|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24829|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24868|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24981|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24992|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25004|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25514|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25517|70|69632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25518|70|4103 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25522|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25524|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25531|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25946|70|4097 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.27567|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.29431|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.29439|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.29440|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.29574|70|4102 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.30092|70|4097 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.30120|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.31793|70|4198400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1|70|1260 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.415|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.440|70|24583 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.921|70|24583 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.951|70|84481 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.977|70|16385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.979|70|16391 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.982|70|18947 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1038|70|2560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1826|70|90115 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2851|70|81923 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2852|70|268454400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2919|70|84481 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.3773|70|81925 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4068|70|134235883 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4085|70|16385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4212|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4213|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4214|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4215|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4216|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4217|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4218|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4219|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4220|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4221|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4222|70|16387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4224|70|158215 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4226|70|545890 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4434|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4435|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4436|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4437|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4438|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4439|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4440|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4441|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4442|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4443|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4451|70|81926 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4773|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4774|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4775|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4776|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4777|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4778|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4779|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4780|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4781|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4782|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4784|70|12668671 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4787|70|16385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5137|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5138|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5139|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5140|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5141|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5142|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5143|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5144|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5145|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5146|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5148|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5151|70|25249022 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5155|70|268517379 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5159|70|512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5501|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5502|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5503|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5504|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5505|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5506|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5507|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5508|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5509|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5510|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5516|70|65536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5522|70|16386 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5861|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5862|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5863|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5864|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5865|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5866|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5867|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5868|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5869|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5870|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5872|70|16897 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5875|70|16422 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5878|70|16387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5879|70|84483 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5884|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6344|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6345|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6346|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6347|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6348|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6349|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6350|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6351|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6352|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6353|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6358|70|84483 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6366|70|18950 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6763|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6764|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6765|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6766|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6767|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6768|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6769|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6770|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6771|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6772|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6784|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7174|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7175|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7176|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7177|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7178|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7179|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7180|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7181|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7182|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7183|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7188|70|16796877 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7194|70|25249022 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7523|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7524|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7525|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7526|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7527|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7528|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7529|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7530|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7531|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7532|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7535|70|81923 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7539|70|25257212 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7543|70|16387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7544|70|16899 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7949|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7950|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7951|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7952|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7953|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7954|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.11784|70|16390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.13563|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.13565|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.13566|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.15387|70|19015 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.15921|70|16796877 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16648|70|134309611 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16651|70|512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16652|70|4608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16653|70|4608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16654|70|4608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.17900|70|16387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.18651|70|16390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23330|70|25183999 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24981|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24992|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25004|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25514|70|25249534 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25517|70|16423 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25518|70|81952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25522|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25524|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25531|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25946|70|25251582 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.27567|70|21610 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.29431|70|201344745 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.29439|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.29440|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.30092|70|25185534 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.30120|70|84519 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.31793|70|16386 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2|70|18446744071579569973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.3|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.8|70|18446744071580134834 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.9|70|18446744071580135497 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.10|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.11|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.12|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.13|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.14|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.18|70|18446744071583417901 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.19|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.20|70|18446744071580084844 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.21|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.22|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.26|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.27|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.34|70|18446744071580525455 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.35|70|18446744071580804922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.36|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.49|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.51|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.52|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.53|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.55|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.68|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.99|70|18446744071579988404 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.219|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.220|70|18446744071583547891 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.221|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.286|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.287|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.288|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.290|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.292|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.293|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.295|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.298|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.299|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.300|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.302|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.304|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.307|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.310|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.313|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.315|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.317|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.318|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.352|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.353|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.381|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.382|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.415|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.440|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.447|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.885|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.886|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.887|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.905|70|18446744072101159257 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.906|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.907|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.910|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.911|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.921|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.928|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.929|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.951|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.977|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.979|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.982|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.984|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1038|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1130|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1138|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1139|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1140|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1142|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1143|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1212|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1222|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1826|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2031|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2851|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2852|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2919|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.3773|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4068|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4085|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4119|70|18446744071583072796 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4122|70|18446744071583072796 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4212|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4213|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4214|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4215|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4216|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4217|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4218|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4219|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4220|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4221|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4222|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4224|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4226|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4434|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4435|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4436|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4437|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4438|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4439|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4440|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4441|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4442|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4443|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4451|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4773|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4774|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4775|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4776|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4777|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4778|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4779|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4780|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4781|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4782|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4784|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4786|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4787|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5137|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5138|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5139|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5140|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5141|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5142|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5143|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5144|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5145|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5146|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5148|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5151|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5155|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5159|70|18446744071585490473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5501|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5502|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5503|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5504|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5505|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5506|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5507|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5508|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5509|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5510|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5516|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5522|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5861|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5862|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5863|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5864|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5865|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5866|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5867|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5868|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5869|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5870|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5872|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5875|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5878|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5879|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5884|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6344|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6345|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6346|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6347|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6348|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6349|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6350|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6351|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6352|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6353|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6366|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6763|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6764|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6765|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6766|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6767|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6768|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6769|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6770|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6771|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6772|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6782|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6784|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7174|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7175|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7176|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7177|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7178|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7179|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7180|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7181|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7182|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7183|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7188|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7192|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7194|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7196|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7523|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7524|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7525|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7526|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7527|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7528|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7529|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7530|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7531|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7532|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7535|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7539|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7543|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7544|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7949|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7950|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7951|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7952|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7953|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7954|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.9526|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.9602|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.11784|70|18446744071579418806 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.13563|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.13565|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.13566|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.14596|70|18446744071579421451 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.15387|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.15921|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16645|70|18446744071581011216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16646|70|18446744071581011216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16648|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16651|70|18446744071584672976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16652|70|18446744071584672976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16653|70|18446744071584672976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16654|70|18446744071584672976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.17900|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.18651|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.21085|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23175|70|18446744071585490473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23330|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23416|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23554|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23740|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24265|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24341|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24415|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24648|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24829|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24868|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24981|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24992|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25004|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25514|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25517|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25518|70|18446744071579500172 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25522|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25524|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25531|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25946|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.27567|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.29431|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.29439|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.29440|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.29574|70|18446744071579421451 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.30092|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.30120|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.31793|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25004|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25051|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25063|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25073|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25051|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25063|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25073|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.3|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.8|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.9|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.10|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.11|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.12|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.13|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.14|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.18|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.19|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.20|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.21|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.22|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.26|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.27|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.34|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.35|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.36|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.49|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.51|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.52|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.53|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.55|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.68|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.99|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.219|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.220|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.221|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.286|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.287|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.288|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.290|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.292|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.293|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.295|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.298|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.299|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.300|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.302|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.304|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.307|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.310|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.313|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.315|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.317|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.318|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.352|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.353|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.381|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.382|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.415|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.440|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.447|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.885|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.886|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.887|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.905|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.906|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.907|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.910|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.911|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.921|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.928|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.929|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.951|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.977|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.979|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.982|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.984|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1038|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1130|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1138|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1139|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1140|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1142|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1143|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1212|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1222|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1826|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2031|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2851|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2852|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2919|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.3773|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4068|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4085|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4119|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4122|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4212|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4213|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4214|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4215|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4216|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4217|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4218|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4219|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4220|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4221|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4222|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4224|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4226|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4434|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4435|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4436|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4437|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4438|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4439|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4440|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4441|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4442|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4443|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4451|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4773|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4774|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4775|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4776|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4777|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4778|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4779|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4780|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4781|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4782|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4784|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4786|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4787|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5137|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5138|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5139|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5140|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5141|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5142|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5143|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5144|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5145|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5146|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5148|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5151|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5155|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5159|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5501|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5502|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5503|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5504|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5505|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5506|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5507|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5508|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5509|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5510|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5516|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5522|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5861|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5862|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5863|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5864|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5865|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5866|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5867|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5868|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5869|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5870|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5872|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5875|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5878|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5879|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5884|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6344|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6345|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6346|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6347|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6348|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6349|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6350|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6351|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6352|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6353|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6358|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6366|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6763|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6764|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6765|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6766|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6767|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6768|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6769|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6770|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6771|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6772|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6782|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6784|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7174|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7175|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7176|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7177|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7178|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7179|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7180|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7181|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7182|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7183|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7188|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7192|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7194|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7196|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7523|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7524|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7525|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7526|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7527|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7528|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7529|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7530|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7531|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7532|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7535|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7539|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7543|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7544|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7949|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7950|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7951|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7952|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7953|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7954|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.9526|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.9602|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.11784|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.13563|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.13565|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.13566|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.14596|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.15387|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.15921|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16645|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16646|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16648|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16651|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16652|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16653|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16654|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.17900|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.18651|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.21085|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23175|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23330|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23416|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23740|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24265|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24341|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24648|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24829|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24868|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25050|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25051|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25063|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25073|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25514|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25517|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25518|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25522|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25524|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25531|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25946|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.27567|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.29431|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.29439|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.29440|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.29574|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.30092|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.30120|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.31793|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7|66|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.11|66|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.12|66|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.13|66|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25050|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25051|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25063|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25073|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.11|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.12|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.13|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25050|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25051|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25063|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25073|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1|66|12137 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.415|66|8287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.440|66|34477 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.447|66|11532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.921|66|1083 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.951|66|13925 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.977|66|15001 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.979|66|1090 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.982|66|5372 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.984|66|6072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1038|66|2110 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1826|66|65757 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2851|66|31569 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2852|66|21191 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2919|66|22545 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.3773|66|31345 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4068|66|30088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4085|66|569 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4119|66|27516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4122|66|27516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4212|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4213|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4214|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4215|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4216|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4217|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4218|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4219|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4220|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4221|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4222|66|13339 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4224|66|6453 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4226|66|7336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4434|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4435|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4436|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4437|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4438|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4439|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4440|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4441|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4442|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4443|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4451|66|70916 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4773|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4774|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4775|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4776|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4777|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4778|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4779|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4780|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4781|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4782|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4784|66|15267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4786|66|9702 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4787|66|9478 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5137|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5138|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5139|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5140|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5141|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5142|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5143|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5144|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5145|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5146|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5148|66|8180 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5151|66|2467 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5155|66|8228 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5159|66|7480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5501|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5502|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5503|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5504|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5505|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5506|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5507|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5508|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5509|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5510|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5516|66|25045 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5522|66|32226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5861|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5862|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5863|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5864|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5865|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5866|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5867|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5868|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5869|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5870|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5872|66|37363 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5875|66|10890 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5878|66|64230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5879|66|12028 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5884|66|17991 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6344|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6345|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6346|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6347|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6348|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6349|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6350|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6351|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6352|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6353|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6358|66|24890 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6366|66|24384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6763|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6764|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6765|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6766|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6767|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6768|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6769|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6770|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6771|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6772|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6782|66|4308 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6784|66|33117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7174|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7175|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7176|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7177|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7178|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7179|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7180|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7181|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7182|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7183|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7188|66|117299 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7192|66|8246 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7194|66|9547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7196|66|14416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7523|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7524|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7525|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7526|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7527|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7528|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7529|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7530|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7531|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7532|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7535|66|7475 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7539|66|20740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7543|66|37978 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7544|66|311644 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7949|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7950|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7951|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7952|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7953|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7954|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.9526|66|25751 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.9602|66|25751 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.11784|66|28738 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.13563|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.13565|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.13566|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.15387|66|12255 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.15921|66|83325 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16645|66|1615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16646|66|1615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16648|66|30088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16651|66|15763 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16652|66|1080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16653|66|1022 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16654|66|77804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.17900|66|16397 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.18651|66|94547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23175|66|2676 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23330|66|34804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25050|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25051|66|1619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25063|66|1619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25073|66|1619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25514|66|32202 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25517|66|13582 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25518|66|1082 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25522|66|41122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25524|66|8455 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25531|66|8206 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25946|66|14750 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.27567|66|1558 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.29431|66|30921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.29439|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.29440|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.30092|66|1573678 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.30120|66|3353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.31793|66|10555 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1|70|1125 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.415|70|488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.440|70|55 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.447|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.921|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.951|70|123 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.977|70|260 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.979|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.982|70|111 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.984|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1038|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1826|70|1320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2851|70|109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2852|70|3804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2919|70|22253 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.3773|70|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4068|70|1705 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4085|70|47 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4119|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4122|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4212|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4213|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4214|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4215|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4216|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4217|70|78 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4218|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4219|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4220|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4221|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4222|70|3929 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4224|70|637 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4226|70|1015 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4434|70|78 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4435|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4436|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4437|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4438|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4439|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4440|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4441|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4442|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4443|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4451|70|4040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4773|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4774|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4775|70|95 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4776|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4777|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4778|70|77 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4779|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4780|70|66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4781|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4782|70|91 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4784|70|190 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4786|70|766 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4787|70|1263 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5137|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5138|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5139|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5140|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5141|70|89 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5142|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5143|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5144|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5145|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5146|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5148|70|4150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5151|70|258 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5155|70|4109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5159|70|4197 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5501|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5502|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5503|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5504|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5505|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5506|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5507|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5508|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5509|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5510|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5516|70|1063 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5522|70|1109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5861|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5862|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5863|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5864|70|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5865|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5866|70|77 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5867|70|96 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5868|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5869|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5870|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5872|70|5259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5875|70|4315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5878|70|23315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5879|70|5556 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5884|70|96 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6344|70|82 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6345|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6346|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6347|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6348|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6349|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6350|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6351|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6352|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6353|70|97 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6358|70|3736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6366|70|208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6763|70|82 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6764|70|89 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6765|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6766|70|89 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6767|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6768|70|80 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6769|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6770|70|85 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6771|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6772|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6782|70|1967 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6784|70|4492 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7174|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7175|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7176|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7177|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7178|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7179|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7180|70|80 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7181|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7182|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7183|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7188|70|42773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7192|70|8239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7194|70|4304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7196|70|3553 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7523|70|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7524|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7525|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7526|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7527|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7528|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7529|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7530|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7531|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7532|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7535|70|3938 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7539|70|20451 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7543|70|475 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7544|70|5055 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7949|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7950|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7951|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7952|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7953|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7954|70|82 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.9526|70|224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.9602|70|140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.11784|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.13563|70|1489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.13565|70|1447 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.13566|70|1266 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.15387|70|487 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.15921|70|56510 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16645|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16646|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16648|70|786 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16651|70|4634 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16652|70|314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16653|70|360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16654|70|4274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.17900|70|364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.18651|70|23290 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23175|70|300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23330|70|8613 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25096|70|211 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25182|70|211 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25195|70|210 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25514|70|5442 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25517|70|6281 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25518|70|146 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25522|70|6314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25524|70|6365 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25531|70|6296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25946|70|6462 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.27567|70|307 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.29431|70|3636 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.29439|70|2009 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.29440|70|2055 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.30092|70|27005 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.30120|70|283 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.31793|70|5950 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1|70|612 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.415|70|436 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.440|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.447|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.951|70|89 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.977|70|171 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.979|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.982|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.984|70|205 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1826|70|693 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2851|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2852|70|3545 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2919|70|19269 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.3773|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4068|70|1000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4085|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4119|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4122|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4212|70|48 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4213|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4214|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4215|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4216|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4217|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4218|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4219|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4220|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4221|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4222|70|3890 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4224|70|631 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4226|70|988 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4434|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4435|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4436|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4437|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4438|70|62 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4439|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4440|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4441|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4442|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4443|70|37 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4451|70|3926 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4773|70|33 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4774|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4775|70|90 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4776|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4777|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4778|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4779|70|58 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4780|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4781|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4782|70|85 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4784|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4786|70|740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4787|70|853 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5137|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5138|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5139|70|37 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5140|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5141|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5142|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5143|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5144|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5145|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5146|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5148|70|3611 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5151|70|227 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5155|70|3619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5159|70|3441 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5501|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5502|70|77 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5503|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5504|70|65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5505|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5506|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5507|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5508|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5509|70|65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5510|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5516|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5522|70|187 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5861|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5862|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5863|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5864|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5865|70|93 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5866|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5867|70|92 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5868|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5869|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5870|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5872|70|4931 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5875|70|3650 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5878|70|5279 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5879|70|833 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5884|70|59 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6344|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6345|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6346|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6347|70|65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6348|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6349|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6350|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6351|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6352|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6353|70|92 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6358|70|2569 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6366|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6763|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6764|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6765|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6766|70|80 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6767|70|58 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6768|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6769|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6770|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6771|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6772|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6782|70|754 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6784|70|3760 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7174|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7175|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7176|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7177|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7178|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7179|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7180|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7181|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7182|70|30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7183|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7188|70|559 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7192|70|7777 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7194|70|3784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7196|70|3553 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7523|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7524|70|65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7525|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7526|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7527|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7528|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7529|70|28 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7530|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7531|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7532|70|59 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7535|70|3431 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7539|70|17885 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7543|70|220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7544|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7949|70|62 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7950|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7951|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7952|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7953|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7954|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.9526|70|160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.9602|70|93 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.11784|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.13563|70|436 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.13565|70|414 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.13566|70|309 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.15387|70|288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.15921|70|450 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16645|70|45 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16646|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16648|70|103 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16651|70|3772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16652|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16653|70|284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16654|70|3889 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.17900|70|289 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.18651|70|4064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23175|70|197 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23330|70|2713 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25096|70|177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25182|70|177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25195|70|177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25514|70|145 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25517|70|3867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25518|70|121 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25522|70|874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25524|70|3662 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25531|70|3619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25946|70|4008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.27567|70|164 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.29431|70|834 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.29439|70|567 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.29440|70|612 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.30092|70|18904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.30120|70|130 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.31793|70|3635 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1|70|326 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.415|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.440|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.447|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.921|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.951|70|28 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.977|70|102 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.979|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.982|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.984|70|130 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1038|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1826|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2851|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2852|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2919|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.3773|70|201 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4068|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4085|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4119|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4122|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4212|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4213|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4214|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4215|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4216|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4217|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4218|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4219|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4220|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4221|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4222|70|115 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4224|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4226|70|42 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4434|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4435|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4436|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4437|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4438|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4439|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4440|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4441|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4442|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4443|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4451|70|360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4773|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4774|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4775|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4776|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4777|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4778|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4779|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4780|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4781|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4782|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4784|70|127 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4786|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4787|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5137|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5138|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5139|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5140|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5141|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5142|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5143|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5144|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5145|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5146|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5148|70|155 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5151|70|1340 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5155|70|140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5159|70|58 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5501|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5502|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5503|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5504|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5505|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5506|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5507|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5508|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5509|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5510|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5516|70|47 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5522|70|181 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5861|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5862|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5863|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5864|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5865|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5866|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5867|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5868|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5869|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5870|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5872|70|93 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5875|70|169 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5878|70|853 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5879|70|102 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5884|70|93 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6344|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6345|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6346|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6347|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6348|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6349|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6350|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6351|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6352|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6353|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6358|70|134 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6366|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6763|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6764|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6765|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6766|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6767|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6768|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6769|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6770|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6771|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6772|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6782|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6784|70|332 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7174|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7175|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7176|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7177|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7178|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7179|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7180|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7181|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7182|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7183|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7188|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7192|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7194|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7196|70|595 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7523|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7524|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7525|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7526|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7527|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7528|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7529|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7530|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7531|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7532|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7535|70|559 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7539|70|128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7543|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7544|70|6662 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7949|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7950|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7951|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7952|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7953|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7954|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.9526|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.9602|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.11784|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.13563|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.13565|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.13566|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.15387|70|163 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.15921|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16645|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16646|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16648|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16651|70|1943 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16652|70|46 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16653|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16654|70|708 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.17900|70|170 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.18651|70|30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23175|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23330|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25096|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25182|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25195|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25206|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25514|70|152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25517|70|412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25518|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25522|70|494 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25524|70|383 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25531|70|140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25946|70|339 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.27567|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.29431|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.29439|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.29440|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.30092|70|13961 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.30120|70|247 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.31793|70|86 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25096|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25195|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25206|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25096|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25195|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25206|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25096|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25195|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25206|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1|66|48548 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.415|66|33148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.440|66|137908 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.447|66|46128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.921|66|4332 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.951|66|55700 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.977|66|60004 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.979|66|4360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.982|66|21488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.984|66|24288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1038|66|8440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1826|66|263028 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2851|66|126276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2852|66|84764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2919|66|90180 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.3773|66|125380 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4068|66|120352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4085|66|2276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4119|66|110064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4122|66|110064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4212|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4213|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4214|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4215|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4216|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4217|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4218|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4219|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4220|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4221|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4222|66|53356 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4224|66|25812 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4226|66|29344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4434|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4435|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4436|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4437|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4438|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4439|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4440|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4441|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4442|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4443|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4451|66|283664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4773|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4774|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4775|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4776|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4777|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4778|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4779|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4780|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4781|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4782|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4784|66|61068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4786|66|38808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4787|66|37912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5137|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5138|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5139|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5140|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5141|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5142|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5143|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5144|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5145|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5146|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5148|66|32720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5151|66|9868 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5155|66|32912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5159|66|29920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5501|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5502|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5503|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5504|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5505|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5506|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5507|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5508|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5509|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5510|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5516|66|100180 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5522|66|128904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5861|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5862|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5863|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5864|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5865|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5866|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5867|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5868|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5869|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5870|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5872|66|149452 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5875|66|43560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5878|66|256788 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5879|66|48112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5884|66|71964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6344|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6345|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6346|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6347|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6348|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6349|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6350|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6351|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6352|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6353|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6358|66|99556 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6366|66|97536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6763|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6764|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6765|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6766|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6767|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6768|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6769|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6770|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6771|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6772|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6782|66|17232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6784|66|132468 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7174|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7175|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7176|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7177|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7178|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7179|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7180|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7181|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7182|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7183|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7188|66|469196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7192|66|32984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7194|66|38188 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7196|66|57664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7523|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7524|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7525|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7526|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7527|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7528|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7529|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7530|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7531|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7532|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7535|66|29900 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7539|66|82960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7543|66|151912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7544|66|1246576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7949|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7950|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7951|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7952|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7953|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7954|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.9526|66|103004 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.9602|66|103004 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.11784|66|114952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.13563|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.13565|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.13566|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.15387|66|49020 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.15921|66|333300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16645|66|6460 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16646|66|6460 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16648|66|120352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16651|66|63052 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16652|66|4320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16653|66|4088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16654|66|311216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.17900|66|65588 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.18651|66|378188 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23175|66|10704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23330|66|139216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25050|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25210|66|6028 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25217|66|6476 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25228|66|6476 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25514|66|128808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25517|66|54328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25518|66|4328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25522|66|164484 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25524|66|33820 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25531|66|32824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25946|66|59000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.27567|66|6232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.29431|66|123684 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.29439|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.29440|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.30092|66|6294712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.30120|66|13412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.31793|66|42220 +1.3.6.1.4.1.3375.2.1.12.2.1.0|2|3 +1.3.6.1.4.1.3375.2.1.12.2.2.1.1.4.100.97.116.97|4|data +1.3.6.1.4.1.3375.2.1.12.2.2.1.1.7.99.111.110.116.114.111.108|4|control +1.3.6.1.4.1.3375.2.1.12.2.2.1.1.8.97.110.97.108.121.115.105.115|4|analysis +1.3.6.1.4.1.3375.2.1.12.2.2.1.2.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.2.7.99.111.110.116.114.111.108|66|2 +1.3.6.1.4.1.3375.2.1.12.2.2.1.2.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.3.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.3.7.99.111.110.116.114.111.108|66|5 +1.3.6.1.4.1.3375.2.1.12.2.2.1.3.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.4.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.4.7.99.111.110.116.114.111.108|66|5 +1.3.6.1.4.1.3375.2.1.12.2.2.1.4.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.5.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.5.7.99.111.110.116.114.111.108|66|7 +1.3.6.1.4.1.3375.2.1.12.2.2.1.5.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.6.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.6.7.99.111.110.116.114.111.108|66|6 +1.3.6.1.4.1.3375.2.1.12.2.2.1.6.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.13.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.14.1.1.0|2|6 +1.3.6.1.4.1.3375.2.1.14.1.2.0|4|Standalone +1.3.6.1.4.1.3375.2.1.14.1.3.0|2|0 +1.3.6.1.4.1.3375.2.1.14.1.4.0|4| +1.3.6.1.4.1.3375.2.1.14.2.1.0|2|1 +1.3.6.1.4.1.3375.2.1.14.2.2.1.1.1|2|1 +1.3.6.1.4.1.3375.2.1.14.2.2.1.2.1|4x|4f7074696f6e616c20616374696f6e3a2041646420612064657669636520746f2074686520747275737420646f6d61696e +1.3.6.1.4.1.3375.2.1.14.3.1.0|2|4 +1.3.6.1.4.1.3375.2.1.14.3.2.0|4|ACTIVE +1.3.6.1.4.1.3375.2.1.14.3.3.0|2|0 +1.3.6.1.4.1.3375.2.1.14.3.4.0|4x|312f3120616374697665 +1.3.6.1.4.1.3375.2.1.14.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.14.4.2.1.1.1|2|1 +1.3.6.1.4.1.3375.2.1.14.4.2.1.2.1|4x|61637469766520666f72202f436f6d6d6f6e2f747261666669632d67726f75702d31 +1.3.6.1.4.1.3375.2.1.14.5.1.0|2|1 +1.3.6.1.4.1.3375.2.1.14.5.2.1.1.23.47.67.111.109.109.111.110.47.116.114.97.102.102.105.99.45.103.114.111.117.112.45.49.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|2f436f6d6d6f6e2f747261666669632d67726f75702d31 +1.3.6.1.4.1.3375.2.1.14.5.2.1.2.23.47.67.111.109.109.111.110.47.116.114.97.102.102.105.99.45.103.114.111.117.112.45.49.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|2f436f6d6d6f6e2f626967697031 +1.3.6.1.4.1.3375.2.1.14.5.2.1.3.23.47.67.111.109.109.111.110.47.116.114.97.102.102.105.99.45.103.114.111.117.112.45.49.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|4 +1.3.6.1.4.1.3375.2.1.15.1.1.0|2|4 +1.3.6.1.4.1.3375.2.1.15.1.2.1.1.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.1.15.1.2.1.1.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f66352d6972756c652e637274 +1.3.6.1.4.1.3375.2.1.15.1.2.1.1.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.1.15.1.2.1.1.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f66352d63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.1.15.1.2.1.2.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|4| +1.3.6.1.4.1.3375.2.1.15.1.2.1.2.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|4| +1.3.6.1.4.1.3375.2.1.15.1.2.1.2.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|4| +1.3.6.1.4.1.3375.2.1.15.1.2.1.2.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|4| +1.3.6.1.4.1.3375.2.1.15.1.2.1.3.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|66|0 +1.3.6.1.4.1.3375.2.1.15.1.2.1.3.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|66|0 +1.3.6.1.4.1.3375.2.1.15.1.2.1.3.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|66|0 +1.3.6.1.4.1.3375.2.1.15.1.2.1.3.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|66|0 +1.3.6.1.4.1.3375.2.1.15.1.2.1.4.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|4x|5365702032372030393a31313a3137203230323920474d54 +1.3.6.1.4.1.3375.2.1.15.1.2.1.4.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|4x|4a756c2031382032313a30303a3133203230323720474d54 +1.3.6.1.4.1.3375.2.1.15.1.2.1.4.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|4465632033312032333a35393a3539203230323920474d54 +1.3.6.1.4.1.3375.2.1.15.1.2.1.4.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|4465632020372031373a35353a3534203230333020474d54 +1.3.6.1.4.1.3375.2.1.15.1.2.1.5.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|70|1885194677 +1.3.6.1.4.1.3375.2.1.15.1.2.1.5.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|70|1815944413 +1.3.6.1.4.1.3375.2.1.15.1.2.1.5.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|70|1893455999 +1.3.6.1.4.1.3375.2.1.15.1.2.1.5.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|70|1922896554 +1.3.6.1.4.1.3375.2.1.15.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.4.2.0|2|0 +1.3.6.1.4.1.3375.2.1.15.5.1.0|2|4 +1.3.6.1.4.1.3375.2.1.15.5.2.1.1.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.1.15.5.2.1.1.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f66352d6972756c652e637274 +1.3.6.1.4.1.3375.2.1.15.5.2.1.1.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.1.15.5.2.1.1.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f66352d63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.1.15.5.2.1.2.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.2.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.2.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.2.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.3.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.3.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.3.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.3.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.7.2.0|2|0 +1.3.6.1.4.1.3375.2.1.15.8.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.9.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.9.2.0|2|0 +1.3.6.1.4.1.3375.2.2.1.1.1.0|66|0 +1.3.6.1.4.1.3375.2.2.1.1.2.0|2|1 +1.3.6.1.4.1.3375.2.2.1.1.3.0|2|0 +1.3.6.1.4.1.3375.2.2.1.1.4.0|66|2048 +1.3.6.1.4.1.3375.2.2.1.1.5.0|2|0 +1.3.6.1.4.1.3375.2.2.1.1.6.0|4x|3a3a +1.3.6.1.4.1.3375.2.2.1.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.1.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.1.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.1.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.1.4.2.0|2|0 +1.3.6.1.4.1.3375.2.2.1.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.1.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.3.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.3.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.3.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.4.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.4.1.1|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.1.1|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.1.2|2|16 +1.3.6.1.4.1.3375.2.2.4.1.2.1.1.3|2|1 +1.3.6.1.4.1.3375.2.2.4.1.2.1.2.1|4x|6275742062757420616374656420717561696e746c79207468656972206163746564206b65707420717561696e746c79 +1.3.6.1.4.1.3375.2.2.4.1.2.1.2.2|4x|62757420627574 +1.3.6.1.4.1.3375.2.2.4.1.2.1.2.3|4|forward +1.3.6.1.4.1.3375.2.2.4.1.2.1.3.1|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.3.2|2|30 +1.3.6.1.4.1.3375.2.2.4.1.2.1.3.3|2|20 +1.3.6.1.4.1.3375.2.2.4.1.2.1.4.1|2|30 +1.3.6.1.4.1.3375.2.2.4.1.2.1.4.2|2|28 +1.3.6.1.4.1.3375.2.2.4.1.2.1.4.3|2|19 +1.3.6.1.4.1.3375.2.2.4.1.2.1.5.1|2|15 +1.3.6.1.4.1.3375.2.2.4.1.2.1.5.2|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.5.3|2|31 +1.3.6.1.4.1.3375.2.2.4.1.2.1.6.1|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.6.2|2|23 +1.3.6.1.4.1.3375.2.2.4.1.2.1.6.3|2|22 +1.3.6.1.4.1.3375.2.2.4.1.2.1.7.1|2|24 +1.3.6.1.4.1.3375.2.2.4.1.2.1.7.2|2|23 +1.3.6.1.4.1.3375.2.2.4.1.2.1.7.3|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.8.1|4x|7a6f6d6269657320717561696e746c79206b65707420717561696e746c7920717561696e746c79206f78656e +1.3.6.1.4.1.3375.2.2.4.1.2.1.8.2|4|forward +1.3.6.1.4.1.3375.2.2.4.1.2.1.8.3|4x|6163746564207a6f6d62696573206f78656e2064726976696e672064726976696e672062757420666f7277617264204a61646564 +1.3.6.1.4.1.3375.2.2.4.1.2.1.9.1|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.9.2|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.9.3|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.10.1|2|4 +1.3.6.1.4.1.3375.2.2.4.1.2.1.10.2|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.10.3|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.11.1|2|7 +1.3.6.1.4.1.3375.2.2.4.1.2.1.11.2|2|6 +1.3.6.1.4.1.3375.2.2.4.1.2.1.11.3|2|27 +1.3.6.1.4.1.3375.2.2.4.1.2.1.12.1|4x|7468656972207a6f6d62696573207468656972207a6f6d62696573207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.3375.2.2.4.1.2.1.12.2|4x|62757420717561696e746c79 +1.3.6.1.4.1.3375.2.2.4.1.2.1.12.3|4x|4a61646564207a6f6d6269657320627574206b657074 +1.3.6.1.4.1.3375.2.2.4.1.2.1.13.1|2|4 +1.3.6.1.4.1.3375.2.2.4.1.2.1.13.2|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.13.3|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.14.1|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.14.2|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.14.3|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.15.1|2|15 +1.3.6.1.4.1.3375.2.2.4.1.2.1.15.2|2|11 +1.3.6.1.4.1.3375.2.2.4.1.2.1.15.3|2|21 +1.3.6.1.4.1.3375.2.2.4.1.2.1.16.1|4|their +1.3.6.1.4.1.3375.2.2.4.1.2.1.16.2|4x|616374656420717561696e746c79 +1.3.6.1.4.1.3375.2.2.4.1.2.1.16.3|4x|627574204a6164656420666f7277617264 +1.3.6.1.4.1.3375.2.2.4.1.2.1.17.1|4x|6e6f646531 +1.3.6.1.4.1.3375.2.2.4.1.2.1.17.2|4x|6e6f646532 +1.3.6.1.4.1.3375.2.2.4.1.2.1.17.3|4x|6e6f646533 +1.3.6.1.4.1.3375.2.2.4.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.4.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.4.2.3.1.1.1|2|0 +1.3.6.1.4.1.3375.2.2.4.2.3.1.1.2|2|2 +1.3.6.1.4.1.3375.2.2.4.2.3.1.1.3|2|1 +1.3.6.1.4.1.3375.2.2.4.2.3.1.2.1|4x|627574204a6164656420717561696e746c79204a61646564206b657074206f78656e20717561696e746c792064726976696e67 +1.3.6.1.4.1.3375.2.2.4.2.3.1.2.2|4x|74686569722064726976696e67 +1.3.6.1.4.1.3375.2.2.4.2.3.1.2.3|4x|7a6f6d626965732074686569722062757420616374656420746865697220746865697220666f7277617264 +1.3.6.1.4.1.3375.2.2.4.2.3.1.3.1|70|4944872918648779327 +1.3.6.1.4.1.3375.2.2.4.2.3.1.3.2|70|8029375396251303915 +1.3.6.1.4.1.3375.2.2.4.2.3.1.3.3|70|13077172560709481671 +1.3.6.1.4.1.3375.2.2.4.2.3.1.4.1|70|4068229906985517548 +1.3.6.1.4.1.3375.2.2.4.2.3.1.4.2|70|8158617595607170573 +1.3.6.1.4.1.3375.2.2.4.2.3.1.4.3|70|8570216897735326644 +1.3.6.1.4.1.3375.2.2.4.2.3.1.5.1|70|8266159627953159227 +1.3.6.1.4.1.3375.2.2.4.2.3.1.5.2|70|6409527896954307095 +1.3.6.1.4.1.3375.2.2.4.2.3.1.5.3|70|11729448798088947091 +1.3.6.1.4.1.3375.2.2.4.2.3.1.6.1|70|6073838854401463636 +1.3.6.1.4.1.3375.2.2.4.2.3.1.6.2|70|8390897027300387699 +1.3.6.1.4.1.3375.2.2.4.2.3.1.6.3|70|10823245692376386274 +1.3.6.1.4.1.3375.2.2.4.2.3.1.7.1|70|1642226835677429374 +1.3.6.1.4.1.3375.2.2.4.2.3.1.7.2|70|6074301342335640587 +1.3.6.1.4.1.3375.2.2.4.2.3.1.7.3|70|17373143971219577691 +1.3.6.1.4.1.3375.2.2.4.2.3.1.8.1|70|4119264629154729857 +1.3.6.1.4.1.3375.2.2.4.2.3.1.8.2|70|7878249428133895665 +1.3.6.1.4.1.3375.2.2.4.2.3.1.8.3|70|7928254558377589981 +1.3.6.1.4.1.3375.2.2.4.2.3.1.9.1|66|1651920139 +1.3.6.1.4.1.3375.2.2.4.2.3.1.9.2|66|3038783190 +1.3.6.1.4.1.3375.2.2.4.2.3.1.9.3|66|591588210 +1.3.6.1.4.1.3375.2.2.4.2.3.1.10.1|70|14662592026588814360 +1.3.6.1.4.1.3375.2.2.4.2.3.1.10.2|70|3961661652095473285 +1.3.6.1.4.1.3375.2.2.4.2.3.1.10.3|70|12449952025922061878 +1.3.6.1.4.1.3375.2.2.4.2.3.1.11.1|70|15394562351003399313 +1.3.6.1.4.1.3375.2.2.4.2.3.1.11.2|70|1786591066820350842 +1.3.6.1.4.1.3375.2.2.4.2.3.1.11.3|70|12474830199603794536 +1.3.6.1.4.1.3375.2.2.4.2.3.1.12.1|70|14854644677157090730 +1.3.6.1.4.1.3375.2.2.4.2.3.1.12.2|70|4544871405060434280 +1.3.6.1.4.1.3375.2.2.4.2.3.1.12.3|70|5261739439469317107 +1.3.6.1.4.1.3375.2.2.4.2.3.1.13.1|70|361936506436156012 +1.3.6.1.4.1.3375.2.2.4.2.3.1.13.2|70|11356492468627532113 +1.3.6.1.4.1.3375.2.2.4.2.3.1.13.3|70|12051964844036690225 +1.3.6.1.4.1.3375.2.2.4.2.3.1.14.1|70|10820521555590319445 +1.3.6.1.4.1.3375.2.2.4.2.3.1.14.2|70|7272864848476956229 +1.3.6.1.4.1.3375.2.2.4.2.3.1.14.3|70|13359503625543215912 +1.3.6.1.4.1.3375.2.2.4.2.3.1.15.1|70|10907836064895621196 +1.3.6.1.4.1.3375.2.2.4.2.3.1.15.2|70|5009646550570838518 +1.3.6.1.4.1.3375.2.2.4.2.3.1.15.3|70|4529016329646344243 +1.3.6.1.4.1.3375.2.2.4.2.3.1.16.1|66|3003009877 +1.3.6.1.4.1.3375.2.2.4.2.3.1.16.2|66|782515544 +1.3.6.1.4.1.3375.2.2.4.2.3.1.16.3|66|3821721731 +1.3.6.1.4.1.3375.2.2.4.2.3.1.17.1|70|9543188708531228614 +1.3.6.1.4.1.3375.2.2.4.2.3.1.17.2|70|1982462802964786213 +1.3.6.1.4.1.3375.2.2.4.2.3.1.17.3|70|3503949068840085478 +1.3.6.1.4.1.3375.2.2.4.2.3.1.18.1|70|1538964337621885130 +1.3.6.1.4.1.3375.2.2.4.2.3.1.18.2|70|1655662892984174663 +1.3.6.1.4.1.3375.2.2.4.2.3.1.18.3|70|4318101150266803459 +1.3.6.1.4.1.3375.2.2.4.2.3.1.19.1|66|3000376368 +1.3.6.1.4.1.3375.2.2.4.2.3.1.19.2|66|3947013440 +1.3.6.1.4.1.3375.2.2.4.2.3.1.19.3|66|72658592 +1.3.6.1.4.1.3375.2.2.4.2.3.1.20.1|4x|6e6f646531 +1.3.6.1.4.1.3375.2.2.4.2.3.1.20.2|4x|6e6f646532 +1.3.6.1.4.1.3375.2.2.4.2.3.1.20.3|4x|6e6f646533 +1.3.6.1.4.1.3375.2.2.4.2.3.1.21.1|66|3550776537 +1.3.6.1.4.1.3375.2.2.4.2.3.1.21.2|66|1830868585 +1.3.6.1.4.1.3375.2.2.4.2.3.1.21.3|66|1703147893 +1.3.6.1.4.1.3375.2.2.4.2.3.1.22.1|66|3594307962 +1.3.6.1.4.1.3375.2.2.4.2.3.1.22.2|66|3313621335 +1.3.6.1.4.1.3375.2.2.4.2.3.1.22.3|66|3370950269 +1.3.6.1.4.1.3375.2.2.4.2.3.1.23.1|66|3834831533 +1.3.6.1.4.1.3375.2.2.4.2.3.1.23.2|66|3055589865 +1.3.6.1.4.1.3375.2.2.4.2.3.1.23.3|66|126963258 +1.3.6.1.4.1.3375.2.2.4.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.1.1|2|2 +1.3.6.1.4.1.3375.2.2.5.1.2.1.1.1|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.1.2.1.1.2|4x|706f6f6c32 +1.3.6.1.4.1.3375.2.2.5.1.2.1.2.1|2|15 +1.3.6.1.4.1.3375.2.2.5.1.2.1.2.2|2|3 +1.3.6.1.4.1.3375.2.2.5.1.2.1.3.1|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.3.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.4.1|2|2 +1.3.6.1.4.1.3375.2.2.5.1.2.1.4.2|2|27 +1.3.6.1.4.1.3375.2.2.5.1.2.1.5.1|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.5.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.6.1|2|6 +1.3.6.1.4.1.3375.2.2.5.1.2.1.6.2|2|12 +1.3.6.1.4.1.3375.2.2.5.1.2.1.7.1|2|8 +1.3.6.1.4.1.3375.2.2.5.1.2.1.7.2|2|12 +1.3.6.1.4.1.3375.2.2.5.1.2.1.8.1|2|12 +1.3.6.1.4.1.3375.2.2.5.1.2.1.8.2|2|3 +1.3.6.1.4.1.3375.2.2.5.1.2.1.9.1|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.9.2|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.10.1|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.10.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.11.1|2|8 +1.3.6.1.4.1.3375.2.2.5.1.2.1.11.2|2|27 +1.3.6.1.4.1.3375.2.2.5.1.2.1.12.1|2|2 +1.3.6.1.4.1.3375.2.2.5.1.2.1.12.2|2|5 +1.3.6.1.4.1.3375.2.2.5.1.2.1.13.1|2|16 +1.3.6.1.4.1.3375.2.2.5.1.2.1.13.2|2|11 +1.3.6.1.4.1.3375.2.2.5.1.2.1.14.1|2|4 +1.3.6.1.4.1.3375.2.2.5.1.2.1.14.2|2|31 +1.3.6.1.4.1.3375.2.2.5.1.2.1.15.1|2|24 +1.3.6.1.4.1.3375.2.2.5.1.2.1.15.2|2|6 +1.3.6.1.4.1.3375.2.2.5.1.2.1.16.1|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.16.2|2|30 +1.3.6.1.4.1.3375.2.2.5.1.2.1.17.1|4x|6275742061637465642062757420746865697220717561696e746c79 +1.3.6.1.4.1.3375.2.2.5.1.2.1.17.2|4|acted +1.3.6.1.4.1.3375.2.2.5.1.2.1.18.1|2|4 +1.3.6.1.4.1.3375.2.2.5.1.2.1.18.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.19.1|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.19.2|2|2 +1.3.6.1.4.1.3375.2.2.5.1.2.1.20.1|2|24 +1.3.6.1.4.1.3375.2.2.5.1.2.1.20.2|2|23 +1.3.6.1.4.1.3375.2.2.5.1.2.1.21.1|4x|6b657074206f78656e206b657074206b657074 +1.3.6.1.4.1.3375.2.2.5.1.2.1.21.2|4x|62757420717561696e746c792064726976696e67207468656972207a6f6d62696573206b657074207a6f6d62696573204a61646564 +1.3.6.1.4.1.3375.2.2.5.1.2.1.22.1|2|29 +1.3.6.1.4.1.3375.2.2.5.1.2.1.22.2|2|31 +1.3.6.1.4.1.3375.2.2.5.1.2.1.23.1|2|18 +1.3.6.1.4.1.3375.2.2.5.1.2.1.23.2|2|13 +1.3.6.1.4.1.3375.2.2.5.1.2.1.24.1|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.24.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.25.1|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.25.2|2|25 +1.3.6.1.4.1.3375.2.2.5.1.2.1.26.1|2|15 +1.3.6.1.4.1.3375.2.2.5.1.2.1.26.2|2|14 +1.3.6.1.4.1.3375.2.2.5.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.5.2.3.1.1.1|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.2.3.1.1.2|4x|706f6f6c32 +1.3.6.1.4.1.3375.2.2.5.2.3.1.2.1|70|4256553769388318370 +1.3.6.1.4.1.3375.2.2.5.2.3.1.2.2|70|13792863044069252701 +1.3.6.1.4.1.3375.2.2.5.2.3.1.3.1|70|1247857108542250490 +1.3.6.1.4.1.3375.2.2.5.2.3.1.3.2|70|2439768386565676696 +1.3.6.1.4.1.3375.2.2.5.2.3.1.4.1|70|13685798431063739945 +1.3.6.1.4.1.3375.2.2.5.2.3.1.4.2|70|8010152851446650287 +1.3.6.1.4.1.3375.2.2.5.2.3.1.5.1|70|12792963120883269730 +1.3.6.1.4.1.3375.2.2.5.2.3.1.5.2|70|4510088173493731928 +1.3.6.1.4.1.3375.2.2.5.2.3.1.6.1|70|14430847875818333591 +1.3.6.1.4.1.3375.2.2.5.2.3.1.6.2|70|1288344245168217259 +1.3.6.1.4.1.3375.2.2.5.2.3.1.7.1|70|14093027756920293176 +1.3.6.1.4.1.3375.2.2.5.2.3.1.7.2|70|6792874586505659276 +1.3.6.1.4.1.3375.2.2.5.2.3.1.8.1|66|2268921071 +1.3.6.1.4.1.3375.2.2.5.2.3.1.8.2|66|2797808131 +1.3.6.1.4.1.3375.2.2.5.2.3.1.9.1|70|14784730794774140792 +1.3.6.1.4.1.3375.2.2.5.2.3.1.9.2|70|7416951176019391429 +1.3.6.1.4.1.3375.2.2.5.2.3.1.10.1|70|17355194836665939296 +1.3.6.1.4.1.3375.2.2.5.2.3.1.10.2|70|12182868513869101472 +1.3.6.1.4.1.3375.2.2.5.2.3.1.11.1|70|6195382402846351570 +1.3.6.1.4.1.3375.2.2.5.2.3.1.11.2|70|11175052932718179982 +1.3.6.1.4.1.3375.2.2.5.2.3.1.12.1|70|13201653056011990257 +1.3.6.1.4.1.3375.2.2.5.2.3.1.12.2|70|3408578314658150822 +1.3.6.1.4.1.3375.2.2.5.2.3.1.13.1|70|9260687003378291011 +1.3.6.1.4.1.3375.2.2.5.2.3.1.13.2|70|15861637656764668687 +1.3.6.1.4.1.3375.2.2.5.2.3.1.14.1|70|15599209190275180986 +1.3.6.1.4.1.3375.2.2.5.2.3.1.14.2|70|11462228613215705267 +1.3.6.1.4.1.3375.2.2.5.2.3.1.15.1|66|1393706886 +1.3.6.1.4.1.3375.2.2.5.2.3.1.15.2|66|1661974926 +1.3.6.1.4.1.3375.2.2.5.2.3.1.16.1|70|12326970103109086788 +1.3.6.1.4.1.3375.2.2.5.2.3.1.16.2|70|3374152115876485407 +1.3.6.1.4.1.3375.2.2.5.2.3.1.17.1|66|4287949346 +1.3.6.1.4.1.3375.2.2.5.2.3.1.17.2|66|3795953038 +1.3.6.1.4.1.3375.2.2.5.2.3.1.18.1|2|26 +1.3.6.1.4.1.3375.2.2.5.2.3.1.18.2|2|21 +1.3.6.1.4.1.3375.2.2.5.2.3.1.19.1|2|30 +1.3.6.1.4.1.3375.2.2.5.2.3.1.19.2|2|5 +1.3.6.1.4.1.3375.2.2.5.2.3.1.20.1|2|23 +1.3.6.1.4.1.3375.2.2.5.2.3.1.20.2|2|12 +1.3.6.1.4.1.3375.2.2.5.2.3.1.21.1|2|25 +1.3.6.1.4.1.3375.2.2.5.2.3.1.21.2|2|12 +1.3.6.1.4.1.3375.2.2.5.2.3.1.22.1|2|7 +1.3.6.1.4.1.3375.2.2.5.2.3.1.22.2|2|1 +1.3.6.1.4.1.3375.2.2.5.2.3.1.23.1|70|1185517316256128603 +1.3.6.1.4.1.3375.2.2.5.2.3.1.23.2|70|1309485462824427150 +1.3.6.1.4.1.3375.2.2.5.2.3.1.24.1|2|25 +1.3.6.1.4.1.3375.2.2.5.2.3.1.24.2|2|16 +1.3.6.1.4.1.3375.2.2.5.2.3.1.25.1|2|22 +1.3.6.1.4.1.3375.2.2.5.2.3.1.25.2|2|1 +1.3.6.1.4.1.3375.2.2.5.2.3.1.26.1|2|1 +1.3.6.1.4.1.3375.2.2.5.2.3.1.26.2|2|5 +1.3.6.1.4.1.3375.2.2.5.2.3.1.27.1|2|1 +1.3.6.1.4.1.3375.2.2.5.2.3.1.27.2|2|18 +1.3.6.1.4.1.3375.2.2.5.2.3.1.28.1|2|27 +1.3.6.1.4.1.3375.2.2.5.2.3.1.28.2|2|10 +1.3.6.1.4.1.3375.2.2.5.2.3.1.29.1|70|9671521655276789662 +1.3.6.1.4.1.3375.2.2.5.2.3.1.29.2|70|5297673884035549156 +1.3.6.1.4.1.3375.2.2.5.2.3.1.30.1|70|830110198927418245 +1.3.6.1.4.1.3375.2.2.5.2.3.1.30.2|70|8485525847267957855 +1.3.6.1.4.1.3375.2.2.5.2.3.1.31.1|66|3031153578 +1.3.6.1.4.1.3375.2.2.5.2.3.1.31.2|66|716027177 +1.3.6.1.4.1.3375.2.2.5.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.3.1|2|3 +1.3.6.1.4.1.3375.2.2.5.3.2.1.1.1|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.3.2.1.1.2|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.3.2.1.1.3|4x|706f6f6c32 +1.3.6.1.4.1.3375.2.2.5.3.2.1.2.1|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.2.2|2|1 +1.3.6.1.4.1.3375.2.2.5.3.2.1.2.3|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.3.1|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.3375.2.2.5.3.2.1.3.2|4x|6b6570742064726976696e67206163746564206f78656e204a61646564207a6f6d626965732064726976696e67207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.3375.2.2.5.3.2.1.3.3|4x|6275742064726976696e67 +1.3.6.1.4.1.3375.2.2.5.3.2.1.4.1|66|11453 +1.3.6.1.4.1.3375.2.2.5.3.2.1.4.2|66|61194 +1.3.6.1.4.1.3375.2.2.5.3.2.1.4.3|66|27571 +1.3.6.1.4.1.3375.2.2.5.3.2.1.5.1|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.5.2|2|12 +1.3.6.1.4.1.3375.2.2.5.3.2.1.5.3|2|3 +1.3.6.1.4.1.3375.2.2.5.3.2.1.6.1|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.6.2|2|11 +1.3.6.1.4.1.3375.2.2.5.3.2.1.6.3|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.7.1|2|10 +1.3.6.1.4.1.3375.2.2.5.3.2.1.7.2|2|23 +1.3.6.1.4.1.3375.2.2.5.3.2.1.7.3|2|6 +1.3.6.1.4.1.3375.2.2.5.3.2.1.8.1|2|21 +1.3.6.1.4.1.3375.2.2.5.3.2.1.8.2|2|9 +1.3.6.1.4.1.3375.2.2.5.3.2.1.8.3|2|12 +1.3.6.1.4.1.3375.2.2.5.3.2.1.9.1|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.9.2|2|0 +1.3.6.1.4.1.3375.2.2.5.3.2.1.9.3|2|7 +1.3.6.1.4.1.3375.2.2.5.3.2.1.10.1|2|19 +1.3.6.1.4.1.3375.2.2.5.3.2.1.10.2|2|24 +1.3.6.1.4.1.3375.2.2.5.3.2.1.10.3|2|1 +1.3.6.1.4.1.3375.2.2.5.3.2.1.11.1|2|20 +1.3.6.1.4.1.3375.2.2.5.3.2.1.11.2|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.11.3|2|18 +1.3.6.1.4.1.3375.2.2.5.3.2.1.12.1|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.12.2|2|1 +1.3.6.1.4.1.3375.2.2.5.3.2.1.12.3|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.13.1|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.13.2|2|5 +1.3.6.1.4.1.3375.2.2.5.3.2.1.13.3|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.14.1|4x|6f78656e2064726976696e67206163746564204a6164656420627574206163746564 +1.3.6.1.4.1.3375.2.2.5.3.2.1.14.2|4x|717561696e746c7920627574 +1.3.6.1.4.1.3375.2.2.5.3.2.1.14.3|4x|4a61646564206f78656e206b65707420627574 +1.3.6.1.4.1.3375.2.2.5.3.2.1.15.1|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.15.2|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.15.3|2|0 +1.3.6.1.4.1.3375.2.2.5.3.2.1.16.1|2|0 +1.3.6.1.4.1.3375.2.2.5.3.2.1.16.2|2|0 +1.3.6.1.4.1.3375.2.2.5.3.2.1.16.3|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.17.1|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.17.2|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.17.3|2|13 +1.3.6.1.4.1.3375.2.2.5.3.2.1.18.1|4x|616374656420627574 +1.3.6.1.4.1.3375.2.2.5.3.2.1.18.2|4|oxen +1.3.6.1.4.1.3375.2.2.5.3.2.1.18.3|4x|6163746564206b657074206b657074206f78656e20627574206b657074206b657074206f78656e +1.3.6.1.4.1.3375.2.2.5.3.2.1.19.1|4x|6e6f646531 +1.3.6.1.4.1.3375.2.2.5.3.2.1.19.2|4x|6e6f646532 +1.3.6.1.4.1.3375.2.2.5.3.2.1.19.3|4x|6e6f646533 +1.3.6.1.4.1.3375.2.2.5.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.4.2.0|2|0 +1.3.6.1.4.1.3375.2.2.5.4.3.1.1.1|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.4.3.1.1.2|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.4.3.1.1.3|4x|706f6f6c32 +1.3.6.1.4.1.3375.2.2.5.4.3.1.2.1|2|16 +1.3.6.1.4.1.3375.2.2.5.4.3.1.2.2|2|3 +1.3.6.1.4.1.3375.2.2.5.4.3.1.2.3|2|2 +1.3.6.1.4.1.3375.2.2.5.4.3.1.3.1|4x|6163746564206b657074206163746564206f78656e2062757420717561696e746c79 +1.3.6.1.4.1.3375.2.2.5.4.3.1.3.2|4x|4a6164656420666f727761726420666f727761726420666f727761726420627574204a6164656420666f7277617264 +1.3.6.1.4.1.3375.2.2.5.4.3.1.3.3|4x|64726976696e672064726976696e6720666f7277617264206163746564206f78656e207468656972204a61646564 +1.3.6.1.4.1.3375.2.2.5.4.3.1.4.1|66|20398 +1.3.6.1.4.1.3375.2.2.5.4.3.1.4.2|66|4985 +1.3.6.1.4.1.3375.2.2.5.4.3.1.4.3|66|56300 +1.3.6.1.4.1.3375.2.2.5.4.3.1.5.1|70|2873284505721733998 +1.3.6.1.4.1.3375.2.2.5.4.3.1.5.2|70|14270783585237366881 +1.3.6.1.4.1.3375.2.2.5.4.3.1.5.3|70|15682680367338516603 +1.3.6.1.4.1.3375.2.2.5.4.3.1.6.1|70|2063208377357646609 +1.3.6.1.4.1.3375.2.2.5.4.3.1.6.2|70|9942037616777823716 +1.3.6.1.4.1.3375.2.2.5.4.3.1.6.3|70|769481878289981685 +1.3.6.1.4.1.3375.2.2.5.4.3.1.7.1|70|11411203339993724679 +1.3.6.1.4.1.3375.2.2.5.4.3.1.7.2|70|5001137335017343208 +1.3.6.1.4.1.3375.2.2.5.4.3.1.7.3|70|3447939929195254599 +1.3.6.1.4.1.3375.2.2.5.4.3.1.8.1|70|6923370659660874655 +1.3.6.1.4.1.3375.2.2.5.4.3.1.8.2|70|6109106490701278125 +1.3.6.1.4.1.3375.2.2.5.4.3.1.8.3|70|11245438125243532220 +1.3.6.1.4.1.3375.2.2.5.4.3.1.9.1|70|555839854274537154 +1.3.6.1.4.1.3375.2.2.5.4.3.1.9.2|70|12084595149680519637 +1.3.6.1.4.1.3375.2.2.5.4.3.1.9.3|70|6827966006511803702 +1.3.6.1.4.1.3375.2.2.5.4.3.1.10.1|70|13744051120023251665 +1.3.6.1.4.1.3375.2.2.5.4.3.1.10.2|70|3445855454713090727 +1.3.6.1.4.1.3375.2.2.5.4.3.1.10.3|70|2832567909193568324 +1.3.6.1.4.1.3375.2.2.5.4.3.1.11.1|66|263232881 +1.3.6.1.4.1.3375.2.2.5.4.3.1.11.2|66|3622767247 +1.3.6.1.4.1.3375.2.2.5.4.3.1.11.3|66|2159532223 +1.3.6.1.4.1.3375.2.2.5.4.3.1.12.1|70|13225166919628318581 +1.3.6.1.4.1.3375.2.2.5.4.3.1.12.2|70|4343349396059039628 +1.3.6.1.4.1.3375.2.2.5.4.3.1.12.3|70|10913327605844057353 +1.3.6.1.4.1.3375.2.2.5.4.3.1.13.1|70|8083056369720634069 +1.3.6.1.4.1.3375.2.2.5.4.3.1.13.2|70|174353434991594275 +1.3.6.1.4.1.3375.2.2.5.4.3.1.13.3|70|7279687954640490954 +1.3.6.1.4.1.3375.2.2.5.4.3.1.14.1|70|17307719017620384345 +1.3.6.1.4.1.3375.2.2.5.4.3.1.14.2|70|1088230504663588150 +1.3.6.1.4.1.3375.2.2.5.4.3.1.14.3|70|18351016744712524042 +1.3.6.1.4.1.3375.2.2.5.4.3.1.15.1|70|15469407905940915899 +1.3.6.1.4.1.3375.2.2.5.4.3.1.15.2|70|14466119304285597253 +1.3.6.1.4.1.3375.2.2.5.4.3.1.15.3|70|12778844528206900286 +1.3.6.1.4.1.3375.2.2.5.4.3.1.16.1|70|10829126290726572990 +1.3.6.1.4.1.3375.2.2.5.4.3.1.16.2|70|14015592186250105992 +1.3.6.1.4.1.3375.2.2.5.4.3.1.16.3|70|7362635876654415560 +1.3.6.1.4.1.3375.2.2.5.4.3.1.17.1|70|15253976660678040104 +1.3.6.1.4.1.3375.2.2.5.4.3.1.17.2|70|5447560082343902862 +1.3.6.1.4.1.3375.2.2.5.4.3.1.17.3|70|10900456361966376214 +1.3.6.1.4.1.3375.2.2.5.4.3.1.18.1|66|1084714099 +1.3.6.1.4.1.3375.2.2.5.4.3.1.18.2|66|1255758041 +1.3.6.1.4.1.3375.2.2.5.4.3.1.18.3|66|3842923528 +1.3.6.1.4.1.3375.2.2.5.4.3.1.19.1|70|13037023619346591279 +1.3.6.1.4.1.3375.2.2.5.4.3.1.19.2|70|7941461199036912343 +1.3.6.1.4.1.3375.2.2.5.4.3.1.19.3|70|2938290648063178294 +1.3.6.1.4.1.3375.2.2.5.4.3.1.20.1|70|2075228672003575187 +1.3.6.1.4.1.3375.2.2.5.4.3.1.20.2|70|9615394599206193500 +1.3.6.1.4.1.3375.2.2.5.4.3.1.20.3|70|12646485798805777773 +1.3.6.1.4.1.3375.2.2.5.4.3.1.21.1|66|2120986942 +1.3.6.1.4.1.3375.2.2.5.4.3.1.21.2|66|2670664273 +1.3.6.1.4.1.3375.2.2.5.4.3.1.21.3|66|2340421060 +1.3.6.1.4.1.3375.2.2.5.4.3.1.22.1|2|14 +1.3.6.1.4.1.3375.2.2.5.4.3.1.22.2|2|5 +1.3.6.1.4.1.3375.2.2.5.4.3.1.22.3|2|11 +1.3.6.1.4.1.3375.2.2.5.4.3.1.23.1|2|26 +1.3.6.1.4.1.3375.2.2.5.4.3.1.23.2|2|15 +1.3.6.1.4.1.3375.2.2.5.4.3.1.23.3|2|31 +1.3.6.1.4.1.3375.2.2.5.4.3.1.24.1|2|4 +1.3.6.1.4.1.3375.2.2.5.4.3.1.24.2|2|21 +1.3.6.1.4.1.3375.2.2.5.4.3.1.24.3|2|19 +1.3.6.1.4.1.3375.2.2.5.4.3.1.25.1|2|5 +1.3.6.1.4.1.3375.2.2.5.4.3.1.25.2|2|29 +1.3.6.1.4.1.3375.2.2.5.4.3.1.25.3|2|7 +1.3.6.1.4.1.3375.2.2.5.4.3.1.26.1|2|16 +1.3.6.1.4.1.3375.2.2.5.4.3.1.26.2|2|0 +1.3.6.1.4.1.3375.2.2.5.4.3.1.26.3|2|14 +1.3.6.1.4.1.3375.2.2.5.4.3.1.27.1|70|54911224004933640 +1.3.6.1.4.1.3375.2.2.5.4.3.1.27.2|70|2959402702645471109 +1.3.6.1.4.1.3375.2.2.5.4.3.1.27.3|70|16889251434225586623 +1.3.6.1.4.1.3375.2.2.5.4.3.1.28.1|4x|6e6f646531 +1.3.6.1.4.1.3375.2.2.5.4.3.1.28.2|4x|6e6f646532 +1.3.6.1.4.1.3375.2.2.5.4.3.1.28.3|4x|6e6f646533 +1.3.6.1.4.1.3375.2.2.5.4.3.1.29.1|66|3469495677 +1.3.6.1.4.1.3375.2.2.5.4.3.1.29.2|66|1633506703 +1.3.6.1.4.1.3375.2.2.5.4.3.1.29.3|66|817635962 +1.3.6.1.4.1.3375.2.2.5.4.3.1.30.1|66|2354828424 +1.3.6.1.4.1.3375.2.2.5.4.3.1.30.2|66|2915755010 +1.3.6.1.4.1.3375.2.2.5.4.3.1.30.3|66|2415428730 +1.3.6.1.4.1.3375.2.2.5.4.3.1.31.1|66|1552461926 +1.3.6.1.4.1.3375.2.2.5.4.3.1.31.2|66|253721893 +1.3.6.1.4.1.3375.2.2.5.4.3.1.31.3|66|2223786572 +1.3.6.1.4.1.3375.2.2.5.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.1.0|2|7 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.12.47.67.111.109.109.111.110.47.108.100.97.112|4x|2f436f6d6d6f6e2f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4x|2f436f6d6d6f6e2f726164697573 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4x|2f436f6d6d6f6e2f746163616373 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4x|2f436f6d6d6f6e2f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4x|2f436f6d6d6f6e2f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4x|2f436f6d6d6f6e2f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4x|2f436f6d6d6f6e2f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.12.47.67.111.109.109.111.110.47.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.12.47.67.111.109.109.111.110.47.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.12.47.67.111.109.109.111.110.47.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.12.47.67.111.109.109.111.110.47.108.100.97.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|2|4 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|2|3 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|2|6 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|2|7 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|2|2 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.12.47.67.111.109.109.111.110.47.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.12.47.67.111.109.109.111.110.47.108.100.97.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.12.47.67.111.109.109.111.110.47.108.100.97.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.12.47.67.111.109.109.111.110.47.108.100.97.112|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|66|300 +1.3.6.1.4.1.3375.2.2.6.1.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.1.2.2.0|2|7 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.12.47.67.111.109.109.111.110.47.108.100.97.112|4x|2f436f6d6d6f6e2f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4x|2f436f6d6d6f6e2f726164697573 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4x|2f436f6d6d6f6e2f746163616373 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4x|2f436f6d6d6f6e2f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4x|2f436f6d6d6f6e2f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4x|2f436f6d6d6f6e2f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4x|2f436f6d6d6f6e2f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.12.47.67.111.109.109.111.110.47.108.100.97.112|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.2.1.1.0|2|6 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d7365727665722d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|65636468653a7273613a2173736c76333a217263343a216578703a21646573 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|414c4c3a2144483a214144483a214544483a405350454544 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|4448452d5253412d4145533235362d47434d2d534841333834 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|8192 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|21600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.2.2.2.0|2|6 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d7365727665722d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.3.1.0|2|6 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d7365727665722d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.1.0|2|8 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f73657276657273736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f61706d2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f70636f69702d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f73657276657273736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d636c69656e742d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|214558504f52543a2144483a5253412b5243343a5253412b4145533a5253412b4445533a5253412b334445533a45434448452b4145533a45434448452b334445533a405350454544 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|4448452d5253412d4145533235362d47434d2d534841333834 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|8192 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.3.2.2.0|2|8 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f73657276657273736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f61706d2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f70636f69702d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f73657276657273736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d636c69656e742d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.4.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.1.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|4x|2f436f6d6d6f6e2f6f6e65636f6e6e656374 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.2.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.3.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|4| +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.4.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.5.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|4x|00000000 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.6.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|10000 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.7.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|86400 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.8.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|1000 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.9.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.4.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.4.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.1.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|4x|2f436f6d6d6f6e2f6f6e65636f6e6e656374 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.2.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.3.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.4.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.5.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.5.1.1.0|2|3 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.1.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.1.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f66756c6c2d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.1.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.2.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.2.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.2.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.3.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|4| +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.3.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.3.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.4.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.4.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.4.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.5.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.5.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.5.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.6.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|300 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.6.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|300 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.6.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|7200 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.7.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.7.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.7.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.8.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.8.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.8.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.9.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.9.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.9.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.10.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.10.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.10.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.11.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.11.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.11.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.12.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.12.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.12.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.13.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.13.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.13.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.14.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.14.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.14.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.15.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.15.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.15.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.16.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.16.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.16.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.17.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.17.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.17.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.18.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.18.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.18.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.19.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.19.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.19.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.20.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.20.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.20.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.21.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.21.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.21.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.22.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.22.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.22.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.23.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.23.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.23.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.24.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.24.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.24.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.25.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.25.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.25.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.26.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.26.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.26.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.27.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|30 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.27.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|30 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.27.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|30 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.28.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.28.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.28.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.5.2.2.0|2|3 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.1.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.1.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f66756c6c2d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.1.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.2.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.2.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.2.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.3.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.3.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.3.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.4.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.4.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.4.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.5.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.5.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.5.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.6.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.6.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.6.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.7.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.7.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.7.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.8.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.8.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.8.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.9.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.9.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.9.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.10.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.10.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.10.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.11.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.11.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.11.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.12.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.12.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.12.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.13.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.13.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.13.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.14.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.14.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.14.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.15.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.15.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.15.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.16.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.16.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.16.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.6.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.1.11.47.67.111.109.109.111.110.47.102.116.112|4x|2f436f6d6d6f6e2f667470 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.2.11.47.67.111.109.109.111.110.47.102.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.3.11.47.67.111.109.109.111.110.47.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.4.11.47.67.111.109.109.111.110.47.102.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.5.11.47.67.111.109.109.111.110.47.102.116.112|66|20 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.6.11.47.67.111.109.109.111.110.47.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.7.11.47.67.111.109.109.111.110.47.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.6.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.6.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.1.11.47.67.111.109.109.111.110.47.102.116.112|4x|2f436f6d6d6f6e2f667470 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.2.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.3.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.4.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.5.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.6.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.7.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.8.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.9.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.10.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.11.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.1.1.0|2|3 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.4.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.4.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.4.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.5.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.5.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.5.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.6.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.6.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.6.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.7.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.7.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.7.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.8.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.8.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.8.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.9.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.9.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.9.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.10.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.10.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.10.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.11.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.11.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.11.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.12.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.12.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.12.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.13.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.13.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.13.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.14.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.14.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.14.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.15.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.15.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.15.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.16.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.16.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.16.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.17.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.17.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.17.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.18.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.18.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.18.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.19.12.47.67.111.109.109.111.110.47.104.116.116.112|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.19.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.19.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.20.12.47.67.111.109.109.111.110.47.104.116.116.112|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.20.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.20.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.21.12.47.67.111.109.109.111.110.47.104.116.116.112|66|80 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.21.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|80 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.21.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|80 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.22.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.22.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.22.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.23.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.23.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.23.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.24.12.47.67.111.109.109.111.110.47.104.116.116.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.24.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|32768 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.24.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|16384 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.25.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.25.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.25.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.26.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.26.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.26.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.27.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.27.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.27.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.28.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.28.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.28.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.29.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.29.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.29.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.30.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.30.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.30.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.31.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.31.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.31.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.32.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.32.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.32.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.33.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.33.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.33.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.34.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.34.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.34.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.35.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.35.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.35.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.36.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.36.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.36.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.37.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.37.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.37.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.38.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.38.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.38.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.39.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.39.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.39.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.40.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.40.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.40.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.41.12.47.67.111.109.109.111.110.47.104.116.116.112|4|BigIP +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.41.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4|BigIP +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.41.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4|BigIP +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.42.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.42.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.42.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.43.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.43.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.43.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.44.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.44.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.44.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.45.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.45.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.45.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.46.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.46.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.46.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.47.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.47.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.47.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.48.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.48.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.48.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.49.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.49.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.49.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.50.12.47.67.111.109.109.111.110.47.104.116.116.112|66|16070400 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.50.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|16070400 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.50.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|16070400 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.51.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.51.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.51.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.52.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.52.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.52.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.53.12.47.67.111.109.109.111.110.47.104.116.116.112|4x|32303020323036 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.53.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4x|32303020323036 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.53.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4x|32303020323036 +1.3.6.1.4.1.3375.2.2.6.7.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.6.2.0|2|3 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.4.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.4.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.4.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.5.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.5.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.5.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.6.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.6.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.6.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.7.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.7.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.7.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.8.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.8.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.8.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.9.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.9.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.9.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.10.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.10.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.10.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.11.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.11.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.11.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.12.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.12.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.12.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.13.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.13.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.13.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.14.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.14.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.14.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.15.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.15.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.15.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.16.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.16.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.16.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.17.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.17.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.17.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.18.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.18.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.18.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.19.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.19.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.19.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.20.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.20.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.20.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.21.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.21.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.21.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.22.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.22.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.22.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.23.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.23.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.23.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.24.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.24.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.24.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.25.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.25.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.25.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.26.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.26.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.26.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.27.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.27.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.27.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.28.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.28.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.28.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.29.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.29.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.29.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.30.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.30.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.30.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.31.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.31.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.31.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.32.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.32.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.32.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.33.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.33.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.33.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.34.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.34.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.34.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.35.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.35.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.35.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.36.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.36.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.36.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.37.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.37.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.37.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.38.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.38.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.38.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.39.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.39.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.39.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.40.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.40.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.40.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.41.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.41.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.41.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.42.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.42.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.42.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.43.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.43.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.43.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.44.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.44.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.44.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.45.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.45.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.45.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.46.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.46.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.46.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.47.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.47.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.47.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.48.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.48.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.48.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.49.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.49.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.49.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.50.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.50.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.50.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.51.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.51.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.51.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.52.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.52.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.52.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.53.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.53.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.53.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.54.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.54.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.54.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.55.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.55.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.55.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.56.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.56.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.56.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.57.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.57.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.57.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.58.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.58.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.58.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.59.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.59.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.59.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.60.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.60.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.60.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.61.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.61.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.61.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.62.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.62.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.62.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.63.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.63.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.63.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.64.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.64.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.64.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.8.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.9.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.10.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.11.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.12.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.13.1.0|2|33 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.1|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.2|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.3|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.4|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.5|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.6|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.7|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.8|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.9|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.10|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.11|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.1|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.2|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.3|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.4|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.5|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.6|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.7|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.8|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.9|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.10|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.11|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.1|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.2|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.3|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.4|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.5|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.6|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.7|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.8|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.9|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.10|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.11|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.1|2|1 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.2|2|2 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.3|2|3 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.4|2|4 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.5|2|5 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.6|2|6 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.7|2|7 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.8|2|8 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.9|2|9 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.10|2|10 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.11|2|11 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.1|2|1 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.2|2|2 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.3|2|3 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.4|2|4 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.5|2|5 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.6|2|6 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.7|2|7 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.8|2|8 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.9|2|9 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.10|2|10 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.11|2|11 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.1|2|1 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.2|2|2 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.3|2|3 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.4|2|4 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.5|2|5 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.6|2|6 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.7|2|7 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.8|2|8 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.9|2|9 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.10|2|10 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.11|2|11 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.1|4|CONNECT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.2|4|DELETE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.3|4|GET +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.4|4|HEAD +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.5|4|LOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.6|4|OPTIONS +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.7|4|POST +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.8|4|PROPFIND +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.9|4|PUT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.10|4|TRACE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.11|4|UNLOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.1|4|CONNECT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.2|4|DELETE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.3|4|GET +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.4|4|HEAD +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.5|4|LOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.6|4|OPTIONS +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.7|4|POST +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.8|4|PROPFIND +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.9|4|PUT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.10|4|TRACE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.11|4|UNLOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.1|4|CONNECT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.2|4|DELETE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.3|4|GET +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.4|4|HEAD +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.5|4|LOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.6|4|OPTIONS +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.7|4|POST +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.8|4|PROPFIND +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.9|4|PUT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.10|4|TRACE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.11|4|UNLOCK +1.3.6.1.4.1.3375.2.2.6.8.1.1.0|2|9 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.11.47.67.111.109.109.111.110.47.115.115.108|4x|2f436f6d6d6f6e2f73736c +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.12.47.67.111.109.109.111.110.47.104.97.115.104|4x|2f436f6d6d6f6e2f68617368 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.12.47.67.111.109.109.111.110.47.104.111.115.116|4x|2f436f6d6d6f6e2f686f7374 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4x|2f436f6d6d6f6e2f6d73726470 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4x|2f436f6d6d6f6e2f636f6f6b6965 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4x|2f436f6d6d6f6e2f7369705f696e666f +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4x|2f436f6d6d6f6e2f646573745f61646472 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4x|2f436f6d6d6f6e2f756e6976657273616c +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4x|2f436f6d6d6f6e2f736f757263655f61646472 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.11.47.67.111.109.109.111.110.47.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.12.47.67.111.109.109.111.110.47.104.97.115.104|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.12.47.67.111.109.109.111.110.47.104.111.115.116|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.11.47.67.111.109.109.111.110.47.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.12.47.67.111.109.109.111.110.47.104.97.115.104|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.12.47.67.111.109.109.111.110.47.104.111.115.116|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.11.47.67.111.109.109.111.110.47.115.115.108|2|5 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.12.47.67.111.109.109.111.110.47.104.97.115.104|2|8 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.12.47.67.111.109.109.111.110.47.104.111.115.116|2|9 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|4 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|3 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|6 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|7 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.11.47.67.111.109.109.111.110.47.115.115.108|66|300 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.12.47.67.111.109.109.111.110.47.104.97.115.104|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.12.47.67.111.109.109.111.110.47.104.111.115.116|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.13.47.67.111.109.109.111.110.47.109.115.114.100.112|66|300 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.11.47.67.111.109.109.111.110.47.115.115.108|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.12.47.67.111.109.109.111.110.47.104.97.115.104|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.12.47.67.111.109.109.111.110.47.104.111.115.116|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.11.47.67.111.109.109.111.110.47.115.115.108|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.12.47.67.111.109.109.111.110.47.104.97.115.104|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.12.47.67.111.109.109.111.110.47.104.111.115.116|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.11.47.67.111.109.109.111.110.47.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.12.47.67.111.109.109.111.110.47.104.97.115.104|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.12.47.67.111.109.109.111.110.47.104.111.115.116|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.11.47.67.111.109.109.111.110.47.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.12.47.67.111.109.109.111.110.47.104.97.115.104|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.12.47.67.111.109.109.111.110.47.104.111.115.116|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.13.47.67.111.109.109.111.110.47.109.115.114.100.112|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.11.47.67.111.109.109.111.110.47.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.12.47.67.111.109.109.111.110.47.104.97.115.104|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.12.47.67.111.109.109.111.110.47.104.111.115.116|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.11.47.67.111.109.109.111.110.47.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.12.47.67.111.109.109.111.110.47.104.97.115.104|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.12.47.67.111.109.109.111.110.47.104.111.115.116|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.11.47.67.111.109.109.111.110.47.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.12.47.67.111.109.109.111.110.47.104.97.115.104|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.12.47.67.111.109.109.111.110.47.104.111.115.116|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.11.47.67.111.109.109.111.110.47.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.12.47.67.111.109.109.111.110.47.104.97.115.104|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.12.47.67.111.109.109.111.110.47.104.111.115.116|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.11.47.67.111.109.109.111.110.47.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.12.47.67.111.109.109.111.110.47.104.97.115.104|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.12.47.67.111.109.109.111.110.47.104.111.115.116|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.9.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.1.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4x|2f436f6d6d6f6e2f73747265616d +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.2.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|2|1 +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.3.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4| +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.4.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4| +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.5.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4| +1.3.6.1.4.1.3375.2.2.6.9.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.9.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.9.2.3.1.1.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4x|2f436f6d6d6f6e2f73747265616d +1.3.6.1.4.1.3375.2.2.6.9.2.3.1.2.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|70|0 +1.3.6.1.4.1.3375.2.2.6.10.1.1.0|2|17 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.11.47.67.111.109.109.111.110.47.116.99.112|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|4x|2f436f6d6d6f6e2f66352d7463702d6c616e +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|4x|2f436f6d6d6f6e2f66352d7463702d77616e +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|4x|2f436f6d6d6f6e2f66352d7463702d6d6f62696c65 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|4x|2f436f6d6d6f6e2f66352d7463702d70726f6772657373697665 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6d6f62696c652d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f77616d2d7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f77616d2d7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f776f6d2d7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f776f6d2d7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f6d707463702d6d6f62696c652d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d636c69656e742d746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d7365727665722d746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.11.47.67.111.109.109.111.110.47.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.11.47.67.111.109.109.111.110.47.116.99.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|98304 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|98304 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|98304 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.11.47.67.111.109.109.111.110.47.116.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|49152 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|49152 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|49152 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.11.47.67.111.109.109.111.110.47.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.11.47.67.111.109.109.111.110.47.116.99.112|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.11.47.67.111.109.109.111.110.47.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.11.47.67.111.109.109.111.110.47.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.11.47.67.111.109.109.111.110.47.116.99.112|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.11.47.67.111.109.109.111.110.47.116.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.11.47.67.111.109.109.111.110.47.116.99.112|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|60 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|60 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.11.47.67.111.109.109.111.110.47.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.11.47.67.111.109.109.111.110.47.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|2 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|2 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|2 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.11.47.67.111.109.109.111.110.47.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.11.47.67.111.109.109.111.110.47.116.99.112|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|7 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|7 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|7 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|10000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|10000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|10000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.11.47.67.111.109.109.111.110.47.116.99.112|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|300000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.11.47.67.111.109.109.111.110.47.116.99.112|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.11.47.67.111.109.109.111.110.47.116.99.112|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.11.47.67.111.109.109.111.110.47.116.99.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.11.47.67.111.109.109.111.110.47.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|200 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|500 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.11.47.67.111.109.109.111.110.47.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.11.47.67.111.109.109.111.110.47.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.11.47.67.111.109.109.111.110.47.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.11.47.67.111.109.109.111.110.47.116.99.112|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.11.47.67.111.109.109.111.110.47.116.99.112|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.11.47.67.111.109.109.111.110.47.116.99.112|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.11.47.67.111.109.109.111.110.47.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.11.47.67.111.109.109.111.110.47.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.10.2.2.0|2|17 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.11.47.67.111.109.109.111.110.47.116.99.112|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|4x|2f436f6d6d6f6e2f66352d7463702d6c616e +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|4x|2f436f6d6d6f6e2f66352d7463702d77616e +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|4x|2f436f6d6d6f6e2f66352d7463702d6d6f62696c65 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|4x|2f436f6d6d6f6e2f66352d7463702d70726f6772657373697665 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6d6f62696c652d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f77616d2d7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f77616d2d7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f776f6d2d7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f776f6d2d7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f6d707463702d6d6f62696c652d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d746370 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d636c69656e742d746370 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d7365727665722d746370 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.11.1.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.1.11.47.67.111.109.109.111.110.47.117.100.112|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.1.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|4x|2f436f6d6d6f6e2f7564705f67746d5f646e73 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.1.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|4x|2f436f6d6d6f6e2f7564705f70726573657276655f74746c +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.1.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|4x|2f436f6d6d6f6e2f7564705f64656372656d656e745f74746c +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.2.11.47.67.111.109.109.111.110.47.117.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.2.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.2.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.2.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.3.11.47.67.111.109.109.111.110.47.117.100.112|4| +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.3.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.3.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.3.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.4.11.47.67.111.109.109.111.110.47.117.100.112|66|60 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.4.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|66|5 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.4.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|66|60 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.4.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|66|60 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.5.11.47.67.111.109.109.111.110.47.117.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.5.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.5.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.5.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.6.11.47.67.111.109.109.111.110.47.117.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.6.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.6.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.6.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.7.11.47.67.111.109.109.111.110.47.117.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.7.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.7.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.7.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.8.11.47.67.111.109.109.111.110.47.117.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.8.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.8.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.8.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.9.11.47.67.111.109.109.111.110.47.117.100.112|66|655350 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.9.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|66|655350 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.9.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|66|655350 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.9.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|66|655350 +1.3.6.1.4.1.3375.2.2.6.11.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.11.2.2.0|2|4 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.1.11.47.67.111.109.109.111.110.47.117.100.112|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.1.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|4x|2f436f6d6d6f6e2f7564705f67746d5f646e73 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.1.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|4x|2f436f6d6d6f6e2f7564705f70726573657276655f74746c +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.1.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|4x|2f436f6d6d6f6e2f7564705f64656372656d656e745f74746c +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.2.11.47.67.111.109.109.111.110.47.117.100.112|66|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.2.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|66|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.2.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|66|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.2.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|66|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.3.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.3.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.3.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.3.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.4.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.4.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.4.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.4.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.5.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.5.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.5.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.5.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.6.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.6.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.6.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.6.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.7.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.7.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.7.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.7.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.8.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.8.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.8.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.8.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.9.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.9.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.9.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.9.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.10.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.10.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.10.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.10.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.11.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.11.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.11.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.11.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.12.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.12.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.12.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.12.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.13.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.13.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.13.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.13.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.12.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.1.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|4x|2f436f6d6d6f6e2f6661737468747470 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.2.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.3.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.4.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.5.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|300 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.6.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.7.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|5 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.8.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|5 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.9.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|2048 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.10.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.11.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|4 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.12.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.13.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.14.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.15.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.16.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.17.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.18.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.19.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.20.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.21.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.22.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.12.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.12.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.1.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|4x|2f436f6d6d6f6e2f6661737468747470 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.2.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.3.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.4.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.5.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.6.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.7.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.8.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.9.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.10.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.11.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.12.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.13.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.14.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.15.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.16.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.17.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.18.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.19.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.20.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.21.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.22.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.23.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.24.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.13.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.1.11.47.67.111.109.109.111.110.47.120.109.108|4x|2f436f6d6d6f6e2f786d6c +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.2.11.47.67.111.109.109.111.110.47.120.109.108|2|1 +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.3.11.47.67.111.109.109.111.110.47.120.109.108|4| +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.4.11.47.67.111.109.109.111.110.47.120.109.108|2|0 +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.5.11.47.67.111.109.109.111.110.47.120.109.108|66|0 +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.6.11.47.67.111.109.109.111.110.47.120.109.108|2|0 +1.3.6.1.4.1.3375.2.2.6.13.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.13.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.1.11.47.67.111.109.109.111.110.47.120.109.108|4x|2f436f6d6d6f6e2f786d6c +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.2.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.3.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.4.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.5.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.6.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.7.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.8.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.13.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.1.11.47.67.111.109.109.111.110.47.100.110.115|4x|2f436f6d6d6f6e2f646e73 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.2.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.3.11.47.67.111.109.109.111.110.47.100.110.115|4| +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.4.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.5.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.6.11.47.67.111.109.109.111.110.47.100.110.115|2|2 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.7.11.47.67.111.109.109.111.110.47.100.110.115|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.8.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.9.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.10.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.11.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.12.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.13.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.14.11.47.67.111.109.109.111.110.47.100.110.115|4| +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.15.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.16.11.47.67.111.109.109.111.110.47.100.110.115|66|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.17.11.47.67.111.109.109.111.110.47.100.110.115|4| +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.18.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.19.11.47.67.111.109.109.111.110.47.100.110.115|4| +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.20.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.21.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.22.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.23.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.14.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.1.11.47.67.111.109.109.111.110.47.100.110.115|4x|2f436f6d6d6f6e2f646e73 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.2.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.3.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.4.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.5.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.6.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.7.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.8.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.9.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.10.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.11.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.12.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.13.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.14.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.15.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.16.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.17.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.18.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.19.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.20.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.21.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.22.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.23.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.24.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.25.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.26.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.27.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.28.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.29.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.30.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.31.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.32.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.33.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.34.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.35.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.36.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.37.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.38.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.39.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.40.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.41.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.42.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.43.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.44.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.45.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.46.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.47.11.47.67.111.109.109.111.110.47.100.110.115|70|1000 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.48.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.49.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.50.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.51.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.52.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.53.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.54.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.55.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.56.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.57.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.58.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.59.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.60.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.61.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.62.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.63.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.64.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.65.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.66.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.67.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.68.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.69.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.15.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.6.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.1.12.47.67.111.109.109.111.110.47.114.116.115.112|4x|2f436f6d6d6f6e2f72747370 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.2.12.47.67.111.109.109.111.110.47.114.116.115.112|2|1 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.3.12.47.67.111.109.109.111.110.47.114.116.115.112|4| +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.4.12.47.67.111.109.109.111.110.47.114.116.115.112|66|300 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.5.12.47.67.111.109.109.111.110.47.114.116.115.112|66|4096 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.6.12.47.67.111.109.109.111.110.47.114.116.115.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.7.12.47.67.111.109.109.111.110.47.114.116.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.8.12.47.67.111.109.109.111.110.47.114.116.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.9.12.47.67.111.109.109.111.110.47.114.116.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.10.12.47.67.111.109.109.111.110.47.114.116.115.112|2|1 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.11.12.47.67.111.109.109.111.110.47.114.116.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.12.12.47.67.111.109.109.111.110.47.114.116.115.112|4| +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.13.12.47.67.111.109.109.111.110.47.114.116.115.112|66|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.14.12.47.67.111.109.109.111.110.47.114.116.115.112|66|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.15.12.47.67.111.109.109.111.110.47.114.116.115.112|4| +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.16.12.47.67.111.109.109.111.110.47.114.116.115.112|4| +1.3.6.1.4.1.3375.2.2.6.17.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.17.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.1.12.47.67.111.109.109.111.110.47.114.116.115.112|4x|2f436f6d6d6f6e2f72747370 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.2.12.47.67.111.109.109.111.110.47.114.116.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.3.12.47.67.111.109.109.111.110.47.114.116.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.4.12.47.67.111.109.109.111.110.47.114.116.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.5.12.47.67.111.109.109.111.110.47.114.116.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.1.12.47.67.111.109.109.111.110.47.115.99.116.112|4x|2f436f6d6d6f6e2f73637470 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.2.12.47.67.111.109.109.111.110.47.115.99.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.3.12.47.67.111.109.109.111.110.47.115.99.116.112|4| +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.4.12.47.67.111.109.109.111.110.47.115.99.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.5.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.6.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.7.12.47.67.111.109.109.111.110.47.115.99.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.8.12.47.67.111.109.109.111.110.47.115.99.116.112|66|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.9.12.47.67.111.109.109.111.110.47.115.99.116.112|66|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.10.12.47.67.111.109.109.111.110.47.115.99.116.112|66|65536 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.11.12.47.67.111.109.109.111.110.47.115.99.116.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.12.12.47.67.111.109.109.111.110.47.115.99.116.112|66|256 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.13.12.47.67.111.109.109.111.110.47.115.99.116.112|66|256 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.14.12.47.67.111.109.109.111.110.47.115.99.116.112|66|60 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.15.12.47.67.111.109.109.111.110.47.115.99.116.112|66|8 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.16.12.47.67.111.109.109.111.110.47.115.99.116.112|66|10 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.17.12.47.67.111.109.109.111.110.47.115.99.116.112|66|4096 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.18.12.47.67.111.109.109.111.110.47.115.99.116.112|66|16384 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.19.12.47.67.111.109.109.111.110.47.115.99.116.112|66|300 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.20.12.47.67.111.109.109.111.110.47.115.99.116.112|66|30 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.21.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.22.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.23.12.47.67.111.109.109.111.110.47.115.99.116.112|4| +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.24.12.47.67.111.109.109.111.110.47.115.99.116.112|66|4 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.25.12.47.67.111.109.109.111.110.47.115.99.116.112|66|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.26.12.47.67.111.109.109.111.110.47.115.99.116.112|66|16 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.27.12.47.67.111.109.109.111.110.47.115.99.116.112|66|5 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.28.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.29.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.30.12.47.67.111.109.109.111.110.47.115.99.116.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.31.12.47.67.111.109.109.111.110.47.115.99.116.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.32.12.47.67.111.109.109.111.110.47.115.99.116.112|66|60000 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.33.12.47.67.111.109.109.111.110.47.115.99.116.112|66|200 +1.3.6.1.4.1.3375.2.2.6.18.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.18.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.1.12.47.67.111.109.109.111.110.47.115.99.116.112|4x|2f436f6d6d6f6e2f73637470 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.2.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.3.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.4.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.5.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.6.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.7.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.8.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.9.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.10.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.11.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.12.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.13.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.14.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.15.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.16.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.17.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.19.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.19.1.2.1.1.13.47.67.111.109.109.111.110.47.115.116.97.116.115|4x|2f436f6d6d6f6e2f7374617473 +1.3.6.1.4.1.3375.2.2.6.19.1.2.1.2.13.47.67.111.109.109.111.110.47.115.116.97.116.115|2|1 +1.3.6.1.4.1.3375.2.2.6.19.1.2.1.3.13.47.67.111.109.109.111.110.47.115.116.97.116.115|4| +1.3.6.1.4.1.3375.2.2.6.19.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.19.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.1.11.47.67.111.109.109.111.110.47.115.105.112|4x|2f436f6d6d6f6e2f736970 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.2.11.47.67.111.109.109.111.110.47.115.105.112|2|1 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.3.11.47.67.111.109.109.111.110.47.115.105.112|4| +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.4.11.47.67.111.109.109.111.110.47.115.105.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.5.11.47.67.111.109.109.111.110.47.115.105.112|2|1 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.6.11.47.67.111.109.109.111.110.47.115.105.112|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.7.11.47.67.111.109.109.111.110.47.115.105.112|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.8.11.47.67.111.109.109.111.110.47.115.105.112|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.9.11.47.67.111.109.109.111.110.47.115.105.112|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.10.11.47.67.111.109.109.111.110.47.115.105.112|4| +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.11.11.47.67.111.109.109.111.110.47.115.105.112|4| +1.3.6.1.4.1.3375.2.2.6.20.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.20.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.1.11.47.67.111.109.109.111.110.47.115.105.112|4x|2f436f6d6d6f6e2f736970 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.2.11.47.67.111.109.109.111.110.47.115.105.112|70|0 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.3.11.47.67.111.109.109.111.110.47.115.105.112|70|0 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.4.11.47.67.111.109.109.111.110.47.115.105.112|70|0 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.5.11.47.67.111.109.109.111.110.47.115.105.112|70|0 +1.3.6.1.4.1.3375.2.2.6.21.1.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.1.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f6973657373696f6e +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.1.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|4x|2f436f6d6d6f6e2f6973657373696f6e2d6d617069 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.1.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|4x|2f436f6d6d6f6e2f6973657373696f6e2d656e6372797074 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.1.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|4x|2f436f6d6d6f6e2f6973657373696f6e2d736f6674776f63 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.2.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.2.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.2.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.2.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.3.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.3.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.3.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.3.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.4.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.4.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.4.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.4.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.5.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.5.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.5.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.5.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.6.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.6.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.6.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.6.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.7.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.7.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.7.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.7.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.8.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.8.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.8.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.8.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.9.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.9.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.9.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.9.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.10.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|3 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.10.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|3 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.10.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|3 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.10.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|3 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.11.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.11.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|4| +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.11.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|4| +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.11.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|4| +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.12.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.12.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|66|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.12.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|66|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.12.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|66|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.13.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.13.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.13.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.13.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.14.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.14.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.14.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.14.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.15.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|4x|6465666c6174652c6c7a6f2c627a6970322c +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.15.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|4x|6465666c6174652c6c7a6f2c627a6970322c +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.15.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|4x|6465666c6174652c6c7a6f2c627a6970322c +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.15.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|4x|6465666c6174652c6c7a6f2c627a6970322c +1.3.6.1.4.1.3375.2.2.6.21.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.21.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.1.0|2|2 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.4.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.4.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.5.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|1024 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.5.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|1024 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.6.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|4096 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.6.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|131072 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.7.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.7.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.8.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.8.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.9.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|8192 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.9.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|16384 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.10.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|16384 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.10.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|65536 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.11.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.11.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.12.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.12.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.13.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.13.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.14.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.14.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.15.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|90 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.15.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|90 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.16.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|75 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.16.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|75 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.17.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.17.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.2.1.0|2|2 +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.22.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.22.4.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.2|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.2|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.2|2|2 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.2|2|2 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|4x|746578742f +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.2|4x|6170706c69636174696f6e2f28786d6c7c782d6a61766173637269707429 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|4x|746578742f +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.2|4x|6170706c69636174696f6e2f28786d6c7c782d6a61766173637269707429 +1.3.6.1.4.1.3375.2.2.6.22.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.22.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.22.6.2.0|2|2 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.4.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.4.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.5.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.5.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.6.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.6.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.7.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.7.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.8.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.8.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.9.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.9.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.10.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.10.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.11.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.11.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.12.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.12.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.13.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.13.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.14.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.14.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.15.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.15.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.16.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.16.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.17.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.17.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.18.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.18.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.19.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.19.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.20.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.20.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.21.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.21.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.22.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.22.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.23.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.23.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.24.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.24.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.25.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.25.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.26.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.26.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.1.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.1.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.1.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|4x|2f436f6d6d6f6e2f6f7074696d697a65642d63616368696e67 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.1.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|4x|2f436f6d6d6f6e2f61706d2d656e64757365722d69662d6361636865 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.1.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f6f7074696d697a65642d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.2.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.2.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.2.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.2.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.3.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.3.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.3.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.3.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.4.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|100 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.4.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|10 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.4.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|50 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.4.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|6144 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.5.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|10000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.5.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|10000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.5.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.5.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|10000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.6.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|3600 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.6.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|86400 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.6.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|36000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.6.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|3600 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.7.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|500 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.7.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|0 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.7.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|5 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.7.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.8.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|50000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.8.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|2000000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.8.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|12000000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.8.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|67108864 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.9.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|2|2 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.9.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|2|2 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.9.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|2|2 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.9.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|2|2 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.10.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|9 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.10.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|9 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.10.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|9 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.10.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|9 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.11.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.11.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.11.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.11.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.23.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.23.3.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.1.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110.1|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.1.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103.1|4x|2f436f6d6d6f6e2f6f7074696d697a65642d63616368696e67 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.1.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101.1|4x|2f436f6d6d6f6e2f61706d2d656e64757365722d69662d6361636865 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.1.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110.1|4x|2f436f6d6d6f6e2f6f7074696d697a65642d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.2.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.2.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103.1|2|1 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.2.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101.1|2|1 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.2.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.3.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.3.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.3.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.3.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.23.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.23.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.23.5.2.0|2|4 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.1.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.1.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|4x|2f436f6d6d6f6e2f6f7074696d697a65642d63616368696e67 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.1.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|4x|2f436f6d6d6f6e2f61706d2d656e64757365722d69662d6361636865 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.1.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f6f7074696d697a65642d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.2.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.2.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.2.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.2.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.3.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.3.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.3.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.3.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.4.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.4.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.4.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.4.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.5.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.5.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.5.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.5.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.6.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.6.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.6.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.6.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.7.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.7.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.7.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.7.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.8.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.8.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.8.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.8.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.9.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.9.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.9.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.9.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.10.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.10.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.10.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.10.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.11.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.11.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.11.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.11.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.12.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.12.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.12.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.12.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.13.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.13.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.13.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.13.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.14.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.14.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.14.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.14.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.15.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.15.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.15.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.15.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.16.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.16.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.16.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.16.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.17.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.17.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.17.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.17.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.18.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.18.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.18.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.18.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.19.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.19.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.19.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.19.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.24.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.24.1.2.1.1.11.47.67.111.109.109.111.110.47.100.111.115|4x|2f436f6d6d6f6e2f646f73 +1.3.6.1.4.1.3375.2.2.6.24.1.2.1.2.11.47.67.111.109.109.111.110.47.100.111.115|2|1 +1.3.6.1.4.1.3375.2.2.6.24.1.2.1.3.11.47.67.111.109.109.111.110.47.100.111.115|4| +1.3.6.1.4.1.3375.2.2.6.24.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.24.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.24.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.24.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.25.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.25.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.25.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.25.3.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.26.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.1.12.47.67.111.109.109.111.110.47.118.54.114.100|4x|2f436f6d6d6f6e2f76367264 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.2.12.47.67.111.109.109.111.110.47.118.54.114.100|2|1 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.3.12.47.67.111.109.109.111.110.47.118.54.114.100|4| +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.4.12.47.67.111.109.109.111.110.47.118.54.114.100|2|1 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.5.12.47.67.111.109.109.111.110.47.118.54.114.100|4x|00000000 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.6.12.47.67.111.109.109.111.110.47.118.54.114.100|66|0 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.7.12.47.67.111.109.109.111.110.47.118.54.114.100|2|2 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.8.12.47.67.111.109.109.111.110.47.118.54.114.100|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.9.12.47.67.111.109.109.111.110.47.118.54.114.100|66|56 +1.3.6.1.4.1.3375.2.2.6.27.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.1.12.47.67.111.109.109.111.110.47.112.112.116.112|4x|2f436f6d6d6f6e2f70707470 +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.2.12.47.67.111.109.109.111.110.47.112.112.116.112|4| +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.3.12.47.67.111.109.109.111.110.47.112.112.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.4.12.47.67.111.109.109.111.110.47.112.112.116.112|4| +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.5.12.47.67.111.109.109.111.110.47.112.112.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.6.12.47.67.111.109.109.111.110.47.112.112.116.112|4| +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.7.12.47.67.111.109.109.111.110.47.112.112.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.27.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.27.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.1.12.47.67.111.109.109.111.110.47.112.112.116.112|4x|2f436f6d6d6f6e2f70707470 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.2.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.3.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.4.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.5.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.6.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.7.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.8.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.9.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.10.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.11.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.12.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.13.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.14.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.15.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.16.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.28.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.28.2.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.1.11.47.67.111.109.109.111.110.47.112.99.112|4x|2f436f6d6d6f6e2f706370 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.2.11.47.67.111.109.109.111.110.47.112.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.3.11.47.67.111.109.109.111.110.47.112.99.112|4| +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.4.11.47.67.111.109.109.111.110.47.112.99.112|66|5351 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.5.11.47.67.111.109.109.111.110.47.112.99.112|66|5350 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.6.11.47.67.111.109.109.111.110.47.112.99.112|66|600 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.7.11.47.67.111.109.109.111.110.47.112.99.112|66|86400 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.8.11.47.67.111.109.109.111.110.47.112.99.112|66|60 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.9.11.47.67.111.109.109.111.110.47.112.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.10.11.47.67.111.109.109.111.110.47.112.99.112|66|1 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.11.11.47.67.111.109.109.111.110.47.112.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.12.11.47.67.111.109.109.111.110.47.112.99.112|4| +1.3.6.1.4.1.3375.2.2.6.28.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.28.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.28.4.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.29.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.1.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|4x|2f436f6d6d6f6e2f616c675f6c6f675f70726f66696c65 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.2.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.3.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.4.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.5.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.6.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.7.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.8.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.9.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.10.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.29.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.29.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.29.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.29.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.30.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.1.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|4x|2f436f6d6d6f6e2f6c736e5f6c6f675f70726f66696c65 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.2.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.3.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.4.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.5.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.6.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.7.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.8.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.9.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.10.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.11.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.30.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.30.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.31.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.1.12.47.67.111.109.109.111.110.47.116.102.116.112|4x|2f436f6d6d6f6e2f74667470 +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.2.12.47.67.111.109.109.111.110.47.116.102.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.3.12.47.67.111.109.109.111.110.47.116.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.4.12.47.67.111.109.109.111.110.47.116.102.116.112|66|30 +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.5.12.47.67.111.109.109.111.110.47.116.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.6.12.47.67.111.109.109.111.110.47.116.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.31.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.31.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.31.2.3.1.1.12.47.67.111.109.109.111.110.47.116.102.116.112|4x|2f436f6d6d6f6e2f74667470 +1.3.6.1.4.1.3375.2.2.6.31.2.3.1.2.12.47.67.111.109.109.111.110.47.116.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.31.2.3.1.3.12.47.67.111.109.109.111.110.47.116.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.31.2.3.1.4.12.47.67.111.109.109.111.110.47.116.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.32.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.1.13.47.67.111.109.109.111.110.47.104.116.116.112.50|4x|2f436f6d6d6f6e2f6874747032 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.2.13.47.67.111.109.109.111.110.47.104.116.116.112.50|2|1 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.3.13.47.67.111.109.109.111.110.47.104.116.116.112.50|4| +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.4.13.47.67.111.109.109.111.110.47.104.116.116.112.50|2|0 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.5.13.47.67.111.109.109.111.110.47.104.116.116.112.50|4x|582d4854545032 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.6.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|10 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.7.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|300 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.8.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|32 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.9.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|2048 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.10.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|16384 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.11.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|4096 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.12.13.47.67.111.109.109.111.110.47.104.116.116.112.50|2|1 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.13.13.47.67.111.109.109.111.110.47.104.116.116.112.50|2|0 +1.3.6.1.4.1.3375.2.2.6.32.2.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.32.2.2.1.1.13.47.67.111.109.109.111.110.47.104.116.116.112.50.1|4x|2f436f6d6d6f6e2f6874747032 +1.3.6.1.4.1.3375.2.2.6.32.2.2.1.2.13.47.67.111.109.109.111.110.47.104.116.116.112.50.1|2|1 +1.3.6.1.4.1.3375.2.2.6.32.2.2.1.3.13.47.67.111.109.109.111.110.47.104.116.116.112.50.1|2|0 +1.3.6.1.4.1.3375.2.2.6.32.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.32.3.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.1.13.47.67.111.109.109.111.110.47.104.116.116.112.50|4x|2f436f6d6d6f6e2f6874747032 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.2.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.3.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.4.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.5.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.6.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.7.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.8.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.9.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.10.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.11.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.12.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.13.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.14.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.15.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.16.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.17.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.18.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.19.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.20.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.21.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.22.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.23.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.24.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.25.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.26.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.27.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.28.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.29.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.30.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.31.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.32.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.33.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.34.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.35.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.36.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.33.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.33.1.2.1.1.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|4x|2f436f6d6d6f6e2f776562736f636b6574 +1.3.6.1.4.1.3375.2.2.6.33.1.2.1.2.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|2|1 +1.3.6.1.4.1.3375.2.2.6.33.1.2.1.3.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|4| +1.3.6.1.4.1.3375.2.2.6.33.1.2.1.4.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|2|3 +1.3.6.1.4.1.3375.2.2.6.33.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.33.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.1.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|4x|2f436f6d6d6f6e2f776562736f636b6574 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.2.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.3.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.4.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.5.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.6.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.7.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.8.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.9.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.10.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.11.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.12.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.13.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.14.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.15.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.16.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.17.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.18.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.19.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.20.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.21.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.22.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.23.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.24.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.25.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.26.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.27.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.28.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.34.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.1.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|4x|2f436f6d6d6f6e2f7463702d616e616c7974696373 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.2.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.3.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|4| +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.4.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.5.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.6.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.7.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.8.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.9.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.10.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.11.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.12.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.13.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.14.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.15.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.16.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|4| +1.3.6.1.4.1.3375.2.2.6.35.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.1.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4x|2f436f6d6d6f6e2f6970736563616c67 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.2.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|2|1 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.3.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4| +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.4.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|66|3600 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.5.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|66|5 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.6.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|66|3 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.7.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4| +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.8.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4| +1.3.6.1.4.1.3375.2.2.6.35.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.35.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.1.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4x|2f436f6d6d6f6e2f6970736563616c67 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.2.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.3.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.4.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.5.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.6.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.36.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.1.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|4x|2f436f6d6d6f6e2f73706c697473657373696f6e636c69656e74 +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.2.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.3.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.4.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.5.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.36.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.36.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.1.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|4x|2f436f6d6d6f6e2f73706c697473657373696f6e636c69656e74 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.2.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.3.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.4.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.5.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.6.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.7.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.8.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.9.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.37.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.1.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|4x|2f436f6d6d6f6e2f73706c697473657373696f6e736572766572 +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.2.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|2|1 +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.3.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|4| +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.4.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|2|0 +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.5.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.37.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.37.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.1.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|4x|2f436f6d6d6f6e2f73706c697473657373696f6e736572766572 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.2.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.3.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.4.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.5.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.6.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.7.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.8.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.9.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.38.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.38.1.2.1.1.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|4x|2f436f6d6d6f6e2f687474702d70726f78792d636f6e6e656374 +1.3.6.1.4.1.3375.2.2.6.38.1.2.1.2.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.6.38.1.2.1.3.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|4| +1.3.6.1.4.1.3375.2.2.6.38.1.2.1.4.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.6.38.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.38.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.1.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|4x|2f436f6d6d6f6e2f687474702d70726f78792d636f6e6e656374 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.2.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.3.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.4.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.5.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.6.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.7.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.8.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.9.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.10.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.39.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.1.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f6469616d6574657273657373696f6e +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.2.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.3.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.4.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.5.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|10 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.6.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.7.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.8.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.9.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|5 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.10.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.11.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.12.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|1024 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.13.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|131072 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.14.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|90 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.15.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|60 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.16.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.17.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.18.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|30 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.19.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.20.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.21.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4x|53455353494f4e2d49445b305d +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.22.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|180 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.23.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.24.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.25.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.26.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.27.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.28.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.29.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.30.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|3375 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.31.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.32.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.33.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.34.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.35.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.36.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.37.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.38.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.39.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.40.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.41.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.42.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.43.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.44.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.45.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.46.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|300 +1.3.6.1.4.1.3375.2.2.6.39.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.39.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.1.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f6469616d6574657273657373696f6e +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.2.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.3.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.4.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.5.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.6.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.7.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.8.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.9.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.10.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.11.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.12.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.13.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.14.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.15.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.16.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.17.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.18.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.19.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.20.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.21.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.22.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.23.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.24.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.25.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.26.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.27.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.28.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.29.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.30.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.31.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.32.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.33.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.34.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.35.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.36.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.37.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.38.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.39.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.40.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.41.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.42.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.43.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.44.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.45.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.46.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.47.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.1.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4x|2f436f6d6d6f6e2f6469616d65746572726f75746572 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.2.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|2|1 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.3.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4| +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.4.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.5.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4x|2f436f6d6d6f6e2f747261666669632d67726f75702d31 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.6.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.7.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.8.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.9.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.10.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.11.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.12.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.13.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.14.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.15.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|2|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.16.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|2|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.17.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|2|0 +1.3.6.1.4.1.3375.2.2.6.40.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.40.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.1.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4x|2f436f6d6d6f6e2f6469616d65746572726f75746572 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.2.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4| +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.3.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.4.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.5.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.6.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.7.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.8.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.9.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.10.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.11.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.12.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.13.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.14.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.15.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.16.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.17.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.18.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.19.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.20.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.21.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.22.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.23.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.24.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.25.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.26.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.27.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.28.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.29.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.30.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.31.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.32.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.33.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.34.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.35.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.36.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.37.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.38.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.39.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.40.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.41.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.42.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.41.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.41.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.41.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.41.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.42.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.42.1.2.0|2|2 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.1.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|4x|2f436f6d6d6f6e2f73697073657373696f6e +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.1.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|4x|2f436f6d6d6f6e2f73697073657373696f6e2d616c67 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.2.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|4| +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.2.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|4| +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.3.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.3.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.4.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.4.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.5.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.5.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.6.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.6.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.7.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.7.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.8.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.8.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.9.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.9.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.10.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.10.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.11.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.11.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.12.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.12.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.13.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.13.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.14.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.14.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.15.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.15.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.16.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.16.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.17.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.17.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.18.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.18.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.19.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.19.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.20.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.20.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.21.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.21.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.22.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.22.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.23.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.23.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.24.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.24.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.25.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.25.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.26.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.26.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.27.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.27.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.28.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.28.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.29.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.29.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.30.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.30.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.31.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.31.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.32.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.32.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.33.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.33.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.34.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.34.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.35.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.35.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.36.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.36.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.37.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.37.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.38.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.38.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.39.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.39.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.40.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.40.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.41.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.41.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.42.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.42.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.43.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.43.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.44.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.44.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.45.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.45.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.46.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.46.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.47.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.47.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.48.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.48.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.49.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.49.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.50.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.50.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.51.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.51.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.52.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.52.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.53.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.53.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.54.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.54.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.55.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.55.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.56.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.56.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.57.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.57.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.58.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.58.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.59.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.59.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.60.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.60.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.43.1.2.0|2|2 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.1.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|4x|2f436f6d6d6f6e2f736970726f75746572 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.1.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|4x|2f436f6d6d6f6e2f736970726f757465722d616c67 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.2.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|4| +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.2.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|4| +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.3.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.3.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.4.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.4.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.5.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.5.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.6.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.6.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.7.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.7.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.8.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.8.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.9.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.9.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.10.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.10.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.11.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.11.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.12.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.12.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.13.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.13.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.14.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.14.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.15.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.15.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.16.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.16.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.17.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.17.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.18.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.18.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.19.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.19.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.20.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.20.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.21.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.21.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.22.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.22.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.23.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.23.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.24.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.24.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.25.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.25.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.26.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.26.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.27.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.27.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.28.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.28.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.29.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.29.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.30.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.30.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.31.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.31.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.32.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.32.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.33.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.33.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.34.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.34.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.35.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.35.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.36.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.36.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.37.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.37.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.38.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.38.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.39.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.39.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.40.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.40.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.41.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.41.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.42.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.42.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.43.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.43.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.44.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.44.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.44.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.44.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.44.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.44.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.7.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.7.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.7.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.8.1.1.0|2|15 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116|4x|2f436f6d6d6f6e2f5f7379735f68747470735f7265646972656374 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104|2|1 +1.3.6.1.4.1.3375.2.2.8.2.1.0|2|58 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f68747470735f7265646972656374 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4x|485454505f524553504f4e53455f44415441 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4x|485454505f524551554553545f44415441 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4x|4543415f524551554553545f44454e494544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4x|4543415f524551554553545f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4x|485454505f524553504f4e53455f52454c45415345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.8.3.2.0|2|58 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f68747470735f7265646972656374 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4x|485454505f524553504f4e53455f44415441 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4x|485454505f524551554553545f44415441 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4x|4543415f524551554553545f44454e494544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4x|4543415f524551554553545f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4x|485454505f524553504f4e53455f52454c45415345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|23274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|73498 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|18894 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|10988 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|49644 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|27400 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|23274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|73498 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|18894 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|10988 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|49644 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|27400 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|14118 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|41056 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|15918 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|3342 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|33224 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|17354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.9.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.9.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.6.2.0|2|0 +1.3.6.1.4.1.3375.2.2.9.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.8.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.8.2.0|2|0 +1.3.6.1.4.1.3375.2.2.9.9.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.1.1|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.1.1|4x|73657276657231 +1.3.6.1.4.1.3375.2.2.10.1.2.1.1.2|4x|73657276657232 +1.3.6.1.4.1.3375.2.2.10.1.2.1.1.3|4x|73657276657233 +1.3.6.1.4.1.3375.2.2.10.1.2.1.2.1|2|16 +1.3.6.1.4.1.3375.2.2.10.1.2.1.2.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.2.3|2|16 +1.3.6.1.4.1.3375.2.2.10.1.2.1.3.1|4x|4a61646564204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.3375.2.2.10.1.2.1.3.2|4x|7468656972206163746564206b657074206275742064726976696e67206b657074207a6f6d626965732064726976696e6720627574 +1.3.6.1.4.1.3375.2.2.10.1.2.1.3.3|4x|627574206b657074204a61646564207a6f6d62696573206275742061637465642074686569722064726976696e67 +1.3.6.1.4.1.3375.2.2.10.1.2.1.4.1|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.4.2|2|16 +1.3.6.1.4.1.3375.2.2.10.1.2.1.4.3|2|4 +1.3.6.1.4.1.3375.2.2.10.1.2.1.5.1|4x|64726976696e67207468656972206275742064726976696e67206b657074206163746564206275742064726976696e67 +1.3.6.1.4.1.3375.2.2.10.1.2.1.5.2|4x|717561696e746c79206163746564204a61646564206b65707420627574204a61646564206163746564207a6f6d62696573 +1.3.6.1.4.1.3375.2.2.10.1.2.1.5.3|4x|62757420666f7277617264206b6570742064726976696e67204a61646564206163746564207a6f6d6269657320616374656420627574 +1.3.6.1.4.1.3375.2.2.10.1.2.1.6.1|66|38658 +1.3.6.1.4.1.3375.2.2.10.1.2.1.6.2|66|3512 +1.3.6.1.4.1.3375.2.2.10.1.2.1.6.3|66|55345 +1.3.6.1.4.1.3375.2.2.10.1.2.1.7.1|2|24 +1.3.6.1.4.1.3375.2.2.10.1.2.1.7.2|2|20 +1.3.6.1.4.1.3375.2.2.10.1.2.1.7.3|2|20 +1.3.6.1.4.1.3375.2.2.10.1.2.1.8.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.8.2|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.8.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.9.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.9.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.9.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.10.1|2|27 +1.3.6.1.4.1.3375.2.2.10.1.2.1.10.2|2|15 +1.3.6.1.4.1.3375.2.2.10.1.2.1.10.3|2|16 +1.3.6.1.4.1.3375.2.2.10.1.2.1.11.1|4|their +1.3.6.1.4.1.3375.2.2.10.1.2.1.11.2|4x|7468656972206b65707420717561696e746c79 +1.3.6.1.4.1.3375.2.2.10.1.2.1.11.3|4x|6b657074204a61646564207a6f6d62696573206f78656e207a6f6d62696573206163746564206b657074206163746564204a61646564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.12.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.12.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.12.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.13.1|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.13.2|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.13.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.14.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.14.2|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.14.3|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.15.1|2|5 +1.3.6.1.4.1.3375.2.2.10.1.2.1.15.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.15.3|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.16.1|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.16.2|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.16.3|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.17.1|4x|64726976696e6720666f727761726420666f7277617264206b65707420666f727761726420627574 +1.3.6.1.4.1.3375.2.2.10.1.2.1.17.2|4x|746865697220627574207a6f6d6269657320666f72776172642064726976696e67207a6f6d62696573206f78656e +1.3.6.1.4.1.3375.2.2.10.1.2.1.17.3|4|kept +1.3.6.1.4.1.3375.2.2.10.1.2.1.18.1|4x|6275742064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.3375.2.2.10.1.2.1.18.2|4x|6f78656e206163746564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.18.3|4x|717561696e746c79206163746564206f78656e206b657074 +1.3.6.1.4.1.3375.2.2.10.1.2.1.19.1|4x|746865697220616374656420627574206b65707420627574206f78656e207a6f6d62696573204a61646564207468656972 +1.3.6.1.4.1.3375.2.2.10.1.2.1.19.2|4x|6f78656e20666f7277617264207468656972 +1.3.6.1.4.1.3375.2.2.10.1.2.1.19.3|4|their +1.3.6.1.4.1.3375.2.2.10.1.2.1.20.1|4|forward +1.3.6.1.4.1.3375.2.2.10.1.2.1.20.2|4x|4a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.3375.2.2.10.1.2.1.20.3|4x|4a61646564206f78656e206b657074207468656972204a61646564206b657074206b657074206f78656e +1.3.6.1.4.1.3375.2.2.10.1.2.1.21.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.21.2|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.21.3|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.22.1|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.22.2|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.22.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.23.1|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.23.2|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.23.3|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.24.1|2|19 +1.3.6.1.4.1.3375.2.2.10.1.2.1.24.2|2|23 +1.3.6.1.4.1.3375.2.2.10.1.2.1.24.3|2|22 +1.3.6.1.4.1.3375.2.2.10.1.2.1.25.1|4x|746865697220717561696e746c79206b657074206275742064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.3375.2.2.10.1.2.1.25.2|4x|6f78656e20666f7277617264206b65707420717561696e746c7920746865697220666f727761726420627574 +1.3.6.1.4.1.3375.2.2.10.1.2.1.25.3|4x|64726976696e67206163746564206163746564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.26.1|2|5 +1.3.6.1.4.1.3375.2.2.10.1.2.1.26.2|2|22 +1.3.6.1.4.1.3375.2.2.10.1.2.1.26.3|2|17 +1.3.6.1.4.1.3375.2.2.10.1.2.1.27.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.27.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.27.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.28.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.28.2|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.28.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.29.1|4x|717561696e746c792064726976696e67204a61646564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.29.2|4x|616374656420666f727761726420717561696e746c7920666f7277617264 +1.3.6.1.4.1.3375.2.2.10.1.2.1.29.3|4x|4a6164656420616374656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.3375.2.2.10.1.2.1.30.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.30.2|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.30.3|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.31.1|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.3375.2.2.10.1.2.1.31.2|4x|7a6f6d6269657320616374656420666f727761726420717561696e746c792064726976696e67206163746564204a61646564207a6f6d62696573204a61646564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.31.3|4x|64726976696e67207a6f6d62696573 +1.3.6.1.4.1.3375.2.2.10.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.10.2.3.1.1.1|4x|73657276657231 +1.3.6.1.4.1.3375.2.2.10.2.3.1.1.2|4x|73657276657232 +1.3.6.1.4.1.3375.2.2.10.2.3.1.1.3|4x|73657276657233 +1.3.6.1.4.1.3375.2.2.10.2.3.1.2.1|70|2580586026032579311 +1.3.6.1.4.1.3375.2.2.10.2.3.1.2.2|70|11172384268660140173 +1.3.6.1.4.1.3375.2.2.10.2.3.1.2.3|70|2553084130791286975 +1.3.6.1.4.1.3375.2.2.10.2.3.1.3.1|70|15792062180538603785 +1.3.6.1.4.1.3375.2.2.10.2.3.1.3.2|70|15754815062660405643 +1.3.6.1.4.1.3375.2.2.10.2.3.1.3.3|70|12278313780530470535 +1.3.6.1.4.1.3375.2.2.10.2.3.1.4.1|70|5455173712922532263 +1.3.6.1.4.1.3375.2.2.10.2.3.1.4.2|70|8840963685073062340 +1.3.6.1.4.1.3375.2.2.10.2.3.1.4.3|70|5210751663333912746 +1.3.6.1.4.1.3375.2.2.10.2.3.1.5.1|70|1547624629512812205 +1.3.6.1.4.1.3375.2.2.10.2.3.1.5.2|70|5611498479154160049 +1.3.6.1.4.1.3375.2.2.10.2.3.1.5.3|70|7562156278071364496 +1.3.6.1.4.1.3375.2.2.10.2.3.1.6.1|70|11904678965118907281 +1.3.6.1.4.1.3375.2.2.10.2.3.1.6.2|70|12423310789449570600 +1.3.6.1.4.1.3375.2.2.10.2.3.1.6.3|70|9408615615154226361 +1.3.6.1.4.1.3375.2.2.10.2.3.1.7.1|70|11896327715836113592 +1.3.6.1.4.1.3375.2.2.10.2.3.1.7.2|70|10531590820499310087 +1.3.6.1.4.1.3375.2.2.10.2.3.1.7.3|70|3625339555017798429 +1.3.6.1.4.1.3375.2.2.10.2.3.1.8.1|70|6954252997748630202 +1.3.6.1.4.1.3375.2.2.10.2.3.1.8.2|70|1010745241446359894 +1.3.6.1.4.1.3375.2.2.10.2.3.1.8.3|70|13431017896535443743 +1.3.6.1.4.1.3375.2.2.10.2.3.1.9.1|70|1167353241621793737 +1.3.6.1.4.1.3375.2.2.10.2.3.1.9.2|70|12909311763102489665 +1.3.6.1.4.1.3375.2.2.10.2.3.1.9.3|70|16533040197473517198 +1.3.6.1.4.1.3375.2.2.10.2.3.1.10.1|70|10635963925216629400 +1.3.6.1.4.1.3375.2.2.10.2.3.1.10.2|70|8494103292982450244 +1.3.6.1.4.1.3375.2.2.10.2.3.1.10.3|70|8042290749796396792 +1.3.6.1.4.1.3375.2.2.10.2.3.1.11.1|70|6410999672064202998 +1.3.6.1.4.1.3375.2.2.10.2.3.1.11.2|70|3349618053620684874 +1.3.6.1.4.1.3375.2.2.10.2.3.1.11.3|70|2212534891855846905 +1.3.6.1.4.1.3375.2.2.10.2.3.1.12.1|66|3946087105 +1.3.6.1.4.1.3375.2.2.10.2.3.1.12.2|66|1436622959 +1.3.6.1.4.1.3375.2.2.10.2.3.1.12.3|66|3431368676 +1.3.6.1.4.1.3375.2.2.10.2.3.1.13.1|70|6853310783815423725 +1.3.6.1.4.1.3375.2.2.10.2.3.1.13.2|70|11831962685014470387 +1.3.6.1.4.1.3375.2.2.10.2.3.1.13.3|70|1099514653487860763 +1.3.6.1.4.1.3375.2.2.10.2.3.1.14.1|70|1563356245765348881 +1.3.6.1.4.1.3375.2.2.10.2.3.1.14.2|70|13293349144712173171 +1.3.6.1.4.1.3375.2.2.10.2.3.1.14.3|70|6796586915286827084 +1.3.6.1.4.1.3375.2.2.10.2.3.1.15.1|70|4216244675325337046 +1.3.6.1.4.1.3375.2.2.10.2.3.1.15.2|70|6760305275432328057 +1.3.6.1.4.1.3375.2.2.10.2.3.1.15.3|70|18295941540901000727 +1.3.6.1.4.1.3375.2.2.10.2.3.1.16.1|70|1856990584099225311 +1.3.6.1.4.1.3375.2.2.10.2.3.1.16.2|70|6745395210649643206 +1.3.6.1.4.1.3375.2.2.10.2.3.1.16.3|70|11905655143255909628 +1.3.6.1.4.1.3375.2.2.10.2.3.1.17.1|70|12196755595568264176 +1.3.6.1.4.1.3375.2.2.10.2.3.1.17.2|70|5457540154927269641 +1.3.6.1.4.1.3375.2.2.10.2.3.1.17.3|70|11074415824410376018 +1.3.6.1.4.1.3375.2.2.10.2.3.1.18.1|70|5898617446408699136 +1.3.6.1.4.1.3375.2.2.10.2.3.1.18.2|70|8041714224746929584 +1.3.6.1.4.1.3375.2.2.10.2.3.1.18.3|70|16182431002550700483 +1.3.6.1.4.1.3375.2.2.10.2.3.1.19.1|66|1857700894 +1.3.6.1.4.1.3375.2.2.10.2.3.1.19.2|66|2844129800 +1.3.6.1.4.1.3375.2.2.10.2.3.1.19.3|66|1038501472 +1.3.6.1.4.1.3375.2.2.10.2.3.1.20.1|70|2363576342980948065 +1.3.6.1.4.1.3375.2.2.10.2.3.1.20.2|70|11717927443651990072 +1.3.6.1.4.1.3375.2.2.10.2.3.1.20.3|70|6882134045911163708 +1.3.6.1.4.1.3375.2.2.10.2.3.1.21.1|70|13786017861635043472 +1.3.6.1.4.1.3375.2.2.10.2.3.1.21.2|70|7297620963115593822 +1.3.6.1.4.1.3375.2.2.10.2.3.1.21.3|70|1573870296780287764 +1.3.6.1.4.1.3375.2.2.10.2.3.1.22.1|70|18393328365973006250 +1.3.6.1.4.1.3375.2.2.10.2.3.1.22.2|70|17556577878145267364 +1.3.6.1.4.1.3375.2.2.10.2.3.1.22.3|70|12781457142813950719 +1.3.6.1.4.1.3375.2.2.10.2.3.1.23.1|70|17454088778896331207 +1.3.6.1.4.1.3375.2.2.10.2.3.1.23.2|70|9520194793073463464 +1.3.6.1.4.1.3375.2.2.10.2.3.1.23.3|70|6390989416270317085 +1.3.6.1.4.1.3375.2.2.10.2.3.1.24.1|70|18097926869262363750 +1.3.6.1.4.1.3375.2.2.10.2.3.1.24.2|70|10545995722585709224 +1.3.6.1.4.1.3375.2.2.10.2.3.1.24.3|70|16186099239249902953 +1.3.6.1.4.1.3375.2.2.10.2.3.1.25.1|70|9040310437613830590 +1.3.6.1.4.1.3375.2.2.10.2.3.1.25.2|70|13241652256958635623 +1.3.6.1.4.1.3375.2.2.10.2.3.1.25.3|70|15933946765037033473 +1.3.6.1.4.1.3375.2.2.10.2.3.1.26.1|66|1179249442 +1.3.6.1.4.1.3375.2.2.10.2.3.1.26.2|66|3999102161 +1.3.6.1.4.1.3375.2.2.10.2.3.1.26.3|66|3107383744 +1.3.6.1.4.1.3375.2.2.10.2.3.1.27.1|70|18051887574704858142 +1.3.6.1.4.1.3375.2.2.10.2.3.1.27.2|70|1472355937439517287 +1.3.6.1.4.1.3375.2.2.10.2.3.1.27.3|70|11519109541425045302 +1.3.6.1.4.1.3375.2.2.10.2.3.1.28.1|70|2351118743226345413 +1.3.6.1.4.1.3375.2.2.10.2.3.1.28.2|70|17339034100746590056 +1.3.6.1.4.1.3375.2.2.10.2.3.1.28.3|70|7894081204269303338 +1.3.6.1.4.1.3375.2.2.10.2.3.1.29.1|66|610210647 +1.3.6.1.4.1.3375.2.2.10.2.3.1.29.2|66|334284393 +1.3.6.1.4.1.3375.2.2.10.2.3.1.29.3|66|3223932671 +1.3.6.1.4.1.3375.2.2.10.2.3.1.30.1|70|3267903350213335055 +1.3.6.1.4.1.3375.2.2.10.2.3.1.30.2|70|8314689465581065799 +1.3.6.1.4.1.3375.2.2.10.2.3.1.30.3|70|3461167602433649282 +1.3.6.1.4.1.3375.2.2.10.2.3.1.31.1|66|1552348694 +1.3.6.1.4.1.3375.2.2.10.2.3.1.31.2|66|2791266744 +1.3.6.1.4.1.3375.2.2.10.2.3.1.31.3|66|2160004614 +1.3.6.1.4.1.3375.2.2.10.2.3.1.32.1|66|1313356533 +1.3.6.1.4.1.3375.2.2.10.2.3.1.32.2|66|161112621 +1.3.6.1.4.1.3375.2.2.10.2.3.1.32.3|66|2983257280 +1.3.6.1.4.1.3375.2.2.10.2.3.1.33.1|66|1271665 +1.3.6.1.4.1.3375.2.2.10.2.3.1.33.2|66|4279932656 +1.3.6.1.4.1.3375.2.2.10.2.3.1.33.3|66|3288475630 +1.3.6.1.4.1.3375.2.2.10.2.3.1.34.1|66|3431690411 +1.3.6.1.4.1.3375.2.2.10.2.3.1.34.2|66|3750787822 +1.3.6.1.4.1.3375.2.2.10.2.3.1.34.3|66|986384471 +1.3.6.1.4.1.3375.2.2.10.2.3.1.35.1|66|3549469545 +1.3.6.1.4.1.3375.2.2.10.2.3.1.35.2|66|2894852545 +1.3.6.1.4.1.3375.2.2.10.2.3.1.35.3|66|840685738 +1.3.6.1.4.1.3375.2.2.10.2.3.1.36.1|70|10486552149431810547 +1.3.6.1.4.1.3375.2.2.10.2.3.1.36.2|70|3711836186712418901 +1.3.6.1.4.1.3375.2.2.10.2.3.1.36.3|70|10641863315444780199 +1.3.6.1.4.1.3375.2.2.10.2.3.1.37.1|70|7376301973141724708 +1.3.6.1.4.1.3375.2.2.10.2.3.1.37.2|70|10274176580546164106 +1.3.6.1.4.1.3375.2.2.10.2.3.1.37.3|70|4564848346832334322 +1.3.6.1.4.1.3375.2.2.10.2.3.1.38.1|70|16193568503839840899 +1.3.6.1.4.1.3375.2.2.10.2.3.1.38.2|70|672041460910788479 +1.3.6.1.4.1.3375.2.2.10.2.3.1.38.3|70|705928104456245194 +1.3.6.1.4.1.3375.2.2.10.2.3.1.39.1|70|15084732081104670673 +1.3.6.1.4.1.3375.2.2.10.2.3.1.39.2|70|6864319675147449985 +1.3.6.1.4.1.3375.2.2.10.2.3.1.39.3|70|9626321255861958057 +1.3.6.1.4.1.3375.2.2.10.2.3.1.40.1|70|3426361594601433499 +1.3.6.1.4.1.3375.2.2.10.2.3.1.40.2|70|5214377143184129447 +1.3.6.1.4.1.3375.2.2.10.2.3.1.40.3|70|1517991149375241786 +1.3.6.1.4.1.3375.2.2.10.2.3.1.41.1|70|5003274961088843167 +1.3.6.1.4.1.3375.2.2.10.2.3.1.41.2|70|16215270448109783567 +1.3.6.1.4.1.3375.2.2.10.2.3.1.41.3|70|9591593966216159496 +1.3.6.1.4.1.3375.2.2.10.2.3.1.42.1|70|12185235582057905886 +1.3.6.1.4.1.3375.2.2.10.2.3.1.42.2|70|16854096751786027431 +1.3.6.1.4.1.3375.2.2.10.2.3.1.42.3|70|17691355834692394059 +1.3.6.1.4.1.3375.2.2.10.2.3.1.43.1|70|871171362435151199 +1.3.6.1.4.1.3375.2.2.10.2.3.1.43.2|70|4084164868006869894 +1.3.6.1.4.1.3375.2.2.10.2.3.1.43.3|70|5149252869214112432 +1.3.6.1.4.1.3375.2.2.10.2.3.1.44.1|70|16679303338660545854 +1.3.6.1.4.1.3375.2.2.10.2.3.1.44.2|70|18363262408418279750 +1.3.6.1.4.1.3375.2.2.10.2.3.1.44.3|70|4865543542526736536 +1.3.6.1.4.1.3375.2.2.10.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.8.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.9.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.10.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.11.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.11.2.0|2|0 +1.3.6.1.4.1.3375.2.2.10.12.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.13.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.14.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.15.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.16.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.16.2.0|2|0 +1.3.6.1.4.1.3375.2.2.10.17.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.17.2.0|2|0 +1.3.6.1.4.1.3375.2.2.11.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.11.1.2.0|2|3 +1.3.6.1.4.1.3375.2.2.11.1.3.1.1.1|2|1 +1.3.6.1.4.1.3375.2.2.11.1.3.1.1.2|2|2 +1.3.6.1.4.1.3375.2.2.11.1.3.1.1.3|2|3 +1.3.6.1.4.1.3375.2.2.11.1.3.1.2.1|4x|4e6f20666c6f7720666f756e6420666f722041434b +1.3.6.1.4.1.3375.2.2.11.1.3.1.2.2|4x|4e6f206c6f63616c206c697374656e6572 +1.3.6.1.4.1.3375.2.2.11.1.3.1.2.3|4x|544350205253542066726f6d2072656d6f74652073797374656d +1.3.6.1.4.1.3375.2.2.11.1.3.1.3.1|70|4 +1.3.6.1.4.1.3375.2.2.11.1.3.1.3.2|70|131 +1.3.6.1.4.1.3375.2.2.11.1.3.1.3.3|70|2 +1.3.6.1.4.1.3375.2.2.12.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.12.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.4.2.0|2|0 +1.3.6.1.4.1.3375.2.2.12.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.7.2.0|2|0 +1.3.6.1.4.1.3375.2.2.12.8.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.8.2.0|2|0 +1.3.6.1.4.1.3375.2.2.12.9.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.10.1.0|2|0 +1.3.6.1.4.1.3375.2.2.13.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.13.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.14.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.6.2.0|2|0 +1.3.6.1.4.1.3375.2.2.14.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.7.2.0|2|0 +1.3.6.1.4.1.3375.2.2.15.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.15.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.15.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.15.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.15.2.3.1.1.9.47.67.111.109.109.111.110.47.48|4x|2f436f6d6d6f6e2f30 +1.3.6.1.4.1.3375.2.2.15.2.3.1.2.9.47.67.111.109.109.111.110.47.48|66|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.3.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.4.9.47.67.111.109.109.111.110.47.48|70|479385 +1.3.6.1.4.1.3375.2.2.15.2.3.1.5.9.47.67.111.109.109.111.110.47.48|70|47074715 +1.3.6.1.4.1.3375.2.2.15.2.3.1.6.9.47.67.111.109.109.111.110.47.48|70|507385 +1.3.6.1.4.1.3375.2.2.15.2.3.1.7.9.47.67.111.109.109.111.110.47.48|70|366882150 +1.3.6.1.4.1.3375.2.2.15.2.3.1.8.9.47.67.111.109.109.111.110.47.48|70|32 +1.3.6.1.4.1.3375.2.2.15.2.3.1.9.9.47.67.111.109.109.111.110.47.48|70|59617 +1.3.6.1.4.1.3375.2.2.15.2.3.1.10.9.47.67.111.109.109.111.110.47.48|66|2 +1.3.6.1.4.1.3375.2.2.15.2.3.1.11.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.12.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.13.9.47.67.111.109.109.111.110.47.48|70|8121108 +1.3.6.1.4.1.3375.2.2.15.2.3.1.14.9.47.67.111.109.109.111.110.47.48|70|685758772 +1.3.6.1.4.1.3375.2.2.15.2.3.1.15.9.47.67.111.109.109.111.110.47.48|70|8085044 +1.3.6.1.4.1.3375.2.2.15.2.3.1.16.9.47.67.111.109.109.111.110.47.48|70|351315737 +1.3.6.1.4.1.3375.2.2.15.2.3.1.17.9.47.67.111.109.109.111.110.47.48|70|32 +1.3.6.1.4.1.3375.2.2.15.2.3.1.18.9.47.67.111.109.109.111.110.47.48|70|59617 +1.3.6.1.4.1.3375.2.2.15.2.3.1.19.9.47.67.111.109.109.111.110.47.48|66|2 +1.3.6.1.4.1.3375.2.2.15.2.3.1.20.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.21.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.16.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.16.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.16.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.17.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.18.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.18.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.18.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.18.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.18.3.2.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.2.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.3.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.4.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.5.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.6.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.7.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.8.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.9.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.10.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.11.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.12.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.13.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.14.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.15.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.16.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.17.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.18.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.19.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.20.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.21.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.22.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.23.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.24.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.25.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.26.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.27.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.28.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.29.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.30.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.31.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.32.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.33.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.34.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.35.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.36.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.37.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.38.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.39.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.40.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.41.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.42.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.43.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.44.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.45.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.46.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.47.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.48.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.49.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.50.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.51.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.52.0|4| +1.3.6.1.4.1.3375.2.3.1.1.1.53.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.54.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.55.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.56.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.57.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.58.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.59.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.60.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.61.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.62.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.63.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.2.1.0|2|1 +1.3.6.1.4.1.3375.2.3.1.1.2.2.1.1.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115.1|2|1 +1.3.6.1.4.1.3375.2.3.1.1.2.2.1.2.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115.1|2|0 +1.3.6.1.4.1.3375.2.3.1.1.2.2.1.3.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115.1|4x|2f436f6d6d6f6e2f67746d2d73657474696e6773 +1.3.6.1.4.1.3375.2.3.1.1.3.1.0|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.1.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.2.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.3.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.4.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.5.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.6.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.7.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.8.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.9.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.10.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|2 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.11.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.12.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.13.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.14.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.15.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10000 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.16.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|25 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.17.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10000 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.18.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10000 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.19.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1000000 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.20.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.21.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.22.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.23.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|120 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.24.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|30 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.25.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|3600 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.26.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|12 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.27.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.28.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.29.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|2400 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.30.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|604800 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.31.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|2419200 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.32.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|604800 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.33.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|3 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.34.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|64 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.35.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|3 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.36.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|20 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.37.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|33434 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.38.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.39.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.40.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|95 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.41.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|90 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.42.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|95 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.43.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.44.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.45.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.46.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.47.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.48.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.49.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.50.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.51.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.52.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|4|default +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.53.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|180 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.54.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|300 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.55.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.56.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.57.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.58.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|32 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.59.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|128 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.60.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.61.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.62.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.63.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.64.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|4x|2f436f6d6d6f6e2f67746d2d73657474696e6773 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.65.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.1.2.1.2.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.3.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.4.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.5.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.6.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.7.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.8.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.9.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.10.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.11.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.12.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.13.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.14.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.15.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.16.0|66|0 +1.3.6.1.4.1.3375.2.3.1.2.1.17.0|66|0 +1.3.6.1.4.1.3375.2.3.1.2.1.18.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.19.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.20.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.21.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.1.2.2.2.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.3.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.4.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.5.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.6.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.7.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.8.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.9.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.10.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.11.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.12.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.13.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.14.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.15.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.16.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.17.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.18.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.19.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.20.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.21.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.22.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.23.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.24.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.25.0|70|0 +1.3.6.1.4.1.3375.2.3.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.2.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.2.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.2.5.1.0|2|0 +1.3.6.1.4.1.3375.2.3.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.3.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.3.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.3.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.4.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.6.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.5.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.6.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.6.2.0|2|0 +1.3.6.1.4.1.3375.2.3.6.7.1.0|2|0 +1.3.6.1.4.1.3375.2.3.7.1.1.0|2|12 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.11.47.67.111.109.109.111.110.47.65.79.76|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.11.47.67.111.109.109.111.110.47.67.78.67|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67|4x|2f436f6d6d6f6e2f5368616e67686169434e43 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.11.47.67.111.109.109.111.110.47.65.79.76|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.11.47.67.111.109.109.111.110.47.67.78.67|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107|2|2 +1.3.6.1.4.1.3375.2.3.7.2.1.0|2|856 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e67686169434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f5368616e67686169434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f5368616e67686169434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|4x|3139352e39332e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|4x|3139382e38312e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|4x|36342e31322e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|4x|3137322e3132382e302e302f3130 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|4x|3137322e3139322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|4x|3137322e3230302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|4x|3137322e3230322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|4x|3137322e3230382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|4x|3137322e3231322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|4x|3137322e3231362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|4x|3139352e39332e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|4x|3230322e36372e36362e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|4x|3230322e36372e36382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|4x|3230322e36372e37322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|4x|3230322e36372e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|4x|3230322e36372e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|4x|3230352e3138382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|4x|3135322e3136332e39362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|4x|3135322e3136332e3130302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|4x|3135322e3136332e3234302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|4x|3135322e3136332e3234382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|4x|3135322e3136332e3235322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|4x|3230322e36372e36352e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|4x|3230372e3230302e3131322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|4x|36302e302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|4x|3131362e322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|4x|3131372e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|4x|3131392e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|4x|3132302e302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|4x|3132332e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|4x|3132332e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|4x|3231382e372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|4x|3231382e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|4x|3232312e302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|4x|3232312e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|4x|35382e31362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|4x|36302e35352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|4x|36312e34382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|4x|36312e34392e302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|4x|36312e34392e342e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|4x|36312e34392e362e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|4x|36312e34392e372e302f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|4x|36312e34392e382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|4x|36312e35302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|4x|36312e35322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|4x|3131362e39352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|4x|3131382e37322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|4x|3131382e38302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|4x|3131392e33362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|4x|3131392e33392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|4x|3131392e34382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|4x|3131392e36322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|4x|3132302e38302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|4x|3132312e31362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|4x|3132322e39362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|3132342e36342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|4x|3132342e36362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|4x|3132342e36372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|4x|3132342e38382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|4x|3132342e38392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|4x|3132342e39302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|4x|3132342e39322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|4x|3132352e33322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|4x|3230322e39362e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|4x|3230322e39382e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|4x|3230322e39392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|4x|3230332e39332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|4x|3231302e31322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|4x|3231302e31352e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|4x|3231302e32312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|4x|3231302e32322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|4x|3231302e35312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|4x|3231302e35322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|4x|3231302e37382e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|4x|3231302e38322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|4x|3231382e31322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|4x|3231382e32342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|4x|3231382e32382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|4x|3231382e35362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|4x|3231382e36302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|4x|3231382e36322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|4x|3231382e36382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|4x|3232312e31322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|4x|3232312e31332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|4x|3232312e31342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|4x|35382e3134342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|4x|35382e3234302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|4x|36302e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|4x|36312e3133332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|36312e3133352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|4x|36312e3133362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|4x|36312e3133382e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|36312e3134382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|4x|36312e3135362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|4x|36312e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|4x|36312e3135392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|4x|36312e3136312e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|4x|36312e3136322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|4x|36312e3136372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|4x|36312e3136382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|4x|36312e3137362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|4x|36312e3137392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|4x|36312e3138312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|4x|36312e3138322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|4x|36312e3138392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|4x|36312e34392e31362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|4x|36312e34392e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|4x|36312e34392e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|4x|3131362e3131322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|4x|3131362e3131362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|4x|3131382e3231322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|4x|3131392e3130382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|4x|3131392e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|4x|3131392e3136322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|4x|3131392e3136342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|4x|3131392e3137362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|4x|3131392e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|4x|3132322e3133362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|4x|3132322e3135362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|4x|3132322e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|3132332e3131322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|4x|3132332e3132382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|4x|3132332e3133372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|4x|3132332e3133382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|4x|3132332e3134342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|4x|3132332e3134382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|4x|3132332e3135322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|4x|3132332e3138382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|4x|3132332e3233322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|4x|3132342e3132382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|4x|3132342e3136302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|4x|3132342e38392e36342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|4x|3132342e38392e38302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|4x|3132342e38392e38332e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|4x|3132342e38392e38342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|4x|3132342e38392e38382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|4x|3132342e38392e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|4x|3132352e3231312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|3230322e3130362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|4x|3230322e3130372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|3230322e3130382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|4x|3230322e3131302e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|4x|3230322e39362e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|4x|3231302e37342e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|3231312e3134342e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|4x|3231312e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|4x|3231382e3130342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|4x|3231392e3135342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|4x|3231392e3135362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|4x|3231392e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|4x|3231392e3135392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|3231392e3233322e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|4x|3232302e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|4x|3232302e3235322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|4x|3232312e3133362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|3232312e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|4x|3232312e3139362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|4x|3232312e3139382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|4x|3232312e3139392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|4x|3232312e3230302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|4x|3232312e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|4x|3232322e3132382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|4x|3232322e3136302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|4x|36312e3133342e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|4x|36312e34392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|4x|36312e34392e372e3134342f3238 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|4x|36312e34392e372e3136302f3237 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|4x|36312e34392e372e3139322f3236 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|4x|3132342e38392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|4x|3230322e39372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|4x|3231302e31342e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|4x|3231302e31342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|4x|3231302e31352e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|4x|3231302e37342e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|4x|3231382e32312e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|3231382e3234342e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|4x|3231382e36372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|3231392e3233352e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|4x|3232312e31322e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|4x|36312e3133342e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|4x|36312e3133372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|4x|36312e3133382e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|4x|36312e3133392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|4x|36312e3136312e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|4x|36312e3138302e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|4x|3230322e3130322e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|4x|3230322e3130322e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|4x|3230322e3131302e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|4x|3230322e3131312e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|3230322e3133302e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|4x|3230332e3137352e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|3231312e3135342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|4x|3232312e3139392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|4x|3232312e3139392e3139322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|4x|3232312e3139392e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|4x|32342e33302e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|4x|32342e33342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|4x|32342e36302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|4x|32342e39312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|4x|32342e39382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|4x|36362e33302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|4x|36362e34312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|4x|36382e33322e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|4x|36382e38302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|4x|37302e38382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|4x|32342e3131382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|4x|32342e3133302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|4x|32342e3134372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|4x|32342e3231382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|4x|36342e35362e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|4x|36352e33342e33322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|4x|36362e3137362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|4x|36362e3232392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|4x|36362e3234302e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|4x|36372e3136302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|4x|36392e3133362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|4x|36392e3138302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|4x|36392e3234302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|4x|37312e3139322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|4x|3139382e372e3133332e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|4x|3139382e372e3134352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|4x|3230382e31372e33322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|4x|32342e3135332e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|4x|32342e39322e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|4x|36332e3232372e38342e302f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|4x|36342e3133392e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|4x|36342e3233322e37322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|4x|36352e33342e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|4x|3230362e39382e3132382e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|4x|3230382e33392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|4x|3230392e3232332e38362e382f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|4x|3231362e3231362e33342e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|4x|3231362e3231362e38352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|4x|32342e3132392e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|4x|36332e3230392e3132382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|4x|36342e3233322e3232302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|4x|36342e3233322e3232332e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|4x|36352e3136392e3232342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|4x|36362e3230382e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|4x|36362e34352e32352e3132302f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|4x|3230342e3233382e3139382e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|4x|3230382e32302e31302e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|4x|3230392e3138332e37372e38382f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|4x|3230392e3231392e3135302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|4x|3230392e3231392e3138302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|4x|36352e3137312e3132392e36342f3237 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|4x|36362e3137392e35322e3233322f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|4x|3230372e3135362e35312e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|4x|36352e3231362e3235312e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|4x|342e34322e302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|4x|342e34372e342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|4x|3230382e362e382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|4x|342e33332e38302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|4x|342e33352e31322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|4x|342e33352e34342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|4x|342e33352e35342e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|4x|342e33352e38352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|4x|342e33352e39322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|4x|342e34302e32302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|4x|342e34302e37322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|4x|342e34312e33342e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|4x|342e34312e37362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|4x|342e34322e34382e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|4x|342e36322e34342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|4x|342e36342e31362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|4x|36362e33322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|4x|3230342e33312e302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|4x|342e33332e3138302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|4x|342e33332e3232322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|4x|342e33352e3131322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|4x|342e33352e3131392e302f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|4x|342e33352e3133322e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|4x|342e33352e3135362e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|4x|342e33352e3136312e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|4x|342e33352e3136342e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|4x|342e33352e3138382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|4x|342e33352e3139362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|4x|342e33352e3230342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|4x|342e33352e3232382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|4x|342e34302e3133322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|4x|342e34302e3138342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|4x|342e34312e3132372e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|4x|342e34312e3133362e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|4x|342e34312e3135312e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|4x|342e34312e3136382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|4x|342e34312e3139302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|4x|342e34312e3230352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|4x|342e34312e3232382e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|4x|342e34312e3234322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|4x|342e34332e3135312e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|4x|342e34332e3135362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|4x|342e34332e3234302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|4x|342e36322e3130342e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|4x|342e36322e3131332e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|4x|342e36322e3131352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|4x|342e36322e3230302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|4x|342e36342e3139322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|4x|3230342e33302e33322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|4x|3230342e33312e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|4x|3230342e33332e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|4x|3230352e3138372e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|4x|3230362e3231362e302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|4x|3230372e3231372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|4x|3230372e3232302e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|4x|3230372e3232312e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|4x|3230372e3232322e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|4x|3230372e33302e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|4x|3230372e39332e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|4x|3230372e39342e33322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|4x|3230372e39342e36342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|4x|3230372e39352e33322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|4x|3230372e39352e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|4x|3230382e302e3132322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|4x|3230382e33302e32362e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|4x|3230392e3131302e302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|4x|3230392e3137392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|4x|3231362e3234342e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|4x|36332e3136392e38382e302f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|4x|36342e3231352e38382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|4x|36342e32332e31372e39362f3237 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|4x|36342e32332e382e3132382f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|4x|3139382e3231312e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|4x|3139392e3138322e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|4x|3230342e3235302e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|4x|3230342e33312e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|4x|3230342e33312e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|4x|3230342e33322e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|4x|3230342e33322e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|4x|3230342e33332e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|4x|3230342e35382e3135322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|4x|3230352e3138372e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|4x|3230362e3231342e39362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|4x|3230362e3231352e31362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|4x|3230362e3231362e39362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|4x|3230362e3231372e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|4x|3230372e3232302e36342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|4x|3230372e3232332e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|4x|3230372e35322e3234372e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|4x|3230372e39322e3230382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|4x|3230372e39332e3131322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|4x|3230372e39342e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|4x|3230372e39342e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|4x|3230372e39342e3230382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|4x|3230372e39352e3131322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|4x|3230372e39352e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|4x|3230382e31312e3232382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|4x|3230382e3139332e38302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|4x|3230392e3131302e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|4x|3231362e3137352e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|4x|342e36342e3133382e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|4x|36332e3137352e3133362e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|4x|36332e39362e3232372e33322f3238 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|4x|36352e3234322e31392e31362f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|4x|3139382e3231312e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|4x|3139392e3138322e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|4x|3139392e3138332e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|4x|3230342e3131392e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|4x|3230342e3235302e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|4x|3230352e3138352e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|4x|3230352e3138362e3139322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|4x|3230352e3138372e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|4x|3230352e3234352e3135322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|4x|3230362e3231362e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|4x|3230362e3231372e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|4x|3230362e3231372e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|4x|3230362e3232392e3131322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|4x|3230372e3232302e3131322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|4x|3230372e3232302e3230382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|4x|3230372e3232322e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|4x|3230372e3232322e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|4x|3230372e3232332e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|4x|3230382e3139372e3234382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|4x|3230392e3130382e3131322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|4x|3230392e3130382e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|4x|3230392e3130382e3232342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|4x|3230392e3130392e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|4x|3230392e3130392e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|4x|3230392e3131302e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|4x|3230392e3131302e3139322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|4x|3230392e3131312e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|4x|3230392e3131312e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|4x|36352e3234312e34392e3231362f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|4x|36392e3232372e3234302e38382f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|4x|3230382e3235332e3234352e39362f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|4x|3136352e3132312e3234302e3132302f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|4x|36312e34382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|4x|36312e34392e302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|4x|36312e34392e342e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|4x|36312e34392e362e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|4x|36312e34392e372e302f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|4x|36312e34392e382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|4x|36312e35302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|3132342e36342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|4x|3132352e33332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|4x|3132352e33342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|4x|3132352e33352e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|4x|3230322e39362e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|4x|3230322e39392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|4x|3231302e38322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|36312e3133352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|36312e3134382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|4x|36312e34392e31362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|4x|36312e34392e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|4x|36312e34392e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|3132332e3131322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|3230322e3130362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|3230322e3130382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|4x|3230322e39362e33322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|4x|3230322e39362e34302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|4x|3230322e39362e34322e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|4x|3230322e39362e34342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|4x|3230322e39362e34382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|3231312e3134342e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|3231392e3233322e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|4x|3232302e3234392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|4x|3232312e3231362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|4x|3232322e3132382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|4x|36312e34392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|4x|36312e34392e372e3134342f3238 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|4x|36312e34392e372e3136302f3237 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|4x|36312e34392e372e3139322f3236 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|3231382e3234342e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|3231392e3233352e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|3230322e3133302e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|3231312e3135342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|4x|3231382e3130362e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|4x|3231382e3130362e3234302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|4x|3231382e3130372e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|4x|3231392e3135382e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|4x|36302e302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|4x|3131332e302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|4x|3131332e382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|4x|3131362e322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|4x|3131372e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|4x|3131392e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|4x|3132302e302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|4x|3132332e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|4x|3132332e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|4x|3231382e372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|4x|3231382e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|4x|3232312e302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|4x|3232312e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|4x|35382e31362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|4x|35382e32302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|4x|35382e32322e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|4x|35382e32332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|4x|36302e35352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|4x|36312e34382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|4x|3131332e35362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|4x|3131332e35382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|4x|3131332e35392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|4x|3131352e34362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|4x|3131352e34382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|4x|3131362e39352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|4x|3131382e37322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|4x|3131382e38302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|4x|3131392e33362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|4x|3131392e33392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|4x|3131392e34382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|4x|3131392e36322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|4x|3132302e38302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|4x|3132312e31362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|4x|3132322e39362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|3132342e36342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|4x|3132342e36362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|4x|3132342e36372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|4x|3132342e38382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|4x|3132352e33322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|4x|3230322e39362e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|4x|3230322e39382e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|4x|3230322e39392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|4x|3230332e39332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|4x|3231302e31322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|4x|3231302e31352e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|4x|3231302e32312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|4x|3231302e32322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|4x|3231302e35312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|4x|3231302e35322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|4x|3231302e37382e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|4x|3231302e38322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|4x|3231382e31322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|4x|3231382e32342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|4x|3231382e32382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|4x|3231382e35362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|4x|3231382e36302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|4x|3231382e36322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|4x|3231382e36382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|4x|3232312e31322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|4x|3232312e31332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|4x|3232312e31342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|4x|35382e3134342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|4x|35382e32322e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|4x|35382e32322e39362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|4x|35382e3234302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|4x|36302e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|4x|36312e3133332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|36312e3133352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|4x|36312e3133362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|4x|36312e3133382e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|36312e3134382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|4x|36312e3135362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|4x|36312e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|4x|36312e3135392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|4x|36312e3136312e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|4x|36312e3136322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|4x|36312e3136372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|4x|36312e3136382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|4x|36312e3137362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|4x|36312e3137392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|4x|36312e3138312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|4x|36312e3138322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|4x|36312e3138392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|4x|3131332e3139342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|4x|3131332e3230302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|4x|3131332e3230342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|4x|3131332e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|4x|3131342e3234302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|4x|3131362e3131322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|4x|3131362e3131362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|4x|3131382e3231322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|4x|3131392e3130382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|4x|3131392e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|4x|3131392e3136322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|4x|3131392e3136342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|4x|3131392e3137362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|4x|3131392e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|4x|3132322e3133362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|4x|3132322e3135362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|4x|3132322e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|3132332e3131322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|4x|3132332e3132382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|4x|3132332e3133372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|4x|3132332e3133382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|4x|3132332e3134342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|4x|3132332e3134382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|4x|3132332e3135322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|4x|3132332e3138382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|4x|3132332e3233322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|4x|3132342e3132382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|4x|3132342e3136302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|4x|3132352e3231312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|3230322e3130362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|4x|3230322e3130372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|3230322e3130382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|4x|3230322e3131302e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|4x|3230322e39362e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|4x|3231302e37342e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|3231312e3134342e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|4x|3231312e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|4x|3231382e3130342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|4x|3231392e3135342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|4x|3231392e3135362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|4x|3231392e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|4x|3231392e3135392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|3231392e3233322e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|4x|3232302e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|4x|3232302e3235322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|4x|3232312e3133362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|3232312e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|4x|3232312e3139362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|4x|3232312e3139382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|4x|3232312e3139392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|4x|3232312e3230302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|4x|3232312e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|4x|3232322e3132382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|4x|3232322e3136302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|4x|35382e32322e3131322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|4x|35382e32322e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|4x|35382e32332e3132382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|4x|35382e32332e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|4x|35382e32332e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|4x|35382e32332e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|4x|36312e3133342e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|4x|3131352e38352e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|4x|3230322e39372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|4x|3231302e31342e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|4x|3231302e31342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|4x|3231302e31352e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|4x|3231302e37342e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|4x|3231382e32312e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|3231382e3234342e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|4x|3231382e36372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|3231392e3233352e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|4x|3232312e31322e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|4x|36312e3133342e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|4x|36312e3133372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|4x|36312e3133382e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|4x|36312e3133392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|4x|36312e3136312e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|4x|36312e3138302e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|4x|3230322e3130322e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|4x|3230322e3130322e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|4x|3230322e3131302e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|4x|3230322e3131312e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|3230322e3133302e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|4x|3230332e3137352e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|3231312e3135342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|4x|3232312e3139392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|4x|3232312e3139392e3139322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|4x|3232312e3139392e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|4x|35382e3234362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|4x|3231302e31332e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|4x|3232302e3234382e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|4x|3131362e312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|4x|3131362e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|4x|3131362e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|4x|3131392e302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|4x|3132312e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|4x|3132322e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|4x|3231382e302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|4x|3231382e342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|4x|3231382e362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|4x|35382e33322e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|4x|35392e33322e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|4x|3131342e39362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|4x|3131362e31362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|4x|3131362e35322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|4x|3131372e32312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|4x|3131372e32322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|4x|3131372e32342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|4x|3131372e33322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|4x|3131372e34302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|4x|3131372e34342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|4x|3131372e35372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|4x|3131372e36302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|4x|3131372e36342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|4x|3131372e38302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|4x|3131382e38342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|4x|3131392e34312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|4x|3131392e36302e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|4x|3131392e38342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|4x|3131392e39362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|4x|3132302e33322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|4x|3132302e34302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|4x|3132302e36382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|4x|3132312e33322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|4x|3132312e35362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|4x|3132312e35382e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|4x|3132312e35392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|4x|3132312e36302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|4x|3132332e35322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|4x|3132332e39362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|4x|3132342e33312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|4x|3132342e37322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|4x|3132352e36342e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|4x|3230322e39372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|4x|3231382e31332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|4x|3231382e31342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|4x|3231382e31362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|4x|3231382e32302e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|4x|3231382e32312e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|4x|3231382e32322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|4x|3231382e33302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|4x|3231382e36332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|4x|3231382e36342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|4x|3231382e36362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|4x|3231382e36372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|4x|3231382e37302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|4x|3231382e37322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|4x|3231382e38302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|4x|3232322e36342e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|4x|35382e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|4x|35392e3137322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|4x|36302e3136302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|4x|36302e3233352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|4x|36312e3132382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|4x|36312e3133322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|4x|36312e3133342e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|4x|36312e3133372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|4x|36312e3133392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|4x|36312e3134302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|4x|36312e3134342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|4x|36312e3135302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|4x|36312e3135322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|4x|36312e3135372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|4x|36312e3136302e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|4x|36312e3136342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|4x|36312e3136362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|4x|36312e3136392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|4x|36312e3137302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|4x|36312e3137322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|4x|36312e3137372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|4x|36312e3137382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|4x|36312e3138302e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|4x|36312e3138332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|4x|36312e3138342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|4x|36312e3138382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|4x|36312e3139302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|4x|3131342e3130342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|4x|3131362e3139322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|4x|3131362e3230372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|4x|3131362e3230382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|4x|3131362e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|4x|3131362e3234362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|4x|3131362e3234382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|4x|3131362e3235322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|4x|3131382e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|4x|3131382e3132302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|4x|3131382e3132342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|4x|3131382e3138302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|4x|3131382e3231332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|4x|3131382e3233392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|4x|3131382e3234382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|4x|3131392e3132302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|4x|3131392e3132382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|4x|3131392e3134342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|4x|3132312e3230342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|4x|3132312e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|4x|3132322e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|4x|3132322e3234302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|4x|3132332e3130312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|4x|3132332e3130332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|4x|3132332e3134392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|4x|3132332e3135302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|4x|3132332e3136302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|4x|3132332e3137372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|4x|3132332e3137382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|4x|3132332e3138302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|4x|3132332e3138342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|4x|3132332e3234342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|4x|3132342e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|4x|3132342e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|4x|3132352e3130342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|4x|3132352e3131322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|4x|3230322e3130302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|4x|3230322e3130322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|4x|3230322e3130332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|4x|3230322e3130342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|4x|3230322e3130392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|4x|3230322e3131312e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|4x|3230322e39362e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|4x|3230322e39382e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|4x|3230322e39382e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|4x|3230332e3231322e302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|4x|3231392e3132382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|4x|3231392e3134342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|4x|3231392e3135322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|4x|3232302e3136302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|4x|3232312e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|4x|3232322e3136382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|4x|3232322e3137362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|4x|3232322e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|4x|3232322e3234302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|4x|36312e3133342e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|4x|36312e3135392e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|4x|36312e3136312e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|4x|36312e34392e372e3132382f3238 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|4x|3132322e3130322e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|4x|3230322e39362e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|4x|3230322e39382e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|4x|3230332e3133302e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|4x|3231302e3139322e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|4x|3231382e3234342e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|4x|3231382e36322e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|4x|3231392e3135392e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|4x|36312e3133332e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|4x|36312e3133362e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|4x|36312e3133382e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|4x|36312e3133392e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|4x|36312e3135392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|4x|36312e3138392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|4x|3230322e3130322e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|4x|3230322e3130372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|4x|3230322e3131302e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|4x|3230322e3131312e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|4x|3231392e3135392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|4x|3231382e312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|4x|35382e33322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|4x|35382e34302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|4x|3132342e37342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|4x|3132342e37362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|4x|3231382e37382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|4x|3231382e38302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|4x|3232322e36342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|4x|3232322e37322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|4x|36312e3135312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|4x|36312e3135322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|4x|36312e3136352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|4x|36312e3136392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|4x|36312e3137302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|4x|36312e3137322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|4x|3131362e3139322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|4x|3131362e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|4x|3131362e3234362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|4x|3230322e3130312e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|4x|3230322e3130392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|4x|3230322e39362e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|4x|3232312e3233392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|4x|3131372e3132382e302e302f3130 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|4x|3132302e3139322e302e302f3130 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|4x|3231312e3130332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|4x|3231312e3133362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|4x|3231382e3230302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|4x|3232312e3133302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|4x|3232312e3137362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|4x|3132322e31332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|4x|3132322e36342e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|4x|3132332e36342e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|4x|3231312e39382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|4x|3232322e33322e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|4x|36312e3233322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|4x|36312e3233362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|4x|3232312e3137322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|4x|3132322e31332e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|4x|35392e36342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|4x|3131332e35342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|4x|3131352e32342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|4x|3131362e31332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|4x|3131362e35362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|4x|3131362e35372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|4x|3132302e39342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|4x|3132312e34382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|4x|3231302e32352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|4x|3231302e32362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|4x|3231302e32382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|4x|3231302e33322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|4x|3231312e36342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|4x|3231312e38302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|4x|3232322e31362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|4x|35382e3135342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|4x|35382e3139322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|4x|3131342e3231322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|4x|3131342e3231342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|4x|3131352e3135342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|4x|3131352e3135362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|4x|3131352e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|4x|3131382e3230322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|4x|3131382e3232382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|4x|3131382e3233302e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|3132312e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|4x|3132312e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|4x|3132322e3230342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|4x|3132352e3231362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|4x|3230322e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|4x|3230322e3132302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|4x|3230322e3139322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|4x|3230322e33382e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|4x|3231382e3139322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|4x|3231392e3231362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|4x|3231392e3232342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|4x|3231392e3234322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|4x|3231392e3234342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|4x|3232322e3139322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|4x|3131362e35362e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|4x|3131362e35362e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|4x|3131362e35362e3137362e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|4x|3131362e35362e3138302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|4x|3131362e35362e3138342e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|4x|3131362e35362e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|4x|3132312e35322e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|4x|3230322e33382e3134302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|4x|3230322e33382e3138342e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|4x|3230332e39312e3132302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|4x|3230322e3132372e3231362e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|4x|3230322e3132372e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|4x|3230322e3137392e3234302e302f3230 +1.3.6.1.4.1.3375.2.3.8.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.8.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.8.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.8.3.2.0|2|0 +1.3.6.1.4.1.3375.2.3.9.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.9.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.9.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.9.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.9.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.9.4.2.0|2|0 +1.3.6.1.4.1.3375.2.3.10.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.11.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.11.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.11.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.11.3.2.0|2|0 +1.3.6.1.4.1.3375.2.3.11.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.12.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.5.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.6.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.13.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.5.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.5.2.0|2|0 +1.3.6.1.4.1.3375.2.3.13.6.1.0|2|0 +1.3.6.1.4.1.3375.2.3.14.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.14.1.2.0|2|0 +1.3.6.1.4.1.3375.2.3.15.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.15.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.15.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.15.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.16.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.17.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.1.2.0|2|4 +1.3.6.1.4.1.3375.2.6.1.1.3.1.1.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|4|access +1.3.6.1.4.1.3375.2.6.1.1.3.1.1.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|4x|5f746d6d5f61706d5f61636c +1.3.6.1.4.1.3375.2.6.1.1.3.1.1.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|4x|5f746d6d5f61706d5f61636c +1.3.6.1.4.1.3375.2.6.1.1.3.1.1.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|4x|2f436f6d6d6f6e2f616363657373 +1.3.6.1.4.1.3375.2.6.1.1.3.1.2.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.2.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.2.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.2.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.3.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.3.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.3.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.3.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.4.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.4.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.4.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.4.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.5.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.5.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.5.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.5.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.6.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.6.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.6.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.6.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.7.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.7.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.7.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.7.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.8.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.8.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.8.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.8.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.9.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.9.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.9.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.9.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.10.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.10.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.10.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.10.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.11.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.11.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.11.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.11.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.12.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.12.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.12.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.12.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.13.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.13.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.13.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.13.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.14.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.14.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.14.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.14.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.15.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.15.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.15.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.15.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.16.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.16.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.16.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.16.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.17.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.17.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.17.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.17.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.18.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.18.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.18.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.18.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.19.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.19.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.19.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.19.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.20.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.20.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.20.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.20.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.21.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.21.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.21.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.21.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.22.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.22.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.22.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.22.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.23.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.23.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.23.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.23.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.24.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.24.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.24.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.24.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.25.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.25.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.25.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.25.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.26.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.26.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.26.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.26.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.27.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.27.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.27.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.27.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.28.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.28.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.28.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.28.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.29.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.29.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.29.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.29.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.30.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.30.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.30.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.30.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.31.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.31.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.31.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.31.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.32.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.32.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.32.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.32.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.33.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.33.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.33.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.33.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.34.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.34.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.34.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.34.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.35.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.35.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.35.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.35.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.36.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.36.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.36.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.36.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.37.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.37.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.37.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.37.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.38.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.38.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.38.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.38.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.39.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.39.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.39.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.39.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.40.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.40.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.40.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.40.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.41.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.41.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.41.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.41.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.42.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.42.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.42.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.42.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.43.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.43.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.43.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.43.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.44.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.44.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.44.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.44.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.45.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.45.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.45.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.45.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.46.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.46.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.46.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.46.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.47.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.47.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.47.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.47.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.48.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.48.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.48.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.48.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.49.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.49.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.49.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.49.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.50.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.50.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.50.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.50.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.51.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.51.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.51.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.51.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.52.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.52.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.52.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.52.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.53.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.53.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.53.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.53.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.54.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.54.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.54.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.54.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.55.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.55.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.55.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.55.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.56.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.56.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.56.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.56.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.57.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.57.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.57.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.57.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.58.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.58.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.58.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.58.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.59.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.59.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.59.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.59.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.60.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.60.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.60.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.60.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.61.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.61.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.61.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.61.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.62.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.62.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.62.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.62.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.63.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.63.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.63.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.63.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.64.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.64.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.64.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.64.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.65.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.65.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.65.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.65.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.66.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.66.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.66.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.66.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.67.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.67.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.67.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.67.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.68.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.68.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.68.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.68.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.69.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.69.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.69.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.69.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.70.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.70.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.70.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.70.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.71.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.71.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.71.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.71.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.72.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.72.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.72.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.72.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.73.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.73.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.73.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.73.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.74.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.74.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.74.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.74.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.75.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.75.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.75.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.75.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.76.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.76.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.76.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.76.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.77.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.77.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.77.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.77.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.78.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.78.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.78.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.78.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.79.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.79.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.79.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.79.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.80.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.80.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.80.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.80.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.81.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.81.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.81.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.81.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.82.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.82.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.82.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.82.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.83.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.83.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.83.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.83.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.84.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.84.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.84.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.84.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.85.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.85.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.85.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.85.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.86.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.86.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.86.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.86.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.87.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.87.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.87.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.87.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.88.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.88.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.88.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.88.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.89.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.89.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.89.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.89.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.90.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.90.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.90.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.90.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.91.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.91.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.91.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.91.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.92.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.92.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.92.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.92.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.93.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.93.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.93.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.93.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.94.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.94.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.94.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.94.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.95.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.95.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.95.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.95.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.96.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.96.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.96.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.96.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.97.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.97.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.97.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.97.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.98.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.98.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.98.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.98.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.99.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.99.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.99.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.99.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.100.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.100.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.100.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.100.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.101.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.101.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.101.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.101.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.102.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.102.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.102.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.102.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.103.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.103.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.103.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.103.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.104.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.104.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.104.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.104.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.105.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.105.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.105.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.105.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.106.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.106.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.106.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.106.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.107.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.107.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.107.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.107.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.108.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.108.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.108.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.108.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.109.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.109.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.109.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.109.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.110.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.110.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.110.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.110.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.111.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.111.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.111.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.111.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.112.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.112.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.112.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.112.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.113.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.113.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.113.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.113.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.114.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.114.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.114.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.114.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.115.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.115.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.115.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.115.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.116.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.116.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.116.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.116.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.117.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.117.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.117.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.117.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.118.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.118.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.118.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.118.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.119.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.119.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.119.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.119.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.120.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.120.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.120.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.120.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.121.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.121.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.121.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.121.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.122.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.122.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.122.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.122.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.123.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.123.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.123.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.123.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.124.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.124.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.124.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.124.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.125.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.125.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.125.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.125.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.126.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.126.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.126.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.126.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.127.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.127.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.127.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.127.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.128.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.128.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.128.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.128.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.129.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.129.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.129.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.129.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.130.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.130.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.130.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.130.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.131.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.131.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.131.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.131.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.132.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.132.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.132.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.132.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.133.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.133.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.133.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.133.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.134.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.134.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.134.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.134.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.135.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.135.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.135.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.135.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.136.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.136.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.136.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.136.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.137.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.137.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.137.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.137.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.138.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.138.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.138.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.138.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.139.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.139.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.139.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.139.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.140.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.140.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.140.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.140.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.141.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.141.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.141.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.141.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.142.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.142.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.142.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.142.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.143.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.143.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.143.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.143.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.144.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.144.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.144.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.144.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.145.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.145.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.145.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.145.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.146.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.146.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.146.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.146.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.147.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.147.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.147.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.147.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.148.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.148.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.148.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.148.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.149.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.149.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.149.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.149.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.150.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.150.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.150.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.150.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.151.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.151.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.151.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.151.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.152.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.152.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.152.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.152.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.153.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.153.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.153.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.153.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.154.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.154.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.154.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.154.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.155.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.155.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.155.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.155.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.156.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.156.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.156.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.156.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.157.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.157.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.157.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.157.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.158.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.158.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.158.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.158.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.159.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.159.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.159.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.159.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.160.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.160.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.160.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.160.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.161.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.161.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.161.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.161.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.162.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.162.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.162.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.162.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.163.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.163.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.163.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.163.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.164.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.164.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.164.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.164.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.165.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.165.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.165.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.165.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.166.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.166.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.166.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.166.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.167.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.167.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.167.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.167.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.168.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.168.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.168.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.168.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.169.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.169.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.169.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.169.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.170.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.170.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.170.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.170.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.171.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.171.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.171.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.171.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.172.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.172.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.172.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.172.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.173.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.173.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.173.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.173.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.174.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.174.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.174.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.174.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.175.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.175.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.175.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.175.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.176.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.176.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.176.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.176.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.177.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.177.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.177.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.177.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.178.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.178.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.178.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.178.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.179.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.179.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.179.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.179.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.180.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.180.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.180.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.180.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.181.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.181.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.181.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.181.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.182.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.182.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.182.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.182.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.183.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.183.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.183.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.183.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.184.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.184.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.184.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.184.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.185.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.185.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.185.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.185.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.186.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.186.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.186.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.186.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.187.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.187.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.187.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.187.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.188.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.188.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.188.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.188.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.189.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.189.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.189.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.189.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.190.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.190.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.190.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.190.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.191.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.191.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.191.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.191.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.192.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.192.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.192.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.192.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.193.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.193.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.193.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.193.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.194.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.194.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.194.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.194.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.195.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.195.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.195.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.195.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.196.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.196.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.196.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.196.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.197.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.197.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.197.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.197.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.198.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.198.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.198.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.198.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.199.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.199.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.199.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.199.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.200.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.200.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.200.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.200.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.201.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.201.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.201.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.201.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.202.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.202.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.202.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.202.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.203.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.203.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.203.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.203.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.204.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.204.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.204.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.204.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.205.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.205.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.205.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.205.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.206.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.206.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.206.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.206.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.207.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.207.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.207.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.207.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.208.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.208.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.208.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.208.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.209.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.209.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.209.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.209.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.210.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.210.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.210.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.210.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.211.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.211.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.211.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.211.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.212.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.212.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.212.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.212.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.213.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.213.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.213.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.213.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.214.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.214.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.214.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.214.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.215.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.215.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.215.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.215.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.216.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.216.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.216.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.216.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.217.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.217.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.217.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.217.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.218.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.218.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.218.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.218.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.219.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.219.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.219.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.219.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.220.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.220.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.220.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.220.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.221.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.221.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.221.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.221.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.222.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.222.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.222.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.222.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.223.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.223.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.223.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.223.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.224.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.224.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.224.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.224.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.225.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.225.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.225.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.225.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.226.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.226.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.226.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.226.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.227.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|4x|5f6c697374656e6572 +1.3.6.1.4.1.3375.2.6.1.1.3.1.227.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|4x|5f746d6d5f61706d5f6677645f7669705f68747470 +1.3.6.1.4.1.3375.2.6.1.1.3.1.227.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|4x|5f746d6d5f61706d5f6677645f7669705f687474705f69707636 +1.3.6.1.4.1.3375.2.6.1.1.3.1.227.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|4x|5f6c697374656e6572 +1.3.6.1.4.1.3375.2.6.1.1.3.1.228.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.228.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.228.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.228.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.229.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.229.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.229.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.229.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.2.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.2.2.0|2|1 +1.3.6.1.4.1.3375.2.6.1.2.3.1.1.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|4x|2f436f6d6d6f6e2f636f6e6e6563746976697479 +1.3.6.1.4.1.3375.2.6.1.2.3.1.2.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.3.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.4.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.5.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.6.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.7.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.8.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.3.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.3.2.0|2|3 +1.3.6.1.4.1.3375.2.6.1.3.3.1.1.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|4x|2f436f6d6d6f6e2f72657772697465 +1.3.6.1.4.1.3375.2.6.1.3.3.1.1.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|4x|2f436f6d6d6f6e2f726577726974652d706f7274616c +1.3.6.1.4.1.3375.2.6.1.3.3.1.1.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|4x|2f436f6d6d6f6e2f726577726974652d7572692d7472616e736c6174696f6e +1.3.6.1.4.1.3375.2.6.1.3.3.1.2.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.2.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.2.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.3.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.3.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.3.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.4.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.4.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.4.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.5.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.5.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.5.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.6.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.6.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.6.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.7.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.7.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.7.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.8.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.8.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.8.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.9.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.9.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.9.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.4.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.4.2.0|66|0 +1.3.6.1.4.1.3375.2.6.1.4.3.0|66|0 +1.3.6.1.4.1.3375.2.6.1.4.4.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.5.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.6.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.7.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.8.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.9.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.10.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.11.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.12.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.13.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.14.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.5.2.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.3.0|66|0 +1.3.6.1.4.1.3375.2.6.1.5.4.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.5.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.6.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.7.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.8.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.6.2.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.3.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.4.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.5.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.6.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.7.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.8.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.9.0|70|0 +1.3.6.1.4.1.3375.2.6.1.7.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.7.2.0|2|0 +1.3.6.1.4.1.3375.2.6.1.8.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.8.2.0|2|0 +1.3.6.1.4.1.3375.2.6.1.9.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.9.2.0|66|10 +1.3.6.1.4.1.3375.2.6.1.9.3.0|66|10 +1.3.6.1.4.1.3375.2.6.1.9.4.0|66|0 +1.3.6.1.4.1.3375.2.6.1.9.5.0|66|10 +1.3.6.1.4.1.3375.2.6.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.2.1.2.0|2|0 +1.3.6.1.4.1.3375.2.6.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.3.1.2.0|2|0 +1.3.6.1.4.1.3375.2.6.4.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.4.1.2.0|2|0 +1.3.6.1.4.1.8072.1.3.2.1.0|2|0 +1.3.6.1.4.1.14706.1.1.1|4x|312e333b4635204e6574776f726b733b312e3000 +1.3.6.1.4.1.14706.1.1.2|2|1 +1.3.6.1.4.1.14706.1.1.3|4x|7f000001 +1.3.6.1.4.1.14706.1.1.4.1.1.1|2|1 +1.3.6.1.4.1.14706.1.1.4.1.1.2|2|2 +1.3.6.1.4.1.14706.1.1.4.1.1.3|2|3 +1.3.6.1.4.1.14706.1.1.4.1.1.4|2|4 +1.3.6.1.4.1.14706.1.1.4.1.1.5|2|5 +1.3.6.1.4.1.14706.1.1.4.1.1.6|2|6 +1.3.6.1.4.1.14706.1.1.4.1.1.7|2|7 +1.3.6.1.4.1.14706.1.1.4.1.1.8|2|8 +1.3.6.1.4.1.14706.1.1.4.1.1.9|2|9 +1.3.6.1.4.1.14706.1.1.4.1.1.10|2|10 +1.3.6.1.4.1.14706.1.1.4.1.2.1|4| +1.3.6.1.4.1.14706.1.1.4.1.2.2|4| +1.3.6.1.4.1.14706.1.1.4.1.2.3|4| +1.3.6.1.4.1.14706.1.1.4.1.2.4|4| +1.3.6.1.4.1.14706.1.1.4.1.2.5|4| +1.3.6.1.4.1.14706.1.1.4.1.2.6|4| +1.3.6.1.4.1.14706.1.1.4.1.2.7|4| +1.3.6.1.4.1.14706.1.1.4.1.2.8|4| +1.3.6.1.4.1.14706.1.1.4.1.2.9|4| +1.3.6.1.4.1.14706.1.1.4.1.2.10|4| +1.3.6.1.4.1.14706.1.1.4.1.3.1|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.2|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.3|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.4|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.5|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.6|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.7|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.8|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.9|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.10|2|0 +1.3.6.1.4.1.14706.1.1.4.1.4.1|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.2|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.3|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.4|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.5|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.6|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.7|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.8|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.9|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.10|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.5.1|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.2|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.3|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.4|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.5|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.6|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.7|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.8|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.9|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.10|2|1 +1.3.6.1.4.1.14706.1.1.4.1.6.1|4| +1.3.6.1.4.1.14706.1.1.4.1.6.2|4| +1.3.6.1.4.1.14706.1.1.4.1.6.3|4| +1.3.6.1.4.1.14706.1.1.4.1.6.4|4| +1.3.6.1.4.1.14706.1.1.4.1.6.5|4| +1.3.6.1.4.1.14706.1.1.4.1.6.6|4| +1.3.6.1.4.1.14706.1.1.4.1.6.7|4| +1.3.6.1.4.1.14706.1.1.4.1.6.8|4| +1.3.6.1.4.1.14706.1.1.4.1.6.9|4| +1.3.6.1.4.1.14706.1.1.4.1.6.10|4| +1.3.6.1.4.1.14706.1.1.4.1.7.1|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.2|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.3|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.4|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.5|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.6|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.7|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.8|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.9|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.10|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.8.1|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.2|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.3|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.4|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.5|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.6|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.7|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.8|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.9|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.10|2|5 +1.3.6.1.6.3.1.1.6.1.0|2|697276497 +1.3.6.1.6.3.10.2.1.1.0|4x|80001f88804a49c41225c7915d +1.3.6.1.6.3.10.2.1.2.0|2|31 +1.3.6.1.6.3.10.2.1.3.0|2|1813186 +1.3.6.1.6.3.10.2.1.4.0|2|1500 +1.3.6.1.6.3.11.2.1.1.0|65|0 +1.3.6.1.6.3.11.2.1.2.0|65|0 +1.3.6.1.6.3.11.2.1.3.0|65|0 +1.3.6.1.6.3.12.1.1.0|2|0 +1.3.6.1.6.3.12.1.4.0|65|0 +1.3.6.1.6.3.12.1.5.0|65|0 +1.3.6.1.6.3.15.1.1.1.0|65|0 +1.3.6.1.6.3.15.1.1.2.0|65|0 +1.3.6.1.6.3.15.1.1.3.0|65|0 +1.3.6.1.6.3.15.1.1.4.0|65|97 +1.3.6.1.6.3.15.1.1.5.0|65|0 +1.3.6.1.6.3.15.1.1.6.0|65|0 +1.3.6.1.6.3.15.1.2.1.0|2|0 +1.3.6.1.6.3.15.1.2.2.1.3.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4|datadog +1.3.6.1.6.3.15.1.2.2.1.4.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.5.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|6|1.3.6.1.6.3.10.1.1.3 +1.3.6.1.6.3.15.1.2.2.1.6.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.7.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.8.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|6|1.3.6.1.6.3.10.1.2.4 +1.3.6.1.6.3.15.1.2.2.1.9.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.10.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.11.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.12.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|2|3 +1.3.6.1.6.3.15.1.2.2.1.13.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|2|1 +1.3.6.1.6.3.16.1.1.1.1.0|4| +1.3.6.1.6.3.16.1.2.1.3.1.6.99.111.109.109.53.56|4|grpcomm58 +1.3.6.1.6.3.16.1.2.1.3.2.6.99.111.109.109.53.56|4|grpcomm58 +1.3.6.1.6.3.16.1.2.1.3.3.7.100.97.116.97.100.111.103|4|grpdatadog +1.3.6.1.6.3.16.1.2.1.4.1.6.99.111.109.109.53.56|2|4 +1.3.6.1.6.3.16.1.2.1.4.2.6.99.111.109.109.53.56|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.7.100.97.116.97.100.111.103|2|4 +1.3.6.1.6.3.16.1.2.1.5.1.6.99.111.109.109.53.56|2|1 +1.3.6.1.6.3.16.1.2.1.5.2.6.99.111.109.109.53.56|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.7.100.97.116.97.100.111.103|2|1 +1.3.6.1.6.3.16.1.4.1.4.9.103.114.112.99.111.109.109.53.56.0.0.1|2|2 +1.3.6.1.6.3.16.1.4.1.4.10.103.114.112.100.97.116.97.100.111.103.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.5.9.103.114.112.99.111.109.109.53.56.0.0.1|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.10.103.114.112.100.97.116.97.100.111.103.0.3.3|4|viewUSM59 +1.3.6.1.6.3.16.1.4.1.6.9.103.114.112.99.111.109.109.53.56.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.6.10.103.114.112.100.97.116.97.100.111.103.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.9.103.114.112.99.111.109.109.53.56.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.7.10.103.114.112.100.97.116.97.100.111.103.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.8.9.103.114.112.99.111.109.109.53.56.0.0.1|2|4 +1.3.6.1.6.3.16.1.4.1.8.10.103.114.112.100.97.116.97.100.111.103.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.9.9.103.114.112.99.111.109.109.53.56.0.0.1|2|1 +1.3.6.1.6.3.16.1.4.1.9.10.103.114.112.100.97.116.97.100.111.103.0.3.3|2|1 +1.3.6.1.6.3.16.1.5.1.0|2|0 +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.0|4| +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.1|4| +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.2|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.0|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.1|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.2|4| +1.3.6.1.6.3.16.1.5.2.1.3.9.118.105.101.119.85.83.77.53.57.4.1.3.6.1|4| +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.0|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.1|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.2|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.9.118.105.101.119.85.83.77.53.57.4.1.3.6.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.0|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.2|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.0|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.2|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.9.118.105.101.119.85.83.77.53.57.4.1.3.6.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.9.118.105.101.119.85.83.77.53.57.4.1.3.6.1|2|1 diff --git a/test/new-e2e/ndm/snmp/compose/data/fortinet-fortigate.snmprec b/test/new-e2e/ndm/snmp/compose/data/fortinet-fortigate.snmprec new file mode 100644 index 0000000000000..88f44b005c890 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/fortinet-fortigate.snmprec @@ -0,0 +1,77 @@ +1.3.6.1.2.1.1.2.0|4|1.3.6.1.4.1.12356.101.1.1 +1.3.6.1.2.1.47.1.1.1.1.2.1|4|Fortinet FGT_501E, HW Serial#: FG5H1E5110000000 +1.3.6.1.2.1.47.1.1.1.1.3.1|6|1.3.6.1.4.1.12356.5006.5006.0 +1.3.6.1.2.1.47.1.1.1.1.4.1|2|0 +1.3.6.1.2.1.47.1.1.1.1.5.1|2|3 +1.3.6.1.2.1.47.1.1.1.1.6.1|2|-1 +1.3.6.1.2.1.47.1.1.1.1.7.1|4|FGT_501E +1.3.6.1.2.1.47.1.1.1.1.8.1|4| +1.3.6.1.2.1.47.1.1.1.1.9.1|4| +1.3.6.1.2.1.47.1.1.1.1.10.1|4|FortiGate-501E v5.6.4,build1575b1575,180425 (GA) +1.3.6.1.2.1.47.1.1.1.1.11.1|4|FG5H1E5110000000 +1.3.6.1.2.1.47.1.1.1.1.12.1|4|Fortinet +1.3.6.1.2.1.47.1.1.1.1.13.1|4|FGT_501E +1.3.6.1.2.1.47.1.1.1.1.14.1|4| +1.3.6.1.2.1.47.1.1.1.1.15.1|4| +1.3.6.1.2.1.47.1.1.1.1.16.1|2|1 +1.3.6.1.2.1.47.1.1.1.1.17.1|4| +1.3.6.1.2.1.47.1.1.1.1.18.1|4| +1.3.6.1.4.1.12356.101.3.1.1.0|2|26 +1.3.6.1.4.1.12356.101.3.1.2.0|2|4 +1.3.6.1.4.1.12356.101.3.1.3.0|2|2 +1.3.6.1.4.1.12356.101.3.2.1.1.1.4|2|4 +1.3.6.1.4.1.12356.101.3.2.1.1.2.4|4x|7468656972206f78656e20717561696e746c79 +1.3.6.1.4.1.12356.101.3.2.1.1.3.4|2|1 +1.3.6.1.4.1.12356.101.3.2.1.1.4.4|2|2 +1.3.6.1.4.1.12356.101.3.2.1.1.5.4|66|42 +1.3.6.1.4.1.12356.101.3.2.1.1.6.4|66|33 +1.3.6.1.4.1.12356.101.3.2.1.1.7.4|66|2989472966 +1.3.6.1.4.1.12356.101.3.2.1.1.8.4|66|1080381326 +1.3.6.1.4.1.12356.101.4.1.1.0|4|v5.6.4,build1575b1575,180425 (GA) +1.3.6.1.4.1.12356.101.4.1.2.0|2|26 +1.3.6.1.4.1.12356.101.4.1.3.0|66|10 +1.3.6.1.4.1.12356.101.4.1.4.0|66|29 +1.3.6.1.4.1.12356.101.4.1.5.0|66|2289080295 +1.3.6.1.4.1.12356.101.4.1.6.0|66|1268728682 +1.3.6.1.4.1.12356.101.4.1.7.0|66|4157079948 +1.3.6.1.4.1.12356.101.4.1.8.0|66|2483533213 +1.3.6.1.4.1.12356.101.4.1.9.0|66|38 +1.3.6.1.4.1.12356.101.4.1.10.0|66|4005490351 +1.3.6.1.4.1.12356.101.4.1.11.0|66|721053226 +1.3.6.1.4.1.12356.101.4.1.12.0|66|4201127826 +1.3.6.1.4.1.12356.101.4.1.13.0|66|285761508 +1.3.6.1.4.1.12356.101.4.1.14.0|66|1305300731 +1.3.6.1.4.1.12356.101.4.1.15.0|66|3930350334 +1.3.6.1.4.1.12356.101.4.1.16.0|66|490490644 +1.3.6.1.4.1.12356.101.4.1.17.0|66|3157833604 +1.3.6.1.4.1.12356.101.4.1.18.0|66|3500286743 +1.3.6.1.4.1.12356.101.4.1.19.0|66|1959290694 +1.3.6.1.4.1.12356.101.4.1.20.0|70|14789083134851123033 +1.3.6.1.4.1.12356.101.4.4.2.1.1.12|2|12 +1.3.6.1.4.1.12356.101.4.4.2.1.2.12|66|44 +1.3.6.1.4.1.12356.101.4.4.2.1.6.12|70|6053432544510993268 +1.3.6.1.4.1.12356.101.4.4.2.1.7.12|70|4558642640541757871 +1.3.6.1.4.1.12356.101.4.4.2.1.8.12|70|18335276119483080244 +1.3.6.1.4.1.12356.101.4.4.2.1.9.12|66|91 +1.3.6.1.4.1.12356.101.4.4.2.1.10.12|66|20 +1.3.6.1.4.1.12356.101.5.1.2.1.1.1.2.22|2|22 +1.3.6.1.4.1.12356.101.5.1.2.1.1.2.2.22|65|3921966751 +1.3.6.1.4.1.12356.101.5.1.2.1.1.3.2.22|65|59854764 +1.3.6.1.4.1.12356.101.5.1.2.1.1.4.2.22|4x|4a6164656420666f72776172642064726976696e6720746865697220717561696e746c7920717561696e746c79206b657074206b657074 +1.3.6.1.4.1.12356.101.5.1.2.1.1.5.2.22|70|10146562834102172440 +1.3.6.1.4.1.12356.101.5.1.2.1.1.6.2.22|70|4417853499527088953 +1.3.6.1.4.1.12356.101.5.1.2.2.1.1.5.29|2|29 +1.3.6.1.4.1.12356.101.5.1.2.2.1.2.5.29|70|13218909809640136190 +1.3.6.1.4.1.12356.101.5.1.2.2.1.3.5.29|70|9058397767704808189 +1.3.6.1.4.1.12356.101.5.1.2.2.1.4.5.29|4x|4a61646564204a61646564 +1.3.6.1.4.1.12356.101.7.2.1.1.1.1|2|19 +1.3.6.1.4.1.12356.101.10.100.4.0|66|25504 +1.3.6.1.4.1.12356.101.10.100.5.0|66|817 +1.3.6.1.4.1.12356.101.12.2.2.1.2.1|4|ESMAO-Lomtec +1.3.6.1.4.1.12356.101.12.2.2.1.2.2|4|ESMAO +1.3.6.1.4.1.12356.101.12.2.2.1.18.1|70|3896031866066683889 +1.3.6.1.4.1.12356.101.12.2.2.1.18.2|70|13218909809640136190 +1.3.6.1.4.1.12356.101.12.2.2.1.19.1|70|3518073560493506800 +1.3.6.1.4.1.12356.101.12.2.2.1.19.2|70|9058397767704808189 +1.3.6.1.4.1.12356.101.12.2.2.1.20.1|2|2 +1.3.6.1.4.1.12356.101.12.2.2.1.20.2|2|1 diff --git a/test/new-e2e/ndm/snmp/compose/data/generic-router.snmprec b/test/new-e2e/ndm/snmp/compose/data/generic-router.snmprec new file mode 100644 index 0000000000000..93f6cf7f4a30a --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/generic-router.snmprec @@ -0,0 +1,1008 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.1.2.1.3.4 +1.3.6.1.2.1.2.1.0|2|2 +1.3.6.1.2.1.2.2.1.1.13|2|13 +1.3.6.1.2.1.2.2.1.1.15|2|15 +1.3.6.1.2.1.2.2.1.2.13|4x|65746830 +1.3.6.1.2.1.2.2.1.2.15|4x|65746831 +1.3.6.1.2.1.2.2.1.3.13|2|1 +1.3.6.1.2.1.2.2.1.3.15|2|25 +1.3.6.1.2.1.2.2.1.4.13|2|6 +1.3.6.1.2.1.2.2.1.4.15|2|17 +1.3.6.1.2.1.2.2.1.5.13|66|2331660664 +1.3.6.1.2.1.2.2.1.5.15|66|4163430592 +1.3.6.1.2.1.2.2.1.6.13|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.15|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.7.13|2|1 +1.3.6.1.2.1.2.2.1.7.15|2|3 +1.3.6.1.2.1.2.2.1.8.13|2|6 +1.3.6.1.2.1.2.2.1.8.15|2|4 +1.3.6.1.2.1.2.2.1.9.13|67|3458704566 +1.3.6.1.2.1.2.2.1.9.15|67|808281843 +1.3.6.1.2.1.2.2.1.10.13|65|1341952665 +1.3.6.1.2.1.2.2.1.10.15|65|4089479451 +1.3.6.1.2.1.2.2.1.11.13|65|2423700286 +1.3.6.1.2.1.2.2.1.11.15|65|3105545509 +1.3.6.1.2.1.2.2.1.12.13|65|2909048034 +1.3.6.1.2.1.2.2.1.12.15|65|3800287858 +1.3.6.1.2.1.2.2.1.13.13|65|3469490196 +1.3.6.1.2.1.2.2.1.13.15|65|1207715996 +1.3.6.1.2.1.2.2.1.14.13|65|3036907431 +1.3.6.1.2.1.2.2.1.14.15|65|2271913528 +1.3.6.1.2.1.2.2.1.15.13|65|1147964703 +1.3.6.1.2.1.2.2.1.15.15|65|32911865 +1.3.6.1.2.1.2.2.1.16.13|65|2182933189 +1.3.6.1.2.1.2.2.1.16.15|65|2122506434 +1.3.6.1.2.1.2.2.1.17.13|65|2459418639 +1.3.6.1.2.1.2.2.1.17.15|65|368059933 +1.3.6.1.2.1.2.2.1.18.13|65|4265068773 +1.3.6.1.2.1.2.2.1.18.15|65|1888961269 +1.3.6.1.2.1.2.2.1.19.13|65|883454404 +1.3.6.1.2.1.2.2.1.19.15|65|3019639136 +1.3.6.1.2.1.2.2.1.20.13|65|796620246 +1.3.6.1.2.1.2.2.1.20.15|65|265866093 +1.3.6.1.2.1.2.2.1.21.13|66|937466031 +1.3.6.1.2.1.2.2.1.21.15|66|2221236799 +1.3.6.1.2.1.2.2.1.22.13|6|1.3.6.1.3.107.152 +1.3.6.1.2.1.2.2.1.22.15|6|1.3.6.1.3.246.10.85.214 +1.3.6.1.2.1.4.1.0|2|2 +1.3.6.1.2.1.4.2.0|2|8 +1.3.6.1.2.1.4.3.0|65|3546637224 +1.3.6.1.2.1.4.4.0|65|2130923619 +1.3.6.1.2.1.4.5.0|65|1742824739 +1.3.6.1.2.1.4.6.0|65|1458658850 +1.3.6.1.2.1.4.7.0|65|1114590264 +1.3.6.1.2.1.4.8.0|65|3069832299 +1.3.6.1.2.1.4.9.0|65|2515896620 +1.3.6.1.2.1.4.10.0|65|3192933475 +1.3.6.1.2.1.4.11.0|65|1635654711 +1.3.6.1.2.1.4.12.0|65|158382596 +1.3.6.1.2.1.4.13.0|2|22 +1.3.6.1.2.1.4.14.0|65|128210379 +1.3.6.1.2.1.4.15.0|65|4215753440 +1.3.6.1.2.1.4.16.0|65|410770522 +1.3.6.1.2.1.4.17.0|65|443515482 +1.3.6.1.2.1.4.18.0|65|3687632801 +1.3.6.1.2.1.4.19.0|65|3948711557 +1.3.6.1.2.1.4.20.1.1.9.208.150.23|64x|09d09617 +1.3.6.1.2.1.4.20.1.1.200.11.80.108|64x|c80b506c +1.3.6.1.2.1.4.20.1.1.223.237.133.97|64x|dfed8561 +1.3.6.1.2.1.4.20.1.1.246.244.204.67|64x|f6f4cc43 +1.3.6.1.2.1.4.20.1.2.9.208.150.23|2|30 +1.3.6.1.2.1.4.20.1.2.200.11.80.108|2|1 +1.3.6.1.2.1.4.20.1.2.223.237.133.97|2|16 +1.3.6.1.2.1.4.20.1.2.246.244.204.67|2|28 +1.3.6.1.2.1.4.20.1.3.9.208.150.23|64x|4a909350 +1.3.6.1.2.1.4.20.1.3.200.11.80.108|64x|32a8da55 +1.3.6.1.2.1.4.20.1.3.223.237.133.97|64x|840e95c2 +1.3.6.1.2.1.4.20.1.3.246.244.204.67|64x|c0dc2c8d +1.3.6.1.2.1.4.20.1.4.9.208.150.23|2|1 +1.3.6.1.2.1.4.20.1.4.200.11.80.108|2|1 +1.3.6.1.2.1.4.20.1.4.223.237.133.97|2|1 +1.3.6.1.2.1.4.20.1.4.246.244.204.67|2|0 +1.3.6.1.2.1.4.20.1.5.9.208.150.23|2|1 +1.3.6.1.2.1.4.20.1.5.200.11.80.108|2|12 +1.3.6.1.2.1.4.20.1.5.223.237.133.97|2|7 +1.3.6.1.2.1.4.20.1.5.246.244.204.67|2|2 +1.3.6.1.2.1.4.22.1.1.6.169.28.142.191|2|6 +1.3.6.1.2.1.4.22.1.1.8.175.113.74.135|2|8 +1.3.6.1.2.1.4.22.1.1.25.126.182.179.115|2|25 +1.3.6.1.2.1.4.22.1.1.29.225.213.228.189|2|29 +1.3.6.1.2.1.4.22.1.2.6.169.28.142.191|4x|42010aa40033 +1.3.6.1.2.1.4.22.1.2.8.175.113.74.135|4x|42010aa40033 +1.3.6.1.2.1.4.22.1.2.25.126.182.179.115|4x|42010aa40033 +1.3.6.1.2.1.4.22.1.2.29.225.213.228.189|4x|42010aa40033 +1.3.6.1.2.1.4.22.1.3.6.169.28.142.191|64x|a91c8ebf +1.3.6.1.2.1.4.22.1.3.8.175.113.74.135|64x|af714a87 +1.3.6.1.2.1.4.22.1.3.25.126.182.179.115|64x|7eb6b373 +1.3.6.1.2.1.4.22.1.3.29.225.213.228.189|64x|e1d5e4bd +1.3.6.1.2.1.4.22.1.4.6.169.28.142.191|2|1 +1.3.6.1.2.1.4.22.1.4.8.175.113.74.135|2|2 +1.3.6.1.2.1.4.22.1.4.25.126.182.179.115|2|4 +1.3.6.1.2.1.4.22.1.4.29.225.213.228.189|2|2 +1.3.6.1.2.1.4.23.0|65|136816428 +1.3.6.1.2.1.4.25.0|2|2 +1.3.6.1.2.1.4.26.0|2|24 +1.3.6.1.2.1.4.27.0|67|3761728971 +1.3.6.1.2.1.4.28.1.1.1|2|1 +1.3.6.1.2.1.4.28.1.1.4|2|4 +1.3.6.1.2.1.4.28.1.1.8|2|8 +1.3.6.1.2.1.4.28.1.1.17|2|17 +1.3.6.1.2.1.4.28.1.2.1|2|21 +1.3.6.1.2.1.4.28.1.2.4|2|26 +1.3.6.1.2.1.4.28.1.2.8|2|28 +1.3.6.1.2.1.4.28.1.2.17|2|21 +1.3.6.1.2.1.4.28.1.3.1|2|2 +1.3.6.1.2.1.4.28.1.3.4|2|1 +1.3.6.1.2.1.4.28.1.3.8|2|2 +1.3.6.1.2.1.4.28.1.3.17|2|1 +1.3.6.1.2.1.4.28.1.4.1|66|812 +1.3.6.1.2.1.4.28.1.4.4|66|64486 +1.3.6.1.2.1.4.28.1.4.8|66|54467 +1.3.6.1.2.1.4.28.1.4.17|66|48432 +1.3.6.1.2.1.4.29.0|67|2362973703 +1.3.6.1.2.1.4.30.1.1.2|2|2 +1.3.6.1.2.1.4.30.1.1.17|2|17 +1.3.6.1.2.1.4.30.1.1.20|2|20 +1.3.6.1.2.1.4.30.1.1.22|2|22 +1.3.6.1.2.1.4.30.1.2.2|66|54933 +1.3.6.1.2.1.4.30.1.2.17|66|8984 +1.3.6.1.2.1.4.30.1.2.20|66|31294 +1.3.6.1.2.1.4.30.1.2.22|66|6797 +1.3.6.1.2.1.4.30.1.3.2|4x|a6b458008bf2baec +1.3.6.1.2.1.4.30.1.3.17|4x|a6b458008bf2baec +1.3.6.1.2.1.4.30.1.3.20|4x|a6b458008bf2baec +1.3.6.1.2.1.4.30.1.3.22|4x|a6b458008bf2baec +1.3.6.1.2.1.4.30.1.5.2|2|2 +1.3.6.1.2.1.4.30.1.5.17|2|1 +1.3.6.1.2.1.4.30.1.5.20|2|2 +1.3.6.1.2.1.4.30.1.5.22|2|1 +1.3.6.1.2.1.4.30.1.6.2|66|47619 +1.3.6.1.2.1.4.30.1.6.17|66|51660 +1.3.6.1.2.1.4.30.1.6.20|66|38999 +1.3.6.1.2.1.4.30.1.6.22|66|39635 +1.3.6.1.2.1.4.30.1.7.2|66|54160 +1.3.6.1.2.1.4.30.1.7.17|66|50062 +1.3.6.1.2.1.4.30.1.7.20|66|39585 +1.3.6.1.2.1.4.30.1.7.22|66|2062 +1.3.6.1.2.1.4.30.1.8.2|2|2 +1.3.6.1.2.1.4.30.1.8.17|2|1 +1.3.6.1.2.1.4.30.1.8.20|2|2 +1.3.6.1.2.1.4.30.1.8.22|2|1 +1.3.6.1.2.1.4.31.1.1.1.1|2|0 +1.3.6.1.2.1.4.31.1.1.1.2|2|1 +1.3.6.1.2.1.4.31.1.1.3.1|65|1282316752 +1.3.6.1.2.1.4.31.1.1.3.2|65|2931163933 +1.3.6.1.2.1.4.31.1.1.4.1|70|5783600227374381282 +1.3.6.1.2.1.4.31.1.1.4.2|70|7878841687722285205 +1.3.6.1.2.1.4.31.1.1.5.1|65|934018851 +1.3.6.1.2.1.4.31.1.1.5.2|65|1505478027 +1.3.6.1.2.1.4.31.1.1.6.1|70|3466652958807352799 +1.3.6.1.2.1.4.31.1.1.6.2|70|6846704842227960036 +1.3.6.1.2.1.4.31.1.1.7.1|65|3870134036 +1.3.6.1.2.1.4.31.1.1.7.2|65|603776157 +1.3.6.1.2.1.4.31.1.1.8.1|65|719375178 +1.3.6.1.2.1.4.31.1.1.8.2|65|3328353201 +1.3.6.1.2.1.4.31.1.1.9.1|65|3623879979 +1.3.6.1.2.1.4.31.1.1.9.2|65|1742598367 +1.3.6.1.2.1.4.31.1.1.10.1|65|3469512894 +1.3.6.1.2.1.4.31.1.1.10.2|65|4030917231 +1.3.6.1.2.1.4.31.1.1.11.1|65|3721065773 +1.3.6.1.2.1.4.31.1.1.11.2|65|3220804402 +1.3.6.1.2.1.4.31.1.1.12.1|65|2228913071 +1.3.6.1.2.1.4.31.1.1.12.2|65|506134763 +1.3.6.1.2.1.4.31.1.1.13.1|70|4072318956505567616 +1.3.6.1.2.1.4.31.1.1.13.2|70|16703760251682054234 +1.3.6.1.2.1.4.31.1.1.14.1|65|2629821608 +1.3.6.1.2.1.4.31.1.1.14.2|65|421955199 +1.3.6.1.2.1.4.31.1.1.15.1|65|2527685245 +1.3.6.1.2.1.4.31.1.1.15.2|65|1798858343 +1.3.6.1.2.1.4.31.1.1.16.1|65|1894065316 +1.3.6.1.2.1.4.31.1.1.16.2|65|1403953109 +1.3.6.1.2.1.4.31.1.1.17.1|65|1554498388 +1.3.6.1.2.1.4.31.1.1.17.2|65|194570689 +1.3.6.1.2.1.4.31.1.1.18.1|65|4086797048 +1.3.6.1.2.1.4.31.1.1.18.2|65|3394299994 +1.3.6.1.2.1.4.31.1.1.19.1|70|17920373517856541850 +1.3.6.1.2.1.4.31.1.1.19.2|70|4037738900336282162 +1.3.6.1.2.1.4.31.1.1.20.1|65|659216537 +1.3.6.1.2.1.4.31.1.1.20.2|65|2634142429 +1.3.6.1.2.1.4.31.1.1.21.1|70|17177900121309884840 +1.3.6.1.2.1.4.31.1.1.21.2|70|7492613728617028549 +1.3.6.1.2.1.4.31.1.1.22.1|65|2528551998 +1.3.6.1.2.1.4.31.1.1.22.2|65|892992587 +1.3.6.1.2.1.4.31.1.1.23.1|65|3481624357 +1.3.6.1.2.1.4.31.1.1.23.2|65|1680014673 +1.3.6.1.2.1.4.31.1.1.24.1|70|12177179272038917674 +1.3.6.1.2.1.4.31.1.1.24.2|70|9731262886757879750 +1.3.6.1.2.1.4.31.1.1.25.1|65|2358025353 +1.3.6.1.2.1.4.31.1.1.25.2|65|3917562466 +1.3.6.1.2.1.4.31.1.1.26.1|65|3747667050 +1.3.6.1.2.1.4.31.1.1.26.2|65|2310235615 +1.3.6.1.2.1.4.31.1.1.27.1|65|1890373924 +1.3.6.1.2.1.4.31.1.1.27.2|65|2255127251 +1.3.6.1.2.1.4.31.1.1.28.1|65|2860300133 +1.3.6.1.2.1.4.31.1.1.28.2|65|1458494545 +1.3.6.1.2.1.4.31.1.1.29.1|65|203139220 +1.3.6.1.2.1.4.31.1.1.29.2|65|1495544614 +1.3.6.1.2.1.4.31.1.1.30.1|65|3187405495 +1.3.6.1.2.1.4.31.1.1.30.2|65|2498299266 +1.3.6.1.2.1.4.31.1.1.31.1|70|14364224325252552480 +1.3.6.1.2.1.4.31.1.1.31.2|70|15579562295200870655 +1.3.6.1.2.1.4.31.1.1.32.1|65|1817172532 +1.3.6.1.2.1.4.31.1.1.32.2|65|3221638580 +1.3.6.1.2.1.4.31.1.1.33.1|70|17295591865016486147 +1.3.6.1.2.1.4.31.1.1.33.2|70|11593645523890791195 +1.3.6.1.2.1.4.31.1.1.34.1|65|3642660893 +1.3.6.1.2.1.4.31.1.1.34.2|65|2824375432 +1.3.6.1.2.1.4.31.1.1.35.1|70|1059496062163332352 +1.3.6.1.2.1.4.31.1.1.35.2|70|6779561539692407913 +1.3.6.1.2.1.4.31.1.1.36.1|65|1370217103 +1.3.6.1.2.1.4.31.1.1.36.2|65|414101783 +1.3.6.1.2.1.4.31.1.1.37.1|70|11808146763629487163 +1.3.6.1.2.1.4.31.1.1.37.2|70|199221492791940521 +1.3.6.1.2.1.4.31.1.1.38.1|65|3100959593 +1.3.6.1.2.1.4.31.1.1.38.2|65|1607946655 +1.3.6.1.2.1.4.31.1.1.39.1|70|5311911265536100817 +1.3.6.1.2.1.4.31.1.1.39.2|70|5796034691120619031 +1.3.6.1.2.1.4.31.1.1.40.1|65|727614759 +1.3.6.1.2.1.4.31.1.1.40.2|65|243788076 +1.3.6.1.2.1.4.31.1.1.41.1|70|10886034670150832037 +1.3.6.1.2.1.4.31.1.1.41.2|70|18081706296441551909 +1.3.6.1.2.1.4.31.1.1.42.1|65|2597626393 +1.3.6.1.2.1.4.31.1.1.42.2|65|1756902403 +1.3.6.1.2.1.4.31.1.1.43.1|70|3624977684937512266 +1.3.6.1.2.1.4.31.1.1.43.2|70|14241477518255792672 +1.3.6.1.2.1.4.31.1.1.44.1|65|1431813500 +1.3.6.1.2.1.4.31.1.1.44.2|65|822060041 +1.3.6.1.2.1.4.31.1.1.45.1|70|2377465159522396553 +1.3.6.1.2.1.4.31.1.1.45.2|70|17278067538447676831 +1.3.6.1.2.1.4.31.1.1.46.1|67|223104120 +1.3.6.1.2.1.4.31.1.1.46.2|67|2342974234 +1.3.6.1.2.1.4.31.1.1.47.1|66|38480 +1.3.6.1.2.1.4.31.1.1.47.2|66|40748 +1.3.6.1.2.1.4.31.2.0|67|1227405340 +1.3.6.1.2.1.4.31.3.1.1.1.17|2|0 +1.3.6.1.2.1.4.31.3.1.1.1.21|2|0 +1.3.6.1.2.1.4.31.3.1.1.2.17|2|1 +1.3.6.1.2.1.4.31.3.1.1.2.21|2|2 +1.3.6.1.2.1.4.31.3.1.2.1.17|2|17 +1.3.6.1.2.1.4.31.3.1.2.1.21|2|21 +1.3.6.1.2.1.4.31.3.1.2.2.17|2|27 +1.3.6.1.2.1.4.31.3.1.2.2.21|2|25 +1.3.6.1.2.1.4.31.3.1.3.1.17|65|866613297 +1.3.6.1.2.1.4.31.3.1.3.1.21|65|882617529 +1.3.6.1.2.1.4.31.3.1.3.2.17|65|4023831017 +1.3.6.1.2.1.4.31.3.1.3.2.21|65|2525818421 +1.3.6.1.2.1.4.31.3.1.4.1.17|70|16541259019565922139 +1.3.6.1.2.1.4.31.3.1.4.1.21|70|6488693863013666655 +1.3.6.1.2.1.4.31.3.1.4.2.17|70|17283542088757438702 +1.3.6.1.2.1.4.31.3.1.4.2.21|70|460141854202718217 +1.3.6.1.2.1.4.31.3.1.5.1.17|65|1351252213 +1.3.6.1.2.1.4.31.3.1.5.1.21|65|200152718 +1.3.6.1.2.1.4.31.3.1.5.2.17|65|2436057504 +1.3.6.1.2.1.4.31.3.1.5.2.21|65|2320669464 +1.3.6.1.2.1.4.31.3.1.6.1.17|70|6687352077047466084 +1.3.6.1.2.1.4.31.3.1.6.1.21|70|17902872121324216713 +1.3.6.1.2.1.4.31.3.1.6.2.17|70|18086586042523373768 +1.3.6.1.2.1.4.31.3.1.6.2.21|70|5918210585844939369 +1.3.6.1.2.1.4.31.3.1.7.1.17|65|828939801 +1.3.6.1.2.1.4.31.3.1.7.1.21|65|827041496 +1.3.6.1.2.1.4.31.3.1.7.2.17|65|2403042140 +1.3.6.1.2.1.4.31.3.1.7.2.21|65|2614144146 +1.3.6.1.2.1.4.31.3.1.8.1.17|65|3170610705 +1.3.6.1.2.1.4.31.3.1.8.1.21|65|2515427367 +1.3.6.1.2.1.4.31.3.1.8.2.17|65|1137784412 +1.3.6.1.2.1.4.31.3.1.8.2.21|65|1100196722 +1.3.6.1.2.1.4.31.3.1.9.1.17|65|2481076163 +1.3.6.1.2.1.4.31.3.1.9.1.21|65|3641344774 +1.3.6.1.2.1.4.31.3.1.9.2.17|65|2911509488 +1.3.6.1.2.1.4.31.3.1.9.2.21|65|3405124399 +1.3.6.1.2.1.4.31.3.1.10.1.17|65|1769506743 +1.3.6.1.2.1.4.31.3.1.10.1.21|65|1248224023 +1.3.6.1.2.1.4.31.3.1.10.2.17|65|3422838435 +1.3.6.1.2.1.4.31.3.1.10.2.21|65|3489136745 +1.3.6.1.2.1.4.31.3.1.11.1.17|65|3862632055 +1.3.6.1.2.1.4.31.3.1.11.1.21|65|2713908093 +1.3.6.1.2.1.4.31.3.1.11.2.17|65|476218303 +1.3.6.1.2.1.4.31.3.1.11.2.21|65|3698961401 +1.3.6.1.2.1.4.31.3.1.12.1.17|65|1359782321 +1.3.6.1.2.1.4.31.3.1.12.1.21|65|2241879983 +1.3.6.1.2.1.4.31.3.1.12.2.17|65|1183691998 +1.3.6.1.2.1.4.31.3.1.12.2.21|65|2063959814 +1.3.6.1.2.1.4.31.3.1.13.1.17|70|14347482721867749163 +1.3.6.1.2.1.4.31.3.1.13.1.21|70|7213536290436404267 +1.3.6.1.2.1.4.31.3.1.13.2.17|70|14469382783700684034 +1.3.6.1.2.1.4.31.3.1.13.2.21|70|1366907728168162104 +1.3.6.1.2.1.4.31.3.1.14.1.17|65|3317037142 +1.3.6.1.2.1.4.31.3.1.14.1.21|65|2862227008 +1.3.6.1.2.1.4.31.3.1.14.2.17|65|3323994287 +1.3.6.1.2.1.4.31.3.1.14.2.21|65|966431424 +1.3.6.1.2.1.4.31.3.1.15.1.17|65|2280556394 +1.3.6.1.2.1.4.31.3.1.15.1.21|65|3928591306 +1.3.6.1.2.1.4.31.3.1.15.2.17|65|2385065673 +1.3.6.1.2.1.4.31.3.1.15.2.21|65|1850469751 +1.3.6.1.2.1.4.31.3.1.16.1.17|65|1866916822 +1.3.6.1.2.1.4.31.3.1.16.1.21|65|647473452 +1.3.6.1.2.1.4.31.3.1.16.2.17|65|3661063266 +1.3.6.1.2.1.4.31.3.1.16.2.21|65|236639870 +1.3.6.1.2.1.4.31.3.1.17.1.17|65|3032320662 +1.3.6.1.2.1.4.31.3.1.17.1.21|65|678453899 +1.3.6.1.2.1.4.31.3.1.17.2.17|65|3967478828 +1.3.6.1.2.1.4.31.3.1.17.2.21|65|3875826723 +1.3.6.1.2.1.4.31.3.1.18.1.17|65|927115845 +1.3.6.1.2.1.4.31.3.1.18.1.21|65|3257624983 +1.3.6.1.2.1.4.31.3.1.18.2.17|65|3458426296 +1.3.6.1.2.1.4.31.3.1.18.2.21|65|2271164228 +1.3.6.1.2.1.4.31.3.1.19.1.17|70|7612831344874359679 +1.3.6.1.2.1.4.31.3.1.19.1.21|70|1029183689104183616 +1.3.6.1.2.1.4.31.3.1.19.2.17|70|6504169741601734200 +1.3.6.1.2.1.4.31.3.1.19.2.21|70|18010845534396597428 +1.3.6.1.2.1.4.31.3.1.20.1.17|65|2749255035 +1.3.6.1.2.1.4.31.3.1.20.1.21|65|289352940 +1.3.6.1.2.1.4.31.3.1.20.2.17|65|2642737967 +1.3.6.1.2.1.4.31.3.1.20.2.21|65|3817593854 +1.3.6.1.2.1.4.31.3.1.21.1.17|70|15554355085868323793 +1.3.6.1.2.1.4.31.3.1.21.1.21|70|753449946982882745 +1.3.6.1.2.1.4.31.3.1.21.2.17|70|5497439711304978459 +1.3.6.1.2.1.4.31.3.1.21.2.21|70|9375898839017839190 +1.3.6.1.2.1.4.31.3.1.23.1.17|65|1575381088 +1.3.6.1.2.1.4.31.3.1.23.1.21|65|303245646 +1.3.6.1.2.1.4.31.3.1.23.2.17|65|3378776420 +1.3.6.1.2.1.4.31.3.1.23.2.21|65|4127224866 +1.3.6.1.2.1.4.31.3.1.24.1.17|70|14237474042437363011 +1.3.6.1.2.1.4.31.3.1.24.1.21|70|18055252329989805762 +1.3.6.1.2.1.4.31.3.1.24.2.17|70|1899935865156339542 +1.3.6.1.2.1.4.31.3.1.24.2.21|70|8756817980611927920 +1.3.6.1.2.1.4.31.3.1.25.1.17|65|4145705697 +1.3.6.1.2.1.4.31.3.1.25.1.21|65|4284781511 +1.3.6.1.2.1.4.31.3.1.25.2.17|65|3138789772 +1.3.6.1.2.1.4.31.3.1.25.2.21|65|530428315 +1.3.6.1.2.1.4.31.3.1.26.1.17|65|756294558 +1.3.6.1.2.1.4.31.3.1.26.1.21|65|4068526151 +1.3.6.1.2.1.4.31.3.1.26.2.17|65|1358324308 +1.3.6.1.2.1.4.31.3.1.26.2.21|65|1093114005 +1.3.6.1.2.1.4.31.3.1.27.1.17|65|693160369 +1.3.6.1.2.1.4.31.3.1.27.1.21|65|1186174909 +1.3.6.1.2.1.4.31.3.1.27.2.17|65|957138868 +1.3.6.1.2.1.4.31.3.1.27.2.21|65|3062672417 +1.3.6.1.2.1.4.31.3.1.28.1.17|65|3201371121 +1.3.6.1.2.1.4.31.3.1.28.1.21|65|811270852 +1.3.6.1.2.1.4.31.3.1.28.2.17|65|2596548835 +1.3.6.1.2.1.4.31.3.1.28.2.21|65|3968817600 +1.3.6.1.2.1.4.31.3.1.29.1.17|65|1725960779 +1.3.6.1.2.1.4.31.3.1.29.1.21|65|836262327 +1.3.6.1.2.1.4.31.3.1.29.2.17|65|2090302675 +1.3.6.1.2.1.4.31.3.1.29.2.21|65|3056437053 +1.3.6.1.2.1.4.31.3.1.30.1.17|65|2462307539 +1.3.6.1.2.1.4.31.3.1.30.1.21|65|143447607 +1.3.6.1.2.1.4.31.3.1.30.2.17|65|979940532 +1.3.6.1.2.1.4.31.3.1.30.2.21|65|3759901776 +1.3.6.1.2.1.4.31.3.1.31.1.17|70|18386935594506712267 +1.3.6.1.2.1.4.31.3.1.31.1.21|70|10826640097040292960 +1.3.6.1.2.1.4.31.3.1.31.2.17|70|9098136257097188203 +1.3.6.1.2.1.4.31.3.1.31.2.21|70|8600810305645325346 +1.3.6.1.2.1.4.31.3.1.32.1.17|65|3155164358 +1.3.6.1.2.1.4.31.3.1.32.1.21|65|2960527631 +1.3.6.1.2.1.4.31.3.1.32.2.17|65|1940354889 +1.3.6.1.2.1.4.31.3.1.32.2.21|65|851907630 +1.3.6.1.2.1.4.31.3.1.33.1.17|70|7264860876229858683 +1.3.6.1.2.1.4.31.3.1.33.1.21|70|17313919040021973387 +1.3.6.1.2.1.4.31.3.1.33.2.17|70|13590379289280784730 +1.3.6.1.2.1.4.31.3.1.33.2.21|70|17707827503540412829 +1.3.6.1.2.1.4.31.3.1.34.1.17|65|655242562 +1.3.6.1.2.1.4.31.3.1.34.1.21|65|1288301790 +1.3.6.1.2.1.4.31.3.1.34.2.17|65|1849410165 +1.3.6.1.2.1.4.31.3.1.34.2.21|65|1279242570 +1.3.6.1.2.1.4.31.3.1.35.1.17|70|13853431729452045643 +1.3.6.1.2.1.4.31.3.1.35.1.21|70|12175899719023875618 +1.3.6.1.2.1.4.31.3.1.35.2.17|70|5746076581242596522 +1.3.6.1.2.1.4.31.3.1.35.2.21|70|11270454824911170838 +1.3.6.1.2.1.4.31.3.1.36.1.17|65|3609901991 +1.3.6.1.2.1.4.31.3.1.36.1.21|65|3366624678 +1.3.6.1.2.1.4.31.3.1.36.2.17|65|1920324642 +1.3.6.1.2.1.4.31.3.1.36.2.21|65|4209011130 +1.3.6.1.2.1.4.31.3.1.37.1.17|70|7895653252070651268 +1.3.6.1.2.1.4.31.3.1.37.1.21|70|12394260431406653224 +1.3.6.1.2.1.4.31.3.1.37.2.17|70|15299594081869997980 +1.3.6.1.2.1.4.31.3.1.37.2.21|70|5207569687615871054 +1.3.6.1.2.1.4.31.3.1.38.1.17|65|52943236 +1.3.6.1.2.1.4.31.3.1.38.1.21|65|3625273341 +1.3.6.1.2.1.4.31.3.1.38.2.17|65|2093962244 +1.3.6.1.2.1.4.31.3.1.38.2.21|65|2570094859 +1.3.6.1.2.1.4.31.3.1.39.1.17|70|12882822983962882497 +1.3.6.1.2.1.4.31.3.1.39.1.21|70|8407178083230479565 +1.3.6.1.2.1.4.31.3.1.39.2.17|70|18336009361507838044 +1.3.6.1.2.1.4.31.3.1.39.2.21|70|11666341087131274654 +1.3.6.1.2.1.4.31.3.1.40.1.17|65|2112237646 +1.3.6.1.2.1.4.31.3.1.40.1.21|65|1029360032 +1.3.6.1.2.1.4.31.3.1.40.2.17|65|735826687 +1.3.6.1.2.1.4.31.3.1.40.2.21|65|669567614 +1.3.6.1.2.1.4.31.3.1.41.1.17|70|15334443937769666109 +1.3.6.1.2.1.4.31.3.1.41.1.21|70|866200030929373579 +1.3.6.1.2.1.4.31.3.1.41.2.17|70|6052996953017774683 +1.3.6.1.2.1.4.31.3.1.41.2.21|70|8716473514490114253 +1.3.6.1.2.1.4.31.3.1.42.1.17|65|2322814508 +1.3.6.1.2.1.4.31.3.1.42.1.21|65|3327247243 +1.3.6.1.2.1.4.31.3.1.42.2.17|65|2727298329 +1.3.6.1.2.1.4.31.3.1.42.2.21|65|3246577319 +1.3.6.1.2.1.4.31.3.1.43.1.17|70|2034420164050050816 +1.3.6.1.2.1.4.31.3.1.43.1.21|70|13950647551966877873 +1.3.6.1.2.1.4.31.3.1.43.2.17|70|17473187917807218064 +1.3.6.1.2.1.4.31.3.1.43.2.21|70|14148731617561528442 +1.3.6.1.2.1.4.31.3.1.44.1.17|65|3367170860 +1.3.6.1.2.1.4.31.3.1.44.1.21|65|1801660866 +1.3.6.1.2.1.4.31.3.1.44.2.17|65|922612589 +1.3.6.1.2.1.4.31.3.1.44.2.21|65|886729780 +1.3.6.1.2.1.4.31.3.1.45.1.17|70|607792112682508330 +1.3.6.1.2.1.4.31.3.1.45.1.21|70|6397386343954789607 +1.3.6.1.2.1.4.31.3.1.45.2.17|70|2366567357642059143 +1.3.6.1.2.1.4.31.3.1.45.2.21|70|13236325206057337924 +1.3.6.1.2.1.4.31.3.1.46.1.17|67|1761560959 +1.3.6.1.2.1.4.31.3.1.46.1.21|67|2188904331 +1.3.6.1.2.1.4.31.3.1.46.2.17|67|3084605396 +1.3.6.1.2.1.4.31.3.1.46.2.21|67|3709080479 +1.3.6.1.2.1.4.31.3.1.47.1.17|66|36433 +1.3.6.1.2.1.4.31.3.1.47.1.21|66|6826 +1.3.6.1.2.1.4.31.3.1.47.2.17|66|61176 +1.3.6.1.2.1.4.31.3.1.47.2.21|66|15570 +1.3.6.1.2.1.4.32.1.1.2.2.7.122.111.109.98.105.101.115.912|2|2 +1.3.6.1.2.1.4.32.1.1.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|13 +1.3.6.1.2.1.4.32.1.1.19.4.7.102.111.114.119.97.114.100.1523|2|19 +1.3.6.1.2.1.4.32.1.1.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|29 +1.3.6.1.2.1.4.32.1.2.2.2.7.122.111.109.98.105.101.115.912|2|2 +1.3.6.1.2.1.4.32.1.2.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|1 +1.3.6.1.2.1.4.32.1.2.19.4.7.102.111.114.119.97.114.100.1523|2|4 +1.3.6.1.2.1.4.32.1.2.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|2 +1.3.6.1.2.1.4.32.1.3.2.2.7.122.111.109.98.105.101.115.912|4|zombies +1.3.6.1.2.1.4.32.1.3.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|4x|6f78656e206b65707420666f727761726420717561696e746c79 +1.3.6.1.2.1.4.32.1.3.19.4.7.102.111.114.119.97.114.100.1523|4|forward +1.3.6.1.2.1.4.32.1.3.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|4x|4a6164656420746865697220616374656420666f7277617264 +1.3.6.1.2.1.4.32.1.4.2.2.7.122.111.109.98.105.101.115.912|66|912 +1.3.6.1.2.1.4.32.1.4.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|66|1974 +1.3.6.1.2.1.4.32.1.4.19.4.7.102.111.114.119.97.114.100.1523|66|1523 +1.3.6.1.2.1.4.32.1.4.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|66|95 +1.3.6.1.2.1.4.32.1.5.2.2.7.122.111.109.98.105.101.115.912|2|3 +1.3.6.1.2.1.4.32.1.5.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|1 +1.3.6.1.2.1.4.32.1.5.19.4.7.102.111.114.119.97.114.100.1523|2|2 +1.3.6.1.2.1.4.32.1.5.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|2 +1.3.6.1.2.1.4.32.1.6.2.2.7.122.111.109.98.105.101.115.912|2|1 +1.3.6.1.2.1.4.32.1.6.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|2 +1.3.6.1.2.1.4.32.1.6.19.4.7.102.111.114.119.97.114.100.1523|2|1 +1.3.6.1.2.1.4.32.1.6.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|2 +1.3.6.1.2.1.4.32.1.7.2.2.7.122.111.109.98.105.101.115.912|2|2 +1.3.6.1.2.1.4.32.1.7.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|1 +1.3.6.1.2.1.4.32.1.7.19.4.7.102.111.114.119.97.114.100.1523|2|2 +1.3.6.1.2.1.4.32.1.7.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|2 +1.3.6.1.2.1.4.32.1.8.2.2.7.122.111.109.98.105.101.115.912|66|40358 +1.3.6.1.2.1.4.32.1.8.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|66|27032 +1.3.6.1.2.1.4.32.1.8.19.4.7.102.111.114.119.97.114.100.1523|66|425 +1.3.6.1.2.1.4.32.1.8.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|66|22520 +1.3.6.1.2.1.4.32.1.9.2.2.7.122.111.109.98.105.101.115.912|66|55055 +1.3.6.1.2.1.4.32.1.9.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|66|45400 +1.3.6.1.2.1.4.32.1.9.19.4.7.102.111.114.119.97.114.100.1523|66|33958 +1.3.6.1.2.1.4.32.1.9.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|66|4822 +1.3.6.1.2.1.4.33.0|2|3 +1.3.6.1.2.1.4.34.1.1.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.1.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.1.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|2 +1.3.6.1.2.1.4.34.1.1.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|4 +1.3.6.1.2.1.4.34.1.2.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|4x|74686569722064726976696e67206f78656e +1.3.6.1.2.1.4.34.1.2.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|4x|627574207a6f6d62696573206163746564206b657074206f78656e +1.3.6.1.2.1.4.34.1.2.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|4x|6b65707420627574206b657074 +1.3.6.1.2.1.4.34.1.2.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|4x|7a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.2.1.4.34.1.3.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|4 +1.3.6.1.2.1.4.34.1.3.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|6 +1.3.6.1.2.1.4.34.1.3.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|13 +1.3.6.1.2.1.4.34.1.3.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|9 +1.3.6.1.2.1.4.34.1.4.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.4.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.4.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|3 +1.3.6.1.2.1.4.34.1.4.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|2 +1.3.6.1.2.1.4.34.1.5.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|6|1.3.6.1.3.192.97.56 +1.3.6.1.2.1.4.34.1.5.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|6|1.3.6.1.3.129.102.69.143.94.120.130.215 +1.3.6.1.2.1.4.34.1.5.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|6|1.3.6.1.3.238.149.98.96.109.170.231.221.192 +1.3.6.1.2.1.4.34.1.5.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|6|1.3.6.1.3.115.35.24 +1.3.6.1.2.1.4.34.1.6.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.6.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|2 +1.3.6.1.2.1.4.34.1.6.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|6 +1.3.6.1.2.1.4.34.1.6.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|6 +1.3.6.1.2.1.4.34.1.7.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|7 +1.3.6.1.2.1.4.34.1.7.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.7.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|3 +1.3.6.1.2.1.4.34.1.7.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|4 +1.3.6.1.2.1.4.34.1.8.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|67|4284183605 +1.3.6.1.2.1.4.34.1.8.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|67|4250460302 +1.3.6.1.2.1.4.34.1.8.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|67|147328146 +1.3.6.1.2.1.4.34.1.8.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|67|1025249295 +1.3.6.1.2.1.4.34.1.9.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|67|1279593731 +1.3.6.1.2.1.4.34.1.9.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|67|453203599 +1.3.6.1.2.1.4.34.1.9.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|67|3431328629 +1.3.6.1.2.1.4.34.1.9.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|67|2803136066 +1.3.6.1.2.1.4.34.1.10.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|5 +1.3.6.1.2.1.4.34.1.10.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|5 +1.3.6.1.2.1.4.34.1.10.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|5 +1.3.6.1.2.1.4.34.1.10.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|4 +1.3.6.1.2.1.4.34.1.11.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|4 +1.3.6.1.2.1.4.34.1.11.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|5 +1.3.6.1.2.1.4.34.1.11.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|5 +1.3.6.1.2.1.4.34.1.11.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|3 +1.3.6.1.2.1.4.35.1.1.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|5 +1.3.6.1.2.1.4.35.1.1.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|9 +1.3.6.1.2.1.4.35.1.1.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|19 +1.3.6.1.2.1.4.35.1.1.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|27 +1.3.6.1.2.1.4.35.1.2.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|2 +1.3.6.1.2.1.4.35.1.2.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|1 +1.3.6.1.2.1.4.35.1.2.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|1 +1.3.6.1.2.1.4.35.1.2.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|3 +1.3.6.1.2.1.4.35.1.3.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|4x|6f78656e204a61646564207a6f6d626965732064726976696e67204a61646564207a6f6d62696573206163746564207468656972 +1.3.6.1.2.1.4.35.1.3.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|4x|666f727761726420666f7277617264206b65707420627574206163746564 +1.3.6.1.2.1.4.35.1.3.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|4x|666f7277617264206275742074686569722064726976696e6720616374656420627574206b657074 +1.3.6.1.2.1.4.35.1.3.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|4x|616374656420717561696e746c79206b65707420666f727761726420627574 +1.3.6.1.2.1.4.35.1.4.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.5.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|67|970411781 +1.3.6.1.2.1.4.35.1.5.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|67|2506166029 +1.3.6.1.2.1.4.35.1.5.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|67|2466243180 +1.3.6.1.2.1.4.35.1.5.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|67|2114863065 +1.3.6.1.2.1.4.35.1.6.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|4 +1.3.6.1.2.1.4.35.1.6.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|5 +1.3.6.1.2.1.4.35.1.6.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|5 +1.3.6.1.2.1.4.35.1.6.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|5 +1.3.6.1.2.1.4.35.1.7.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|2 +1.3.6.1.2.1.4.35.1.7.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|4 +1.3.6.1.2.1.4.35.1.7.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|6 +1.3.6.1.2.1.4.35.1.7.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|2 +1.3.6.1.2.1.4.35.1.8.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|3 +1.3.6.1.2.1.4.35.1.8.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|0 +1.3.6.1.2.1.4.35.1.8.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|1 +1.3.6.1.2.1.4.35.1.8.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|2 +1.3.6.1.2.1.4.36.1.1.8|2|8 +1.3.6.1.2.1.4.36.1.1.11|2|11 +1.3.6.1.2.1.4.36.1.1.20|2|20 +1.3.6.1.2.1.4.36.1.1.23|2|23 +1.3.6.1.2.1.4.36.1.2.8|66|46355 +1.3.6.1.2.1.4.36.1.2.11|66|33267 +1.3.6.1.2.1.4.36.1.2.20|66|4839 +1.3.6.1.2.1.4.36.1.2.23|66|18 +1.3.6.1.2.1.4.36.1.3.8|66|12673 +1.3.6.1.2.1.4.36.1.3.11|66|46131 +1.3.6.1.2.1.4.36.1.3.20|66|1766 +1.3.6.1.2.1.4.36.1.3.23|66|57440 +1.3.6.1.2.1.4.36.1.4.8|66|15959 +1.3.6.1.2.1.4.36.1.4.11|66|40181 +1.3.6.1.2.1.4.36.1.4.20|66|11336 +1.3.6.1.2.1.4.36.1.4.23|66|23089 +1.3.6.1.2.1.4.36.1.5.8|66|10931 +1.3.6.1.2.1.4.36.1.5.11|66|5993 +1.3.6.1.2.1.4.36.1.5.20|66|20691 +1.3.6.1.2.1.4.36.1.5.23|66|30858 +1.3.6.1.2.1.4.36.1.6.8|66|25985 +1.3.6.1.2.1.4.36.1.6.11|66|24530 +1.3.6.1.2.1.4.36.1.6.20|66|6596 +1.3.6.1.2.1.4.36.1.6.23|66|19709 +1.3.6.1.2.1.4.36.1.7.8|66|56123 +1.3.6.1.2.1.4.36.1.7.11|66|29478 +1.3.6.1.2.1.4.36.1.7.20|66|60446 +1.3.6.1.2.1.4.36.1.7.23|66|45630 +1.3.6.1.2.1.4.36.1.8.8|66|6069 +1.3.6.1.2.1.4.36.1.8.11|66|33112 +1.3.6.1.2.1.4.36.1.8.20|66|37457 +1.3.6.1.2.1.4.36.1.8.23|66|11865 +1.3.6.1.2.1.4.36.1.9.8|66|31725 +1.3.6.1.2.1.4.36.1.9.11|66|13443 +1.3.6.1.2.1.4.36.1.9.20|66|44693 +1.3.6.1.2.1.4.36.1.9.23|66|43828 +1.3.6.1.2.1.4.36.1.10.8|66|51518 +1.3.6.1.2.1.4.36.1.10.11|66|25876 +1.3.6.1.2.1.4.36.1.10.20|66|26205 +1.3.6.1.2.1.4.36.1.10.23|66|63806 +1.3.6.1.2.1.4.36.1.11.8|66|64872 +1.3.6.1.2.1.4.36.1.11.11|66|38030 +1.3.6.1.2.1.4.36.1.11.20|66|40853 +1.3.6.1.2.1.4.36.1.11.23|66|25121 +1.3.6.1.2.1.4.36.1.12.8|66|60347 +1.3.6.1.2.1.4.36.1.12.11|66|12589 +1.3.6.1.2.1.4.36.1.12.20|66|55062 +1.3.6.1.2.1.4.36.1.12.23|66|49810 +1.3.6.1.2.1.4.36.1.13.8|66|38497 +1.3.6.1.2.1.4.36.1.13.11|66|46531 +1.3.6.1.2.1.4.36.1.13.20|66|1050 +1.3.6.1.2.1.4.36.1.13.23|66|23528 +1.3.6.1.2.1.4.37.1.1.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|2|0 +1.3.6.1.2.1.4.37.1.1.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|2|0 +1.3.6.1.2.1.4.37.1.1.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|2|0 +1.3.6.1.2.1.4.37.1.1.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|2|2 +1.3.6.1.2.1.4.37.1.2.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|4x|64726976696e67206f78656e206f78656e +1.3.6.1.2.1.4.37.1.2.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|4x|7a6f6d626965732062757420666f727761726420627574 +1.3.6.1.2.1.4.37.1.2.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|4x|7a6f6d626965732062757420717561696e746c7920616374656420616374656420717561696e746c79 +1.3.6.1.2.1.4.37.1.2.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|4x|666f727761726420627574207468656972207a6f6d626965732064726976696e67206163746564 +1.3.6.1.2.1.4.37.1.3.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|2|31 +1.3.6.1.2.1.4.37.1.3.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|2|26 +1.3.6.1.2.1.4.37.1.3.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|2|27 +1.3.6.1.2.1.4.37.1.3.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|2|25 +1.3.6.1.2.1.4.37.1.4.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|66|50687 +1.3.6.1.2.1.4.37.1.4.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|66|39157 +1.3.6.1.2.1.4.37.1.4.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|66|28911 +1.3.6.1.2.1.4.37.1.4.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|66|42738 +1.3.6.1.2.1.4.37.1.5.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|2|1 +1.3.6.1.2.1.4.37.1.5.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|2|0 +1.3.6.1.2.1.4.37.1.5.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|2|1 +1.3.6.1.2.1.4.37.1.5.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|2|0 +1.3.6.1.2.1.4.38.0|2|14 +1.3.6.1.2.1.4.39.1.1.3|2|3 +1.3.6.1.2.1.4.39.1.1.25|2|25 +1.3.6.1.2.1.4.39.1.2.3|2|2 +1.3.6.1.2.1.4.39.1.2.25|2|1 +1.3.6.1.2.1.4.39.1.3.3|66|913 +1.3.6.1.2.1.4.39.1.3.25|66|159 +1.3.6.1.2.1.4.39.1.4.3|66|853 +1.3.6.1.2.1.4.39.1.4.25|66|535 +1.3.6.1.2.1.4.39.1.5.3|2|1 +1.3.6.1.2.1.4.39.1.5.25|2|1 +1.3.6.1.2.1.4.39.1.6.3|2|2 +1.3.6.1.2.1.4.39.1.6.25|2|1 +1.3.6.1.2.1.4.39.1.7.3|66|52744 +1.3.6.1.2.1.4.39.1.7.25|66|37458 +1.3.6.1.2.1.4.39.1.8.3|66|1293 +1.3.6.1.2.1.4.39.1.8.25|66|17539 +1.3.6.1.2.1.4.39.1.9.3|66|47304 +1.3.6.1.2.1.4.39.1.9.25|66|495 +1.3.6.1.2.1.4.39.1.10.3|66|79 +1.3.6.1.2.1.4.39.1.10.25|66|62 +1.3.6.1.2.1.4.39.1.11.3|66|4877 +1.3.6.1.2.1.4.39.1.11.25|66|7874 +1.3.6.1.2.1.4.39.1.12.3|2|2 +1.3.6.1.2.1.4.39.1.12.25|2|1 +1.3.6.1.2.1.5.1.0|65|1492856794 +1.3.6.1.2.1.5.2.0|65|2680995039 +1.3.6.1.2.1.5.3.0|65|4140306666 +1.3.6.1.2.1.5.4.0|65|1455566903 +1.3.6.1.2.1.5.5.0|65|2923454834 +1.3.6.1.2.1.5.6.0|65|1765992285 +1.3.6.1.2.1.5.7.0|65|1458479575 +1.3.6.1.2.1.5.8.0|65|2868435403 +1.3.6.1.2.1.5.9.0|65|4079796073 +1.3.6.1.2.1.5.10.0|65|2637296057 +1.3.6.1.2.1.5.11.0|65|5459634 +1.3.6.1.2.1.5.12.0|65|829577661 +1.3.6.1.2.1.5.13.0|65|2226230237 +1.3.6.1.2.1.5.14.0|65|1208803990 +1.3.6.1.2.1.5.15.0|65|3986845943 +1.3.6.1.2.1.5.16.0|65|949279005 +1.3.6.1.2.1.5.17.0|65|558282089 +1.3.6.1.2.1.5.18.0|65|1890280040 +1.3.6.1.2.1.5.19.0|65|3593610629 +1.3.6.1.2.1.5.20.0|65|4209164054 +1.3.6.1.2.1.5.21.0|65|3450068052 +1.3.6.1.2.1.5.22.0|65|2076087352 +1.3.6.1.2.1.5.23.0|65|3945747872 +1.3.6.1.2.1.5.24.0|65|632957643 +1.3.6.1.2.1.5.25.0|65|1204976869 +1.3.6.1.2.1.5.26.0|65|3140552997 +1.3.6.1.2.1.5.29.1.1.0|2|0 +1.3.6.1.2.1.5.29.1.1.1|2|1 +1.3.6.1.2.1.5.29.1.2.0|65|964293789 +1.3.6.1.2.1.5.29.1.2.1|65|2959992059 +1.3.6.1.2.1.5.29.1.3.0|65|3562961320 +1.3.6.1.2.1.5.29.1.3.1|65|106025386 +1.3.6.1.2.1.5.29.1.4.0|65|3373096760 +1.3.6.1.2.1.5.29.1.4.1|65|114575088 +1.3.6.1.2.1.5.29.1.5.0|65|898661729 +1.3.6.1.2.1.5.29.1.5.1|65|3292995448 +1.3.6.1.2.1.5.30.1.1.0.7|2|0 +1.3.6.1.2.1.5.30.1.1.0.17|2|0 +1.3.6.1.2.1.5.30.1.1.2.6|2|2 +1.3.6.1.2.1.5.30.1.1.2.27|2|2 +1.3.6.1.2.1.5.30.1.2.0.7|2|7 +1.3.6.1.2.1.5.30.1.2.0.17|2|17 +1.3.6.1.2.1.5.30.1.2.2.6|2|6 +1.3.6.1.2.1.5.30.1.2.2.27|2|27 +1.3.6.1.2.1.5.30.1.3.0.7|65|2352636915 +1.3.6.1.2.1.5.30.1.3.0.17|65|297958128 +1.3.6.1.2.1.5.30.1.3.2.6|65|1839598222 +1.3.6.1.2.1.5.30.1.3.2.27|65|3555647664 +1.3.6.1.2.1.5.30.1.4.0.7|65|3608497094 +1.3.6.1.2.1.5.30.1.4.0.17|65|1630529615 +1.3.6.1.2.1.5.30.1.4.2.6|65|1437666952 +1.3.6.1.2.1.5.30.1.4.2.27|65|59772725 +1.3.6.1.2.1.6.1.0|2|5 +1.3.6.1.2.1.6.2.0|2|16 +1.3.6.1.2.1.6.3.0|2|15 +1.3.6.1.2.1.6.4.0|2|28 +1.3.6.1.2.1.6.5.0|65|65107228 +1.3.6.1.2.1.6.6.0|65|354971360 +1.3.6.1.2.1.6.7.0|65|3488211961 +1.3.6.1.2.1.6.8.0|65|3041227831 +1.3.6.1.2.1.6.9.0|66|3592371136 +1.3.6.1.2.1.6.10.0|65|2361355713 +1.3.6.1.2.1.6.11.0|65|1760250163 +1.3.6.1.2.1.6.12.0|65|3042947677 +1.3.6.1.2.1.6.13.1.1.56.87.155.48.25.56.13.181.134.10|2|8 +1.3.6.1.2.1.6.13.1.1.90.39.59.76.19.137.38.75.85.25|2|9 +1.3.6.1.2.1.6.13.1.1.92.87.203.150.31.64.252.45.189.14|2|11 +1.3.6.1.2.1.6.13.1.1.168.203.239.172.19.157.238.68.132.0|2|12 +1.3.6.1.2.1.6.13.1.1.180.226.46.184.24.239.9.226.80.27|2|2 +1.3.6.1.2.1.6.13.1.1.253.76.143.199.1.33.205.58.31.16|2|8 +1.3.6.1.2.1.6.13.1.2.56.87.155.48.25.56.13.181.134.10|64x|38579b30 +1.3.6.1.2.1.6.13.1.2.90.39.59.76.19.137.38.75.85.25|64x|5a273b4c +1.3.6.1.2.1.6.13.1.2.92.87.203.150.31.64.252.45.189.14|64x|5c57cb96 +1.3.6.1.2.1.6.13.1.2.168.203.239.172.19.157.238.68.132.0|64x|a8cbefac +1.3.6.1.2.1.6.13.1.2.180.226.46.184.24.239.9.226.80.27|64x|b4e22eb8 +1.3.6.1.2.1.6.13.1.2.253.76.143.199.1.33.205.58.31.16|64x|fd4c8fc7 +1.3.6.1.2.1.6.13.1.3.56.87.155.48.25.56.13.181.134.10|2|25 +1.3.6.1.2.1.6.13.1.3.90.39.59.76.19.137.38.75.85.25|2|19 +1.3.6.1.2.1.6.13.1.3.92.87.203.150.31.64.252.45.189.14|2|31 +1.3.6.1.2.1.6.13.1.3.168.203.239.172.19.157.238.68.132.0|2|19 +1.3.6.1.2.1.6.13.1.3.180.226.46.184.24.239.9.226.80.27|2|24 +1.3.6.1.2.1.6.13.1.3.253.76.143.199.1.33.205.58.31.16|2|1 +1.3.6.1.2.1.6.13.1.4.56.87.155.48.25.56.13.181.134.10|64x|380db586 +1.3.6.1.2.1.6.13.1.4.90.39.59.76.19.137.38.75.85.25|64x|89264b55 +1.3.6.1.2.1.6.13.1.4.92.87.203.150.31.64.252.45.189.14|64x|40fc2dbd +1.3.6.1.2.1.6.13.1.4.168.203.239.172.19.157.238.68.132.0|64x|9dee4484 +1.3.6.1.2.1.6.13.1.4.180.226.46.184.24.239.9.226.80.27|64x|ef09e250 +1.3.6.1.2.1.6.13.1.4.253.76.143.199.1.33.205.58.31.16|64x|21cd3a1f +1.3.6.1.2.1.6.13.1.5.56.87.155.48.25.56.13.181.134.10|2|10 +1.3.6.1.2.1.6.13.1.5.90.39.59.76.19.137.38.75.85.25|2|25 +1.3.6.1.2.1.6.13.1.5.92.87.203.150.31.64.252.45.189.14|2|14 +1.3.6.1.2.1.6.13.1.5.168.203.239.172.19.157.238.68.132.0|2|0 +1.3.6.1.2.1.6.13.1.5.180.226.46.184.24.239.9.226.80.27|2|27 +1.3.6.1.2.1.6.13.1.5.253.76.143.199.1.33.205.58.31.16|2|16 +1.3.6.1.2.1.6.14.0|65|3550559180 +1.3.6.1.2.1.6.15.0|65|122443261 +1.3.6.1.2.1.6.17.0|70|1739996722140638720 +1.3.6.1.2.1.6.18.0|70|11290994777553824436 +1.3.6.1.2.1.6.19.1.1.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|2|2 +1.3.6.1.2.1.6.19.1.1.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|2|2 +1.3.6.1.2.1.6.19.1.1.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|2|3 +1.3.6.1.2.1.6.19.1.1.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|2|4 +1.3.6.1.2.1.6.19.1.1.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|2|4 +1.3.6.1.2.1.6.19.1.1.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|2|16 +1.3.6.1.2.1.6.19.1.2.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|4x|6f78656e207a6f6d62696573207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.2.1.6.19.1.2.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|4x|627574206b657074206b65707420717561696e746c79206f78656e207468656972207468656972207a6f6d6269657320666f7277617264 +1.3.6.1.2.1.6.19.1.2.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|4x|6163746564206275742064726976696e672064726976696e67206b657074206b657074206b657074206f78656e206f78656e +1.3.6.1.2.1.6.19.1.2.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|4|forward +1.3.6.1.2.1.6.19.1.2.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|4x|7468656972204a61646564206f78656e +1.3.6.1.2.1.6.19.1.2.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|4x|6f78656e20717561696e746c7920717561696e746c79206b657074207468656972 +1.3.6.1.2.1.6.19.1.3.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|66|15678 +1.3.6.1.2.1.6.19.1.3.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|66|64360 +1.3.6.1.2.1.6.19.1.3.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|66|54616 +1.3.6.1.2.1.6.19.1.3.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|66|42226 +1.3.6.1.2.1.6.19.1.3.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|66|19020 +1.3.6.1.2.1.6.19.1.3.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|66|52621 +1.3.6.1.2.1.6.19.1.4.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|2|16 +1.3.6.1.2.1.6.19.1.4.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|2|4 +1.3.6.1.2.1.6.19.1.4.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|2|4 +1.3.6.1.2.1.6.19.1.4.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|2|1 +1.3.6.1.2.1.6.19.1.4.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|2|1 +1.3.6.1.2.1.6.19.1.4.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|2|3 +1.3.6.1.2.1.6.19.1.5.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|4x|616374656420746865697220717561696e746c79207468656972207468656972206163746564204a61646564206f78656e +1.3.6.1.2.1.6.19.1.5.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|4x|6b6570742062757420666f7277617264206163746564204a6164656420627574206b657074207468656972 +1.3.6.1.2.1.6.19.1.5.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|4|Jaded +1.3.6.1.2.1.6.19.1.5.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|4x|6f78656e20627574204a616465642064726976696e672064726976696e67206f78656e206f78656e +1.3.6.1.2.1.6.19.1.5.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|4x|7468656972207468656972206b657074206163746564207468656972206b657074 +1.3.6.1.2.1.6.19.1.5.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|4x|7a6f6d6269657320717561696e746c79206b657074206f78656e20666f7277617264 +1.3.6.1.2.1.6.19.1.6.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|66|50024 +1.3.6.1.2.1.6.19.1.6.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|66|25342 +1.3.6.1.2.1.6.19.1.6.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|66|29164 +1.3.6.1.2.1.6.19.1.6.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|66|14011 +1.3.6.1.2.1.6.19.1.6.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|66|64259 +1.3.6.1.2.1.6.19.1.6.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|66|54864 +1.3.6.1.2.1.6.19.1.7.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|2|10 +1.3.6.1.2.1.6.19.1.7.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|2|3 +1.3.6.1.2.1.6.19.1.7.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|2|2 +1.3.6.1.2.1.6.19.1.7.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|2|1 +1.3.6.1.2.1.6.19.1.7.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|2|12 +1.3.6.1.2.1.6.19.1.7.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|2|8 +1.3.6.1.2.1.6.19.1.8.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|66|6608 +1.3.6.1.2.1.6.19.1.8.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|66|24034 +1.3.6.1.2.1.6.19.1.8.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|66|63973 +1.3.6.1.2.1.6.19.1.8.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|66|16267 +1.3.6.1.2.1.6.19.1.8.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|66|6939 +1.3.6.1.2.1.6.19.1.8.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|66|12988 +1.3.6.1.2.1.6.20.1.1.0.20.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.21667|2|0 +1.3.6.1.2.1.6.20.1.1.0.42.116.104.101.105.114.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.3844|2|0 +1.3.6.1.2.1.6.20.1.1.2.22.113.117.97.105.110.116.108.121.32.111.120.101.110.32.107.101.112.116.32.98.117.116.27758|2|2 +1.3.6.1.2.1.6.20.1.1.2.32.97.99.116.101.100.32.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.25987|2|2 +1.3.6.1.2.1.6.20.1.1.3.48.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.111.120.101.110.55501|2|3 +1.3.6.1.2.1.6.20.1.1.4.36.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.55651|2|4 +1.3.6.1.2.1.6.20.1.2.0.20.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.21667|4x|7a6f6d626965732064726976696e67206f78656e +1.3.6.1.2.1.6.20.1.2.0.42.116.104.101.105.114.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.3844|4x|74686569722064726976696e67207a6f6d6269657320666f727761726420717561696e746c7920627574 +1.3.6.1.2.1.6.20.1.2.2.22.113.117.97.105.110.116.108.121.32.111.120.101.110.32.107.101.112.116.32.98.117.116.27758|4x|717561696e746c79206f78656e206b65707420627574 +1.3.6.1.2.1.6.20.1.2.2.32.97.99.116.101.100.32.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.25987|4x|6163746564206f78656e20666f7277617264207a6f6d62696573206163746564 +1.3.6.1.2.1.6.20.1.2.3.48.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.111.120.101.110.55501|4x|7a6f6d626965732064726976696e67206b65707420627574206f78656e207a6f6d62696573206163746564206f78656e +1.3.6.1.2.1.6.20.1.2.4.36.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.55651|4x|6f78656e20666f727761726420666f727761726420666f7277617264207a6f6d62696573 +1.3.6.1.2.1.6.20.1.3.0.20.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.21667|66|21667 +1.3.6.1.2.1.6.20.1.3.0.42.116.104.101.105.114.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.3844|66|3844 +1.3.6.1.2.1.6.20.1.3.2.22.113.117.97.105.110.116.108.121.32.111.120.101.110.32.107.101.112.116.32.98.117.116.27758|66|27758 +1.3.6.1.2.1.6.20.1.3.2.32.97.99.116.101.100.32.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.25987|66|25987 +1.3.6.1.2.1.6.20.1.3.3.48.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.111.120.101.110.55501|66|55501 +1.3.6.1.2.1.6.20.1.3.4.36.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.55651|66|55651 +1.3.6.1.2.1.6.20.1.4.0.20.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.21667|66|64651 +1.3.6.1.2.1.6.20.1.4.0.42.116.104.101.105.114.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.3844|66|25473 +1.3.6.1.2.1.6.20.1.4.2.22.113.117.97.105.110.116.108.121.32.111.120.101.110.32.107.101.112.116.32.98.117.116.27758|66|64116 +1.3.6.1.2.1.6.20.1.4.2.32.97.99.116.101.100.32.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.25987|66|40949 +1.3.6.1.2.1.6.20.1.4.3.48.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.111.120.101.110.55501|66|25088 +1.3.6.1.2.1.6.20.1.4.4.36.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.55651|66|49948 +1.3.6.1.2.1.7.1.0|65|845058143 +1.3.6.1.2.1.7.2.0|65|322177604 +1.3.6.1.2.1.7.3.0|65|888170439 +1.3.6.1.2.1.7.4.0|65|1931566481 +1.3.6.1.2.1.7.5.1.1.56.151.103.243.2|64x|389767f3 +1.3.6.1.2.1.7.5.1.1.60.14.226.162.25|64x|3c0ee2a2 +1.3.6.1.2.1.7.5.1.1.65.194.4.114.11|64x|41c20472 +1.3.6.1.2.1.7.5.1.1.78.73.170.170.30|64x|4e49aaaa +1.3.6.1.2.1.7.5.1.1.99.17.223.45.2|64x|6311df2d +1.3.6.1.2.1.7.5.1.1.115.62.84.34.16|64x|733e5422 +1.3.6.1.2.1.7.5.1.1.134.174.114.176.0|64x|86ae72b0 +1.3.6.1.2.1.7.5.1.1.249.27.252.28.28|64x|f91bfc1c +1.3.6.1.2.1.7.5.1.2.56.151.103.243.2|2|2 +1.3.6.1.2.1.7.5.1.2.60.14.226.162.25|2|25 +1.3.6.1.2.1.7.5.1.2.65.194.4.114.11|2|11 +1.3.6.1.2.1.7.5.1.2.78.73.170.170.30|2|30 +1.3.6.1.2.1.7.5.1.2.99.17.223.45.2|2|2 +1.3.6.1.2.1.7.5.1.2.115.62.84.34.16|2|16 +1.3.6.1.2.1.7.5.1.2.134.174.114.176.0|2|0 +1.3.6.1.2.1.7.5.1.2.249.27.252.28.28|2|28 +1.3.6.1.2.1.7.7.1.1.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|2|0 +1.3.6.1.2.1.7.7.1.1.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|2|0 +1.3.6.1.2.1.7.7.1.1.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|2|1 +1.3.6.1.2.1.7.7.1.1.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|2|2 +1.3.6.1.2.1.7.7.1.1.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|2|3 +1.3.6.1.2.1.7.7.1.1.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|2|3 +1.3.6.1.2.1.7.7.1.1.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|2|3 +1.3.6.1.2.1.7.7.1.1.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|2|16 +1.3.6.1.2.1.7.7.1.2.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|4x|64726976696e672062757420666f7277617264 +1.3.6.1.2.1.7.7.1.2.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|4x|4a6164656420717561696e746c792074686569722064726976696e67206b65707420627574 +1.3.6.1.2.1.7.7.1.2.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|4x|6f78656e204a6164656420627574204a61646564206b65707420616374656420616374656420666f7277617264206163746564 +1.3.6.1.2.1.7.7.1.2.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|4x|666f7277617264204a61646564204a61646564206f78656e +1.3.6.1.2.1.7.7.1.2.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|4x|717561696e746c79206163746564207468656972206f78656e206163746564207468656972206b657074206b657074 +1.3.6.1.2.1.7.7.1.2.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|4x|627574206f78656e20627574204a6164656420666f727761726420666f727761726420666f727761726420627574206f78656e +1.3.6.1.2.1.7.7.1.2.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|4x|74686569722062757420616374656420616374656420666f727761726420717561696e746c792062757420717561696e746c79 +1.3.6.1.2.1.7.7.1.2.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|4|forward +1.3.6.1.2.1.7.7.1.3.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|66|43479 +1.3.6.1.2.1.7.7.1.3.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|66|9177 +1.3.6.1.2.1.7.7.1.3.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|66|63959 +1.3.6.1.2.1.7.7.1.3.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|66|8739 +1.3.6.1.2.1.7.7.1.3.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|66|49559 +1.3.6.1.2.1.7.7.1.3.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|66|12291 +1.3.6.1.2.1.7.7.1.3.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|66|35917 +1.3.6.1.2.1.7.7.1.3.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|66|54117 +1.3.6.1.2.1.7.7.1.4.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|2|2 +1.3.6.1.2.1.7.7.1.4.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|2|16 +1.3.6.1.2.1.7.7.1.4.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|2|3 +1.3.6.1.2.1.7.7.1.4.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|2|1 +1.3.6.1.2.1.7.7.1.4.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|2|1 +1.3.6.1.2.1.7.7.1.4.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|2|0 +1.3.6.1.2.1.7.7.1.4.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|2|0 +1.3.6.1.2.1.7.7.1.4.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|2|4 +1.3.6.1.2.1.7.7.1.5.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|4x|717561696e746c79206163746564206b65707420666f727761726420666f72776172642061637465642074686569722064726976696e67 +1.3.6.1.2.1.7.7.1.5.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|4x|4a61646564207a6f6d6269657320717561696e746c7920717561696e746c79206f78656e +1.3.6.1.2.1.7.7.1.5.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|4x|6163746564206f78656e20746865697220627574206b65707420627574207a6f6d62696573204a616465642064726976696e67 +1.3.6.1.2.1.7.7.1.5.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|4x|717561696e746c79206b657074206f78656e +1.3.6.1.2.1.7.7.1.5.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|4x|6f78656e20666f7277617264207a6f6d6269657320746865697220666f7277617264 +1.3.6.1.2.1.7.7.1.5.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|4x|7a6f6d62696573207a6f6d6269657320717561696e746c79207a6f6d62696573206f78656e +1.3.6.1.2.1.7.7.1.5.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|4|zombies +1.3.6.1.2.1.7.7.1.5.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|4x|717561696e746c79207a6f6d626965732064726976696e67206b657074204a616465642074686569722062757420627574 +1.3.6.1.2.1.7.7.1.6.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|66|1099 +1.3.6.1.2.1.7.7.1.6.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|66|30932 +1.3.6.1.2.1.7.7.1.6.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|66|32156 +1.3.6.1.2.1.7.7.1.6.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|66|23534 +1.3.6.1.2.1.7.7.1.6.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|66|48206 +1.3.6.1.2.1.7.7.1.6.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|66|56288 +1.3.6.1.2.1.7.7.1.6.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|66|4644 +1.3.6.1.2.1.7.7.1.6.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|66|17063 +1.3.6.1.2.1.7.7.1.7.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|66|47038 +1.3.6.1.2.1.7.7.1.7.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|66|60990 +1.3.6.1.2.1.7.7.1.7.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|66|7068 +1.3.6.1.2.1.7.7.1.7.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|66|29002 +1.3.6.1.2.1.7.7.1.7.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|66|28034 +1.3.6.1.2.1.7.7.1.7.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|66|53199 +1.3.6.1.2.1.7.7.1.7.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|66|43859 +1.3.6.1.2.1.7.7.1.7.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|66|62790 +1.3.6.1.2.1.7.7.1.8.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|66|46841 +1.3.6.1.2.1.7.7.1.8.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|66|9924 +1.3.6.1.2.1.7.7.1.8.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|66|7810 +1.3.6.1.2.1.7.7.1.8.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|66|22718 +1.3.6.1.2.1.7.7.1.8.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|66|60675 +1.3.6.1.2.1.7.7.1.8.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|66|18503 +1.3.6.1.2.1.7.7.1.8.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|66|41523 +1.3.6.1.2.1.7.7.1.8.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|66|3422 +1.3.6.1.2.1.7.8.0|70|18443080796267782135 +1.3.6.1.2.1.7.9.0|70|8016143063445322732 +1.3.6.1.2.1.11.1.0|65|1026848053 +1.3.6.1.2.1.11.2.0|65|1559503192 +1.3.6.1.2.1.11.3.0|65|1661364527 +1.3.6.1.2.1.11.4.0|65|3728874342 +1.3.6.1.2.1.11.5.0|65|2559226521 +1.3.6.1.2.1.11.6.0|65|1650806427 +1.3.6.1.2.1.11.8.0|65|1632315785 +1.3.6.1.2.1.11.9.0|65|2621823096 +1.3.6.1.2.1.11.10.0|65|1506245205 +1.3.6.1.2.1.11.11.0|65|899705927 +1.3.6.1.2.1.11.12.0|65|4133118796 +1.3.6.1.2.1.11.13.0|65|3111667111 +1.3.6.1.2.1.11.14.0|65|3837227648 +1.3.6.1.2.1.11.15.0|65|2418795793 +1.3.6.1.2.1.11.16.0|65|941621899 +1.3.6.1.2.1.11.17.0|65|1388409920 +1.3.6.1.2.1.11.18.0|65|334684494 +1.3.6.1.2.1.11.19.0|65|2144129908 +1.3.6.1.2.1.11.20.0|65|945572706 +1.3.6.1.2.1.11.21.0|65|2412259253 +1.3.6.1.2.1.11.22.0|65|709453491 +1.3.6.1.2.1.11.24.0|65|3109654399 +1.3.6.1.2.1.11.25.0|65|1068667305 +1.3.6.1.2.1.11.26.0|65|1115168412 +1.3.6.1.2.1.11.27.0|65|3358419166 +1.3.6.1.2.1.11.28.0|65|2284249196 +1.3.6.1.2.1.11.29.0|65|2255620041 +1.3.6.1.2.1.11.30.0|2|1 +1.3.6.1.2.1.11.31.0|65|2713209622 +1.3.6.1.2.1.11.32.0|65|2594822087 +1.3.6.1.2.1.31.1.1.1.1.13|4x|65746830 +1.3.6.1.2.1.31.1.1.1.1.15|4x|65746831 +1.3.6.1.2.1.31.1.1.1.2.13|65|2347007850 +1.3.6.1.2.1.31.1.1.1.2.15|65|4169364536 +1.3.6.1.2.1.31.1.1.1.3.13|65|3298152181 +1.3.6.1.2.1.31.1.1.1.3.15|65|3102500179 +1.3.6.1.2.1.31.1.1.1.4.13|65|2449589239 +1.3.6.1.2.1.31.1.1.1.4.15|65|3449771470 +1.3.6.1.2.1.31.1.1.1.5.13|65|524348469 +1.3.6.1.2.1.31.1.1.1.5.15|65|2158749102 +1.3.6.1.2.1.31.1.1.1.6.13|70|7712298674287165259 +1.3.6.1.2.1.31.1.1.1.6.15|70|10691602997682554953 +1.3.6.1.2.1.31.1.1.1.7.13|70|13754656808550877804 +1.3.6.1.2.1.31.1.1.1.7.15|70|7002517873966062570 +1.3.6.1.2.1.31.1.1.1.8.13|70|6632351660760469095 +1.3.6.1.2.1.31.1.1.1.8.15|70|4169664613546665387 +1.3.6.1.2.1.31.1.1.1.9.13|70|18165497535063818545 +1.3.6.1.2.1.31.1.1.1.9.15|70|3187083131619716718 +1.3.6.1.2.1.31.1.1.1.10.13|70|1421691080720476747 +1.3.6.1.2.1.31.1.1.1.10.15|70|3299757516212389613 +1.3.6.1.2.1.31.1.1.1.11.13|70|1227125767479954888 +1.3.6.1.2.1.31.1.1.1.11.15|70|414502565558156005 +1.3.6.1.2.1.31.1.1.1.12.13|70|12372197000804879586 +1.3.6.1.2.1.31.1.1.1.12.15|70|11728336340868252858 +1.3.6.1.2.1.31.1.1.1.13.13|70|3009057718220303987 +1.3.6.1.2.1.31.1.1.1.13.15|70|14360471847414061181 +1.3.6.1.2.1.31.1.1.1.14.13|2|2 +1.3.6.1.2.1.31.1.1.1.14.15|2|2 +1.3.6.1.2.1.31.1.1.1.15.13|66|1199310033 +1.3.6.1.2.1.31.1.1.1.15.15|66|120344731 +1.3.6.1.2.1.31.1.1.1.16.13|2|1 +1.3.6.1.2.1.31.1.1.1.16.15|2|1 +1.3.6.1.2.1.31.1.1.1.17.13|2|2 +1.3.6.1.2.1.31.1.1.1.17.15|2|2 +1.3.6.1.2.1.31.1.1.1.18.13|4|kept +1.3.6.1.2.1.31.1.1.1.18.15|4x|746865697220666f7277617264206f78656e +1.3.6.1.2.1.31.1.1.1.19.13|67|2492542845 +1.3.6.1.2.1.31.1.1.1.19.15|67|4100437878 +1.3.6.1.2.1.31.1.2.1.1.4.24|2|4 +1.3.6.1.2.1.31.1.2.1.1.6.25|2|6 +1.3.6.1.2.1.31.1.2.1.1.22.27|2|22 +1.3.6.1.2.1.31.1.2.1.1.26.19|2|26 +1.3.6.1.2.1.31.1.2.1.2.4.24|2|24 +1.3.6.1.2.1.31.1.2.1.2.6.25|2|25 +1.3.6.1.2.1.31.1.2.1.2.22.27|2|27 +1.3.6.1.2.1.31.1.2.1.2.26.19|2|19 +1.3.6.1.2.1.31.1.2.1.3.4.24|2|5 +1.3.6.1.2.1.31.1.2.1.3.6.25|2|3 +1.3.6.1.2.1.31.1.2.1.3.22.27|2|3 +1.3.6.1.2.1.31.1.2.1.3.26.19|2|4 +1.3.6.1.2.1.31.1.3.1.1.5|2|19 +1.3.6.1.2.1.31.1.3.1.1.6|2|17 +1.3.6.1.2.1.31.1.3.1.1.12|2|28 +1.3.6.1.2.1.31.1.3.1.2.5|2|2 +1.3.6.1.2.1.31.1.3.1.2.6|2|1 +1.3.6.1.2.1.31.1.3.1.2.12|2|2 +1.3.6.1.2.1.31.1.3.1.3.5|6|1.3.6.1.3.252.112.82.19.228 +1.3.6.1.2.1.31.1.3.1.3.6|6|1.3.6.1.3 +1.3.6.1.2.1.31.1.3.1.3.12|6|1.3.6.1.3.97.56.245.210.158.169.23.245 +1.3.6.1.2.1.31.1.3.1.4.5|2|1 +1.3.6.1.2.1.31.1.3.1.4.6|2|4 +1.3.6.1.2.1.31.1.3.1.4.12|2|7 +1.3.6.1.2.1.31.1.3.1.5.5|6|1.3.6.1.3.158.188.89.49.224.153.67.151.160 +1.3.6.1.2.1.31.1.3.1.5.6|6|1.3.6.1.3.17 +1.3.6.1.2.1.31.1.3.1.5.12|6|1.3.6.1.3.205.195.64 +1.3.6.1.2.1.31.1.3.1.6.5|4x|746865697220717561696e746c79 +1.3.6.1.2.1.31.1.3.1.6.6|4x|7a6f6d626965732061637465642064726976696e67206f78656e206b65707420746865697220717561696e746c79 +1.3.6.1.2.1.31.1.3.1.6.12|4|zombies +1.3.6.1.2.1.31.1.4.1.1.9.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.11.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.14.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.29.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.2.9.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.2.11.6.66.1.10.164.0.51|2|6 +1.3.6.1.2.1.31.1.4.1.2.14.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.2.29.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.9.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.3.11.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.14.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.3.29.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.5.0|67|1984347925 +1.3.6.1.2.1.31.1.6.0|67|3494995519 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.67.64 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.103.223.118.130.119.59.10.58 +1.3.6.1.6.3.1.1.6.1.0|2|7 diff --git a/test/new-e2e/ndm/snmp/compose/data/generic_host.snmprec b/test/new-e2e/ndm/snmp/compose/data/generic_host.snmprec new file mode 100644 index 0000000000000..71337465cb866 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/generic_host.snmprec @@ -0,0 +1,23 @@ +1.3.6.1.2.1.25.1.1.0|67|803137913 +1.3.6.1.2.1.25.1.5.0|66|3964612068 +1.3.6.1.2.1.25.1.6.0|66|658239218 +1.3.6.1.2.1.25.1.7.0|2|6 +1.3.6.1.2.1.25.2.2.0|2|28 +1.3.6.1.2.1.25.2.3.1.1.3|2|3 +1.3.6.1.2.1.25.2.3.1.1.16|2|16 +1.3.6.1.2.1.25.2.3.1.2.3|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.16|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.3.3|4x|6f78656e2074686569722064726976696e6720666f727761726420717561696e746c79 +1.3.6.1.2.1.25.2.3.1.3.16|4x|717561696e746c792064726976696e67204a6164656420666f727761726420746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.25.2.3.1.4.3|2|16 +1.3.6.1.2.1.25.2.3.1.4.16|2|4 +1.3.6.1.2.1.25.2.3.1.5.3|2|12 +1.3.6.1.2.1.25.2.3.1.5.16|2|3 +1.3.6.1.2.1.25.2.3.1.6.3|2|29 +1.3.6.1.2.1.25.2.3.1.6.16|2|20 +1.3.6.1.2.1.25.2.3.1.7.3|65|1361509700 +1.3.6.1.2.1.25.2.3.1.7.16|65|2158537353 +1.3.6.1.2.1.25.3.3.1.1.5|6|1.3.6.1.3.81.16 +1.3.6.1.2.1.25.3.3.1.1.10|6|1.3.6.1.3.95.73.140.186.121.144.199 +1.3.6.1.2.1.25.3.3.1.2.5|2|6 +1.3.6.1.2.1.25.3.3.1.2.10|2|2 diff --git a/test/new-e2e/ndm/snmp/compose/data/hp-ilo4.snmprec b/test/new-e2e/ndm/snmp/compose/data/hp-ilo4.snmprec new file mode 100644 index 0000000000000..ee9a9913ab6df --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/hp-ilo4.snmprec @@ -0,0 +1,891 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.232.9.4.10 +1.3.6.1.2.1.1.5.0|4|hp-ilo4.example +1.3.6.1.4.1.232.1.2.6.1|4|A04-08/12/2018 +1.3.6.1.4.1.232.2.2.2.1|4|dXPEdPBE5yKtjW9xx3 +1.3.6.1.4.1.232.3.2.5.1.1.1.0.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.1.0.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.1.8.31|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.1.9.24|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.1.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.1.10.17|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.1.11.4|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.1.12.20|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.1.18.22|2|18 +1.3.6.1.4.1.232.3.2.5.1.1.1.23.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.2.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.2.0.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.2.8.31|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.2.9.24|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.2.9.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.2.10.17|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.2.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.2.12.20|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.2.18.22|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.2.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.3.0.2|4|but +1.3.6.1.4.1.232.3.2.5.1.1.3.0.28|4x|64726976696e67207a6f6d6269657320717561696e746c79207a6f6d62696573206b657074206b65707420627574206f78656e204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.3.8.31|4x|6b657074206f78656e20717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.232.3.2.5.1.1.3.9.24|4x|627574204a61646564206f78656e206163746564206163746564207468656972206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.3.9.28|4x|717561696e746c79207468656972204a6164656420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.3.10.17|4x|6163746564204a616465642062757420666f7277617264207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.3.11.4|4|zombies +1.3.6.1.4.1.232.3.2.5.1.1.3.12.20|4x|666f7277617264206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.3.18.22|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.3.23.2|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.0.2|4x|6b65707420627574 +1.3.6.1.4.1.232.3.2.5.1.1.4.0.28|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.8.31|4|their +1.3.6.1.4.1.232.3.2.5.1.1.4.9.24|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.4.9.28|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.4.10.17|4|driving +1.3.6.1.4.1.232.3.2.5.1.1.4.11.4|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.4.12.20|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.18.22|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.4.23.2|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.5.0.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.5.0.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.5.8.31|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.5.9.24|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.5.9.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.5.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.5.11.4|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.5.12.20|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.5.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.5.23.2|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.6.0.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.0.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.8.31|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.9.24|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.9.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.10.17|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.11.4|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.6.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.6.23.2|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.7.0.2|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.7.0.28|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.7.8.31|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.7.9.24|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.7.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.7.10.17|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.7.11.4|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.7.12.20|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.7.18.22|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.7.23.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.8.0.2|65|546389013 +1.3.6.1.4.1.232.3.2.5.1.1.8.0.28|65|2306609150 +1.3.6.1.4.1.232.3.2.5.1.1.8.8.31|65|1183142468 +1.3.6.1.4.1.232.3.2.5.1.1.8.9.24|65|1524544657 +1.3.6.1.4.1.232.3.2.5.1.1.8.9.28|65|1257847199 +1.3.6.1.4.1.232.3.2.5.1.1.8.10.17|65|4186257677 +1.3.6.1.4.1.232.3.2.5.1.1.8.11.4|65|75536387 +1.3.6.1.4.1.232.3.2.5.1.1.8.12.20|65|3025977095 +1.3.6.1.4.1.232.3.2.5.1.1.8.18.22|65|3599100832 +1.3.6.1.4.1.232.3.2.5.1.1.8.23.2|65|3165071379 +1.3.6.1.4.1.232.3.2.5.1.1.9.0.2|65|3922822364 +1.3.6.1.4.1.232.3.2.5.1.1.9.0.28|65|3234904649 +1.3.6.1.4.1.232.3.2.5.1.1.9.8.31|65|1901171918 +1.3.6.1.4.1.232.3.2.5.1.1.9.9.24|65|2263188134 +1.3.6.1.4.1.232.3.2.5.1.1.9.9.28|65|2061135672 +1.3.6.1.4.1.232.3.2.5.1.1.9.10.17|65|398777741 +1.3.6.1.4.1.232.3.2.5.1.1.9.11.4|65|1272452264 +1.3.6.1.4.1.232.3.2.5.1.1.9.12.20|65|622055389 +1.3.6.1.4.1.232.3.2.5.1.1.9.18.22|65|4131783907 +1.3.6.1.4.1.232.3.2.5.1.1.9.23.2|65|2234487753 +1.3.6.1.4.1.232.3.2.5.1.1.10.0.2|65|1741338020 +1.3.6.1.4.1.232.3.2.5.1.1.10.0.28|65|3759438885 +1.3.6.1.4.1.232.3.2.5.1.1.10.8.31|65|282836214 +1.3.6.1.4.1.232.3.2.5.1.1.10.9.24|65|2190162781 +1.3.6.1.4.1.232.3.2.5.1.1.10.9.28|65|517385251 +1.3.6.1.4.1.232.3.2.5.1.1.10.10.17|65|3377639315 +1.3.6.1.4.1.232.3.2.5.1.1.10.11.4|65|479612 +1.3.6.1.4.1.232.3.2.5.1.1.10.12.20|65|2364763386 +1.3.6.1.4.1.232.3.2.5.1.1.10.18.22|65|1540422714 +1.3.6.1.4.1.232.3.2.5.1.1.10.23.2|65|3133475512 +1.3.6.1.4.1.232.3.2.5.1.1.11.0.2|65|1181504081 +1.3.6.1.4.1.232.3.2.5.1.1.11.0.28|65|2491173497 +1.3.6.1.4.1.232.3.2.5.1.1.11.8.31|65|3042764446 +1.3.6.1.4.1.232.3.2.5.1.1.11.9.24|65|121116179 +1.3.6.1.4.1.232.3.2.5.1.1.11.9.28|65|2585114004 +1.3.6.1.4.1.232.3.2.5.1.1.11.10.17|65|715864194 +1.3.6.1.4.1.232.3.2.5.1.1.11.11.4|65|218650245 +1.3.6.1.4.1.232.3.2.5.1.1.11.12.20|65|598167615 +1.3.6.1.4.1.232.3.2.5.1.1.11.18.22|65|1149109305 +1.3.6.1.4.1.232.3.2.5.1.1.11.23.2|65|75304400 +1.3.6.1.4.1.232.3.2.5.1.1.12.0.2|65|221444980 +1.3.6.1.4.1.232.3.2.5.1.1.12.0.28|65|1337358939 +1.3.6.1.4.1.232.3.2.5.1.1.12.8.31|65|2463188951 +1.3.6.1.4.1.232.3.2.5.1.1.12.9.24|65|2136256124 +1.3.6.1.4.1.232.3.2.5.1.1.12.9.28|65|598517409 +1.3.6.1.4.1.232.3.2.5.1.1.12.10.17|65|2109086161 +1.3.6.1.4.1.232.3.2.5.1.1.12.11.4|65|2106962369 +1.3.6.1.4.1.232.3.2.5.1.1.12.12.20|65|17908343 +1.3.6.1.4.1.232.3.2.5.1.1.12.18.22|65|3202247013 +1.3.6.1.4.1.232.3.2.5.1.1.12.23.2|65|1937432163 +1.3.6.1.4.1.232.3.2.5.1.1.13.0.2|65|1734902147 +1.3.6.1.4.1.232.3.2.5.1.1.13.0.28|65|2411164755 +1.3.6.1.4.1.232.3.2.5.1.1.13.8.31|65|1781992790 +1.3.6.1.4.1.232.3.2.5.1.1.13.9.24|65|1981586934 +1.3.6.1.4.1.232.3.2.5.1.1.13.9.28|65|2050290019 +1.3.6.1.4.1.232.3.2.5.1.1.13.10.17|65|54796801 +1.3.6.1.4.1.232.3.2.5.1.1.13.11.4|65|2725543544 +1.3.6.1.4.1.232.3.2.5.1.1.13.12.20|65|3858302419 +1.3.6.1.4.1.232.3.2.5.1.1.13.18.22|65|2732286636 +1.3.6.1.4.1.232.3.2.5.1.1.13.23.2|65|2945232736 +1.3.6.1.4.1.232.3.2.5.1.1.14.0.2|65|2713126212 +1.3.6.1.4.1.232.3.2.5.1.1.14.0.28|65|4022715091 +1.3.6.1.4.1.232.3.2.5.1.1.14.8.31|65|198579111 +1.3.6.1.4.1.232.3.2.5.1.1.14.9.24|65|3580970404 +1.3.6.1.4.1.232.3.2.5.1.1.14.9.28|65|2999485097 +1.3.6.1.4.1.232.3.2.5.1.1.14.10.17|65|2324402321 +1.3.6.1.4.1.232.3.2.5.1.1.14.11.4|65|2167827525 +1.3.6.1.4.1.232.3.2.5.1.1.14.12.20|65|1503274929 +1.3.6.1.4.1.232.3.2.5.1.1.14.18.22|65|26779464 +1.3.6.1.4.1.232.3.2.5.1.1.14.23.2|65|1752319260 +1.3.6.1.4.1.232.3.2.5.1.1.15.0.2|65|1062892646 +1.3.6.1.4.1.232.3.2.5.1.1.15.0.28|65|2137439866 +1.3.6.1.4.1.232.3.2.5.1.1.15.8.31|65|213350178 +1.3.6.1.4.1.232.3.2.5.1.1.15.9.24|65|4098083155 +1.3.6.1.4.1.232.3.2.5.1.1.15.9.28|65|985304361 +1.3.6.1.4.1.232.3.2.5.1.1.15.10.17|65|3136387282 +1.3.6.1.4.1.232.3.2.5.1.1.15.11.4|65|1635061208 +1.3.6.1.4.1.232.3.2.5.1.1.15.12.20|65|3105090698 +1.3.6.1.4.1.232.3.2.5.1.1.15.18.22|65|3840894212 +1.3.6.1.4.1.232.3.2.5.1.1.15.23.2|65|3123363785 +1.3.6.1.4.1.232.3.2.5.1.1.16.0.2|65|2747324891 +1.3.6.1.4.1.232.3.2.5.1.1.16.0.28|65|3044303644 +1.3.6.1.4.1.232.3.2.5.1.1.16.8.31|65|3215286354 +1.3.6.1.4.1.232.3.2.5.1.1.16.9.24|65|329453703 +1.3.6.1.4.1.232.3.2.5.1.1.16.9.28|65|355147129 +1.3.6.1.4.1.232.3.2.5.1.1.16.10.17|65|3578386746 +1.3.6.1.4.1.232.3.2.5.1.1.16.11.4|65|1151157210 +1.3.6.1.4.1.232.3.2.5.1.1.16.12.20|65|2541753754 +1.3.6.1.4.1.232.3.2.5.1.1.16.18.22|65|3280239987 +1.3.6.1.4.1.232.3.2.5.1.1.16.23.2|65|171855281 +1.3.6.1.4.1.232.3.2.5.1.1.17.0.2|65|881428009 +1.3.6.1.4.1.232.3.2.5.1.1.17.0.28|65|2765906854 +1.3.6.1.4.1.232.3.2.5.1.1.17.8.31|65|2123221895 +1.3.6.1.4.1.232.3.2.5.1.1.17.9.24|65|3245302703 +1.3.6.1.4.1.232.3.2.5.1.1.17.9.28|65|1306227086 +1.3.6.1.4.1.232.3.2.5.1.1.17.10.17|65|3453715456 +1.3.6.1.4.1.232.3.2.5.1.1.17.11.4|65|214914874 +1.3.6.1.4.1.232.3.2.5.1.1.17.12.20|65|1195947737 +1.3.6.1.4.1.232.3.2.5.1.1.17.18.22|65|1182048622 +1.3.6.1.4.1.232.3.2.5.1.1.17.23.2|65|523297749 +1.3.6.1.4.1.232.3.2.5.1.1.18.0.2|65|1332352920 +1.3.6.1.4.1.232.3.2.5.1.1.18.0.28|65|2533263787 +1.3.6.1.4.1.232.3.2.5.1.1.18.8.31|65|1720285197 +1.3.6.1.4.1.232.3.2.5.1.1.18.9.24|65|4245380544 +1.3.6.1.4.1.232.3.2.5.1.1.18.9.28|65|1910909181 +1.3.6.1.4.1.232.3.2.5.1.1.18.10.17|65|2245241934 +1.3.6.1.4.1.232.3.2.5.1.1.18.11.4|65|3205736251 +1.3.6.1.4.1.232.3.2.5.1.1.18.12.20|65|803739619 +1.3.6.1.4.1.232.3.2.5.1.1.18.18.22|65|1158056501 +1.3.6.1.4.1.232.3.2.5.1.1.18.23.2|65|916346018 +1.3.6.1.4.1.232.3.2.5.1.1.19.0.2|65|2610456196 +1.3.6.1.4.1.232.3.2.5.1.1.19.0.28|65|40996530 +1.3.6.1.4.1.232.3.2.5.1.1.19.8.31|65|2048619498 +1.3.6.1.4.1.232.3.2.5.1.1.19.9.24|65|1201236747 +1.3.6.1.4.1.232.3.2.5.1.1.19.9.28|65|2887398693 +1.3.6.1.4.1.232.3.2.5.1.1.19.10.17|65|2142351834 +1.3.6.1.4.1.232.3.2.5.1.1.19.11.4|65|4024458378 +1.3.6.1.4.1.232.3.2.5.1.1.19.12.20|65|566543450 +1.3.6.1.4.1.232.3.2.5.1.1.19.18.22|65|3519743513 +1.3.6.1.4.1.232.3.2.5.1.1.19.23.2|65|3459523029 +1.3.6.1.4.1.232.3.2.5.1.1.20.0.2|65|43264877 +1.3.6.1.4.1.232.3.2.5.1.1.20.0.28|65|3981252740 +1.3.6.1.4.1.232.3.2.5.1.1.20.8.31|65|2390762949 +1.3.6.1.4.1.232.3.2.5.1.1.20.9.24|65|3181479601 +1.3.6.1.4.1.232.3.2.5.1.1.20.9.28|65|3311503997 +1.3.6.1.4.1.232.3.2.5.1.1.20.10.17|65|2897038505 +1.3.6.1.4.1.232.3.2.5.1.1.20.11.4|65|165941602 +1.3.6.1.4.1.232.3.2.5.1.1.20.12.20|65|953987731 +1.3.6.1.4.1.232.3.2.5.1.1.20.18.22|65|1795341671 +1.3.6.1.4.1.232.3.2.5.1.1.20.23.2|65|2277575523 +1.3.6.1.4.1.232.3.2.5.1.1.21.0.2|65|1316077395 +1.3.6.1.4.1.232.3.2.5.1.1.21.0.28|65|3677820263 +1.3.6.1.4.1.232.3.2.5.1.1.21.8.31|65|2612770528 +1.3.6.1.4.1.232.3.2.5.1.1.21.9.24|65|1027709744 +1.3.6.1.4.1.232.3.2.5.1.1.21.9.28|65|3051589898 +1.3.6.1.4.1.232.3.2.5.1.1.21.10.17|65|2370106598 +1.3.6.1.4.1.232.3.2.5.1.1.21.11.4|65|671178955 +1.3.6.1.4.1.232.3.2.5.1.1.21.12.20|65|1481115055 +1.3.6.1.4.1.232.3.2.5.1.1.21.18.22|65|908153265 +1.3.6.1.4.1.232.3.2.5.1.1.21.23.2|65|2033546701 +1.3.6.1.4.1.232.3.2.5.1.1.22.0.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.22.0.28|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.22.8.31|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.22.9.24|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.22.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.22.10.17|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.22.11.4|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.22.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.22.18.22|2|18 +1.3.6.1.4.1.232.3.2.5.1.1.22.23.2|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.23.0.2|66|2272833932 +1.3.6.1.4.1.232.3.2.5.1.1.23.0.28|66|238315886 +1.3.6.1.4.1.232.3.2.5.1.1.23.8.31|66|2332345108 +1.3.6.1.4.1.232.3.2.5.1.1.23.9.24|66|1722467098 +1.3.6.1.4.1.232.3.2.5.1.1.23.9.28|66|3365552990 +1.3.6.1.4.1.232.3.2.5.1.1.23.10.17|66|814295671 +1.3.6.1.4.1.232.3.2.5.1.1.23.11.4|66|2798738056 +1.3.6.1.4.1.232.3.2.5.1.1.23.12.20|66|3016608692 +1.3.6.1.4.1.232.3.2.5.1.1.23.18.22|66|2609823405 +1.3.6.1.4.1.232.3.2.5.1.1.23.23.2|66|2243357455 +1.3.6.1.4.1.232.3.2.5.1.1.24.0.2|66|1195544543 +1.3.6.1.4.1.232.3.2.5.1.1.24.0.28|66|1262729680 +1.3.6.1.4.1.232.3.2.5.1.1.24.8.31|66|1186252601 +1.3.6.1.4.1.232.3.2.5.1.1.24.9.24|66|1166010901 +1.3.6.1.4.1.232.3.2.5.1.1.24.9.28|66|2981821918 +1.3.6.1.4.1.232.3.2.5.1.1.24.10.17|66|1339371079 +1.3.6.1.4.1.232.3.2.5.1.1.24.11.4|66|1286022879 +1.3.6.1.4.1.232.3.2.5.1.1.24.12.20|66|3351053968 +1.3.6.1.4.1.232.3.2.5.1.1.24.18.22|66|2312438865 +1.3.6.1.4.1.232.3.2.5.1.1.24.23.2|66|4073921079 +1.3.6.1.4.1.232.3.2.5.1.1.25.0.2|66|1571443607 +1.3.6.1.4.1.232.3.2.5.1.1.25.0.28|66|3747927012 +1.3.6.1.4.1.232.3.2.5.1.1.25.8.31|66|3027271760 +1.3.6.1.4.1.232.3.2.5.1.1.25.9.24|66|3819076816 +1.3.6.1.4.1.232.3.2.5.1.1.25.9.28|66|2709190369 +1.3.6.1.4.1.232.3.2.5.1.1.25.10.17|66|3112461002 +1.3.6.1.4.1.232.3.2.5.1.1.25.11.4|66|2804238793 +1.3.6.1.4.1.232.3.2.5.1.1.25.12.20|66|2746010765 +1.3.6.1.4.1.232.3.2.5.1.1.25.18.22|66|1131305182 +1.3.6.1.4.1.232.3.2.5.1.1.25.23.2|66|630061036 +1.3.6.1.4.1.232.3.2.5.1.1.26.0.2|65|2089481769 +1.3.6.1.4.1.232.3.2.5.1.1.26.0.28|65|810038908 +1.3.6.1.4.1.232.3.2.5.1.1.26.8.31|65|1068878315 +1.3.6.1.4.1.232.3.2.5.1.1.26.9.24|65|103961563 +1.3.6.1.4.1.232.3.2.5.1.1.26.9.28|65|2013639362 +1.3.6.1.4.1.232.3.2.5.1.1.26.10.17|65|2951245451 +1.3.6.1.4.1.232.3.2.5.1.1.26.11.4|65|186230100 +1.3.6.1.4.1.232.3.2.5.1.1.26.12.20|65|4182707117 +1.3.6.1.4.1.232.3.2.5.1.1.26.18.22|65|3028338343 +1.3.6.1.4.1.232.3.2.5.1.1.26.23.2|65|168329345 +1.3.6.1.4.1.232.3.2.5.1.1.27.0.2|65|374054158 +1.3.6.1.4.1.232.3.2.5.1.1.27.0.28|65|2567904399 +1.3.6.1.4.1.232.3.2.5.1.1.27.8.31|65|522893109 +1.3.6.1.4.1.232.3.2.5.1.1.27.9.24|65|119532592 +1.3.6.1.4.1.232.3.2.5.1.1.27.9.28|65|2471496068 +1.3.6.1.4.1.232.3.2.5.1.1.27.10.17|65|2594363310 +1.3.6.1.4.1.232.3.2.5.1.1.27.11.4|65|3944959901 +1.3.6.1.4.1.232.3.2.5.1.1.27.12.20|65|4164483098 +1.3.6.1.4.1.232.3.2.5.1.1.27.18.22|65|2883751910 +1.3.6.1.4.1.232.3.2.5.1.1.27.23.2|65|2206974357 +1.3.6.1.4.1.232.3.2.5.1.1.28.0.2|65|3925445605 +1.3.6.1.4.1.232.3.2.5.1.1.28.0.28|65|1713645649 +1.3.6.1.4.1.232.3.2.5.1.1.28.8.31|65|559394300 +1.3.6.1.4.1.232.3.2.5.1.1.28.9.24|65|3885486446 +1.3.6.1.4.1.232.3.2.5.1.1.28.9.28|65|4210915605 +1.3.6.1.4.1.232.3.2.5.1.1.28.10.17|65|220092674 +1.3.6.1.4.1.232.3.2.5.1.1.28.11.4|65|3868626828 +1.3.6.1.4.1.232.3.2.5.1.1.28.12.20|65|3239804722 +1.3.6.1.4.1.232.3.2.5.1.1.28.18.22|65|2585992683 +1.3.6.1.4.1.232.3.2.5.1.1.28.23.2|65|4160128227 +1.3.6.1.4.1.232.3.2.5.1.1.29.0.2|65|3584995123 +1.3.6.1.4.1.232.3.2.5.1.1.29.0.28|65|3107079286 +1.3.6.1.4.1.232.3.2.5.1.1.29.8.31|65|2508263122 +1.3.6.1.4.1.232.3.2.5.1.1.29.9.24|65|3981942807 +1.3.6.1.4.1.232.3.2.5.1.1.29.9.28|65|3550107921 +1.3.6.1.4.1.232.3.2.5.1.1.29.10.17|65|176899773 +1.3.6.1.4.1.232.3.2.5.1.1.29.11.4|65|1648399595 +1.3.6.1.4.1.232.3.2.5.1.1.29.12.20|65|3297067055 +1.3.6.1.4.1.232.3.2.5.1.1.29.18.22|65|3445404027 +1.3.6.1.4.1.232.3.2.5.1.1.29.23.2|65|2016773999 +1.3.6.1.4.1.232.3.2.5.1.1.30.0.2|65|2989537942 +1.3.6.1.4.1.232.3.2.5.1.1.30.0.28|65|3934222433 +1.3.6.1.4.1.232.3.2.5.1.1.30.8.31|65|2477940641 +1.3.6.1.4.1.232.3.2.5.1.1.30.9.24|65|4200705038 +1.3.6.1.4.1.232.3.2.5.1.1.30.9.28|65|3858528366 +1.3.6.1.4.1.232.3.2.5.1.1.30.10.17|65|3986228859 +1.3.6.1.4.1.232.3.2.5.1.1.30.11.4|65|2662203714 +1.3.6.1.4.1.232.3.2.5.1.1.30.12.20|65|3761701964 +1.3.6.1.4.1.232.3.2.5.1.1.30.18.22|65|1418961513 +1.3.6.1.4.1.232.3.2.5.1.1.30.23.2|65|2750812238 +1.3.6.1.4.1.232.3.2.5.1.1.31.0.2|65|916231198 +1.3.6.1.4.1.232.3.2.5.1.1.31.0.28|65|2146594321 +1.3.6.1.4.1.232.3.2.5.1.1.31.8.31|65|995962026 +1.3.6.1.4.1.232.3.2.5.1.1.31.9.24|65|3587479373 +1.3.6.1.4.1.232.3.2.5.1.1.31.9.28|65|4232069374 +1.3.6.1.4.1.232.3.2.5.1.1.31.10.17|65|2353390047 +1.3.6.1.4.1.232.3.2.5.1.1.31.11.4|65|3388648852 +1.3.6.1.4.1.232.3.2.5.1.1.31.12.20|65|3669696917 +1.3.6.1.4.1.232.3.2.5.1.1.31.18.22|65|2817308627 +1.3.6.1.4.1.232.3.2.5.1.1.31.23.2|65|1972361499 +1.3.6.1.4.1.232.3.2.5.1.1.32.0.2|65|296578155 +1.3.6.1.4.1.232.3.2.5.1.1.32.0.28|65|3928100633 +1.3.6.1.4.1.232.3.2.5.1.1.32.8.31|65|2321027611 +1.3.6.1.4.1.232.3.2.5.1.1.32.9.24|65|2503792394 +1.3.6.1.4.1.232.3.2.5.1.1.32.9.28|65|3554487951 +1.3.6.1.4.1.232.3.2.5.1.1.32.10.17|65|1128696502 +1.3.6.1.4.1.232.3.2.5.1.1.32.11.4|65|1115663679 +1.3.6.1.4.1.232.3.2.5.1.1.32.12.20|65|1925210987 +1.3.6.1.4.1.232.3.2.5.1.1.32.18.22|65|2145808767 +1.3.6.1.4.1.232.3.2.5.1.1.32.23.2|65|723298107 +1.3.6.1.4.1.232.3.2.5.1.1.33.0.2|65|4232763688 +1.3.6.1.4.1.232.3.2.5.1.1.33.0.28|65|2515648724 +1.3.6.1.4.1.232.3.2.5.1.1.33.8.31|65|1905715607 +1.3.6.1.4.1.232.3.2.5.1.1.33.9.24|65|1573221775 +1.3.6.1.4.1.232.3.2.5.1.1.33.9.28|65|2178293335 +1.3.6.1.4.1.232.3.2.5.1.1.33.10.17|65|1373042557 +1.3.6.1.4.1.232.3.2.5.1.1.33.11.4|65|324493681 +1.3.6.1.4.1.232.3.2.5.1.1.33.12.20|65|863366144 +1.3.6.1.4.1.232.3.2.5.1.1.33.18.22|65|2834520456 +1.3.6.1.4.1.232.3.2.5.1.1.33.23.2|65|660770811 +1.3.6.1.4.1.232.3.2.5.1.1.34.0.2|65|895977516 +1.3.6.1.4.1.232.3.2.5.1.1.34.0.28|65|3912491867 +1.3.6.1.4.1.232.3.2.5.1.1.34.8.31|65|2935708564 +1.3.6.1.4.1.232.3.2.5.1.1.34.9.24|65|613479510 +1.3.6.1.4.1.232.3.2.5.1.1.34.9.28|65|353982695 +1.3.6.1.4.1.232.3.2.5.1.1.34.10.17|65|1719422533 +1.3.6.1.4.1.232.3.2.5.1.1.34.11.4|65|2753507707 +1.3.6.1.4.1.232.3.2.5.1.1.34.12.20|65|2531058768 +1.3.6.1.4.1.232.3.2.5.1.1.34.18.22|65|1738463797 +1.3.6.1.4.1.232.3.2.5.1.1.34.23.2|65|230339965 +1.3.6.1.4.1.232.3.2.5.1.1.35.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.8.31|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.37.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.12.20|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.38.0.2|65|695149768 +1.3.6.1.4.1.232.3.2.5.1.1.38.0.28|65|3356476138 +1.3.6.1.4.1.232.3.2.5.1.1.38.8.31|65|10938476 +1.3.6.1.4.1.232.3.2.5.1.1.38.9.24|65|3824347234 +1.3.6.1.4.1.232.3.2.5.1.1.38.9.28|65|2299135820 +1.3.6.1.4.1.232.3.2.5.1.1.38.10.17|65|3127782166 +1.3.6.1.4.1.232.3.2.5.1.1.38.11.4|65|650087465 +1.3.6.1.4.1.232.3.2.5.1.1.38.12.20|65|1126275168 +1.3.6.1.4.1.232.3.2.5.1.1.38.18.22|65|292840402 +1.3.6.1.4.1.232.3.2.5.1.1.38.23.2|65|833195757 +1.3.6.1.4.1.232.3.2.5.1.1.39.0.2|65|273708010 +1.3.6.1.4.1.232.3.2.5.1.1.39.0.28|65|2930543340 +1.3.6.1.4.1.232.3.2.5.1.1.39.8.31|65|1360991038 +1.3.6.1.4.1.232.3.2.5.1.1.39.9.24|65|360503215 +1.3.6.1.4.1.232.3.2.5.1.1.39.9.28|65|4180016804 +1.3.6.1.4.1.232.3.2.5.1.1.39.10.17|65|3091053534 +1.3.6.1.4.1.232.3.2.5.1.1.39.11.4|65|3927959624 +1.3.6.1.4.1.232.3.2.5.1.1.39.12.20|65|3019266957 +1.3.6.1.4.1.232.3.2.5.1.1.39.18.22|65|1783253281 +1.3.6.1.4.1.232.3.2.5.1.1.39.23.2|65|3451792479 +1.3.6.1.4.1.232.3.2.5.1.1.40.0.2|65|2074093460 +1.3.6.1.4.1.232.3.2.5.1.1.40.0.28|65|1245631859 +1.3.6.1.4.1.232.3.2.5.1.1.40.8.31|65|2278547273 +1.3.6.1.4.1.232.3.2.5.1.1.40.9.24|65|262900694 +1.3.6.1.4.1.232.3.2.5.1.1.40.9.28|65|3929997821 +1.3.6.1.4.1.232.3.2.5.1.1.40.10.17|65|3399525625 +1.3.6.1.4.1.232.3.2.5.1.1.40.11.4|65|3375585056 +1.3.6.1.4.1.232.3.2.5.1.1.40.12.20|65|2460123296 +1.3.6.1.4.1.232.3.2.5.1.1.40.18.22|65|1661289605 +1.3.6.1.4.1.232.3.2.5.1.1.40.23.2|65|4099258745 +1.3.6.1.4.1.232.3.2.5.1.1.41.0.2|65|67819348 +1.3.6.1.4.1.232.3.2.5.1.1.41.0.28|65|4025257665 +1.3.6.1.4.1.232.3.2.5.1.1.41.8.31|65|778931221 +1.3.6.1.4.1.232.3.2.5.1.1.41.9.24|65|3973425930 +1.3.6.1.4.1.232.3.2.5.1.1.41.9.28|65|683938656 +1.3.6.1.4.1.232.3.2.5.1.1.41.10.17|65|3311880823 +1.3.6.1.4.1.232.3.2.5.1.1.41.11.4|65|3358020460 +1.3.6.1.4.1.232.3.2.5.1.1.41.12.20|65|1507642352 +1.3.6.1.4.1.232.3.2.5.1.1.41.18.22|65|3032576586 +1.3.6.1.4.1.232.3.2.5.1.1.41.23.2|65|1081195094 +1.3.6.1.4.1.232.3.2.5.1.1.42.0.2|65|2958829949 +1.3.6.1.4.1.232.3.2.5.1.1.42.0.28|65|3881154002 +1.3.6.1.4.1.232.3.2.5.1.1.42.8.31|65|868131005 +1.3.6.1.4.1.232.3.2.5.1.1.42.9.24|65|3507732127 +1.3.6.1.4.1.232.3.2.5.1.1.42.9.28|65|2408249280 +1.3.6.1.4.1.232.3.2.5.1.1.42.10.17|65|3661936369 +1.3.6.1.4.1.232.3.2.5.1.1.42.11.4|65|83913712 +1.3.6.1.4.1.232.3.2.5.1.1.42.12.20|65|1692536119 +1.3.6.1.4.1.232.3.2.5.1.1.42.18.22|65|83128752 +1.3.6.1.4.1.232.3.2.5.1.1.42.23.2|65|271214931 +1.3.6.1.4.1.232.3.2.5.1.1.43.0.2|65|3379400009 +1.3.6.1.4.1.232.3.2.5.1.1.43.0.28|65|2113936975 +1.3.6.1.4.1.232.3.2.5.1.1.43.8.31|65|4269595898 +1.3.6.1.4.1.232.3.2.5.1.1.43.9.24|65|2636068769 +1.3.6.1.4.1.232.3.2.5.1.1.43.9.28|65|3509528056 +1.3.6.1.4.1.232.3.2.5.1.1.43.10.17|65|2019075204 +1.3.6.1.4.1.232.3.2.5.1.1.43.11.4|65|3241766477 +1.3.6.1.4.1.232.3.2.5.1.1.43.12.20|65|1716200504 +1.3.6.1.4.1.232.3.2.5.1.1.43.18.22|65|1957275437 +1.3.6.1.4.1.232.3.2.5.1.1.43.23.2|65|2456872217 +1.3.6.1.4.1.232.3.2.5.1.1.44.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.44.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.44.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.45.0.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.45.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.45.8.31|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.45.9.24|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.45.10.17|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.11.4|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.45.12.20|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.45.18.22|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.23.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.46.0.2|65|3561272272 +1.3.6.1.4.1.232.3.2.5.1.1.46.0.28|65|4174662596 +1.3.6.1.4.1.232.3.2.5.1.1.46.8.31|65|689811778 +1.3.6.1.4.1.232.3.2.5.1.1.46.9.24|65|1530456354 +1.3.6.1.4.1.232.3.2.5.1.1.46.9.28|65|20151350 +1.3.6.1.4.1.232.3.2.5.1.1.46.10.17|65|1335195536 +1.3.6.1.4.1.232.3.2.5.1.1.46.11.4|65|3704812105 +1.3.6.1.4.1.232.3.2.5.1.1.46.12.20|65|1550626120 +1.3.6.1.4.1.232.3.2.5.1.1.46.18.22|65|3138673084 +1.3.6.1.4.1.232.3.2.5.1.1.46.23.2|65|655955111 +1.3.6.1.4.1.232.3.2.5.1.1.47.0.2|65|1839069213 +1.3.6.1.4.1.232.3.2.5.1.1.47.0.28|65|174038400 +1.3.6.1.4.1.232.3.2.5.1.1.47.8.31|65|3244003037 +1.3.6.1.4.1.232.3.2.5.1.1.47.9.24|65|1347107392 +1.3.6.1.4.1.232.3.2.5.1.1.47.9.28|65|1186660290 +1.3.6.1.4.1.232.3.2.5.1.1.47.10.17|65|1395461969 +1.3.6.1.4.1.232.3.2.5.1.1.47.11.4|65|4027008497 +1.3.6.1.4.1.232.3.2.5.1.1.47.12.20|65|1547161558 +1.3.6.1.4.1.232.3.2.5.1.1.47.18.22|65|1118166193 +1.3.6.1.4.1.232.3.2.5.1.1.47.23.2|65|4220984397 +1.3.6.1.4.1.232.3.2.5.1.1.48.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.49.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.49.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.50.0.2|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.50.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.50.8.31|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.50.9.24|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.50.9.28|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.50.10.17|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.50.11.4|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.50.12.20|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.50.18.22|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.50.23.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.51.0.2|4x|7a6f6d6269657320627574207468656972206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.51.0.28|4x|627574207468656972206f78656e207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.51.8.31|4x|4a61646564206f78656e206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.51.9.24|4|but +1.3.6.1.4.1.232.3.2.5.1.1.51.9.28|4x|7a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.51.10.17|4x|627574206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.51.11.4|4x|6f78656e204a61646564206b65707420627574206b657074207a6f6d62696573 +1.3.6.1.4.1.232.3.2.5.1.1.51.12.20|4x|746865697220616374656420717561696e746c7920717561696e746c79206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.51.18.22|4|but +1.3.6.1.4.1.232.3.2.5.1.1.51.23.2|4x|627574206f78656e204a6164656420666f7277617264204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.52.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.52.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.52.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.54.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.54.10.17|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.54.11.4|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.54.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.54.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.54.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.55.0.2|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.55.0.28|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.55.8.31|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.55.9.24|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.55.9.28|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.55.10.17|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.55.11.4|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.55.12.20|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.55.18.22|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.55.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.56.0.2|65|2949968298 +1.3.6.1.4.1.232.3.2.5.1.1.56.0.28|65|2491218975 +1.3.6.1.4.1.232.3.2.5.1.1.56.8.31|65|233525739 +1.3.6.1.4.1.232.3.2.5.1.1.56.9.24|65|336628689 +1.3.6.1.4.1.232.3.2.5.1.1.56.9.28|65|2014596717 +1.3.6.1.4.1.232.3.2.5.1.1.56.10.17|65|4222268319 +1.3.6.1.4.1.232.3.2.5.1.1.56.11.4|65|2071508675 +1.3.6.1.4.1.232.3.2.5.1.1.56.12.20|65|1261145831 +1.3.6.1.4.1.232.3.2.5.1.1.56.18.22|65|1296062476 +1.3.6.1.4.1.232.3.2.5.1.1.56.23.2|65|1252664383 +1.3.6.1.4.1.232.3.2.5.1.1.57.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.57.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.57.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.57.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.57.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.57.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.57.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.58.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.58.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.59.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.59.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.59.9.24|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.59.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.59.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.59.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.60.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.60.12.20|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.60.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.62.0.2|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.0.28|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.8.31|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.9.24|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.9.28|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.10.17|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.11.4|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.12.20|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.62.18.22|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.23.2|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.63.0.2|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.63.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.63.8.31|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.63.9.24|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.63.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.63.10.17|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.63.11.4|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.63.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.63.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.63.23.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.64.0.2|4x|627574207468656972206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.64.0.28|4x|64726976696e672064726976696e67206f78656e204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.64.8.31|4x|6163746564204a61646564207a6f6d62696573207468656972206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.232.3.2.5.1.1.64.9.24|4x|6163746564204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.64.9.28|4|acted +1.3.6.1.4.1.232.3.2.5.1.1.64.10.17|4x|666f72776172642062757420717561696e746c7920666f7277617264207a6f6d6269657320666f7277617264206b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.232.3.2.5.1.1.64.11.4|4x|64726976696e67206275742074686569722064726976696e67204a61646564207a6f6d62696573206f78656e2062757420627574 +1.3.6.1.4.1.232.3.2.5.1.1.64.12.20|4x|746865697220666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.232.3.2.5.1.1.64.18.22|4x|746865697220717561696e746c792064726976696e672064726976696e67206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.64.23.2|4x|7a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264 +1.3.6.1.4.1.232.3.2.5.1.1.65.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.65.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.65.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.65.10.17|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.65.11.4|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.65.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.0.2|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.66.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.66.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.66.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.66.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.66.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.66.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.66.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.67.0.2|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.67.0.28|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.67.8.31|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.67.9.24|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.67.9.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.67.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.67.11.4|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.67.12.20|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.67.18.22|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.67.23.2|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.68.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.0.28|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.68.8.31|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.68.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.68.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.68.12.20|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.68.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.69.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.69.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.70.0.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.70.0.28|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.70.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.70.9.24|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.70.9.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.70.10.17|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.70.11.4|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.70.12.20|2|30 +1.3.6.1.4.1.232.3.2.5.1.1.70.18.22|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.70.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.71.0.2|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.71.0.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.71.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.71.9.24|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.71.9.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.71.10.17|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.71.11.4|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.71.12.20|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.71.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.71.23.2|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.72.0.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.72.0.28|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.72.8.31|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.72.9.24|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.72.9.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.72.10.17|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.72.11.4|2|29 +1.3.6.1.4.1.232.3.2.5.1.1.72.12.20|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.72.18.22|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.72.23.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.73.0.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.73.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.73.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.73.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.73.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.74.0.2|65|2908799926 +1.3.6.1.4.1.232.3.2.5.1.1.74.0.28|65|2490380324 +1.3.6.1.4.1.232.3.2.5.1.1.74.8.31|65|2597785093 +1.3.6.1.4.1.232.3.2.5.1.1.74.9.24|65|4254200557 +1.3.6.1.4.1.232.3.2.5.1.1.74.9.28|65|696408854 +1.3.6.1.4.1.232.3.2.5.1.1.74.10.17|65|165954175 +1.3.6.1.4.1.232.3.2.5.1.1.74.11.4|65|404169227 +1.3.6.1.4.1.232.3.2.5.1.1.74.12.20|65|368625461 +1.3.6.1.4.1.232.3.2.5.1.1.74.18.22|65|2141670018 +1.3.6.1.4.1.232.3.2.5.1.1.74.23.2|65|3382161332 +1.3.6.1.4.1.232.3.2.5.1.1.75.0.2|66|2380887083 +1.3.6.1.4.1.232.3.2.5.1.1.75.0.28|66|1128640721 +1.3.6.1.4.1.232.3.2.5.1.1.75.8.31|66|3386410156 +1.3.6.1.4.1.232.3.2.5.1.1.75.9.24|66|46631455 +1.3.6.1.4.1.232.3.2.5.1.1.75.9.28|66|1683028466 +1.3.6.1.4.1.232.3.2.5.1.1.75.10.17|66|2663962912 +1.3.6.1.4.1.232.3.2.5.1.1.75.11.4|66|1693199007 +1.3.6.1.4.1.232.3.2.5.1.1.75.12.20|66|3786879383 +1.3.6.1.4.1.232.3.2.5.1.1.75.18.22|66|873327295 +1.3.6.1.4.1.232.3.2.5.1.1.75.23.2|66|1558173398 +1.3.6.1.4.1.232.3.2.5.1.1.76.0.2|65|2103006361 +1.3.6.1.4.1.232.3.2.5.1.1.76.0.28|65|1426172609 +1.3.6.1.4.1.232.3.2.5.1.1.76.8.31|65|991215997 +1.3.6.1.4.1.232.3.2.5.1.1.76.9.24|65|2962747034 +1.3.6.1.4.1.232.3.2.5.1.1.76.9.28|65|2527741665 +1.3.6.1.4.1.232.3.2.5.1.1.76.10.17|65|2054720417 +1.3.6.1.4.1.232.3.2.5.1.1.76.11.4|65|2600139724 +1.3.6.1.4.1.232.3.2.5.1.1.76.12.20|65|999271546 +1.3.6.1.4.1.232.3.2.5.1.1.76.18.22|65|388628255 +1.3.6.1.4.1.232.3.2.5.1.1.76.23.2|65|457008923 +1.3.6.1.4.1.232.3.2.5.1.1.77.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.9.24|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.78.0.2|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.78.0.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.78.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.78.9.24|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.78.9.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.78.10.17|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.78.11.4|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.78.12.20|2|30 +1.3.6.1.4.1.232.3.2.5.1.1.78.18.22|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.78.23.2|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.79.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.79.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.79.8.31|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.79.9.24|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.79.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.79.10.17|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.79.11.4|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.79.12.20|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.79.18.22|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.79.23.2|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.80.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.80.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.80.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.80.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.80.23.2|2|1 +1.3.6.1.4.1.232.6.2.2.2.0|2|2 +1.3.6.1.4.1.232.6.2.3.1.0|2|4 +1.3.6.1.4.1.232.6.2.3.2.0|2|2 +1.3.6.1.4.1.232.6.2.3.3.0|2|1234 +1.3.6.1.4.1.232.6.2.5.1.0|2|4 +1.3.6.1.4.1.232.6.2.5.6.0|2|3 +1.3.6.1.4.1.232.6.2.5.10.0|2|5 +1.3.6.1.4.1.232.6.2.5.17.0|2|4 +1.3.6.1.4.1.232.6.2.5.21.0|2|3 +1.3.6.1.4.1.232.6.2.6.1.0|2|2 +1.3.6.1.4.1.232.6.2.6.3.0|2|2 +1.3.6.1.4.1.232.6.2.6.4.0|2|2 +1.3.6.1.4.1.232.6.2.6.5.0|2|2 +1.3.6.1.4.1.232.6.2.6.8.1.3.0|2|1 +1.3.6.1.4.1.232.6.2.6.8.1.3.1|2|13 +1.3.6.1.4.1.232.6.2.6.8.1.3.2|2|28 +1.3.6.1.4.1.232.6.2.6.8.1.4.0|2|40 +1.3.6.1.4.1.232.6.2.6.8.1.4.1|2|45 +1.3.6.1.4.1.232.6.2.6.8.1.4.2|2|55 +1.3.6.1.4.1.232.6.2.6.8.1.6.0|2|2 +1.3.6.1.4.1.232.6.2.6.8.1.6.1|2|2 +1.3.6.1.4.1.232.6.2.6.8.1.6.2|2|3 +1.3.6.1.4.1.232.6.2.8.1.0|2|1051200 +1.3.6.1.4.1.232.6.2.8.2.0|2|42 +1.3.6.1.4.1.232.6.2.15.3.0|2|82 +1.3.6.1.4.1.232.6.2.17.2.1.2.0|2|1 +1.3.6.1.4.1.232.6.2.17.2.1.2.1|2|3 +1.3.6.1.4.1.232.6.2.17.2.1.2.2|2|4 +1.3.6.1.4.1.232.6.2.17.2.1.2.3|2|5 +1.3.6.1.4.1.232.6.2.17.2.1.4.0|2|2 +1.3.6.1.4.1.232.6.2.17.2.1.4.1|2|2 +1.3.6.1.4.1.232.6.2.17.2.1.4.2|2|2 +1.3.6.1.4.1.232.6.2.17.2.1.4.3|2|4 +1.3.6.1.4.1.232.6.2.17.2.1.5.0|2|1 +1.3.6.1.4.1.232.6.2.17.2.1.5.1|2|1 +1.3.6.1.4.1.232.6.2.17.2.1.5.2|2|1 +1.3.6.1.4.1.232.6.2.17.2.1.5.3|2|12 +1.3.6.1.4.1.232.9.2.2.5|2|2 +1.3.6.1.4.1.232.9.2.2.6|2|89 +1.3.6.1.4.1.232.9.2.2.9|2|0 +1.3.6.1.4.1.232.9.2.2.16|2|2 +1.3.6.1.4.1.232.9.2.2.17|2|2 +1.3.6.1.4.1.232.9.2.2.32|2|3 +1.3.6.1.4.1.232.9.2.3.1|2|10 +1.3.6.1.4.1.232.9.2.5.2.1.1.0|2|2 +1.3.6.1.4.1.232.9.2.5.2.1.1.1|2|3 +1.3.6.1.4.1.232.9.2.5.2.1.2.0|65|2048000 +1.3.6.1.4.1.232.9.2.5.2.1.2.1|65|4096000 +1.3.6.1.4.1.232.9.2.5.2.1.3.0|65|2000 +1.3.6.1.4.1.232.9.2.5.2.1.3.1|65|4000 +1.3.6.1.4.1.232.9.2.5.2.1.6.0|65|10 +1.3.6.1.4.1.232.9.2.5.2.1.6.1|65|42 +1.3.6.1.4.1.232.9.2.5.2.1.7.0|65|0 +1.3.6.1.4.1.232.9.2.5.2.1.7.1|65|3 +1.3.6.1.4.1.232.9.2.5.2.1.8.0|65|200 +1.3.6.1.4.1.232.9.2.5.2.1.8.1|65|800 +1.3.6.1.4.1.232.9.2.5.2.1.9.0|65|1024000 +1.3.6.1.4.1.232.9.2.5.2.1.9.1|65|3072000 +1.3.6.1.4.1.232.9.2.5.2.1.10.0|65|1000 +1.3.6.1.4.1.232.9.2.5.2.1.10.1|65|3000 +1.3.6.1.4.1.232.9.2.5.2.1.13.0|65|30 +1.3.6.1.4.1.232.9.2.5.2.1.13.1|65|15 +1.3.6.1.4.1.232.9.2.5.2.1.14.0|65|2 +1.3.6.1.4.1.232.9.2.5.2.1.14.1|65|9 +1.3.6.1.4.1.232.9.2.5.2.1.15.0|65|0 +1.3.6.1.4.1.232.9.2.5.2.1.15.1|65|17 +1.3.6.1.4.1.232.11.2.2.1|4|RHEL +1.3.6.1.4.1.232.11.2.2.2|4|3.10.0-862.14.4.el7.ve.x86_64 +1.3.6.1.4.1.232.18.2.3.1.1.16.0|65|2000 +1.3.6.1.4.1.232.18.2.3.1.1.16.1|65|2500 +1.3.6.1.4.1.232.18.2.3.1.1.17.0|65|9000 +1.3.6.1.4.1.232.18.2.3.1.1.17.1|65|7600 +1.3.6.1.4.1.232.18.2.3.1.1.18.0|65|10 +1.3.6.1.4.1.232.18.2.3.1.1.18.1|65|0 +1.3.6.1.4.1.232.18.2.3.1.1.19.0|65|143 +1.3.6.1.4.1.232.18.2.3.1.1.19.1|65|25 +1.3.6.1.4.1.232.18.2.3.1.1.33.0|66|65536 +1.3.6.1.4.1.232.18.2.3.1.1.33.1|66|0 +1.3.6.1.4.1.232.18.2.3.1.1.36.0|66|1 +1.3.6.1.4.1.232.18.2.3.1.1.36.1|66|260 +1.3.6.1.4.1.232.18.2.3.1.1.37.0|65|16000 +1.3.6.1.4.1.232.18.2.3.1.1.37.1|65|20000 +1.3.6.1.4.1.232.18.2.3.1.1.38.0|65|72000 +1.3.6.1.4.1.232.18.2.3.1.1.38.1|65|60800 +1.3.6.1.4.1.232.18.2.3.1.1.39.0|4x|65746830 +1.3.6.1.4.1.232.18.2.3.1.1.39.1|4x|656e31 +1.3.6.1.4.1.232.18.2.5.3|2|1 diff --git a/test/new-e2e/ndm/snmp/compose/data/hpe-proliant.snmprec b/test/new-e2e/ndm/snmp/compose/data/hpe-proliant.snmprec new file mode 100644 index 0000000000000..67677848dd007 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/hpe-proliant.snmprec @@ -0,0 +1,1857 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.232.1.2 +1.3.6.1.2.1.1.5.0|4|hpe-proliant.example +1.3.6.1.2.1.2.2.1.1.3|2|3 +1.3.6.1.2.1.2.2.1.1.4|2|4 +1.3.6.1.2.1.2.2.1.2.3|4x|65746830 +1.3.6.1.2.1.2.2.1.2.4|4x|65746831 +1.3.6.1.2.1.2.2.1.3.3|2|13 +1.3.6.1.2.1.2.2.1.3.4|2|22 +1.3.6.1.2.1.2.2.1.4.3|2|20 +1.3.6.1.2.1.2.2.1.4.4|2|30 +1.3.6.1.2.1.2.2.1.5.3|66|1967830453 +1.3.6.1.2.1.2.2.1.5.4|66|561506485 +1.3.6.1.2.1.2.2.1.6.3|4x|12 +1.3.6.1.2.1.2.2.1.6.4|4x|13 +1.3.6.1.2.1.2.2.1.7.3|2|3 +1.3.6.1.2.1.2.2.1.7.4|2|3 +1.3.6.1.2.1.2.2.1.8.3|2|6 +1.3.6.1.2.1.2.2.1.8.4|2|1 +1.3.6.1.2.1.2.2.1.9.3|67|2922247544 +1.3.6.1.2.1.2.2.1.9.4|67|3503289067 +1.3.6.1.2.1.2.2.1.10.3|65|799330449 +1.3.6.1.2.1.2.2.1.10.4|65|1416546150 +1.3.6.1.2.1.2.2.1.11.3|65|1806496968 +1.3.6.1.2.1.2.2.1.11.4|65|1711866985 +1.3.6.1.2.1.2.2.1.12.3|65|2615824481 +1.3.6.1.2.1.2.2.1.12.4|65|422208764 +1.3.6.1.2.1.2.2.1.13.3|65|2637156982 +1.3.6.1.2.1.2.2.1.13.4|65|129617886 +1.3.6.1.2.1.2.2.1.14.3|65|2546706536 +1.3.6.1.2.1.2.2.1.14.4|65|1748404057 +1.3.6.1.2.1.2.2.1.15.3|65|937833439 +1.3.6.1.2.1.2.2.1.15.4|65|3384258657 +1.3.6.1.2.1.2.2.1.16.3|65|2607613508 +1.3.6.1.2.1.2.2.1.16.4|65|2163750849 +1.3.6.1.2.1.2.2.1.17.3|65|2602890644 +1.3.6.1.2.1.2.2.1.17.4|65|1298958925 +1.3.6.1.2.1.2.2.1.18.3|65|3795297761 +1.3.6.1.2.1.2.2.1.18.4|65|2855930861 +1.3.6.1.2.1.2.2.1.19.3|65|2638101636 +1.3.6.1.2.1.2.2.1.19.4|65|3850269903 +1.3.6.1.2.1.2.2.1.20.3|65|326043151 +1.3.6.1.2.1.2.2.1.20.4|65|3081566249 +1.3.6.1.2.1.2.2.1.21.3|66|3998170831 +1.3.6.1.2.1.2.2.1.21.4|66|434375459 +1.3.6.1.2.1.2.2.1.22.3|6|1.3.6.1.3.5.4.43.202.207.71.55.5 +1.3.6.1.2.1.2.2.1.22.4|6|1.3.6.1.3.143.146.10.194.182 +1.3.6.1.2.1.6.1.0|2|2 +1.3.6.1.2.1.6.2.0|2|31 +1.3.6.1.2.1.6.3.0|2|30 +1.3.6.1.2.1.6.4.0|2|3 +1.3.6.1.2.1.6.5.0|65|367405707 +1.3.6.1.2.1.6.5.0|65|1071906652 +1.3.6.1.2.1.6.6.0|65|2249397619 +1.3.6.1.2.1.6.7.0|65|229905265 +1.3.6.1.2.1.6.8.0|65|709655049 +1.3.6.1.2.1.6.9.0|66|1339955166 +1.3.6.1.2.1.6.10.0|65|3505452597 +1.3.6.1.2.1.6.11.0|65|2690927269 +1.3.6.1.2.1.6.12.0|65|45677298 +1.3.6.1.2.1.6.13.1.1.22.55.14.96.20.135.21.168.43.24|2|3 +1.3.6.1.2.1.6.13.1.1.23.243.83.56.2.196.169.135.95.14|2|9 +1.3.6.1.2.1.6.13.1.1.28.216.195.9.22.46.178.52.213.4|2|7 +1.3.6.1.2.1.6.13.1.1.43.76.18.58.15.224.141.246.4.27|2|8 +1.3.6.1.2.1.6.13.1.1.145.66.33.17.28.244.53.43.227.6|2|3 +1.3.6.1.2.1.6.13.1.1.146.120.186.130.16.98.210.88.42.17|2|10 +1.3.6.1.2.1.6.13.1.1.200.47.131.115.19.70.225.50.24.27|2|11 +1.3.6.1.2.1.6.13.1.1.208.140.201.179.0.77.6.20.15.27|2|1 +1.3.6.1.2.1.6.13.1.1.229.170.50.158.28.94.133.71.139.5|2|4 +1.3.6.1.2.1.6.13.1.1.232.107.202.10.4.181.247.252.98.9|2|12 +1.3.6.1.2.1.6.13.1.2.22.55.14.96.20.135.21.168.43.24|64x|16370e60 +1.3.6.1.2.1.6.13.1.2.23.243.83.56.2.196.169.135.95.14|64x|17f35338 +1.3.6.1.2.1.6.13.1.2.28.216.195.9.22.46.178.52.213.4|64x|1cd8c309 +1.3.6.1.2.1.6.13.1.2.43.76.18.58.15.224.141.246.4.27|64x|2b4c123a +1.3.6.1.2.1.6.13.1.2.145.66.33.17.28.244.53.43.227.6|64x|91422111 +1.3.6.1.2.1.6.13.1.2.146.120.186.130.16.98.210.88.42.17|64x|9278ba82 +1.3.6.1.2.1.6.13.1.2.200.47.131.115.19.70.225.50.24.27|64x|c82f8373 +1.3.6.1.2.1.6.13.1.2.208.140.201.179.0.77.6.20.15.27|64x|d08cc9b3 +1.3.6.1.2.1.6.13.1.2.229.170.50.158.28.94.133.71.139.5|64x|e5aa329e +1.3.6.1.2.1.6.13.1.2.232.107.202.10.4.181.247.252.98.9|64x|e86bca0a +1.3.6.1.2.1.6.13.1.3.22.55.14.96.20.135.21.168.43.24|2|20 +1.3.6.1.2.1.6.13.1.3.23.243.83.56.2.196.169.135.95.14|2|2 +1.3.6.1.2.1.6.13.1.3.28.216.195.9.22.46.178.52.213.4|2|22 +1.3.6.1.2.1.6.13.1.3.43.76.18.58.15.224.141.246.4.27|2|15 +1.3.6.1.2.1.6.13.1.3.145.66.33.17.28.244.53.43.227.6|2|28 +1.3.6.1.2.1.6.13.1.3.146.120.186.130.16.98.210.88.42.17|2|16 +1.3.6.1.2.1.6.13.1.3.200.47.131.115.19.70.225.50.24.27|2|19 +1.3.6.1.2.1.6.13.1.3.208.140.201.179.0.77.6.20.15.27|2|0 +1.3.6.1.2.1.6.13.1.3.229.170.50.158.28.94.133.71.139.5|2|28 +1.3.6.1.2.1.6.13.1.3.232.107.202.10.4.181.247.252.98.9|2|4 +1.3.6.1.2.1.6.13.1.4.22.55.14.96.20.135.21.168.43.24|64x|8715a82b +1.3.6.1.2.1.6.13.1.4.23.243.83.56.2.196.169.135.95.14|64x|c4a9875f +1.3.6.1.2.1.6.13.1.4.28.216.195.9.22.46.178.52.213.4|64x|2eb234d5 +1.3.6.1.2.1.6.13.1.4.43.76.18.58.15.224.141.246.4.27|64x|e08df604 +1.3.6.1.2.1.6.13.1.4.145.66.33.17.28.244.53.43.227.6|64x|f4352be3 +1.3.6.1.2.1.6.13.1.4.146.120.186.130.16.98.210.88.42.17|64x|62d2582a +1.3.6.1.2.1.6.13.1.4.200.47.131.115.19.70.225.50.24.27|64x|46e13218 +1.3.6.1.2.1.6.13.1.4.208.140.201.179.0.77.6.20.15.27|64x|4d06140f +1.3.6.1.2.1.6.13.1.4.229.170.50.158.28.94.133.71.139.5|64x|5e85478b +1.3.6.1.2.1.6.13.1.4.232.107.202.10.4.181.247.252.98.9|64x|b5f7fc62 +1.3.6.1.2.1.6.13.1.5.22.55.14.96.20.135.21.168.43.24|2|24 +1.3.6.1.2.1.6.13.1.5.23.243.83.56.2.196.169.135.95.14|2|14 +1.3.6.1.2.1.6.13.1.5.28.216.195.9.22.46.178.52.213.4|2|4 +1.3.6.1.2.1.6.13.1.5.43.76.18.58.15.224.141.246.4.27|2|27 +1.3.6.1.2.1.6.13.1.5.145.66.33.17.28.244.53.43.227.6|2|6 +1.3.6.1.2.1.6.13.1.5.146.120.186.130.16.98.210.88.42.17|2|17 +1.3.6.1.2.1.6.13.1.5.200.47.131.115.19.70.225.50.24.27|2|27 +1.3.6.1.2.1.6.13.1.5.208.140.201.179.0.77.6.20.15.27|2|27 +1.3.6.1.2.1.6.13.1.5.229.170.50.158.28.94.133.71.139.5|2|5 +1.3.6.1.2.1.6.13.1.5.232.107.202.10.4.181.247.252.98.9|2|9 +1.3.6.1.2.1.6.14.0|65|269154440 +1.3.6.1.2.1.6.15.0|65|590887849 +1.3.6.1.2.1.6.17.0|70|7667457467363787060 +1.3.6.1.2.1.6.18.0|70|13855100236040073709 +1.3.6.1.2.1.6.19.1.1.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|2|0 +1.3.6.1.2.1.6.19.1.1.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|2|1 +1.3.6.1.2.1.6.19.1.1.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|2|1 +1.3.6.1.2.1.6.19.1.1.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|2|1 +1.3.6.1.2.1.6.19.1.1.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|2|2 +1.3.6.1.2.1.6.19.1.1.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|2|2 +1.3.6.1.2.1.6.19.1.1.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|2|2 +1.3.6.1.2.1.6.19.1.1.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|2|4 +1.3.6.1.2.1.6.19.1.1.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|2|4 +1.3.6.1.2.1.6.19.1.1.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|2|4 +1.3.6.1.2.1.6.19.1.2.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|4|but +1.3.6.1.2.1.6.19.1.2.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|4x|7468656972206163746564 +1.3.6.1.2.1.6.19.1.2.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|4x|6f78656e20627574206163746564206f78656e207a6f6d62696573 +1.3.6.1.2.1.6.19.1.2.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|4x|64726976696e67206f78656e206b6570742074686569722064726976696e67 +1.3.6.1.2.1.6.19.1.2.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|4x|6f78656e20666f7277617264 +1.3.6.1.2.1.6.19.1.2.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|4x|6f78656e206b657074206b6570742064726976696e672064726976696e67204a61646564 +1.3.6.1.2.1.6.19.1.2.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|4x|666f7277617264204a616465642064726976696e672064726976696e6720666f7277617264204a6164656420717561696e746c79 +1.3.6.1.2.1.6.19.1.2.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|4x|4a616465642064726976696e672064726976696e67 +1.3.6.1.2.1.6.19.1.2.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|4x|74686569722062757420746865697220616374656420717561696e746c7920627574206163746564 +1.3.6.1.2.1.6.19.1.2.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|4x|6f78656e207a6f6d62696573207a6f6d6269657320717561696e746c792064726976696e672064726976696e67 +1.3.6.1.2.1.6.19.1.3.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|66|59124 +1.3.6.1.2.1.6.19.1.3.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|66|5673 +1.3.6.1.2.1.6.19.1.3.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|66|40692 +1.3.6.1.2.1.6.19.1.3.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|66|44170 +1.3.6.1.2.1.6.19.1.3.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|66|30404 +1.3.6.1.2.1.6.19.1.3.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|66|21906 +1.3.6.1.2.1.6.19.1.3.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|66|27283 +1.3.6.1.2.1.6.19.1.3.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|66|8280 +1.3.6.1.2.1.6.19.1.3.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|66|42462 +1.3.6.1.2.1.6.19.1.3.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|66|32639 +1.3.6.1.2.1.6.19.1.4.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|2|3 +1.3.6.1.2.1.6.19.1.4.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|2|2 +1.3.6.1.2.1.6.19.1.4.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|2|2 +1.3.6.1.2.1.6.19.1.4.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|2|16 +1.3.6.1.2.1.6.19.1.4.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|2|4 +1.3.6.1.2.1.6.19.1.4.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|2|1 +1.3.6.1.2.1.6.19.1.4.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|2|0 +1.3.6.1.2.1.6.19.1.4.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|2|2 +1.3.6.1.2.1.6.19.1.4.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|2|2 +1.3.6.1.2.1.6.19.1.4.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|2|3 +1.3.6.1.2.1.6.19.1.5.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|4x|64726976696e6720717561696e746c79204a6164656420717561696e746c79206b657074206b657074206163746564206275742064726976696e67 +1.3.6.1.2.1.6.19.1.5.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|4x|746865697220717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.2.1.6.19.1.5.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|4|but +1.3.6.1.2.1.6.19.1.5.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|4x|6f78656e20616374656420616374656420746865697220666f7277617264206f78656e206f78656e2064726976696e67206f78656e +1.3.6.1.2.1.6.19.1.5.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|4|forward +1.3.6.1.2.1.6.19.1.5.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|4x|6b657074207468656972 +1.3.6.1.2.1.6.19.1.5.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|4x|6f78656e20666f727761726420666f727761726420666f7277617264 +1.3.6.1.2.1.6.19.1.5.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|4x|6275742061637465642064726976696e67206163746564206b657074204a6164656420627574207a6f6d62696573 +1.3.6.1.2.1.6.19.1.5.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|4x|666f7277617264204a6164656420627574204a61646564 +1.3.6.1.2.1.6.19.1.5.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|4x|627574206f78656e207a6f6d6269657320616374656420627574206b657074 +1.3.6.1.2.1.6.19.1.6.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|66|998 +1.3.6.1.2.1.6.19.1.6.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|66|29086 +1.3.6.1.2.1.6.19.1.6.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|66|20022 +1.3.6.1.2.1.6.19.1.6.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|66|51612 +1.3.6.1.2.1.6.19.1.6.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|66|53695 +1.3.6.1.2.1.6.19.1.6.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|66|23746 +1.3.6.1.2.1.6.19.1.6.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|66|31727 +1.3.6.1.2.1.6.19.1.6.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|66|7268 +1.3.6.1.2.1.6.19.1.6.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|66|59241 +1.3.6.1.2.1.6.19.1.6.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|66|29754 +1.3.6.1.2.1.6.19.1.7.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|2|6 +1.3.6.1.2.1.6.19.1.7.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|2|8 +1.3.6.1.2.1.6.19.1.7.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|2|6 +1.3.6.1.2.1.6.19.1.7.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|2|12 +1.3.6.1.2.1.6.19.1.7.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|2|3 +1.3.6.1.2.1.6.19.1.7.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|2|8 +1.3.6.1.2.1.6.19.1.7.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|2|9 +1.3.6.1.2.1.6.19.1.7.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|2|11 +1.3.6.1.2.1.6.19.1.7.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|2|12 +1.3.6.1.2.1.6.19.1.7.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|2|8 +1.3.6.1.2.1.6.19.1.8.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|66|22017 +1.3.6.1.2.1.6.19.1.8.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|66|19736 +1.3.6.1.2.1.6.19.1.8.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|66|42634 +1.3.6.1.2.1.6.19.1.8.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|66|2416 +1.3.6.1.2.1.6.19.1.8.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|66|47463 +1.3.6.1.2.1.6.19.1.8.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|66|26014 +1.3.6.1.2.1.6.19.1.8.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|66|60912 +1.3.6.1.2.1.6.19.1.8.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|66|42192 +1.3.6.1.2.1.6.19.1.8.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|66|30088 +1.3.6.1.2.1.6.19.1.8.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|66|60074 +1.3.6.1.2.1.6.20.1.1.1.23.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.49596|2|1 +1.3.6.1.2.1.6.20.1.1.1.39.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.21167|2|1 +1.3.6.1.2.1.6.20.1.1.1.49.102.111.114.119.97.114.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.102.111.114.119.97.114.100.42037|2|1 +1.3.6.1.2.1.6.20.1.1.2.23.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.34510|2|2 +1.3.6.1.2.1.6.20.1.1.3.36.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.32.107.101.112.116.32.98.117.116.46667|2|3 +1.3.6.1.2.1.6.20.1.1.3.37.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.3720|2|3 +1.3.6.1.2.1.6.20.1.1.3.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.44254|2|3 +1.3.6.1.2.1.6.20.1.1.4.37.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.27424|2|4 +1.3.6.1.2.1.6.20.1.1.4.59.107.101.112.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.64001|2|4 +1.3.6.1.2.1.6.20.1.1.16.11.116.104.101.105.114.32.97.99.116.101.100.6814|2|16 +1.3.6.1.2.1.6.20.1.2.1.23.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.49596|4x|717561696e746c79206b65707420616374656420627574 +1.3.6.1.2.1.6.20.1.2.1.39.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.21167|4x|717561696e746c7920666f7277617264207468656972204a61646564206f78656e204a61646564 +1.3.6.1.2.1.6.20.1.2.1.49.102.111.114.119.97.114.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.102.111.114.119.97.114.100.42037|4x|666f727761726420746865697220717561696e746c792074686569722064726976696e67206b65707420666f7277617264 +1.3.6.1.2.1.6.20.1.2.2.23.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.34510|4x|7a6f6d6269657320666f72776172642064726976696e67 +1.3.6.1.2.1.6.20.1.2.3.36.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.32.107.101.112.116.32.98.117.116.46667|4x|717561696e746c79207468656972206f78656e207a6f6d62696573206b65707420627574 +1.3.6.1.2.1.6.20.1.2.3.37.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.3720|4x|666f727761726420627574206f78656e20746865697220717561696e746c79204a61646564 +1.3.6.1.2.1.6.20.1.2.3.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.44254|4x|74686569722062757420746865697220616374656420746865697220717561696e746c792064726976696e67 +1.3.6.1.2.1.6.20.1.2.4.37.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.27424|4x|746865697220666f727761726420717561696e746c7920627574206f78656e207468656972 +1.3.6.1.2.1.6.20.1.2.4.59.107.101.112.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.64001|4x|6b6570742064726976696e6720717561696e746c79207468656972206b657074206f78656e20616374656420666f7277617264207a6f6d62696573 +1.3.6.1.2.1.6.20.1.2.16.11.116.104.101.105.114.32.97.99.116.101.100.6814|4x|7468656972206163746564 +1.3.6.1.2.1.6.20.1.3.1.23.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.49596|66|49596 +1.3.6.1.2.1.6.20.1.3.1.39.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.21167|66|21167 +1.3.6.1.2.1.6.20.1.3.1.49.102.111.114.119.97.114.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.102.111.114.119.97.114.100.42037|66|42037 +1.3.6.1.2.1.6.20.1.3.2.23.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.34510|66|34510 +1.3.6.1.2.1.6.20.1.3.3.36.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.32.107.101.112.116.32.98.117.116.46667|66|46667 +1.3.6.1.2.1.6.20.1.3.3.37.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.3720|66|3720 +1.3.6.1.2.1.6.20.1.3.3.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.44254|66|44254 +1.3.6.1.2.1.6.20.1.3.4.37.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.27424|66|27424 +1.3.6.1.2.1.6.20.1.3.4.59.107.101.112.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.64001|66|64001 +1.3.6.1.2.1.6.20.1.3.16.11.116.104.101.105.114.32.97.99.116.101.100.6814|66|6814 +1.3.6.1.2.1.6.20.1.4.1.23.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.49596|66|9402 +1.3.6.1.2.1.6.20.1.4.1.39.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.21167|66|32606 +1.3.6.1.2.1.6.20.1.4.1.49.102.111.114.119.97.114.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.102.111.114.119.97.114.100.42037|66|65236 +1.3.6.1.2.1.6.20.1.4.2.23.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.34510|66|15018 +1.3.6.1.2.1.6.20.1.4.3.36.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.32.107.101.112.116.32.98.117.116.46667|66|24578 +1.3.6.1.2.1.6.20.1.4.3.37.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.3720|66|8642 +1.3.6.1.2.1.6.20.1.4.3.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.44254|66|19609 +1.3.6.1.2.1.6.20.1.4.4.37.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.27424|66|36255 +1.3.6.1.2.1.6.20.1.4.4.59.107.101.112.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.64001|66|4556 +1.3.6.1.2.1.6.20.1.4.16.11.116.104.101.105.114.32.97.99.116.101.100.6814|66|46638 +1.3.6.1.2.1.7.1.0|65|285090006 +1.3.6.1.2.1.7.2.0|65|2893774938 +1.3.6.1.2.1.7.3.0|65|774341875 +1.3.6.1.2.1.7.4.0|65|14512478 +1.3.6.1.2.1.7.5.1.1.26.210.35.174.5|64x|1ad223ae +1.3.6.1.2.1.7.5.1.1.58.118.81.108.24|64x|3a76516c +1.3.6.1.2.1.7.5.1.1.83.10.223.125.17|64x|530adf7d +1.3.6.1.2.1.7.5.1.1.129.115.70.221.12|64x|817346dd +1.3.6.1.2.1.7.5.1.1.135.101.156.213.29|64x|87659cd5 +1.3.6.1.2.1.7.5.1.1.142.172.168.114.18|64x|8eaca872 +1.3.6.1.2.1.7.5.1.1.177.77.74.252.23|64x|b14d4afc +1.3.6.1.2.1.7.5.1.1.215.232.16.205.26|64x|d7e810cd +1.3.6.1.2.1.7.5.1.1.215.246.105.236.4|64x|d7f669ec +1.3.6.1.2.1.7.5.1.1.253.23.205.128.28|64x|fd17cd80 +1.3.6.1.2.1.7.5.1.2.26.210.35.174.5|2|5 +1.3.6.1.2.1.7.5.1.2.58.118.81.108.24|2|24 +1.3.6.1.2.1.7.5.1.2.83.10.223.125.17|2|17 +1.3.6.1.2.1.7.5.1.2.129.115.70.221.12|2|12 +1.3.6.1.2.1.7.5.1.2.135.101.156.213.29|2|29 +1.3.6.1.2.1.7.5.1.2.142.172.168.114.18|2|18 +1.3.6.1.2.1.7.5.1.2.177.77.74.252.23|2|23 +1.3.6.1.2.1.7.5.1.2.215.232.16.205.26|2|26 +1.3.6.1.2.1.7.5.1.2.215.246.105.236.4|2|4 +1.3.6.1.2.1.7.5.1.2.253.23.205.128.28|2|28 +1.3.6.1.2.1.7.7.1.1.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|2|0 +1.3.6.1.2.1.7.7.1.1.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|2|1 +1.3.6.1.2.1.7.7.1.1.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|2|1 +1.3.6.1.2.1.7.7.1.1.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|2|1 +1.3.6.1.2.1.7.7.1.1.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|2|1 +1.3.6.1.2.1.7.7.1.1.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|2|2 +1.3.6.1.2.1.7.7.1.1.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|2|2 +1.3.6.1.2.1.7.7.1.1.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|2|3 +1.3.6.1.2.1.7.7.1.1.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|2|4 +1.3.6.1.2.1.7.7.1.1.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|2|4 +1.3.6.1.2.1.7.7.1.2.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|4x|7a6f6d6269657320717561696e746c7920666f72776172642064726976696e67207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|4|zombies +1.3.6.1.2.1.7.7.1.2.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|4x|717561696e746c79204a61646564206f78656e +1.3.6.1.2.1.7.7.1.2.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|4x|666f7277617264206f78656e206f78656e20666f7277617264 +1.3.6.1.2.1.7.7.1.2.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|4x|717561696e746c7920717561696e746c79206f78656e204a61646564204a61646564206163746564 +1.3.6.1.2.1.7.7.1.2.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|4x|74686569722062757420746865697220666f7277617264206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|4x|64726976696e67206b65707420746865697220746865697220666f7277617264207a6f6d62696573207468656972 +1.3.6.1.2.1.7.7.1.2.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|4|oxen +1.3.6.1.2.1.7.7.1.2.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|4x|6b657074207a6f6d626965732062757420717561696e746c79207468656972206f78656e207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|4x|7468656972206f78656e2062757420717561696e746c79204a61646564207468656972206163746564206f78656e207a6f6d62696573 +1.3.6.1.2.1.7.7.1.3.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|66|1715 +1.3.6.1.2.1.7.7.1.3.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|66|65034 +1.3.6.1.2.1.7.7.1.3.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|66|42170 +1.3.6.1.2.1.7.7.1.3.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|66|21651 +1.3.6.1.2.1.7.7.1.3.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|66|65393 +1.3.6.1.2.1.7.7.1.3.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|66|1355 +1.3.6.1.2.1.7.7.1.3.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|66|22282 +1.3.6.1.2.1.7.7.1.3.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|66|60321 +1.3.6.1.2.1.7.7.1.3.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|66|65225 +1.3.6.1.2.1.7.7.1.3.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|66|45774 +1.3.6.1.2.1.7.7.1.4.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|2|2 +1.3.6.1.2.1.7.7.1.4.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|2|1 +1.3.6.1.2.1.7.7.1.4.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|2|0 +1.3.6.1.2.1.7.7.1.4.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|2|16 +1.3.6.1.2.1.7.7.1.4.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|2|1 +1.3.6.1.2.1.7.7.1.4.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|2|4 +1.3.6.1.2.1.7.7.1.4.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|2|1 +1.3.6.1.2.1.7.7.1.4.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|2|3 +1.3.6.1.2.1.7.7.1.4.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|2|0 +1.3.6.1.2.1.7.7.1.4.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|2|0 +1.3.6.1.2.1.7.7.1.5.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|4x|717561696e746c7920717561696e746c79 +1.3.6.1.2.1.7.7.1.5.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|4|their +1.3.6.1.2.1.7.7.1.5.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|4|quaintly +1.3.6.1.2.1.7.7.1.5.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|4x|7a6f6d626965732064726976696e67 +1.3.6.1.2.1.7.7.1.5.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|4x|6b657074204a61646564207a6f6d626965732062757420746865697220666f727761726420627574 +1.3.6.1.2.1.7.7.1.5.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|4x|7a6f6d6269657320666f727761726420717561696e746c79206b657074204a61646564206163746564206163746564 +1.3.6.1.2.1.7.7.1.5.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|4x|6163746564207468656972 +1.3.6.1.2.1.7.7.1.5.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|4x|7468656972207a6f6d6269657320627574 +1.3.6.1.2.1.7.7.1.5.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|4x|6f78656e20717561696e746c79206275742074686569722062757420666f7277617264206b657074 +1.3.6.1.2.1.7.7.1.5.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|4x|6f78656e207a6f6d62696573 +1.3.6.1.2.1.7.7.1.6.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|66|12566 +1.3.6.1.2.1.7.7.1.6.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|66|15814 +1.3.6.1.2.1.7.7.1.6.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|66|54083 +1.3.6.1.2.1.7.7.1.6.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|66|47644 +1.3.6.1.2.1.7.7.1.6.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|66|24133 +1.3.6.1.2.1.7.7.1.6.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|66|41439 +1.3.6.1.2.1.7.7.1.6.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|66|17304 +1.3.6.1.2.1.7.7.1.6.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|66|38725 +1.3.6.1.2.1.7.7.1.6.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|66|12376 +1.3.6.1.2.1.7.7.1.6.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|66|186 +1.3.6.1.2.1.7.7.1.7.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|66|28428 +1.3.6.1.2.1.7.7.1.7.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|66|8857 +1.3.6.1.2.1.7.7.1.7.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|66|13191 +1.3.6.1.2.1.7.7.1.7.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|66|33055 +1.3.6.1.2.1.7.7.1.7.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|66|46225 +1.3.6.1.2.1.7.7.1.7.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|66|13974 +1.3.6.1.2.1.7.7.1.7.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|66|43555 +1.3.6.1.2.1.7.7.1.7.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|66|28192 +1.3.6.1.2.1.7.7.1.7.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|66|54947 +1.3.6.1.2.1.7.7.1.7.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|66|51238 +1.3.6.1.2.1.7.7.1.8.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|66|25599 +1.3.6.1.2.1.7.7.1.8.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|66|11555 +1.3.6.1.2.1.7.7.1.8.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|66|53574 +1.3.6.1.2.1.7.7.1.8.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|66|59807 +1.3.6.1.2.1.7.7.1.8.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|66|27804 +1.3.6.1.2.1.7.7.1.8.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|66|41056 +1.3.6.1.2.1.7.7.1.8.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|66|36759 +1.3.6.1.2.1.7.7.1.8.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|66|14424 +1.3.6.1.2.1.7.7.1.8.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|66|25820 +1.3.6.1.2.1.7.7.1.8.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|66|17972 +1.3.6.1.2.1.7.8.0|70|16186554651938255883 +1.3.6.1.2.1.7.9.0|70|12715263144235706931 +1.3.6.1.2.1.31.1.1.1.1.3|4x|65746830 +1.3.6.1.2.1.31.1.1.1.1.4|4x|65746831 +1.3.6.1.2.1.31.1.1.1.2.3|65|2073885201 +1.3.6.1.2.1.31.1.1.1.2.4|63|680735109 +1.3.6.1.2.1.31.1.1.1.3.3|65|2360598543 +1.3.6.1.2.1.31.1.1.1.3.4|63|1379245347 +1.3.6.1.2.1.31.1.1.1.4.3|65|3057530867 +1.3.6.1.2.1.31.1.1.1.4.4|63|3465094787 +1.3.6.1.2.1.31.1.1.1.5.3|65|2179882173 +1.3.6.1.2.1.31.1.1.1.5.4|63|2382544032 +1.3.6.1.2.1.31.1.1.1.6.3|70|1651315884051108360 +1.3.6.1.2.1.31.1.1.1.6.4|70|17802351026037375626 +1.3.6.1.2.1.31.1.1.1.7.3|70|4118331899856360821 +1.3.6.1.2.1.31.1.1.1.7.4|70|5035543605001113801 +1.3.6.1.2.1.31.1.1.1.8.3|70|11202384861768477444 +1.3.6.1.2.1.31.1.1.1.8.4|70|15115622675597428561 +1.3.6.1.2.1.31.1.1.1.9.3|70|13724057965262453488 +1.3.6.1.2.1.31.1.1.1.9.4|70|16118377523421981439 +1.3.6.1.2.1.31.1.1.1.10.3|70|9166794218122954960 +1.3.6.1.2.1.31.1.1.1.10.4|70|6581757051419162038 +1.3.6.1.2.1.31.1.1.1.11.3|70|2439612559439460994 +1.3.6.1.2.1.31.1.1.1.11.4|70|16302330143146664801 +1.3.6.1.2.1.31.1.1.1.12.3|70|17878080564905640091 +1.3.6.1.2.1.31.1.1.1.12.4|70|11809060028680131634 +1.3.6.1.2.1.31.1.1.1.13.3|70|12770683221480416955 +1.3.6.1.2.1.31.1.1.1.13.4|70|14541210036993170957 +1.3.6.1.2.1.31.1.1.1.14.3|2|1 +1.3.6.1.2.1.31.1.1.1.14.4|2|2 +1.3.6.1.2.1.31.1.1.1.15.3|66|524857806 +1.3.6.1.2.1.31.1.1.1.15.4|66|2640575967 +1.3.6.1.2.1.31.1.1.1.16.3|2|1 +1.3.6.1.2.1.31.1.1.1.16.4|2|1 +1.3.6.1.2.1.31.1.1.1.17.3|2|2 +1.3.6.1.2.1.31.1.1.1.17.4|2|2 +1.3.6.1.2.1.31.1.1.1.18.3|4x|717561696e746c79207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.2.1.31.1.1.1.18.4|4x|717561696e746c792062757420717561696e746c7920717561696e746c79 +1.3.6.1.2.1.31.1.1.1.19.3|64|1534827809 +1.3.6.1.2.1.31.1.1.1.19.4|67|3250977542 +1.3.6.1.2.1.31.1.2.1.1.0.15|2|0 +1.3.6.1.2.1.31.1.2.1.1.6.12|2|6 +1.3.6.1.2.1.31.1.2.1.1.11.12|2|11 +1.3.6.1.2.1.31.1.2.1.1.15.3|2|15 +1.3.6.1.2.1.31.1.2.1.1.15.30|2|15 +1.3.6.1.2.1.31.1.2.1.1.20.25|2|20 +1.3.6.1.2.1.31.1.2.1.1.20.30|2|20 +1.3.6.1.2.1.31.1.2.1.1.24.3|2|24 +1.3.6.1.2.1.31.1.2.1.1.24.8|2|24 +1.3.6.1.2.1.31.1.2.1.1.28.22|2|28 +1.3.6.1.2.1.31.1.2.1.2.0.15|2|15 +1.3.6.1.2.1.31.1.2.1.2.6.12|2|12 +1.3.6.1.2.1.31.1.2.1.2.11.12|2|12 +1.3.6.1.2.1.31.1.2.1.2.15.3|2|3 +1.3.6.1.2.1.31.1.2.1.2.15.30|2|30 +1.3.6.1.2.1.31.1.2.1.2.20.25|2|25 +1.3.6.1.2.1.31.1.2.1.2.20.30|2|30 +1.3.6.1.2.1.31.1.2.1.2.24.3|2|3 +1.3.6.1.2.1.31.1.2.1.2.24.8|2|8 +1.3.6.1.2.1.31.1.2.1.2.28.22|2|22 +1.3.6.1.2.1.31.1.2.1.3.0.15|2|2 +1.3.6.1.2.1.31.1.2.1.3.6.12|2|5 +1.3.6.1.2.1.31.1.2.1.3.11.12|2|0 +1.3.6.1.2.1.31.1.2.1.3.15.3|2|4 +1.3.6.1.2.1.31.1.2.1.3.15.30|2|2 +1.3.6.1.2.1.31.1.2.1.3.20.25|2|0 +1.3.6.1.2.1.31.1.2.1.3.20.30|2|3 +1.3.6.1.2.1.31.1.2.1.3.24.3|2|3 +1.3.6.1.2.1.31.1.2.1.3.24.8|2|4 +1.3.6.1.2.1.31.1.2.1.3.28.22|2|5 +1.3.6.1.2.1.31.1.3.1.1.2|2|22 +1.3.6.1.2.1.31.1.3.1.1.5|2|5 +1.3.6.1.2.1.31.1.3.1.1.7|2|11 +1.3.6.1.2.1.31.1.3.1.1.8|2|28 +1.3.6.1.2.1.31.1.3.1.1.14|2|17 +1.3.6.1.2.1.31.1.3.1.1.20|2|2 +1.3.6.1.2.1.31.1.3.1.1.25|2|25 +1.3.6.1.2.1.31.1.3.1.2.2|2|1 +1.3.6.1.2.1.31.1.3.1.2.5|2|2 +1.3.6.1.2.1.31.1.3.1.2.7|2|1 +1.3.6.1.2.1.31.1.3.1.2.8|2|1 +1.3.6.1.2.1.31.1.3.1.2.14|2|2 +1.3.6.1.2.1.31.1.3.1.2.20|2|2 +1.3.6.1.2.1.31.1.3.1.2.25|2|2 +1.3.6.1.2.1.31.1.3.1.3.2|6|1.3.6.1.3.3.221.250.215.141.41.14.244.67 +1.3.6.1.2.1.31.1.3.1.3.5|6|1.3.6.1.3 +1.3.6.1.2.1.31.1.3.1.3.7|6|1.3.6.1.3.82.193.48.87.252.209.114.44.241 +1.3.6.1.2.1.31.1.3.1.3.8|6|1.3.6.1.3.242.187.192.66.211.66.188.244.254 +1.3.6.1.2.1.31.1.3.1.3.14|6|1.3.6.1.3.151.19.40.38.149.190.56.39 +1.3.6.1.2.1.31.1.3.1.3.20|6|1.3.6.1.3.82.216.166.94.141.155.222.104.111 +1.3.6.1.2.1.31.1.3.1.3.25|6|1.3.6.1.3.13.142.130.103 +1.3.6.1.2.1.31.1.3.1.4.2|2|6 +1.3.6.1.2.1.31.1.3.1.4.5|2|2 +1.3.6.1.2.1.31.1.3.1.4.7|2|7 +1.3.6.1.2.1.31.1.3.1.4.8|2|5 +1.3.6.1.2.1.31.1.3.1.4.14|2|4 +1.3.6.1.2.1.31.1.3.1.4.20|2|6 +1.3.6.1.2.1.31.1.3.1.4.25|2|7 +1.3.6.1.2.1.31.1.3.1.5.2|6|1.3.6.1.3.202.124.40.237.7 +1.3.6.1.2.1.31.1.3.1.5.5|6|1.3.6.1.3.245.108.45.208.100 +1.3.6.1.2.1.31.1.3.1.5.7|6|1.3.6.1.3.106.175.178.15.71.109.161.186.237 +1.3.6.1.2.1.31.1.3.1.5.8|6|1.3.6.1.3.97 +1.3.6.1.2.1.31.1.3.1.5.14|6|1.3.6.1.3.127.247 +1.3.6.1.2.1.31.1.3.1.5.20|6|1.3.6.1.3.200.248.87.51.234.190 +1.3.6.1.2.1.31.1.3.1.5.25|6|1.3.6.1.3.197.5.93.155 +1.3.6.1.2.1.31.1.3.1.6.2|4x|4a6164656420717561696e746c792064726976696e67 +1.3.6.1.2.1.31.1.3.1.6.5|4x|6f78656e207468656972207a6f6d6269657320627574 +1.3.6.1.2.1.31.1.3.1.6.7|4x|6275742062757420666f727761726420666f72776172642064726976696e67 +1.3.6.1.2.1.31.1.3.1.6.8|4x|6f78656e2064726976696e6720717561696e746c79206b657074206b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.2.1.31.1.3.1.6.14|4x|717561696e746c79207468656972206b657074204a61646564 +1.3.6.1.2.1.31.1.3.1.6.20|4x|666f72776172642064726976696e67206b657074207468656972206b657074206b65707420616374656420627574207a6f6d62696573 +1.3.6.1.2.1.31.1.3.1.6.25|4x|666f727761726420746865697220627574206b65707420666f7277617264206f78656e204a61646564206163746564 +1.3.6.1.2.1.31.1.4.1.1.1.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.2.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.3.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.7.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.14.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.15.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.23.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.27.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.29.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.31.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.2.1.1.18|2|3 +1.3.6.1.2.1.31.1.4.1.2.2.1.18|2|6 +1.3.6.1.2.1.31.1.4.1.2.3.1.18|2|0 +1.3.6.1.2.1.31.1.4.1.2.7.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.2.14.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.2.15.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.2.23.1.18|2|0 +1.3.6.1.2.1.31.1.4.1.2.27.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.2.29.1.18|2|4 +1.3.6.1.2.1.31.1.4.1.2.31.1.18|2|4 +1.3.6.1.2.1.31.1.4.1.3.1.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.3.2.1.18|2|3 +1.3.6.1.2.1.31.1.4.1.3.3.1.18|2|3 +1.3.6.1.2.1.31.1.4.1.3.7.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.3.14.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.3.15.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.3.23.1.18|2|3 +1.3.6.1.2.1.31.1.4.1.3.27.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.3.29.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.3.31.1.18|2|2 +1.3.6.1.2.1.31.1.5.0|67|1551611145 +1.3.6.1.2.1.31.1.6.0|67|2088517883 +1.3.6.1.4.1.232.1.2.2.1.1.1.0|2|0 +1.3.6.1.4.1.232.1.2.2.1.1.1.4|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.1.6|2|6 +1.3.6.1.4.1.232.1.2.2.1.1.1.8|2|8 +1.3.6.1.4.1.232.1.2.2.1.1.1.13|2|13 +1.3.6.1.4.1.232.1.2.2.1.1.1.15|2|15 +1.3.6.1.4.1.232.1.2.2.1.1.1.26|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.1.27|2|27 +1.3.6.1.4.1.232.1.2.2.1.1.2.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.2.4|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.2.6|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.2.8|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.2.13|2|6 +1.3.6.1.4.1.232.1.2.2.1.1.2.15|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.2.26|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.2.27|2|0 +1.3.6.1.4.1.232.1.2.2.1.1.3.0|4x|6b657074206f78656e207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.3.4|4x|6163746564207a6f6d62696573206b657074206f78656e20717561696e746c792064726976696e6720616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.3.6|4x|666f7277617264206f78656e207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.3.8|4x|6b657074207468656972204a61646564206b657074206163746564206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.3.13|4|but +1.3.6.1.4.1.232.1.2.2.1.1.3.15|4x|4a61646564207a6f6d62696573206f78656e2062757420666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.3.26|4x|666f7277617264204a61646564206b65707420666f72776172642064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.3.27|4x|746865697220627574206163746564206b657074206f78656e2061637465642064726976696e67206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.4.0|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.4.4|2|27 +1.3.6.1.4.1.232.1.2.2.1.1.4.6|2|30 +1.3.6.1.4.1.232.1.2.2.1.1.4.8|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.4.13|2|0 +1.3.6.1.4.1.232.1.2.2.1.1.4.15|2|13 +1.3.6.1.4.1.232.1.2.2.1.1.4.26|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.4.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.5.0|2|22 +1.3.6.1.4.1.232.1.2.2.1.1.5.4|2|29 +1.3.6.1.4.1.232.1.2.2.1.1.5.6|2|31 +1.3.6.1.4.1.232.1.2.2.1.1.5.8|2|13 +1.3.6.1.4.1.232.1.2.2.1.1.5.13|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.5.15|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.5.26|2|21 +1.3.6.1.4.1.232.1.2.2.1.1.5.27|2|31 +1.3.6.1.4.1.232.1.2.2.1.1.6.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.6.4|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.6.6|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.6.8|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.6.13|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.6.15|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.6.26|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.6.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.7.0|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.7.4|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.7.6|2|24 +1.3.6.1.4.1.232.1.2.2.1.1.7.8|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.7.13|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.7.15|2|23 +1.3.6.1.4.1.232.1.2.2.1.1.7.26|2|30 +1.3.6.1.4.1.232.1.2.2.1.1.7.27|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.8.0|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.8.4|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.8.6|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.8.8|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.8.13|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.8.15|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.8.26|2|8 +1.3.6.1.4.1.232.1.2.2.1.1.8.27|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.9.0|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.9.4|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.9.6|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.9.8|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.9.13|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.9.15|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.9.26|2|12 +1.3.6.1.4.1.232.1.2.2.1.1.9.27|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.10.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.10.4|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.6|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.8|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.13|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.15|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.26|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.11.0|4|their +1.3.6.1.4.1.232.1.2.2.1.1.11.4|4x|666f727761726420627574206f78656e204a61646564206b657074206f78656e2064726976696e67206163746564207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.11.6|4x|6b657074206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.11.8|4x|666f727761726420616374656420717561696e746c7920746865697220627574207a6f6d62696573207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.11.13|4x|6275742062757420666f72776172642062757420717561696e746c79207468656972207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.11.15|4x|627574206b6570742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.11.26|4|oxen +1.3.6.1.4.1.232.1.2.2.1.1.11.27|4x|6b657074206275742064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.12.0|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.12.4|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.12.6|2|6 +1.3.6.1.4.1.232.1.2.2.1.1.12.8|2|14 +1.3.6.1.4.1.232.1.2.2.1.1.12.13|2|14 +1.3.6.1.4.1.232.1.2.2.1.1.12.15|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.12.26|2|12 +1.3.6.1.4.1.232.1.2.2.1.1.12.27|2|9 +1.3.6.1.4.1.232.1.2.2.1.1.13.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.13.4|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.13.6|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.13.8|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.13.13|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.13.15|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.13.26|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.13.27|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.14.0|4x|6f78656e206b657074206b65707420666f7277617264207468656972204a6164656420717561696e746c7920616374656420627574 +1.3.6.1.4.1.232.1.2.2.1.1.14.4|4x|64726976696e672064726976696e67204a6164656420666f7277617264204a61646564207a6f6d626965732064726976696e67207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.14.6|4x|627574207a6f6d6269657320666f7277617264206f78656e204a6164656420666f7277617264206f78656e +1.3.6.1.4.1.232.1.2.2.1.1.14.8|4x|4a6164656420666f7277617264206f78656e20627574206b6570742064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.14.13|4x|746865697220627574206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.14.15|4x|717561696e746c7920746865697220717561696e746c79204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.14.26|4x|6b657074207a6f6d62696573207a6f6d62696573206275742064726976696e672061637465642062757420627574206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.14.27|4x|717561696e746c79204a61646564207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.15.0|2|0 +1.3.6.1.4.1.232.1.2.2.1.1.15.4|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.15.6|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.15.8|2|27 +1.3.6.1.4.1.232.1.2.2.1.1.15.13|2|21 +1.3.6.1.4.1.232.1.2.2.1.1.15.15|2|17 +1.3.6.1.4.1.232.1.2.2.1.1.15.26|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.15.27|2|17 +1.3.6.1.4.1.232.1.2.2.1.1.16.0|4x|666f727761726420666f7277617264204a61646564206b6570742064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.16.4|4x|7468656972204a61646564206b657074207468656972207a6f6d626965732064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.16.6|4x|666f7277617264207a6f6d62696573206163746564204a6164656420666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.16.8|4x|627574206f78656e206163746564204a616465642064726976696e6720666f72776172642061637465642064726976696e67207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.16.13|4x|6b657074207a6f6d62696573207a6f6d626965732064726976696e672064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.16.15|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.16.26|4x|746865697220666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.16.27|4x|666f727761726420717561696e746c79206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.17.0|4x|6b65707420717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.17.4|4x|627574207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.17.6|4x|64726976696e67204a61646564206b65707420666f727761726420717561696e746c79206f78656e207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.17.8|4x|64726976696e6720616374656420627574 +1.3.6.1.4.1.232.1.2.2.1.1.17.13|4x|7a6f6d62696573206b65707420717561696e746c7920717561696e746c79206163746564204a61646564206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.17.15|4x|717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.17.26|4x|6f78656e20746865697220627574206275742074686569722064726976696e67206b657074207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.17.27|4x|7468656972206b6570742064726976696e67204a61646564207a6f6d6269657320627574 +1.3.6.1.4.1.232.1.2.2.1.1.18.0|4x|7a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.18.4|4x|746865697220746865697220616374656420627574207a6f6d62696573207a6f6d6269657320666f727761726420717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.18.6|4x|4a61646564204a6164656420717561696e746c79206f78656e207468656972206163746564207a6f6d6269657320666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.18.8|4x|6f78656e206b65707420666f7277617264206b6570742064726976696e67206163746564206f78656e206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.18.13|4x|4a61646564204a61646564207468656972207468656972206b6570742064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.18.15|4|forward +1.3.6.1.4.1.232.1.2.2.1.1.18.26|4x|627574206163746564207468656972207a6f6d62696573207468656972206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.18.27|4x|7468656972206f78656e20616374656420627574204a616465642064726976696e67207a6f6d6269657320627574 +1.3.6.1.4.1.232.1.2.2.1.1.19.0|4|quaintly +1.3.6.1.4.1.232.1.2.2.1.1.19.4|4x|627574204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.19.6|4x|7a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.19.8|4x|717561696e746c792064726976696e67206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.19.13|4x|4a616465642064726976696e6720627574206f78656e206b6570742062757420627574 +1.3.6.1.4.1.232.1.2.2.1.1.19.15|4x|6f78656e207a6f6d62696573206163746564207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.232.1.2.2.1.1.19.26|4x|4a6164656420666f727761726420717561696e746c7920666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.19.27|4x|64726976696e672064726976696e672062757420627574206f78656e207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.20.0|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.20.4|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.20.6|2|21 +1.3.6.1.4.1.232.1.2.2.1.1.20.8|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.20.13|2|8 +1.3.6.1.4.1.232.1.2.2.1.1.20.15|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.20.26|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.20.27|2|8 +1.3.6.1.4.1.232.1.2.2.1.1.21.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.21.4|2|22 +1.3.6.1.4.1.232.1.2.2.1.1.21.6|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.21.8|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.21.13|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.21.15|2|17 +1.3.6.1.4.1.232.1.2.2.1.1.21.26|2|16 +1.3.6.1.4.1.232.1.2.2.1.1.21.27|2|30 +1.3.6.1.4.1.232.1.2.2.1.1.22.0|2|12 +1.3.6.1.4.1.232.1.2.2.1.1.22.4|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.22.6|2|24 +1.3.6.1.4.1.232.1.2.2.1.1.22.8|2|9 +1.3.6.1.4.1.232.1.2.2.1.1.22.13|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.22.15|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.22.26|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.22.27|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.23.0|4x|6b657074206f78656e207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.23.4|4x|717561696e746c79206b6570742064726976696e67206163746564206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.23.6|4x|6163746564207468656972206b65707420666f7277617264206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.23.8|4x|7a6f6d62696573206b657074206f78656e206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.23.13|4x|4a61646564207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.23.15|4x|64726976696e6720717561696e746c79206f78656e206b657074207468656972206f78656e206f78656e204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.23.26|4x|6b657074206b6570742064726976696e6720627574207a6f6d6269657320627574 +1.3.6.1.4.1.232.1.2.2.1.1.23.27|4x|6f78656e207a6f6d62696573207a6f6d62696573206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.24.0|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.4|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.24.6|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.8|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.13|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.24.15|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.26|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.25.0|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.25.4|2|15 +1.3.6.1.4.1.232.1.2.2.1.1.25.6|2|24 +1.3.6.1.4.1.232.1.2.2.1.1.25.8|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.25.13|2|31 +1.3.6.1.4.1.232.1.2.2.1.1.25.15|2|24 +1.3.6.1.4.1.232.1.2.2.1.1.25.26|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.25.27|2|21 +1.3.6.1.4.1.232.1.2.2.1.1.26.0|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.26.4|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.26.6|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.26.8|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.26.13|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.26.15|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.26.26|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.26.27|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.27.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.27.4|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.27.6|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.27.8|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.27.13|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.27.15|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.27.26|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.27.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.28.0|4x|6b657074206163746564204a61646564207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.28.4|4x|7468656972207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.28.6|4x|4a61646564207a6f6d6269657320717561696e746c7920666f7277617264206b657074207a6f6d62696573204a616465642064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.28.8|4|forward +1.3.6.1.4.1.232.1.2.2.1.1.28.13|4x|4a61646564207a6f6d62696573207a6f6d62696573204a6164656420616374656420666f7277617264206b6570742064726976696e67204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.28.15|4x|666f7277617264207a6f6d62696573206f78656e20666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.28.26|4x|627574206275742062757420717561696e746c79207a6f6d62696573207468656972206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.28.27|4x|7468656972206f78656e20666f72776172642064726976696e6720717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.29.0|2|31 +1.3.6.1.4.1.232.1.2.2.1.1.29.4|2|30 +1.3.6.1.4.1.232.1.2.2.1.1.29.6|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.29.8|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.29.13|2|13 +1.3.6.1.4.1.232.1.2.2.1.1.29.15|2|17 +1.3.6.1.4.1.232.1.2.2.1.1.29.26|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.29.27|2|15 +1.3.6.1.4.1.232.1.2.2.1.1.30.0|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.30.4|2|9 +1.3.6.1.4.1.232.1.2.2.1.1.30.6|2|16 +1.3.6.1.4.1.232.1.2.2.1.1.30.8|2|16 +1.3.6.1.4.1.232.1.2.2.1.1.30.13|2|19 +1.3.6.1.4.1.232.1.2.2.1.1.30.15|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.30.26|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.30.27|2|14 +1.3.6.1.4.1.232.1.2.2.1.1.31.0|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.31.4|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.31.6|2|22 +1.3.6.1.4.1.232.1.2.2.1.1.31.8|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.31.13|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.31.15|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.31.26|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.31.27|2|27 +1.3.6.1.4.1.232.1.2.6.1|4|A04-08/12/2019 +1.3.6.1.4.1.232.2.2.2.1|4|dLPEdPBE5yKtjW9xx3 +1.3.6.1.4.1.232.2.2.4.2|4|ProLiant BL35p G1 +1.3.6.1.4.1.232.2.2.4.5.1.1.6.16|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.1.7.17|2|7 +1.3.6.1.4.1.232.2.2.4.5.1.1.7.30|2|7 +1.3.6.1.4.1.232.2.2.4.5.1.1.8.20|2|8 +1.3.6.1.4.1.232.2.2.4.5.1.1.10.4|2|10 +1.3.6.1.4.1.232.2.2.4.5.1.1.15.27|2|15 +1.3.6.1.4.1.232.2.2.4.5.1.1.20.14|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.1.21.14|2|21 +1.3.6.1.4.1.232.2.2.4.5.1.1.23.0|2|23 +1.3.6.1.4.1.232.2.2.4.5.1.1.28.20|2|28 +1.3.6.1.4.1.232.2.2.4.5.1.2.6.16|2|16 +1.3.6.1.4.1.232.2.2.4.5.1.2.7.17|2|17 +1.3.6.1.4.1.232.2.2.4.5.1.2.7.30|2|30 +1.3.6.1.4.1.232.2.2.4.5.1.2.8.20|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.2.10.4|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.2.15.27|2|27 +1.3.6.1.4.1.232.2.2.4.5.1.2.20.14|2|14 +1.3.6.1.4.1.232.2.2.4.5.1.2.21.14|2|14 +1.3.6.1.4.1.232.2.2.4.5.1.2.23.0|2|0 +1.3.6.1.4.1.232.2.2.4.5.1.2.28.20|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.3.6.16|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.3.7.17|2|30 +1.3.6.1.4.1.232.2.2.4.5.1.3.7.30|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.3.8.20|2|25 +1.3.6.1.4.1.232.2.2.4.5.1.3.10.4|2|12 +1.3.6.1.4.1.232.2.2.4.5.1.3.15.27|2|13 +1.3.6.1.4.1.232.2.2.4.5.1.3.20.14|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.3.21.14|2|0 +1.3.6.1.4.1.232.2.2.4.5.1.3.23.0|2|27 +1.3.6.1.4.1.232.2.2.4.5.1.3.28.20|2|23 +1.3.6.1.4.1.232.2.2.4.5.1.4.6.16|2|9 +1.3.6.1.4.1.232.2.2.4.5.1.4.7.17|2|9 +1.3.6.1.4.1.232.2.2.4.5.1.4.7.30|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.4.8.20|2|11 +1.3.6.1.4.1.232.2.2.4.5.1.4.10.4|2|7 +1.3.6.1.4.1.232.2.2.4.5.1.4.15.27|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.4.20.14|2|10 +1.3.6.1.4.1.232.2.2.4.5.1.4.21.14|2|12 +1.3.6.1.4.1.232.2.2.4.5.1.4.23.0|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.4.28.20|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.5.6.16|2|15 +1.3.6.1.4.1.232.2.2.4.5.1.5.7.17|2|10 +1.3.6.1.4.1.232.2.2.4.5.1.5.7.30|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.5.8.20|2|19 +1.3.6.1.4.1.232.2.2.4.5.1.5.10.4|2|31 +1.3.6.1.4.1.232.2.2.4.5.1.5.15.27|2|5 +1.3.6.1.4.1.232.2.2.4.5.1.5.20.14|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.5.21.14|2|7 +1.3.6.1.4.1.232.2.2.4.5.1.5.23.0|2|8 +1.3.6.1.4.1.232.2.2.4.5.1.5.28.20|2|12 +1.3.6.1.4.1.232.2.2.4.5.1.6.6.16|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.6.7.17|2|5 +1.3.6.1.4.1.232.2.2.4.5.1.6.7.30|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.6.8.20|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.6.10.4|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.6.15.27|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.6.20.14|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.6.21.14|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.6.23.0|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.6.28.20|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.7.6.16|4x|64726976696e672064726976696e67204a616465642062757420616374656420627574207a6f6d6269657320666f7277617264206f78656e +1.3.6.1.4.1.232.2.2.4.5.1.7.7.17|4x|6f78656e20717561696e746c79204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.7.7.30|4x|62757420717561696e746c79207a6f6d6269657320666f727761726420746865697220627574207a6f6d6269657320627574 +1.3.6.1.4.1.232.2.2.4.5.1.7.8.20|4x|64726976696e6720666f727761726420616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.7.10.4|4x|7a6f6d626965732064726976696e67206163746564204a616465642062757420627574 +1.3.6.1.4.1.232.2.2.4.5.1.7.15.27|4x|64726976696e6720717561696e746c79207a6f6d62696573206f78656e +1.3.6.1.4.1.232.2.2.4.5.1.7.20.14|4x|4a61646564206b657074206163746564207468656972 +1.3.6.1.4.1.232.2.2.4.5.1.7.21.14|4x|717561696e746c7920666f727761726420717561696e746c79206f78656e20717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.7.23.0|4x|627574204a61646564206b6570742064726976696e67 +1.3.6.1.4.1.232.2.2.4.5.1.7.28.20|4x|666f727761726420717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.8.6.16|4|Jaded +1.3.6.1.4.1.232.2.2.4.5.1.8.7.17|4x|616374656420717561696e746c79207468656972206163746564206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.8.7.30|4x|717561696e746c79207468656972 +1.3.6.1.4.1.232.2.2.4.5.1.8.8.20|4x|64726976696e67206b65707420717561696e746c7920717561696e746c79204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.8.10.4|4x|7a6f6d62696573207468656972206f78656e204a616465642064726976696e67206b65707420627574206b657074206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.8.15.27|4x|64726976696e67206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.8.20.14|4x|666f7277617264206f78656e2064726976696e67206f78656e20666f7277617264204a6164656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.8.21.14|4x|627574206f78656e2064726976696e67204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.8.23.0|4x|717561696e746c7920627574206b65707420746865697220746865697220666f7277617264206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.8.28.20|4x|746865697220666f727761726420666f727761726420717561696e746c792064726976696e67206f78656e2064726976696e67 +1.3.6.1.4.1.232.2.2.4.5.1.9.6.16|4|zombies +1.3.6.1.4.1.232.2.2.4.5.1.9.7.17|4|driving +1.3.6.1.4.1.232.2.2.4.5.1.9.7.30|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.8.20|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.10.4|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.15.27|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.20.14|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.21.14|4|zombies +1.3.6.1.4.1.232.2.2.4.5.1.9.23.0|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.28.20|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.10.6.16|4x|6b6570742064726976696e67206b657074207468656972204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.10.7.17|4x|6f78656e20616374656420717561696e746c7920717561696e746c79206275742061637465642064726976696e67 +1.3.6.1.4.1.232.2.2.4.5.1.10.7.30|4x|7a6f6d62696573207468656972206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.10.8.20|4x|7a6f6d62696573204a61646564207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.10.10.4|4x|64726976696e6720627574207468656972207a6f6d6269657320666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.10.15.27|4|Jaded +1.3.6.1.4.1.232.2.2.4.5.1.10.20.14|4x|62757420627574204a61646564206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.10.21.14|4x|4a6164656420627574207468656972204a61646564206f78656e204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.10.23.0|4x|6f78656e20717561696e746c79204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.10.28.20|4x|666f7277617264206f78656e204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.11.6.16|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.11.7.17|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.11.7.30|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.11.8.20|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.11.10.4|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.11.15.27|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.11.20.14|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.11.21.14|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.11.23.0|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.11.28.20|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.12.6.16|4|but +1.3.6.1.4.1.232.2.2.4.5.1.12.7.17|4x|666f727761726420717561696e746c7920666f7277617264204a61646564206b6570742062757420666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.12.7.30|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.12.8.20|4x|6f78656e204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.12.10.4|4x|627574204a6164656420666f72776172642061637465642064726976696e67 +1.3.6.1.4.1.232.2.2.4.5.1.12.15.27|4x|717561696e746c79204a6164656420616374656420717561696e746c79206f78656e20717561696e746c792064726976696e67207468656972206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.12.20.14|4x|666f7277617264207a6f6d62696573204a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.12.21.14|4x|6b657074206b657074206f78656e207468656972206163746564206b657074206b65707420717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.12.23.0|4x|666f7277617264207a6f6d626965732064726976696e672074686569722064726976696e67204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.12.28.20|4|Jaded +1.3.6.1.4.1.232.2.2.4.5.1.13.6.16|2|24 +1.3.6.1.4.1.232.2.2.4.5.1.13.7.17|2|31 +1.3.6.1.4.1.232.2.2.4.5.1.13.7.30|2|10 +1.3.6.1.4.1.232.2.2.4.5.1.13.8.20|2|9 +1.3.6.1.4.1.232.2.2.4.5.1.13.10.4|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.13.15.27|2|23 +1.3.6.1.4.1.232.2.2.4.5.1.13.20.14|2|27 +1.3.6.1.4.1.232.2.2.4.5.1.13.21.14|2|8 +1.3.6.1.4.1.232.2.2.4.5.1.13.23.0|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.13.28.20|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.14.6.16|2|8 +1.3.6.1.4.1.232.2.2.4.5.1.14.7.17|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.14.7.30|2|13 +1.3.6.1.4.1.232.2.2.4.5.1.14.8.20|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.14.10.4|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.14.15.27|2|0 +1.3.6.1.4.1.232.2.2.4.5.1.14.20.14|2|11 +1.3.6.1.4.1.232.2.2.4.5.1.14.21.14|2|15 +1.3.6.1.4.1.232.2.2.4.5.1.14.23.0|2|11 +1.3.6.1.4.1.232.2.2.4.5.1.14.28.20|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.15.6.16|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.15.7.17|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.15.7.30|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.15.8.20|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.15.10.4|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.15.15.27|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.15.20.14|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.15.21.14|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.15.23.0|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.15.28.20|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.16.6.16|4x|6f78656e20717561696e746c792062757420717561696e746c79206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.16.7.17|4x|717561696e746c7920717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.16.7.30|4x|4a616465642064726976696e6720717561696e746c792064726976696e6720717561696e746c7920717561696e746c7920627574 +1.3.6.1.4.1.232.2.2.4.5.1.16.8.20|4x|717561696e746c7920666f72776172642062757420627574 +1.3.6.1.4.1.232.2.2.4.5.1.16.10.4|4x|7a6f6d62696573206b65707420666f7277617264204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.16.15.27|4x|6b65707420616374656420627574207468656972207a6f6d62696573204a6164656420616374656420666f727761726420666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.16.20.14|4x|627574206f78656e20717561696e746c79206b657074206b65707420666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.16.21.14|4x|627574207468656972206b657074207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.16.23.0|4x|6b65707420717561696e746c7920666f7277617264207a6f6d6269657320717561696e746c792064726976696e67206f78656e206f78656e20717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.16.28.20|4x|7a6f6d62696573206b65707420627574 +1.3.6.1.4.1.232.2.2.4.5.1.17.6.16|4x|6f78656e2062757420717561696e746c79206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.17.7.17|4x|616374656420616374656420666f7277617264206163746564206b65707420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.17.7.30|4x|746865697220627574 +1.3.6.1.4.1.232.2.2.4.5.1.17.8.20|4x|62757420627574207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.17.10.4|4x|4a616465642064726976696e6720666f7277617264206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.17.15.27|4x|6f78656e20746865697220666f7277617264204a61646564207468656972204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.17.20.14|4|acted +1.3.6.1.4.1.232.2.2.4.5.1.17.21.14|4x|4a61646564206f78656e207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.17.23.0|4x|6b657074206163746564206163746564207a6f6d62696573207a6f6d6269657320666f7277617264206f78656e +1.3.6.1.4.1.232.2.2.4.5.1.17.28.20|4x|666f7277617264207a6f6d62696573207a6f6d62696573206f78656e20666f7277617264207a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.232.2.2.4.6.0|2|27 +1.3.6.1.4.1.232.3.2.2.1.1.1.3|2|3 +1.3.6.1.4.1.232.3.2.2.1.1.2.3|2|29 +1.3.6.1.4.1.232.3.2.2.1.1.3.3|4|kept +1.3.6.1.4.1.232.3.2.2.1.1.4.3|2|4 +1.3.6.1.4.1.232.3.2.2.1.1.5.3|2|18 +1.3.6.1.4.1.232.3.2.2.1.1.6.3|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.1.0.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.1.0.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.1.8.31|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.1.9.24|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.1.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.1.10.17|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.1.11.4|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.1.12.20|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.1.18.22|2|18 +1.3.6.1.4.1.232.3.2.5.1.1.1.23.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.2.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.2.0.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.2.8.31|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.2.9.24|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.2.9.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.2.10.17|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.2.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.2.12.20|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.2.18.22|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.2.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.3.0.2|4|but +1.3.6.1.4.1.232.3.2.5.1.1.3.0.28|4x|64726976696e67207a6f6d6269657320717561696e746c79207a6f6d62696573206b657074206b65707420627574206f78656e204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.3.8.31|4x|6b657074206f78656e20717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.232.3.2.5.1.1.3.9.24|4x|627574204a61646564206f78656e206163746564206163746564207468656972206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.3.9.28|4x|717561696e746c79207468656972204a6164656420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.3.10.17|4x|6163746564204a616465642062757420666f7277617264207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.3.11.4|4|zombies +1.3.6.1.4.1.232.3.2.5.1.1.3.12.20|4x|666f7277617264206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.3.18.22|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.3.23.2|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.0.2|4x|6b65707420627574 +1.3.6.1.4.1.232.3.2.5.1.1.4.0.28|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.8.31|4|their +1.3.6.1.4.1.232.3.2.5.1.1.4.9.24|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.4.9.28|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.4.10.17|4|driving +1.3.6.1.4.1.232.3.2.5.1.1.4.11.4|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.4.12.20|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.18.22|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.4.23.2|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.5.0.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.5.0.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.5.8.31|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.5.9.24|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.5.9.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.5.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.5.11.4|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.5.12.20|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.5.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.5.23.2|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.6.0.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.0.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.8.31|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.9.24|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.9.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.10.17|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.11.4|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.6.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.6.23.2|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.7.0.2|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.7.0.28|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.7.8.31|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.7.9.24|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.7.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.7.10.17|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.7.11.4|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.7.12.20|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.7.18.22|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.7.23.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.8.0.2|65|546389013 +1.3.6.1.4.1.232.3.2.5.1.1.8.0.28|65|2306609150 +1.3.6.1.4.1.232.3.2.5.1.1.8.8.31|65|1183142468 +1.3.6.1.4.1.232.3.2.5.1.1.8.9.24|65|1524544657 +1.3.6.1.4.1.232.3.2.5.1.1.8.9.28|65|1257847199 +1.3.6.1.4.1.232.3.2.5.1.1.8.10.17|65|4186257677 +1.3.6.1.4.1.232.3.2.5.1.1.8.11.4|65|75536387 +1.3.6.1.4.1.232.3.2.5.1.1.8.12.20|65|3025977095 +1.3.6.1.4.1.232.3.2.5.1.1.8.18.22|65|3599100832 +1.3.6.1.4.1.232.3.2.5.1.1.8.23.2|65|3165071379 +1.3.6.1.4.1.232.3.2.5.1.1.9.0.2|65|3922822364 +1.3.6.1.4.1.232.3.2.5.1.1.9.0.28|65|3234904649 +1.3.6.1.4.1.232.3.2.5.1.1.9.8.31|65|1901171918 +1.3.6.1.4.1.232.3.2.5.1.1.9.9.24|65|2263188134 +1.3.6.1.4.1.232.3.2.5.1.1.9.9.28|65|2061135672 +1.3.6.1.4.1.232.3.2.5.1.1.9.10.17|65|398777741 +1.3.6.1.4.1.232.3.2.5.1.1.9.11.4|65|1272452264 +1.3.6.1.4.1.232.3.2.5.1.1.9.12.20|65|622055389 +1.3.6.1.4.1.232.3.2.5.1.1.9.18.22|65|4131783907 +1.3.6.1.4.1.232.3.2.5.1.1.9.23.2|65|2234487753 +1.3.6.1.4.1.232.3.2.5.1.1.10.0.2|65|1741338020 +1.3.6.1.4.1.232.3.2.5.1.1.10.0.28|65|3759438885 +1.3.6.1.4.1.232.3.2.5.1.1.10.8.31|65|282836214 +1.3.6.1.4.1.232.3.2.5.1.1.10.9.24|65|2190162781 +1.3.6.1.4.1.232.3.2.5.1.1.10.9.28|65|517385251 +1.3.6.1.4.1.232.3.2.5.1.1.10.10.17|65|3377639315 +1.3.6.1.4.1.232.3.2.5.1.1.10.11.4|65|479612 +1.3.6.1.4.1.232.3.2.5.1.1.10.12.20|65|2364763386 +1.3.6.1.4.1.232.3.2.5.1.1.10.18.22|65|1540422714 +1.3.6.1.4.1.232.3.2.5.1.1.10.23.2|65|3133475512 +1.3.6.1.4.1.232.3.2.5.1.1.11.0.2|65|1181504081 +1.3.6.1.4.1.232.3.2.5.1.1.11.0.28|65|2491173497 +1.3.6.1.4.1.232.3.2.5.1.1.11.8.31|65|3042764446 +1.3.6.1.4.1.232.3.2.5.1.1.11.9.24|65|121116179 +1.3.6.1.4.1.232.3.2.5.1.1.11.9.28|65|2585114004 +1.3.6.1.4.1.232.3.2.5.1.1.11.10.17|65|715864194 +1.3.6.1.4.1.232.3.2.5.1.1.11.11.4|65|218650245 +1.3.6.1.4.1.232.3.2.5.1.1.11.12.20|65|598167615 +1.3.6.1.4.1.232.3.2.5.1.1.11.18.22|65|1149109305 +1.3.6.1.4.1.232.3.2.5.1.1.11.23.2|65|75304400 +1.3.6.1.4.1.232.3.2.5.1.1.12.0.2|65|221444980 +1.3.6.1.4.1.232.3.2.5.1.1.12.0.28|65|1337358939 +1.3.6.1.4.1.232.3.2.5.1.1.12.8.31|65|2463188951 +1.3.6.1.4.1.232.3.2.5.1.1.12.9.24|65|2136256124 +1.3.6.1.4.1.232.3.2.5.1.1.12.9.28|65|598517409 +1.3.6.1.4.1.232.3.2.5.1.1.12.10.17|65|2109086161 +1.3.6.1.4.1.232.3.2.5.1.1.12.11.4|65|2106962369 +1.3.6.1.4.1.232.3.2.5.1.1.12.12.20|65|17908343 +1.3.6.1.4.1.232.3.2.5.1.1.12.18.22|65|3202247013 +1.3.6.1.4.1.232.3.2.5.1.1.12.23.2|65|1937432163 +1.3.6.1.4.1.232.3.2.5.1.1.13.0.2|65|1734902147 +1.3.6.1.4.1.232.3.2.5.1.1.13.0.28|65|2411164755 +1.3.6.1.4.1.232.3.2.5.1.1.13.8.31|65|1781992790 +1.3.6.1.4.1.232.3.2.5.1.1.13.9.24|65|1981586934 +1.3.6.1.4.1.232.3.2.5.1.1.13.9.28|65|2050290019 +1.3.6.1.4.1.232.3.2.5.1.1.13.10.17|65|54796801 +1.3.6.1.4.1.232.3.2.5.1.1.13.11.4|65|2725543544 +1.3.6.1.4.1.232.3.2.5.1.1.13.12.20|65|3858302419 +1.3.6.1.4.1.232.3.2.5.1.1.13.18.22|65|2732286636 +1.3.6.1.4.1.232.3.2.5.1.1.13.23.2|65|2945232736 +1.3.6.1.4.1.232.3.2.5.1.1.14.0.2|65|2713126212 +1.3.6.1.4.1.232.3.2.5.1.1.14.0.28|65|4022715091 +1.3.6.1.4.1.232.3.2.5.1.1.14.8.31|65|198579111 +1.3.6.1.4.1.232.3.2.5.1.1.14.9.24|65|3580970404 +1.3.6.1.4.1.232.3.2.5.1.1.14.9.28|65|2999485097 +1.3.6.1.4.1.232.3.2.5.1.1.14.10.17|65|2324402321 +1.3.6.1.4.1.232.3.2.5.1.1.14.11.4|65|2167827525 +1.3.6.1.4.1.232.3.2.5.1.1.14.12.20|65|1503274929 +1.3.6.1.4.1.232.3.2.5.1.1.14.18.22|65|26779464 +1.3.6.1.4.1.232.3.2.5.1.1.14.23.2|65|1752319260 +1.3.6.1.4.1.232.3.2.5.1.1.15.0.2|65|1062892646 +1.3.6.1.4.1.232.3.2.5.1.1.15.0.28|65|2137439866 +1.3.6.1.4.1.232.3.2.5.1.1.15.8.31|65|213350178 +1.3.6.1.4.1.232.3.2.5.1.1.15.9.24|65|4098083155 +1.3.6.1.4.1.232.3.2.5.1.1.15.9.28|65|985304361 +1.3.6.1.4.1.232.3.2.5.1.1.15.10.17|65|3136387282 +1.3.6.1.4.1.232.3.2.5.1.1.15.11.4|65|1635061208 +1.3.6.1.4.1.232.3.2.5.1.1.15.12.20|65|3105090698 +1.3.6.1.4.1.232.3.2.5.1.1.15.18.22|65|3840894212 +1.3.6.1.4.1.232.3.2.5.1.1.15.23.2|65|3123363785 +1.3.6.1.4.1.232.3.2.5.1.1.16.0.2|65|2747324891 +1.3.6.1.4.1.232.3.2.5.1.1.16.0.28|65|3044303644 +1.3.6.1.4.1.232.3.2.5.1.1.16.8.31|65|3215286354 +1.3.6.1.4.1.232.3.2.5.1.1.16.9.24|65|329453703 +1.3.6.1.4.1.232.3.2.5.1.1.16.9.28|65|355147129 +1.3.6.1.4.1.232.3.2.5.1.1.16.10.17|65|3578386746 +1.3.6.1.4.1.232.3.2.5.1.1.16.11.4|65|1151157210 +1.3.6.1.4.1.232.3.2.5.1.1.16.12.20|65|2541753754 +1.3.6.1.4.1.232.3.2.5.1.1.16.18.22|65|3280239987 +1.3.6.1.4.1.232.3.2.5.1.1.16.23.2|65|171855281 +1.3.6.1.4.1.232.3.2.5.1.1.17.0.2|65|881428009 +1.3.6.1.4.1.232.3.2.5.1.1.17.0.28|65|2765906854 +1.3.6.1.4.1.232.3.2.5.1.1.17.8.31|65|2123221895 +1.3.6.1.4.1.232.3.2.5.1.1.17.9.24|65|3245302703 +1.3.6.1.4.1.232.3.2.5.1.1.17.9.28|65|1306227086 +1.3.6.1.4.1.232.3.2.5.1.1.17.10.17|65|3453715456 +1.3.6.1.4.1.232.3.2.5.1.1.17.11.4|65|214914874 +1.3.6.1.4.1.232.3.2.5.1.1.17.12.20|65|1195947737 +1.3.6.1.4.1.232.3.2.5.1.1.17.18.22|65|1182048622 +1.3.6.1.4.1.232.3.2.5.1.1.17.23.2|65|523297749 +1.3.6.1.4.1.232.3.2.5.1.1.18.0.2|65|1332352920 +1.3.6.1.4.1.232.3.2.5.1.1.18.0.28|65|2533263787 +1.3.6.1.4.1.232.3.2.5.1.1.18.8.31|65|1720285197 +1.3.6.1.4.1.232.3.2.5.1.1.18.9.24|65|4245380544 +1.3.6.1.4.1.232.3.2.5.1.1.18.9.28|65|1910909181 +1.3.6.1.4.1.232.3.2.5.1.1.18.10.17|65|2245241934 +1.3.6.1.4.1.232.3.2.5.1.1.18.11.4|65|3205736251 +1.3.6.1.4.1.232.3.2.5.1.1.18.12.20|65|803739619 +1.3.6.1.4.1.232.3.2.5.1.1.18.18.22|65|1158056501 +1.3.6.1.4.1.232.3.2.5.1.1.18.23.2|65|916346018 +1.3.6.1.4.1.232.3.2.5.1.1.19.0.2|65|2610456196 +1.3.6.1.4.1.232.3.2.5.1.1.19.0.28|65|40996530 +1.3.6.1.4.1.232.3.2.5.1.1.19.8.31|65|2048619498 +1.3.6.1.4.1.232.3.2.5.1.1.19.9.24|65|1201236747 +1.3.6.1.4.1.232.3.2.5.1.1.19.9.28|65|2887398693 +1.3.6.1.4.1.232.3.2.5.1.1.19.10.17|65|2142351834 +1.3.6.1.4.1.232.3.2.5.1.1.19.11.4|65|4024458378 +1.3.6.1.4.1.232.3.2.5.1.1.19.12.20|65|566543450 +1.3.6.1.4.1.232.3.2.5.1.1.19.18.22|65|3519743513 +1.3.6.1.4.1.232.3.2.5.1.1.19.23.2|65|3459523029 +1.3.6.1.4.1.232.3.2.5.1.1.20.0.2|65|43264877 +1.3.6.1.4.1.232.3.2.5.1.1.20.0.28|65|3981252740 +1.3.6.1.4.1.232.3.2.5.1.1.20.8.31|65|2390762949 +1.3.6.1.4.1.232.3.2.5.1.1.20.9.24|65|3181479601 +1.3.6.1.4.1.232.3.2.5.1.1.20.9.28|65|3311503997 +1.3.6.1.4.1.232.3.2.5.1.1.20.10.17|65|2897038505 +1.3.6.1.4.1.232.3.2.5.1.1.20.11.4|65|165941602 +1.3.6.1.4.1.232.3.2.5.1.1.20.12.20|65|953987731 +1.3.6.1.4.1.232.3.2.5.1.1.20.18.22|65|1795341671 +1.3.6.1.4.1.232.3.2.5.1.1.20.23.2|65|2277575523 +1.3.6.1.4.1.232.3.2.5.1.1.21.0.2|65|1316077395 +1.3.6.1.4.1.232.3.2.5.1.1.21.0.28|65|3677820263 +1.3.6.1.4.1.232.3.2.5.1.1.21.8.31|65|2612770528 +1.3.6.1.4.1.232.3.2.5.1.1.21.9.24|65|1027709744 +1.3.6.1.4.1.232.3.2.5.1.1.21.9.28|65|3051589898 +1.3.6.1.4.1.232.3.2.5.1.1.21.10.17|65|2370106598 +1.3.6.1.4.1.232.3.2.5.1.1.21.11.4|65|671178955 +1.3.6.1.4.1.232.3.2.5.1.1.21.12.20|65|1481115055 +1.3.6.1.4.1.232.3.2.5.1.1.21.18.22|65|908153265 +1.3.6.1.4.1.232.3.2.5.1.1.21.23.2|65|2033546701 +1.3.6.1.4.1.232.3.2.5.1.1.22.0.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.22.0.28|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.22.8.31|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.22.9.24|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.22.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.22.10.17|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.22.11.4|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.22.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.22.18.22|2|18 +1.3.6.1.4.1.232.3.2.5.1.1.22.23.2|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.23.0.2|66|2272833932 +1.3.6.1.4.1.232.3.2.5.1.1.23.0.28|66|238315886 +1.3.6.1.4.1.232.3.2.5.1.1.23.8.31|66|2332345108 +1.3.6.1.4.1.232.3.2.5.1.1.23.9.24|66|1722467098 +1.3.6.1.4.1.232.3.2.5.1.1.23.9.28|66|3365552990 +1.3.6.1.4.1.232.3.2.5.1.1.23.10.17|66|814295671 +1.3.6.1.4.1.232.3.2.5.1.1.23.11.4|66|2798738056 +1.3.6.1.4.1.232.3.2.5.1.1.23.12.20|66|3016608692 +1.3.6.1.4.1.232.3.2.5.1.1.23.18.22|66|2609823405 +1.3.6.1.4.1.232.3.2.5.1.1.23.23.2|66|2243357455 +1.3.6.1.4.1.232.3.2.5.1.1.24.0.2|66|1195544543 +1.3.6.1.4.1.232.3.2.5.1.1.24.0.28|66|1262729680 +1.3.6.1.4.1.232.3.2.5.1.1.24.8.31|66|1186252601 +1.3.6.1.4.1.232.3.2.5.1.1.24.9.24|66|1166010901 +1.3.6.1.4.1.232.3.2.5.1.1.24.9.28|66|2981821918 +1.3.6.1.4.1.232.3.2.5.1.1.24.10.17|66|1339371079 +1.3.6.1.4.1.232.3.2.5.1.1.24.11.4|66|1286022879 +1.3.6.1.4.1.232.3.2.5.1.1.24.12.20|66|3351053968 +1.3.6.1.4.1.232.3.2.5.1.1.24.18.22|66|2312438865 +1.3.6.1.4.1.232.3.2.5.1.1.24.23.2|66|4073921079 +1.3.6.1.4.1.232.3.2.5.1.1.25.0.2|66|1571443607 +1.3.6.1.4.1.232.3.2.5.1.1.25.0.28|66|3747927012 +1.3.6.1.4.1.232.3.2.5.1.1.25.8.31|66|3027271760 +1.3.6.1.4.1.232.3.2.5.1.1.25.9.24|66|3819076816 +1.3.6.1.4.1.232.3.2.5.1.1.25.9.28|66|2709190369 +1.3.6.1.4.1.232.3.2.5.1.1.25.10.17|66|3112461002 +1.3.6.1.4.1.232.3.2.5.1.1.25.11.4|66|2804238793 +1.3.6.1.4.1.232.3.2.5.1.1.25.12.20|66|2746010765 +1.3.6.1.4.1.232.3.2.5.1.1.25.18.22|66|1131305182 +1.3.6.1.4.1.232.3.2.5.1.1.25.23.2|66|630061036 +1.3.6.1.4.1.232.3.2.5.1.1.26.0.2|65|2089481769 +1.3.6.1.4.1.232.3.2.5.1.1.26.0.28|65|810038908 +1.3.6.1.4.1.232.3.2.5.1.1.26.8.31|65|1068878315 +1.3.6.1.4.1.232.3.2.5.1.1.26.9.24|65|103961563 +1.3.6.1.4.1.232.3.2.5.1.1.26.9.28|65|2013639362 +1.3.6.1.4.1.232.3.2.5.1.1.26.10.17|65|2951245451 +1.3.6.1.4.1.232.3.2.5.1.1.26.11.4|65|186230100 +1.3.6.1.4.1.232.3.2.5.1.1.26.12.20|65|4182707117 +1.3.6.1.4.1.232.3.2.5.1.1.26.18.22|65|3028338343 +1.3.6.1.4.1.232.3.2.5.1.1.26.23.2|65|168329345 +1.3.6.1.4.1.232.3.2.5.1.1.27.0.2|65|374054158 +1.3.6.1.4.1.232.3.2.5.1.1.27.0.28|65|2567904399 +1.3.6.1.4.1.232.3.2.5.1.1.27.8.31|65|522893109 +1.3.6.1.4.1.232.3.2.5.1.1.27.9.24|65|119532592 +1.3.6.1.4.1.232.3.2.5.1.1.27.9.28|65|2471496068 +1.3.6.1.4.1.232.3.2.5.1.1.27.10.17|65|2594363310 +1.3.6.1.4.1.232.3.2.5.1.1.27.11.4|65|3944959901 +1.3.6.1.4.1.232.3.2.5.1.1.27.12.20|65|4164483098 +1.3.6.1.4.1.232.3.2.5.1.1.27.18.22|65|2883751910 +1.3.6.1.4.1.232.3.2.5.1.1.27.23.2|65|2206974357 +1.3.6.1.4.1.232.3.2.5.1.1.28.0.2|65|3925445605 +1.3.6.1.4.1.232.3.2.5.1.1.28.0.28|65|1713645649 +1.3.6.1.4.1.232.3.2.5.1.1.28.8.31|65|559394300 +1.3.6.1.4.1.232.3.2.5.1.1.28.9.24|65|3885486446 +1.3.6.1.4.1.232.3.2.5.1.1.28.9.28|65|4210915605 +1.3.6.1.4.1.232.3.2.5.1.1.28.10.17|65|220092674 +1.3.6.1.4.1.232.3.2.5.1.1.28.11.4|65|3868626828 +1.3.6.1.4.1.232.3.2.5.1.1.28.12.20|65|3239804722 +1.3.6.1.4.1.232.3.2.5.1.1.28.18.22|65|2585992683 +1.3.6.1.4.1.232.3.2.5.1.1.28.23.2|65|4160128227 +1.3.6.1.4.1.232.3.2.5.1.1.29.0.2|65|3584995123 +1.3.6.1.4.1.232.3.2.5.1.1.29.0.28|65|3107079286 +1.3.6.1.4.1.232.3.2.5.1.1.29.8.31|65|2508263122 +1.3.6.1.4.1.232.3.2.5.1.1.29.9.24|65|3981942807 +1.3.6.1.4.1.232.3.2.5.1.1.29.9.28|65|3550107921 +1.3.6.1.4.1.232.3.2.5.1.1.29.10.17|65|176899773 +1.3.6.1.4.1.232.3.2.5.1.1.29.11.4|65|1648399595 +1.3.6.1.4.1.232.3.2.5.1.1.29.12.20|65|3297067055 +1.3.6.1.4.1.232.3.2.5.1.1.29.18.22|65|3445404027 +1.3.6.1.4.1.232.3.2.5.1.1.29.23.2|65|2016773999 +1.3.6.1.4.1.232.3.2.5.1.1.30.0.2|65|2989537942 +1.3.6.1.4.1.232.3.2.5.1.1.30.0.28|65|3934222433 +1.3.6.1.4.1.232.3.2.5.1.1.30.8.31|65|2477940641 +1.3.6.1.4.1.232.3.2.5.1.1.30.9.24|65|4200705038 +1.3.6.1.4.1.232.3.2.5.1.1.30.9.28|65|3858528366 +1.3.6.1.4.1.232.3.2.5.1.1.30.10.17|65|3986228859 +1.3.6.1.4.1.232.3.2.5.1.1.30.11.4|65|2662203714 +1.3.6.1.4.1.232.3.2.5.1.1.30.12.20|65|3761701964 +1.3.6.1.4.1.232.3.2.5.1.1.30.18.22|65|1418961513 +1.3.6.1.4.1.232.3.2.5.1.1.30.23.2|65|2750812238 +1.3.6.1.4.1.232.3.2.5.1.1.31.0.2|65|916231198 +1.3.6.1.4.1.232.3.2.5.1.1.31.0.28|65|2146594321 +1.3.6.1.4.1.232.3.2.5.1.1.31.8.31|65|995962026 +1.3.6.1.4.1.232.3.2.5.1.1.31.9.24|65|3587479373 +1.3.6.1.4.1.232.3.2.5.1.1.31.9.28|65|4232069374 +1.3.6.1.4.1.232.3.2.5.1.1.31.10.17|65|2353390047 +1.3.6.1.4.1.232.3.2.5.1.1.31.11.4|65|3388648852 +1.3.6.1.4.1.232.3.2.5.1.1.31.12.20|65|3669696917 +1.3.6.1.4.1.232.3.2.5.1.1.31.18.22|65|2817308627 +1.3.6.1.4.1.232.3.2.5.1.1.31.23.2|65|1972361499 +1.3.6.1.4.1.232.3.2.5.1.1.32.0.2|65|296578155 +1.3.6.1.4.1.232.3.2.5.1.1.32.0.28|65|3928100633 +1.3.6.1.4.1.232.3.2.5.1.1.32.8.31|65|2321027611 +1.3.6.1.4.1.232.3.2.5.1.1.32.9.24|65|2503792394 +1.3.6.1.4.1.232.3.2.5.1.1.32.9.28|65|3554487951 +1.3.6.1.4.1.232.3.2.5.1.1.32.10.17|65|1128696502 +1.3.6.1.4.1.232.3.2.5.1.1.32.11.4|65|1115663679 +1.3.6.1.4.1.232.3.2.5.1.1.32.12.20|65|1925210987 +1.3.6.1.4.1.232.3.2.5.1.1.32.18.22|65|2145808767 +1.3.6.1.4.1.232.3.2.5.1.1.32.23.2|65|723298107 +1.3.6.1.4.1.232.3.2.5.1.1.33.0.2|65|4232763688 +1.3.6.1.4.1.232.3.2.5.1.1.33.0.28|65|2515648724 +1.3.6.1.4.1.232.3.2.5.1.1.33.8.31|65|1905715607 +1.3.6.1.4.1.232.3.2.5.1.1.33.9.24|65|1573221775 +1.3.6.1.4.1.232.3.2.5.1.1.33.9.28|65|2178293335 +1.3.6.1.4.1.232.3.2.5.1.1.33.10.17|65|1373042557 +1.3.6.1.4.1.232.3.2.5.1.1.33.11.4|65|324493681 +1.3.6.1.4.1.232.3.2.5.1.1.33.12.20|65|863366144 +1.3.6.1.4.1.232.3.2.5.1.1.33.18.22|65|2834520456 +1.3.6.1.4.1.232.3.2.5.1.1.33.23.2|65|660770811 +1.3.6.1.4.1.232.3.2.5.1.1.34.0.2|65|895977516 +1.3.6.1.4.1.232.3.2.5.1.1.34.0.28|65|3912491867 +1.3.6.1.4.1.232.3.2.5.1.1.34.8.31|65|2935708564 +1.3.6.1.4.1.232.3.2.5.1.1.34.9.24|65|613479510 +1.3.6.1.4.1.232.3.2.5.1.1.34.9.28|65|353982695 +1.3.6.1.4.1.232.3.2.5.1.1.34.10.17|65|1719422533 +1.3.6.1.4.1.232.3.2.5.1.1.34.11.4|65|2753507707 +1.3.6.1.4.1.232.3.2.5.1.1.34.12.20|65|2531058768 +1.3.6.1.4.1.232.3.2.5.1.1.34.18.22|65|1738463797 +1.3.6.1.4.1.232.3.2.5.1.1.34.23.2|65|230339965 +1.3.6.1.4.1.232.3.2.5.1.1.35.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.8.31|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.37.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.12.20|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.38.0.2|65|695149768 +1.3.6.1.4.1.232.3.2.5.1.1.38.0.28|65|3356476138 +1.3.6.1.4.1.232.3.2.5.1.1.38.8.31|65|10938476 +1.3.6.1.4.1.232.3.2.5.1.1.38.9.24|65|3824347234 +1.3.6.1.4.1.232.3.2.5.1.1.38.9.28|65|2299135820 +1.3.6.1.4.1.232.3.2.5.1.1.38.10.17|65|3127782166 +1.3.6.1.4.1.232.3.2.5.1.1.38.11.4|65|650087465 +1.3.6.1.4.1.232.3.2.5.1.1.38.12.20|65|1126275168 +1.3.6.1.4.1.232.3.2.5.1.1.38.18.22|65|292840402 +1.3.6.1.4.1.232.3.2.5.1.1.38.23.2|65|833195757 +1.3.6.1.4.1.232.3.2.5.1.1.39.0.2|65|273708010 +1.3.6.1.4.1.232.3.2.5.1.1.39.0.28|65|2930543340 +1.3.6.1.4.1.232.3.2.5.1.1.39.8.31|65|1360991038 +1.3.6.1.4.1.232.3.2.5.1.1.39.9.24|65|360503215 +1.3.6.1.4.1.232.3.2.5.1.1.39.9.28|65|4180016804 +1.3.6.1.4.1.232.3.2.5.1.1.39.10.17|65|3091053534 +1.3.6.1.4.1.232.3.2.5.1.1.39.11.4|65|3927959624 +1.3.6.1.4.1.232.3.2.5.1.1.39.12.20|65|3019266957 +1.3.6.1.4.1.232.3.2.5.1.1.39.18.22|65|1783253281 +1.3.6.1.4.1.232.3.2.5.1.1.39.23.2|65|3451792479 +1.3.6.1.4.1.232.3.2.5.1.1.40.0.2|65|2074093460 +1.3.6.1.4.1.232.3.2.5.1.1.40.0.28|65|1245631859 +1.3.6.1.4.1.232.3.2.5.1.1.40.8.31|65|2278547273 +1.3.6.1.4.1.232.3.2.5.1.1.40.9.24|65|262900694 +1.3.6.1.4.1.232.3.2.5.1.1.40.9.28|65|3929997821 +1.3.6.1.4.1.232.3.2.5.1.1.40.10.17|65|3399525625 +1.3.6.1.4.1.232.3.2.5.1.1.40.11.4|65|3375585056 +1.3.6.1.4.1.232.3.2.5.1.1.40.12.20|65|2460123296 +1.3.6.1.4.1.232.3.2.5.1.1.40.18.22|65|1661289605 +1.3.6.1.4.1.232.3.2.5.1.1.40.23.2|65|4099258745 +1.3.6.1.4.1.232.3.2.5.1.1.41.0.2|65|67819348 +1.3.6.1.4.1.232.3.2.5.1.1.41.0.28|65|4025257665 +1.3.6.1.4.1.232.3.2.5.1.1.41.8.31|65|778931221 +1.3.6.1.4.1.232.3.2.5.1.1.41.9.24|65|3973425930 +1.3.6.1.4.1.232.3.2.5.1.1.41.9.28|65|683938656 +1.3.6.1.4.1.232.3.2.5.1.1.41.10.17|65|3311880823 +1.3.6.1.4.1.232.3.2.5.1.1.41.11.4|65|3358020460 +1.3.6.1.4.1.232.3.2.5.1.1.41.12.20|65|1507642352 +1.3.6.1.4.1.232.3.2.5.1.1.41.18.22|65|3032576586 +1.3.6.1.4.1.232.3.2.5.1.1.41.23.2|65|1081195094 +1.3.6.1.4.1.232.3.2.5.1.1.42.0.2|65|2958829949 +1.3.6.1.4.1.232.3.2.5.1.1.42.0.28|65|3881154002 +1.3.6.1.4.1.232.3.2.5.1.1.42.8.31|65|868131005 +1.3.6.1.4.1.232.3.2.5.1.1.42.9.24|65|3507732127 +1.3.6.1.4.1.232.3.2.5.1.1.42.9.28|65|2408249280 +1.3.6.1.4.1.232.3.2.5.1.1.42.10.17|65|3661936369 +1.3.6.1.4.1.232.3.2.5.1.1.42.11.4|65|83913712 +1.3.6.1.4.1.232.3.2.5.1.1.42.12.20|65|1692536119 +1.3.6.1.4.1.232.3.2.5.1.1.42.18.22|65|83128752 +1.3.6.1.4.1.232.3.2.5.1.1.42.23.2|65|271214931 +1.3.6.1.4.1.232.3.2.5.1.1.43.0.2|65|3379400009 +1.3.6.1.4.1.232.3.2.5.1.1.43.0.28|65|2113936975 +1.3.6.1.4.1.232.3.2.5.1.1.43.8.31|65|4269595898 +1.3.6.1.4.1.232.3.2.5.1.1.43.9.24|65|2636068769 +1.3.6.1.4.1.232.3.2.5.1.1.43.9.28|65|3509528056 +1.3.6.1.4.1.232.3.2.5.1.1.43.10.17|65|2019075204 +1.3.6.1.4.1.232.3.2.5.1.1.43.11.4|65|3241766477 +1.3.6.1.4.1.232.3.2.5.1.1.43.12.20|65|1716200504 +1.3.6.1.4.1.232.3.2.5.1.1.43.18.22|65|1957275437 +1.3.6.1.4.1.232.3.2.5.1.1.43.23.2|65|2456872217 +1.3.6.1.4.1.232.3.2.5.1.1.44.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.44.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.44.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.45.0.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.45.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.45.8.31|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.45.9.24|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.45.10.17|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.11.4|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.45.12.20|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.45.18.22|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.23.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.46.0.2|65|3561272272 +1.3.6.1.4.1.232.3.2.5.1.1.46.0.28|65|4174662596 +1.3.6.1.4.1.232.3.2.5.1.1.46.8.31|65|689811778 +1.3.6.1.4.1.232.3.2.5.1.1.46.9.24|65|1530456354 +1.3.6.1.4.1.232.3.2.5.1.1.46.9.28|65|20151350 +1.3.6.1.4.1.232.3.2.5.1.1.46.10.17|65|1335195536 +1.3.6.1.4.1.232.3.2.5.1.1.46.11.4|65|3704812105 +1.3.6.1.4.1.232.3.2.5.1.1.46.12.20|65|1550626120 +1.3.6.1.4.1.232.3.2.5.1.1.46.18.22|65|3138673084 +1.3.6.1.4.1.232.3.2.5.1.1.46.23.2|65|655955111 +1.3.6.1.4.1.232.3.2.5.1.1.47.0.2|65|1839069213 +1.3.6.1.4.1.232.3.2.5.1.1.47.0.28|65|174038400 +1.3.6.1.4.1.232.3.2.5.1.1.47.8.31|65|3244003037 +1.3.6.1.4.1.232.3.2.5.1.1.47.9.24|65|1347107392 +1.3.6.1.4.1.232.3.2.5.1.1.47.9.28|65|1186660290 +1.3.6.1.4.1.232.3.2.5.1.1.47.10.17|65|1395461969 +1.3.6.1.4.1.232.3.2.5.1.1.47.11.4|65|4027008497 +1.3.6.1.4.1.232.3.2.5.1.1.47.12.20|65|1547161558 +1.3.6.1.4.1.232.3.2.5.1.1.47.18.22|65|1118166193 +1.3.6.1.4.1.232.3.2.5.1.1.47.23.2|65|4220984397 +1.3.6.1.4.1.232.3.2.5.1.1.48.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.49.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.49.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.50.0.2|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.50.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.50.8.31|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.50.9.24|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.50.9.28|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.50.10.17|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.50.11.4|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.50.12.20|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.50.18.22|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.50.23.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.51.0.2|4x|7a6f6d6269657320627574207468656972206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.51.0.28|4x|627574207468656972206f78656e207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.51.8.31|4x|4a61646564206f78656e206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.51.9.24|4|but +1.3.6.1.4.1.232.3.2.5.1.1.51.9.28|4x|7a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.51.10.17|4x|627574206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.51.11.4|4x|6f78656e204a61646564206b65707420627574206b657074207a6f6d62696573 +1.3.6.1.4.1.232.3.2.5.1.1.51.12.20|4x|746865697220616374656420717561696e746c7920717561696e746c79206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.51.18.22|4|but +1.3.6.1.4.1.232.3.2.5.1.1.51.23.2|4x|627574206f78656e204a6164656420666f7277617264204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.52.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.52.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.52.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.54.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.54.10.17|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.54.11.4|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.54.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.54.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.54.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.55.0.2|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.55.0.28|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.55.8.31|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.55.9.24|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.55.9.28|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.55.10.17|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.55.11.4|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.55.12.20|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.55.18.22|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.55.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.56.0.2|65|2949968298 +1.3.6.1.4.1.232.3.2.5.1.1.56.0.28|65|2491218975 +1.3.6.1.4.1.232.3.2.5.1.1.56.8.31|65|233525739 +1.3.6.1.4.1.232.3.2.5.1.1.56.9.24|65|336628689 +1.3.6.1.4.1.232.3.2.5.1.1.56.9.28|65|2014596717 +1.3.6.1.4.1.232.3.2.5.1.1.56.10.17|65|4222268319 +1.3.6.1.4.1.232.3.2.5.1.1.56.11.4|65|2071508675 +1.3.6.1.4.1.232.3.2.5.1.1.56.12.20|65|1261145831 +1.3.6.1.4.1.232.3.2.5.1.1.56.18.22|65|1296062476 +1.3.6.1.4.1.232.3.2.5.1.1.56.23.2|65|1252664383 +1.3.6.1.4.1.232.3.2.5.1.1.57.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.57.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.57.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.57.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.57.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.57.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.57.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.58.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.58.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.59.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.59.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.59.9.24|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.59.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.59.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.59.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.60.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.60.12.20|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.60.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.62.0.2|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.0.28|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.8.31|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.9.24|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.9.28|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.10.17|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.11.4|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.12.20|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.62.18.22|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.23.2|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.63.0.2|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.63.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.63.8.31|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.63.9.24|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.63.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.63.10.17|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.63.11.4|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.63.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.63.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.63.23.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.64.0.2|4x|627574207468656972206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.64.0.28|4x|64726976696e672064726976696e67206f78656e204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.64.8.31|4x|6163746564204a61646564207a6f6d62696573207468656972206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.232.3.2.5.1.1.64.9.24|4x|6163746564204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.64.9.28|4|acted +1.3.6.1.4.1.232.3.2.5.1.1.64.10.17|4x|666f72776172642062757420717561696e746c7920666f7277617264207a6f6d6269657320666f7277617264206b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.232.3.2.5.1.1.64.11.4|4x|64726976696e67206275742074686569722064726976696e67204a61646564207a6f6d62696573206f78656e2062757420627574 +1.3.6.1.4.1.232.3.2.5.1.1.64.12.20|4x|746865697220666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.232.3.2.5.1.1.64.18.22|4x|746865697220717561696e746c792064726976696e672064726976696e67206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.64.23.2|4x|7a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264 +1.3.6.1.4.1.232.3.2.5.1.1.65.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.65.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.65.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.65.10.17|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.65.11.4|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.65.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.0.2|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.66.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.66.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.66.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.66.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.66.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.66.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.66.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.67.0.2|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.67.0.28|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.67.8.31|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.67.9.24|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.67.9.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.67.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.67.11.4|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.67.12.20|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.67.18.22|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.67.23.2|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.68.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.0.28|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.68.8.31|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.68.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.68.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.68.12.20|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.68.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.69.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.69.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.70.0.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.70.0.28|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.70.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.70.9.24|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.70.9.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.70.10.17|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.70.11.4|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.70.12.20|2|30 +1.3.6.1.4.1.232.3.2.5.1.1.70.18.22|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.70.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.71.0.2|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.71.0.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.71.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.71.9.24|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.71.9.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.71.10.17|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.71.11.4|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.71.12.20|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.71.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.71.23.2|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.72.0.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.72.0.28|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.72.8.31|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.72.9.24|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.72.9.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.72.10.17|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.72.11.4|2|29 +1.3.6.1.4.1.232.3.2.5.1.1.72.12.20|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.72.18.22|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.72.23.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.73.0.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.73.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.73.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.73.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.73.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.74.0.2|65|2908799926 +1.3.6.1.4.1.232.3.2.5.1.1.74.0.28|65|2490380324 +1.3.6.1.4.1.232.3.2.5.1.1.74.8.31|65|2597785093 +1.3.6.1.4.1.232.3.2.5.1.1.74.9.24|65|4254200557 +1.3.6.1.4.1.232.3.2.5.1.1.74.9.28|65|696408854 +1.3.6.1.4.1.232.3.2.5.1.1.74.10.17|65|165954175 +1.3.6.1.4.1.232.3.2.5.1.1.74.11.4|65|404169227 +1.3.6.1.4.1.232.3.2.5.1.1.74.12.20|65|368625461 +1.3.6.1.4.1.232.3.2.5.1.1.74.18.22|65|2141670018 +1.3.6.1.4.1.232.3.2.5.1.1.74.23.2|65|3382161332 +1.3.6.1.4.1.232.3.2.5.1.1.75.0.2|66|2380887083 +1.3.6.1.4.1.232.3.2.5.1.1.75.0.28|66|1128640721 +1.3.6.1.4.1.232.3.2.5.1.1.75.8.31|66|3386410156 +1.3.6.1.4.1.232.3.2.5.1.1.75.9.24|66|46631455 +1.3.6.1.4.1.232.3.2.5.1.1.75.9.28|66|1683028466 +1.3.6.1.4.1.232.3.2.5.1.1.75.10.17|66|2663962912 +1.3.6.1.4.1.232.3.2.5.1.1.75.11.4|66|1693199007 +1.3.6.1.4.1.232.3.2.5.1.1.75.12.20|66|3786879383 +1.3.6.1.4.1.232.3.2.5.1.1.75.18.22|66|873327295 +1.3.6.1.4.1.232.3.2.5.1.1.75.23.2|66|1558173398 +1.3.6.1.4.1.232.3.2.5.1.1.76.0.2|65|2103006361 +1.3.6.1.4.1.232.3.2.5.1.1.76.0.28|65|1426172609 +1.3.6.1.4.1.232.3.2.5.1.1.76.8.31|65|991215997 +1.3.6.1.4.1.232.3.2.5.1.1.76.9.24|65|2962747034 +1.3.6.1.4.1.232.3.2.5.1.1.76.9.28|65|2527741665 +1.3.6.1.4.1.232.3.2.5.1.1.76.10.17|65|2054720417 +1.3.6.1.4.1.232.3.2.5.1.1.76.11.4|65|2600139724 +1.3.6.1.4.1.232.3.2.5.1.1.76.12.20|65|999271546 +1.3.6.1.4.1.232.3.2.5.1.1.76.18.22|65|388628255 +1.3.6.1.4.1.232.3.2.5.1.1.76.23.2|65|457008923 +1.3.6.1.4.1.232.3.2.5.1.1.77.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.9.24|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.78.0.2|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.78.0.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.78.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.78.9.24|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.78.9.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.78.10.17|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.78.11.4|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.78.12.20|2|30 +1.3.6.1.4.1.232.3.2.5.1.1.78.18.22|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.78.23.2|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.79.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.79.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.79.8.31|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.79.9.24|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.79.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.79.10.17|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.79.11.4|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.79.12.20|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.79.18.22|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.79.23.2|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.80.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.80.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.80.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.80.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.80.23.2|2|1 +1.3.6.1.4.1.232.6.2.6.1.0|2|3 +1.3.6.1.4.1.232.6.2.8.1.0|2|4 +1.3.6.1.4.1.232.6.2.9.2.0|2|5 +1.3.6.1.4.1.232.6.2.9.3.1.1.30.3|2|30 +1.3.6.1.4.1.232.6.2.9.3.1.2.30.3|2|3 +1.3.6.1.4.1.232.6.2.9.3.1.3.30.3|2|1 +1.3.6.1.4.1.232.6.2.9.3.1.4.30.3|2|4 +1.3.6.1.4.1.232.6.2.9.3.1.5.30.3|2|3 +1.3.6.1.4.1.232.6.2.9.3.1.6.30.3|2|26 +1.3.6.1.4.1.232.6.2.9.3.1.7.30.3|2|15 +1.3.6.1.4.1.232.6.2.9.3.1.8.30.3|2|24 +1.3.6.1.4.1.232.6.2.14.13.1.1.24|2|24 +1.3.6.1.4.1.232.6.2.14.13.1.2.24|2|12 +1.3.6.1.4.1.232.6.2.14.13.1.3.24|2|3 +1.3.6.1.4.1.232.6.2.14.13.1.4.24|2|2 +1.3.6.1.4.1.232.6.2.14.13.1.5.24|2|5 +1.3.6.1.4.1.232.6.2.14.13.1.6.24|2|15 +1.3.6.1.4.1.232.6.2.14.13.1.7.24|2|9 +1.3.6.1.4.1.232.6.2.14.13.1.8.24|2|9 +1.3.6.1.4.1.232.6.2.14.13.1.9.24|4x|7a6f6d62696573207a6f6d626965732064726976696e67206b657074 +1.3.6.1.4.1.232.6.2.14.13.1.10.24|4x|616374656420717561696e746c792062757420666f7277617264206275742064726976696e67206b657074207a6f6d62696573 +1.3.6.1.4.1.232.6.2.14.13.1.11.24|4x|62757420627574 +1.3.6.1.4.1.232.6.2.14.13.1.12.24|4x|666f7277617264207a6f6d62696573206b657074206b657074204a6164656420627574206f78656e20627574206163746564 +1.3.6.1.4.1.232.6.2.14.13.1.13.24|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.6.2.14.13.1.14.24|2|24 +1.3.6.1.4.1.232.6.2.14.13.1.15.24|2|12 +1.3.6.1.4.1.232.6.2.14.13.1.15.25|2|11 +1.3.6.1.4.1.232.6.2.14.13.1.16.24|2|2 +1.3.6.1.4.1.232.6.2.14.13.1.17.24|4x|6b65707420746865697220717561696e746c79206b657074 +1.3.6.1.4.1.232.6.2.14.13.1.18.24|4x|6f78656e204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.232.6.2.14.13.1.19.24|2|1 +1.3.6.1.4.1.232.6.2.14.13.1.20.24|2|2 +1.3.6.1.4.1.232.6.2.14.13.1.20.25|2|3 +1.3.6.1.4.1.232.11.2.2.1|4|RHEL +1.3.6.1.4.1.232.11.2.2.2|4|3.10.0-862.15.4.el7.ve.x86_64 +1.3.6.1.4.1.232.11.2.3.1.1.1.4|2|4 +1.3.6.1.4.1.232.11.2.3.1.1.1.7|2|7 +1.3.6.1.4.1.232.11.2.3.1.1.1.13|2|13 +1.3.6.1.4.1.232.11.2.3.1.1.1.20|2|20 +1.3.6.1.4.1.232.11.2.3.1.1.1.22|2|22 +1.3.6.1.4.1.232.11.2.3.1.1.1.23|2|23 +1.3.6.1.4.1.232.11.2.3.1.1.1.29|2|29 +1.3.6.1.4.1.232.11.2.3.1.1.2.4|2|9 +1.3.6.1.4.1.232.11.2.3.1.1.2.7|2|30 +1.3.6.1.4.1.232.11.2.3.1.1.2.13|2|15 +1.3.6.1.4.1.232.11.2.3.1.1.2.20|2|27 +1.3.6.1.4.1.232.11.2.3.1.1.2.22|2|6 +1.3.6.1.4.1.232.11.2.3.1.1.2.23|2|21 +1.3.6.1.4.1.232.11.2.3.1.1.2.29|2|17 +1.3.6.1.4.1.232.11.2.3.1.1.3.4|2|17 +1.3.6.1.4.1.232.11.2.3.1.1.3.7|2|1 +1.3.6.1.4.1.232.11.2.3.1.1.3.13|2|15 +1.3.6.1.4.1.232.11.2.3.1.1.3.20|2|3 +1.3.6.1.4.1.232.11.2.3.1.1.3.22|2|1 +1.3.6.1.4.1.232.11.2.3.1.1.3.23|2|30 +1.3.6.1.4.1.232.11.2.3.1.1.3.29|2|16 +1.3.6.1.4.1.232.11.2.3.1.1.4.4|2|6 +1.3.6.1.4.1.232.11.2.3.1.1.4.7|2|11 +1.3.6.1.4.1.232.11.2.3.1.1.4.13|2|5 +1.3.6.1.4.1.232.11.2.3.1.1.4.20|2|1 +1.3.6.1.4.1.232.11.2.3.1.1.4.22|2|10 +1.3.6.1.4.1.232.11.2.3.1.1.4.23|2|29 +1.3.6.1.4.1.232.11.2.3.1.1.4.29|2|19 +1.3.6.1.4.1.232.11.2.3.1.1.5.4|2|28 +1.3.6.1.4.1.232.11.2.3.1.1.5.7|2|19 +1.3.6.1.4.1.232.11.2.3.1.1.5.13|2|4 +1.3.6.1.4.1.232.11.2.3.1.1.5.20|2|25 +1.3.6.1.4.1.232.11.2.3.1.1.5.22|2|27 +1.3.6.1.4.1.232.11.2.3.1.1.5.23|2|21 +1.3.6.1.4.1.232.11.2.3.1.1.5.29|2|5 +1.3.6.1.4.1.232.11.2.3.1.1.6.4|4x|616374656420627574206f78656e204a61646564 +1.3.6.1.4.1.232.11.2.3.1.1.6.7|4x|4a61646564206f78656e +1.3.6.1.4.1.232.11.2.3.1.1.6.13|4x|6275742061637465642061637465642064726976696e67204a61646564 +1.3.6.1.4.1.232.11.2.3.1.1.6.20|4x|7a6f6d6269657320717561696e746c792064726976696e67 +1.3.6.1.4.1.232.11.2.3.1.1.6.22|4x|627574206f78656e207a6f6d626965732064726976696e67206163746564207a6f6d62696573204a61646564207468656972 +1.3.6.1.4.1.232.11.2.3.1.1.6.23|4x|64726976696e67206163746564204a61646564204a61646564207a6f6d62696573207a6f6d6269657320717561696e746c792064726976696e67207a6f6d62696573 +1.3.6.1.4.1.232.11.2.3.1.1.6.29|4|quaintly +1.3.6.1.4.1.232.11.2.4.1.1.1.5|2|5 +1.3.6.1.4.1.232.11.2.4.1.1.1.8|2|8 +1.3.6.1.4.1.232.11.2.4.1.1.1.11|2|11 +1.3.6.1.4.1.232.11.2.4.1.1.1.15|2|15 +1.3.6.1.4.1.232.11.2.4.1.1.1.19|2|19 +1.3.6.1.4.1.232.11.2.4.1.1.1.21|2|21 +1.3.6.1.4.1.232.11.2.4.1.1.1.28|2|28 +1.3.6.1.4.1.232.11.2.4.1.1.1.30|2|30 +1.3.6.1.4.1.232.11.2.4.1.1.2.5|4x|6163746564206275742064726976696e67204a616465642064726976696e67206f78656e2061637465642064726976696e67206b657074 +1.3.6.1.4.1.232.11.2.4.1.1.2.8|4x|666f7277617264206f78656e206b657074206b657074206f78656e +1.3.6.1.4.1.232.11.2.4.1.1.2.11|4x|64726976696e67204a61646564 +1.3.6.1.4.1.232.11.2.4.1.1.2.15|4x|746865697220717561696e746c7920627574206275742064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.232.11.2.4.1.1.2.19|4x|7468656972206f78656e20666f7277617264204a61646564206b65707420717561696e746c792064726976696e67204a61646564 +1.3.6.1.4.1.232.11.2.4.1.1.2.21|4x|74686569722074686569722064726976696e67207a6f6d62696573207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.232.11.2.4.1.1.2.28|4x|6163746564206163746564206f78656e206f78656e207a6f6d62696573206b657074204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.232.11.2.4.1.1.2.30|4x|4a6164656420746865697220666f727761726420746865697220746865697220666f7277617264 +1.3.6.1.4.1.232.11.2.4.1.1.3.5|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.3.8|2|2 +1.3.6.1.4.1.232.11.2.4.1.1.3.11|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.3.15|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.3.19|2|19 +1.3.6.1.4.1.232.11.2.4.1.1.3.21|2|22 +1.3.6.1.4.1.232.11.2.4.1.1.3.28|2|17 +1.3.6.1.4.1.232.11.2.4.1.1.3.30|2|10 +1.3.6.1.4.1.232.11.2.4.1.1.4.5|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.4.8|2|13 +1.3.6.1.4.1.232.11.2.4.1.1.4.11|2|20 +1.3.6.1.4.1.232.11.2.4.1.1.4.15|2|29 +1.3.6.1.4.1.232.11.2.4.1.1.4.19|2|13 +1.3.6.1.4.1.232.11.2.4.1.1.4.21|2|7 +1.3.6.1.4.1.232.11.2.4.1.1.4.28|2|3 +1.3.6.1.4.1.232.11.2.4.1.1.4.30|2|0 +1.3.6.1.4.1.232.11.2.4.1.1.5.5|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.5.8|2|5 +1.3.6.1.4.1.232.11.2.4.1.1.5.11|2|10 +1.3.6.1.4.1.232.11.2.4.1.1.5.15|2|31 +1.3.6.1.4.1.232.11.2.4.1.1.5.19|2|15 +1.3.6.1.4.1.232.11.2.4.1.1.5.21|2|26 +1.3.6.1.4.1.232.11.2.4.1.1.5.28|2|1 +1.3.6.1.4.1.232.11.2.4.1.1.5.30|2|23 +1.3.6.1.4.1.232.11.2.4.1.1.6.5|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.6.8|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.6.11|2|12 +1.3.6.1.4.1.232.11.2.4.1.1.6.15|2|9 +1.3.6.1.4.1.232.11.2.4.1.1.6.19|2|0 +1.3.6.1.4.1.232.11.2.4.1.1.6.21|2|12 +1.3.6.1.4.1.232.11.2.4.1.1.6.28|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.6.30|2|20 +1.3.6.1.4.1.232.11.2.4.1.1.7.5|2|20 +1.3.6.1.4.1.232.11.2.4.1.1.7.8|2|23 +1.3.6.1.4.1.232.11.2.4.1.1.7.11|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.7.15|2|21 +1.3.6.1.4.1.232.11.2.4.1.1.7.19|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.7.21|2|1 +1.3.6.1.4.1.232.11.2.4.1.1.7.28|2|20 +1.3.6.1.4.1.232.11.2.4.1.1.7.30|2|23 +1.3.6.1.4.1.232.11.2.4.1.1.8.5|2|3 +1.3.6.1.4.1.232.11.2.4.1.1.8.8|2|2 +1.3.6.1.4.1.232.11.2.4.1.1.8.11|2|1 +1.3.6.1.4.1.232.11.2.4.1.1.8.15|2|2 +1.3.6.1.4.1.232.11.2.4.1.1.8.19|2|4 +1.3.6.1.4.1.232.11.2.4.1.1.8.21|2|3 +1.3.6.1.4.1.232.11.2.4.1.1.8.28|2|4 +1.3.6.1.4.1.232.11.2.4.1.1.8.30|2|1 +1.3.6.1.4.1.232.11.2.4.2.0|2|4 +1.3.6.1.4.1.232.18.2.3.1.1.4.0|4|mac +1.3.6.1.4.1.232.18.2.3.1.1.13.0|2|5 +1.3.6.1.4.1.232.18.2.3.1.1.14.0|2|3 +1.3.6.1.4.1.232.18.2.3.1.1.39.0|4|adapter +1.3.6.1.4.1.232.18.2.3.1.2.13.0|2|4 +1.3.6.1.4.1.232.18.2.3.1.2.14.0|2|2 diff --git a/test/new-e2e/ndm/snmp/compose/data/idrac.snmprec b/test/new-e2e/ndm/snmp/compose/data/idrac.snmprec new file mode 100644 index 0000000000000..61e337c9ef646 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/idrac.snmprec @@ -0,0 +1,1207 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.674.10892.2 +1.3.6.1.4.1.343.2.7.2.1.1.0|4|kept +1.3.6.1.4.1.343.2.7.2.1.2.0|4x|7a6f6d6269657320717561696e746c792061637465642064726976696e6720627574 +1.3.6.1.4.1.343.2.7.2.1.3.0|4x|666f727761726420717561696e746c79206f78656e206163746564 +1.3.6.1.4.1.343.2.7.2.1.4.0|4x|62757420666f727761726420627574 +1.3.6.1.4.1.343.2.7.2.1.5.0|4x|64726976696e67206b657074204a61646564 +1.3.6.1.4.1.343.2.7.2.1.6.0|4x|666f7277617264204a61646564207468656972206b657074 +1.3.6.1.4.1.343.2.7.2.1.7.0|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.1.8|2|8 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.1.18|2|18 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.2.8|4x|65746830 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.2.18|4x|656e31 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.3.8|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.3.18|2|2 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.4.8|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.4.18|2|0 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.1.18|4x|666f7277617264207a6f6d62696573207468656972 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.1.22|4x|717561696e746c79204a61646564206f78656e207a6f6d62696573206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.343.2.7.2.2.1.2.1.2.18|4x|4a61646564207a6f6d62696573206f78656e207468656972206b6570742064726976696e67206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.2.22|4x|61637465642064726976696e6720666f7277617264206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.3.18|4x|6b657074206163746564204a61646564204a6164656420746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.3.22|4x|6f78656e206163746564204a6164656420717561696e746c79206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.4.18|4x|627574206f78656e207468656972206f78656e206b6570742064726976696e672064726976696e6720627574 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.4.22|4x|717561696e746c79206f78656e2062757420717561696e746c792064726976696e67207a6f6d62696573206f78656e204a61646564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.5.18|4x|4a61646564206f78656e +1.3.6.1.4.1.343.2.7.2.2.1.2.1.5.22|4x|717561696e746c792074686569722064726976696e67207a6f6d62696573 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.6.18|4x|6b657074204a61646564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.6.22|4|driving +1.3.6.1.4.1.343.2.7.2.2.1.2.1.7.18|4x|4a616465642064726976696e67206b657074207468656972206f78656e20627574 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.7.22|4x|4a616465642064726976696e67206b65707420627574 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.1.8|65|26212581 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.1.18|65|918782676 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.2.8|65|2561191324 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.2.18|65|4290482129 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.3.8|65|3900533769 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.3.18|65|564767165 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.4.8|65|3058685355 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.4.18|65|3837029910 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.5.8|65|1958861748 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.5.18|65|2421785564 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.6.8|65|2377289710 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.6.18|65|4015875170 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.7.8|65|4079823523 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.7.18|65|577740315 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.8.8|65|3885573357 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.8.18|65|1559311203 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.9.8|65|1208244969 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.9.18|65|736603272 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.10.8|65|1397338420 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.10.18|65|3150855068 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.1.4|2|4 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.1.29|2|29 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.2.4|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.2.29|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.3.4|65|1467360873 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.3.29|65|3891936190 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.4.4|66|1428003748 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.4.29|66|3467694198 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.5.4|2|2 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.5.29|2|2 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.6.4|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.6.29|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.7.4|2|9 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.7.29|2|29 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.8.4|2|13 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.8.29|2|28 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.9.4|2|15 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.9.29|2|24 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.10.4|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.10.29|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.11.4|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.11.29|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.12.4|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.12.29|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.13.4|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.13.29|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.14.4|2|13 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.14.29|2|30 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.1.3|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.1.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.2.3|65|906870219 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.2.11|65|3854133097 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.3.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.3.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.4.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.4.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.5.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.5.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.6.3|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.6.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.1.2|2|2 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.1.11|2|11 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.2.2|2|11 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.2.11|2|22 +1.3.6.1.4.1.343.2.7.2.2.3.2.1.1.7|2|0 +1.3.6.1.4.1.343.2.7.2.2.3.2.1.1.23|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.1.22|2|22 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.1.30|2|30 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.2.22|2|29 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.2.30|2|19 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.3.22|2|16 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.3.30|2|12 +1.3.6.1.4.1.343.2.7.2.2.4.2.1.1.7|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.1.5|4x|6f78656e2061637465642064726976696e6720666f72776172642064726976696e67 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.1.11|4x|4a61646564206163746564 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.2.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.2.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.3.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.3.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.4.5|66|1949733254 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.4.11|66|2070885352 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.5.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.5.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.6.5|2|2 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.6.11|2|2 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.7.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.7.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.8.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.8.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.9.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.9.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.10.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.10.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.11.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.11.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.12.5|65|2997670242 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.12.11|65|2131631262 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.13.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.13.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.14.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.14.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.15.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.15.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.1.26|2|26 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.1.27|2|27 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.2.26|2|15 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.2.27|2|1 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.1.19|2|3 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.1.31|2|2 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.2.19|65|706719367 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.2.31|65|1306335671 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.3.19|2|2 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.3.31|2|2 +1.3.6.1.4.1.343.2.7.2.3.1.2.0|2|0 +1.3.6.1.4.1.343.2.7.2.3.1.3.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.1.4.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.2.2.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.3.2.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.4.2.0|2|0 +1.3.6.1.4.1.674.10892.2.2.1.0|2|4 +1.3.6.1.4.1.674.10892.2.3.1.1.0|2|4 +1.3.6.1.4.1.674.10892.2.3.1.4.0|2|4 +1.3.6.1.4.1.674.10892.2.3.1.5.0|2|4 +1.3.6.1.4.1.674.10892.2.3.1.9.0|2|3 +1.3.6.1.4.1.674.10892.2.4.1.1.1.1|2|2 +1.3.6.1.4.1.674.10892.2.4.1.1.1.2|2|83 +1.3.6.1.4.1.674.10892.2.4.1.1.6.1|2|2803 +1.3.6.1.4.1.674.10892.2.4.1.1.6.2|2|191739 +1.3.6.1.4.1.674.10892.2.4.1.1.13.1|2|1219 +1.3.6.1.4.1.674.10892.2.4.1.1.13.2|2|113 +1.3.6.1.4.1.674.10892.2.4.1.1.14.1|2|111 +1.3.6.1.4.1.674.10892.2.4.1.1.14.2|2|827 +1.3.6.1.4.1.674.10892.2.4.2.1.2.1|2|27 +1.3.6.1.4.1.674.10892.2.4.2.1.2.2|2|86 +1.3.6.1.4.1.674.10892.5.1.1.1.0|4x|717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.1.1.2.0|4|acted +1.3.6.1.4.1.674.10892.5.1.1.3.0|4x|6f78656e204a61646564206275742064726976696e67206163746564206f78656e +1.3.6.1.4.1.674.10892.5.1.1.4.0|4x|6163746564207a6f6d62696573207a6f6d6269657320717561696e746c792064726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.1.1.5.0|4x|7a6f6d62696573206b65707420616374656420627574207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.1.1.6.0|4x|717561696e746c79206f78656e2062757420746865697220666f727761726420627574 +1.3.6.1.4.1.674.10892.5.1.1.7.0|2|17 +1.3.6.1.4.1.674.10892.5.1.1.8.0|4x|616374656420666f7277617264206f78656e20717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.1.2.1.0|4x|7468656972206163746564206b65707420627574204a61646564 +1.3.6.1.4.1.674.10892.5.1.2.2.0|4x|6f78656e206163746564206b657074204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.2.3.0|4x|746865697220666f727761726420666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.1.3.1.0|4|custom.hostname +1.3.6.1.4.1.674.10892.5.1.3.2.0|4x|616374656420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.1.3.3.0|4x|7468656972206b657074207468656972206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.1.3.4.0|4x|62757420627574 +1.3.6.1.4.1.674.10892.5.1.3.5.0|4|forward +1.3.6.1.4.1.674.10892.5.1.3.6.0|4|Ubuntu +1.3.6.1.4.1.674.10892.5.1.3.7.0|2|3 +1.3.6.1.4.1.674.10892.5.1.3.8.0|4x|4a6164656420666f727761726420717561696e746c79204a61646564206f78656e204a6164656420627574206f78656e +1.3.6.1.4.1.674.10892.5.1.3.9.0|4x|6163746564206163746564 +1.3.6.1.4.1.674.10892.5.1.3.10.0|4x|6f78656e206b6570742064726976696e67206163746564206b657074206b657074206163746564 +1.3.6.1.4.1.674.10892.5.1.3.11.0|4x|7468656972207a6f6d62696573204a6164656420666f7277617264206f78656e207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.3.12.0|4|PowerEdge customFooVersion +1.3.6.1.4.1.674.10892.5.1.3.13.0|2|20 +1.3.6.1.4.1.674.10892.5.1.3.14.0|4|18.04.3 LTS (Bionic Beaver) +1.3.6.1.4.1.674.10892.5.1.3.15.0|4x|4a6164656420627574207468656972 +1.3.6.1.4.1.674.10892.5.1.3.16.0|2|28 +1.3.6.1.4.1.674.10892.5.1.3.17.0|2|9 +1.3.6.1.4.1.674.10892.5.1.3.18.0|4x|6163746564207468656972206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.2.1.0|2|1 +1.3.6.1.4.1.674.10892.5.2.2.0|2|2 +1.3.6.1.4.1.674.10892.5.2.3.0|2|6 +1.3.6.1.4.1.674.10892.5.2.4.0|2|4 +1.3.6.1.4.1.674.10892.5.2.5.0|2|21 +1.3.6.1.4.1.674.10892.5.3.1.1.0|4|driving +1.3.6.1.4.1.674.10892.5.3.1.2.0|4x|6f78656e206b657074206163746564206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.5.3.1.3.0|2|1 +1.3.6.1.4.1.674.10892.5.3.1.4.0|4x|7468656972206b657074206f78656e +1.3.6.1.4.1.674.10892.5.3.1.5.0|4x|717561696e746c79206b65707420616374656420666f7277617264206f78656e206f78656e206b657074206b657074 +1.3.6.1.4.1.674.10892.5.3.1.6.0|4x|717561696e746c792064726976696e67206f78656e20666f7277617264207a6f6d62696573206f78656e206f78656e20717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.3.1.7.0|4x|616374656420616374656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.3.1.8.0|4x|666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.3.1.9.0|4|Jaded +1.3.6.1.4.1.674.10892.5.3.1.10.0|4x|6163746564207a6f6d62696573207468656972206f78656e207a6f6d6269657320666f7277617264206b657074204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.3.1.11.0|4x|627574204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1.1.0|2|15 +1.3.6.1.4.1.674.10892.5.4.1.2.0|2|20 +1.3.6.1.4.1.674.10892.5.4.1.3.0|2|12 +1.3.6.1.4.1.674.10892.5.4.200.10.1.1.26|2|26 +1.3.6.1.4.1.674.10892.5.4.200.10.1.1.29|2|29 +1.3.6.1.4.1.674.10892.5.4.200.10.1.2.26|2|3 +1.3.6.1.4.1.674.10892.5.4.200.10.1.2.29|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.3.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.3.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.4.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.4.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.5.26|4x|7a6f6d62696573206f78656e206b657074206b657074206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.200.10.1.5.29|4x|6275742062757420746865697220666f7277617264207a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.6.26|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.6.29|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.7.26|4x|64726976696e67206b65707420616374656420627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.7.29|4|kept +1.3.6.1.4.1.674.10892.5.4.200.10.1.8.26|4x|6b65707420627574207a6f6d6269657320666f7277617264204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.8.29|4|zombies +1.3.6.1.4.1.674.10892.5.4.200.10.1.9.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.9.29|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.10.26|4x|6b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.10.29|4x|666f727761726420717561696e746c79204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.11.26|4x|666f7277617264204a61646564206f78656e20666f7277617264207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.200.10.1.11.29|4x|64726976696e6720666f727761726420666f727761726420717561696e746c79207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.12.26|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.12.29|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.13.26|4x|4a6164656420666f7277617264207a6f6d6269657320746865697220717561696e746c79207468656972204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.13.29|4x|717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.14.26|4x|6163746564207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.14.29|4x|6b657074206163746564206b65707420666f7277617264207a6f6d6269657320717561696e746c7920746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.15.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.15.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.16.26|4x|666f7277617264204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.4.200.10.1.16.29|4|quaintly +1.3.6.1.4.1.674.10892.5.4.200.10.1.17.26|4x|627574207468656972206b65707420717561696e746c7920717561696e746c7920746865697220666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.17.29|4x|64726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.18.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.18.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.19.26|4x|6f78656e207468656972206f78656e +1.3.6.1.4.1.674.10892.5.4.200.10.1.19.29|4x|717561696e746c7920717561696e746c79206f78656e204a61646564206f78656e +1.3.6.1.4.1.674.10892.5.4.200.10.1.20.26|4x|6b65707420666f72776172642074686569722062757420627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.20.29|4x|6b65707420746865697220717561696e746c792064726976696e67207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.21.26|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.21.29|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.22.26|4x|6b6570742062757420717561696e746c79206f78656e20717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.22.29|4x|61637465642074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.23.26|4|acted +1.3.6.1.4.1.674.10892.5.4.200.10.1.23.29|4|their +1.3.6.1.4.1.674.10892.5.4.200.10.1.24.26|2|3 +1.3.6.1.4.1.674.10892.5.4.200.10.1.24.29|2|3 +1.3.6.1.4.1.674.10892.5.4.200.10.1.25.26|4x|616374656420666f72776172642061637465642064726976696e672064726976696e6720746865697220627574204a61646564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.25.29|4x|62757420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.26.26|4x|6f78656e206f78656e207a6f6d62696573207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.26.29|4x|666f72776172642064726976696e6720666f7277617264206b657074207a6f6d62696573204a6164656420627574206163746564206b657074 +1.3.6.1.4.1.674.10892.5.4.200.10.1.27.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.27.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.28.26|4x|7a6f6d6269657320746865697220717561696e746c79206163746564206b657074207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.28.29|4x|4a61646564207a6f6d62696573206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.29.26|4x|746865697220666f7277617264206b6570742064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.29.29|4x|64726976696e6720666f727761726420627574206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.30.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.30.29|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.31.26|4x|627574206f78656e207468656972206f78656e2064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.31.29|4|acted +1.3.6.1.4.1.674.10892.5.4.200.10.1.42.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.42.29|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.43.26|4x|627574207a6f6d6269657320666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.43.29|4x|64726976696e6720616374656420666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.44.26|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.44.29|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.45.26|4x|6f78656e20666f7277617264207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.45.29|4x|6f78656e206b657074206b657074 +1.3.6.1.4.1.674.10892.5.4.200.10.1.50.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.50.29|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.51.26|4x|7a6f6d62696573206b657074206b65707420616374656420627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.51.29|4x|666f727761726420666f7277617264207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.52.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.52.29|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.53.26|4x|7a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.53.29|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.200.10.1.54.26|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.54.29|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.55.26|4x|64726976696e6720627574206f78656e204a61646564206275742074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.55.29|4x|64726976696e672074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.56.26|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.56.29|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.57.26|4x|717561696e746c792064726976696e6720746865697220616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.57.29|4x|717561696e746c7920717561696e746c79206b65707420666f7277617264206275742064726976696e67206b657074207468656972207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.58.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.58.29|2|3 +1.3.6.1.4.1.674.10892.5.4.200.10.1.59.26|4x|6f78656e2074686569722064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.200.10.1.59.29|4x|4a61646564206163746564207468656972206163746564207a6f6d62696573206f78656e207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.60.26|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.60.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.61.26|4x|6b657074207a6f6d62696573206163746564207a6f6d62696573207a6f6d6269657320616374656420746865697220627574207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.61.29|4x|666f7277617264207a6f6d6269657320717561696e746c7920717561696e746c79204a6164656420627574204a61646564206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.62.26|4x|7468656972207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.62.29|4x|4a6164656420666f7277617264206b6570742064726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.63.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.63.29|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.64.26|4x|6163746564206b657074204a61646564206f78656e +1.3.6.1.4.1.674.10892.5.4.200.10.1.64.29|4x|4a616465642064726976696e6720717561696e746c79206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.1.0|2|17 +1.3.6.1.4.1.674.10892.5.4.300.2.0|2|19 +1.3.6.1.4.1.674.10892.5.4.300.10.1.1.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.10.1.1.28|2|28 +1.3.6.1.4.1.674.10892.5.4.300.10.1.2.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.2.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.3.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.3.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.4.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.4.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.5.22|2|3 +1.3.6.1.4.1.674.10892.5.4.300.10.1.5.28|2|21 +1.3.6.1.4.1.674.10892.5.4.300.10.1.6.22|2|23 +1.3.6.1.4.1.674.10892.5.4.300.10.1.6.28|2|17 +1.3.6.1.4.1.674.10892.5.4.300.10.1.7.22|4x|6163746564207468656972207468656972207a6f6d6269657320666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.10.1.7.28|4|their +1.3.6.1.4.1.674.10892.5.4.300.10.1.8.22|4x|6b657074206b657074206f78656e +1.3.6.1.4.1.674.10892.5.4.300.10.1.8.28|4x|7a6f6d6269657320616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.10.1.9.22|4x|666f727761726420746865697220666f7277617264207468656972206f78656e206275742064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.4.300.10.1.9.28|4x|64726976696e67207468656972204a61646564206f78656e2064726976696e67207a6f6d62696573204a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.10.1.10.22|4x|6f78656e204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.10.1.10.28|4|driving +1.3.6.1.4.1.674.10892.5.4.300.10.1.11.22|4|kept +1.3.6.1.4.1.674.10892.5.4.300.10.1.11.28|4|acted +1.3.6.1.4.1.674.10892.5.4.300.10.1.12.22|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.12.28|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.13.22|2|27 +1.3.6.1.4.1.674.10892.5.4.300.10.1.13.28|2|14 +1.3.6.1.4.1.674.10892.5.4.300.10.1.14.22|2|7 +1.3.6.1.4.1.674.10892.5.4.300.10.1.14.28|2|5 +1.3.6.1.4.1.674.10892.5.4.300.10.1.15.22|4|oxen +1.3.6.1.4.1.674.10892.5.4.300.10.1.15.28|4|but +1.3.6.1.4.1.674.10892.5.4.300.10.1.24.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.24.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.25.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.25.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.28.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.28.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.29.22|2|10 +1.3.6.1.4.1.674.10892.5.4.300.10.1.29.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.30.22|2|0 +1.3.6.1.4.1.674.10892.5.4.300.10.1.30.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.31.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.31.28|2|8 +1.3.6.1.4.1.674.10892.5.4.300.10.1.32.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.32.28|2|9 +1.3.6.1.4.1.674.10892.5.4.300.10.1.33.22|2|31 +1.3.6.1.4.1.674.10892.5.4.300.10.1.33.28|2|16 +1.3.6.1.4.1.674.10892.5.4.300.10.1.34.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.34.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.35.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.35.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.36.22|2|19 +1.3.6.1.4.1.674.10892.5.4.300.10.1.36.28|2|25 +1.3.6.1.4.1.674.10892.5.4.300.10.1.38.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.38.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.39.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.39.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.44.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.44.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.45.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.45.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.46.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.46.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.47.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.10.1.47.28|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.48.22|4x|7468656972206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.4.300.10.1.48.28|4x|6b657074204a61646564207468656972206163746564 +1.3.6.1.4.1.674.10892.5.4.300.10.1.49.22|4x|7a6f6d62696573207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.10.1.49.28|4x|616374656420627574204a61646564207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.4.300.40.1.1.10.22|2|10 +1.3.6.1.4.1.674.10892.5.4.300.40.1.1.16.20|2|16 +1.3.6.1.4.1.674.10892.5.4.300.40.1.2.10.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.40.1.2.16.20|2|20 +1.3.6.1.4.1.674.10892.5.4.300.40.1.3.10.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.40.1.3.16.20|2|8 +1.3.6.1.4.1.674.10892.5.4.300.40.1.4.10.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.40.1.4.16.20|2|8 +1.3.6.1.4.1.674.10892.5.4.300.40.1.5.10.22|4x|666f7277617264204a616465642064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.40.1.5.16.20|4x|717561696e746c792064726976696e67204a6164656420717561696e746c79206163746564206b657074207a6f6d62696573207a6f6d6269657320627574 +1.3.6.1.4.1.674.10892.5.4.300.40.1.6.10.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.40.1.6.16.20|2|1 +1.3.6.1.4.1.674.10892.5.4.300.40.1.7.10.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.40.1.7.16.20|2|4 +1.3.6.1.4.1.674.10892.5.4.300.40.1.8.10.22|4x|4a616465642074686569722074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.40.1.8.16.20|4x|62757420627574206b6570742062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.300.50.1.1.3.26|2|3 +1.3.6.1.4.1.674.10892.5.4.300.50.1.1.31.19|2|31 +1.3.6.1.4.1.674.10892.5.4.300.50.1.2.3.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.50.1.2.31.19|2|19 +1.3.6.1.4.1.674.10892.5.4.300.50.1.3.3.26|2|2 +1.3.6.1.4.1.674.10892.5.4.300.50.1.3.31.19|2|6 +1.3.6.1.4.1.674.10892.5.4.300.50.1.4.3.26|2|4 +1.3.6.1.4.1.674.10892.5.4.300.50.1.4.31.19|2|1 +1.3.6.1.4.1.674.10892.5.4.300.50.1.5.3.26|2|6 +1.3.6.1.4.1.674.10892.5.4.300.50.1.5.31.19|2|4 +1.3.6.1.4.1.674.10892.5.4.300.50.1.7.3.26|4x|61637465642061637465642064726976696e67206163746564 +1.3.6.1.4.1.674.10892.5.4.300.50.1.7.31.19|4x|666f7277617264207a6f6d62696573206b657074206b657074 +1.3.6.1.4.1.674.10892.5.4.300.50.1.8.1.1|4|2.5.4 +1.3.6.1.4.1.674.10892.5.4.300.50.1.8.3.26|4x|6f78656e206163746564204a6164656420666f7277617264207a6f6d626965732064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.50.1.8.31.19|4x|666f7277617264206b657074206f78656e +1.3.6.1.4.1.674.10892.5.4.300.50.1.11.3.26|4x|6f78656e2064726976696e6720717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.4.300.50.1.11.31.19|4x|64726976696e6720666f7277617264207a6f6d62696573204a61646564206b657074206b657074204a61646564204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.60.1.1.3.10|2|3 +1.3.6.1.4.1.674.10892.5.4.300.60.1.1.23.26|2|23 +1.3.6.1.4.1.674.10892.5.4.300.60.1.2.3.10|2|10 +1.3.6.1.4.1.674.10892.5.4.300.60.1.2.23.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.60.1.3.3.10|2|6 +1.3.6.1.4.1.674.10892.5.4.300.60.1.3.23.26|2|1 +1.3.6.1.4.1.674.10892.5.4.300.60.1.4.3.10|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.4.23.26|2|6 +1.3.6.1.4.1.674.10892.5.4.300.60.1.5.3.10|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.5.23.26|2|5 +1.3.6.1.4.1.674.10892.5.4.300.60.1.6.3.10|2|14 +1.3.6.1.4.1.674.10892.5.4.300.60.1.6.23.26|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.7.3.10|2|21 +1.3.6.1.4.1.674.10892.5.4.300.60.1.7.23.26|2|22 +1.3.6.1.4.1.674.10892.5.4.300.60.1.8.3.10|4x|6163746564206163746564204a61646564206f78656e206f78656e207a6f6d6269657320627574206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.60.1.8.23.26|4x|64726976696e67207468656972206163746564207468656972206f78656e20666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.300.60.1.9.3.10|2|1 +1.3.6.1.4.1.674.10892.5.4.300.60.1.9.23.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.60.1.11.3.10|4x|616374656420616374656420746865697220717561696e746c79206f78656e207a6f6d626965732064726976696e67206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.60.1.11.23.26|4x|746865697220627574206163746564206f78656e20627574206b657074 +1.3.6.1.4.1.674.10892.5.4.300.70.1.1.18.23|2|18 +1.3.6.1.4.1.674.10892.5.4.300.70.1.1.29.21|2|29 +1.3.6.1.4.1.674.10892.5.4.300.70.1.2.18.23|2|23 +1.3.6.1.4.1.674.10892.5.4.300.70.1.2.29.21|2|21 +1.3.6.1.4.1.674.10892.5.4.300.70.1.3.18.23|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.3.29.21|2|4 +1.3.6.1.4.1.674.10892.5.4.300.70.1.4.18.23|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.4.29.21|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.5.18.23|2|4 +1.3.6.1.4.1.674.10892.5.4.300.70.1.5.29.21|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.6.18.23|2|3 +1.3.6.1.4.1.674.10892.5.4.300.70.1.6.29.21|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.7.18.23|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.7.29.21|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.8.18.23|4x|4a61646564206f78656e2064726976696e67207a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.674.10892.5.4.300.70.1.8.29.21|4x|6b657074207a6f6d62696573206f78656e206b6570742064726976696e6720666f7277617264206f78656e +1.3.6.1.4.1.674.10892.5.4.300.90.1.1.2.16|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.1.6.30|2|6 +1.3.6.1.4.1.674.10892.5.4.300.90.1.2.2.16|2|16 +1.3.6.1.4.1.674.10892.5.4.300.90.1.2.6.30|2|30 +1.3.6.1.4.1.674.10892.5.4.300.90.1.3.2.16|2|10 +1.3.6.1.4.1.674.10892.5.4.300.90.1.3.6.30|2|13 +1.3.6.1.4.1.674.10892.5.4.300.90.1.4.2.16|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.4.6.30|2|3 +1.3.6.1.4.1.674.10892.5.4.300.90.1.5.2.16|2|3 +1.3.6.1.4.1.674.10892.5.4.300.90.1.5.6.30|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.6.2.16|4x|74686569722061637465642064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.6.6.30|4x|717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.90.1.7.2.16|4x|746865697220666f7277617264206b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.7.6.30|4x|7468656972206f78656e206b65707420746865697220627574206163746564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.8.2.16|4|their +1.3.6.1.4.1.674.10892.5.4.300.90.1.8.6.30|4|Jaded +1.3.6.1.4.1.674.10892.5.4.300.90.1.9.2.16|4x|4a61646564206f78656e204a6164656420717561696e746c7920627574207468656972206275742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.90.1.9.6.30|4x|4a61646564206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.10.2.16|4x|616374656420627574 +1.3.6.1.4.1.674.10892.5.4.300.90.1.10.6.30|4x|666f72776172642064726976696e67204a61646564206b657074207468656972206b6570742062757420627574206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.11.2.16|4|kept +1.3.6.1.4.1.674.10892.5.4.300.90.1.11.6.30|4x|6b657074206b65707420666f7277617264207a6f6d6269657320666f7277617264206b657074204a61646564206163746564206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.12.2.16|4x|7a6f6d62696573206b657074207a6f6d62696573207a6f6d6269657320616374656420627574207468656972 +1.3.6.1.4.1.674.10892.5.4.300.90.1.12.6.30|4|their +1.3.6.1.4.1.674.10892.5.4.600.10.1.1.5.22|2|5 +1.3.6.1.4.1.674.10892.5.4.600.10.1.1.26.20|2|26 +1.3.6.1.4.1.674.10892.5.4.600.10.1.2.5.22|2|22 +1.3.6.1.4.1.674.10892.5.4.600.10.1.2.26.20|2|20 +1.3.6.1.4.1.674.10892.5.4.600.10.1.3.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.3.26.20|2|4 +1.3.6.1.4.1.674.10892.5.4.600.10.1.4.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.4.26.20|2|1 +1.3.6.1.4.1.674.10892.5.4.600.10.1.5.5.22|2|5 +1.3.6.1.4.1.674.10892.5.4.600.10.1.5.26.20|2|6 +1.3.6.1.4.1.674.10892.5.4.600.10.1.6.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.6.26.20|2|9 +1.3.6.1.4.1.674.10892.5.4.600.10.1.7.5.22|4x|717561696e746c7920717561696e746c79206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.600.10.1.7.26.20|4x|6b657074207a6f6d62696573204a616465642064726976696e67207a6f6d62696573204a61646564204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.600.10.1.8.5.22|2|4 +1.3.6.1.4.1.674.10892.5.4.600.10.1.8.26.20|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.1.16.26|2|16 +1.3.6.1.4.1.674.10892.5.4.600.12.1.1.17.15|2|17 +1.3.6.1.4.1.674.10892.5.4.600.12.1.2.16.26|2|26 +1.3.6.1.4.1.674.10892.5.4.600.12.1.2.17.15|2|15 +1.3.6.1.4.1.674.10892.5.4.600.12.1.3.16.26|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.3.17.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.4.16.26|2|10 +1.3.6.1.4.1.674.10892.5.4.600.12.1.4.17.15|2|10 +1.3.6.1.4.1.674.10892.5.4.600.12.1.5.16.26|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.5.17.15|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.6.16.26|2|7 +1.3.6.1.4.1.674.10892.5.4.600.12.1.6.17.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.7.16.26|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.7.17.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.8.16.26|4x|7a6f6d626965732064726976696e672064726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.4.600.12.1.8.17.15|4x|7a6f6d62696573207468656972207a6f6d62696573207468656972206163746564204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.600.12.1.9.16.26|2|26 +1.3.6.1.4.1.674.10892.5.4.600.12.1.9.17.15|2|19 +1.3.6.1.4.1.674.10892.5.4.600.12.1.10.16.26|2|6 +1.3.6.1.4.1.674.10892.5.4.600.12.1.10.17.15|2|11 +1.3.6.1.4.1.674.10892.5.4.600.12.1.11.16.26|2|16 +1.3.6.1.4.1.674.10892.5.4.600.12.1.11.17.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.12.16.26|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.12.17.15|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.13.16.26|2|0 +1.3.6.1.4.1.674.10892.5.4.600.12.1.13.17.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.14.16.26|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.14.17.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.15.16.26|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.12.1.15.17.15|4|zombies +1.3.6.1.4.1.674.10892.5.4.600.12.1.16.16.26|2|19 +1.3.6.1.4.1.674.10892.5.4.600.12.1.16.17.15|2|12 +1.3.6.1.4.1.674.10892.5.4.600.20.1.1.12.15|2|12 +1.3.6.1.4.1.674.10892.5.4.600.20.1.1.22.19|2|22 +1.3.6.1.4.1.674.10892.5.4.600.20.1.2.12.15|2|15 +1.3.6.1.4.1.674.10892.5.4.600.20.1.2.22.19|2|19 +1.3.6.1.4.1.674.10892.5.4.600.20.1.3.12.15|2|6 +1.3.6.1.4.1.674.10892.5.4.600.20.1.3.22.19|2|2 +1.3.6.1.4.1.674.10892.5.4.600.20.1.4.12.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.20.1.4.22.19|2|1 +1.3.6.1.4.1.674.10892.5.4.600.20.1.5.12.15|2|5 +1.3.6.1.4.1.674.10892.5.4.600.20.1.5.22.19|2|6 +1.3.6.1.4.1.674.10892.5.4.600.20.1.6.12.15|2|19 +1.3.6.1.4.1.674.10892.5.4.600.20.1.6.22.19|2|29 +1.3.6.1.4.1.674.10892.5.4.600.20.1.7.12.15|2|6 +1.3.6.1.4.1.674.10892.5.4.600.20.1.7.22.19|2|3 +1.3.6.1.4.1.674.10892.5.4.600.20.1.8.12.15|4x|6275742064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.600.20.1.8.22.19|4x|4a61646564206275742062757420717561696e746c79206f78656e204a61646564206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.20.1.9.12.15|2|0 +1.3.6.1.4.1.674.10892.5.4.600.20.1.9.22.19|2|11 +1.3.6.1.4.1.674.10892.5.4.600.20.1.10.12.15|2|25 +1.3.6.1.4.1.674.10892.5.4.600.20.1.10.22.19|2|21 +1.3.6.1.4.1.674.10892.5.4.600.20.1.11.12.15|2|6 +1.3.6.1.4.1.674.10892.5.4.600.20.1.11.22.19|2|11 +1.3.6.1.4.1.674.10892.5.4.600.20.1.12.12.15|2|10 +1.3.6.1.4.1.674.10892.5.4.600.20.1.12.22.19|2|1 +1.3.6.1.4.1.674.10892.5.4.600.20.1.13.12.15|2|25 +1.3.6.1.4.1.674.10892.5.4.600.20.1.13.22.19|2|21 +1.3.6.1.4.1.674.10892.5.4.600.20.1.14.12.15|2|22 +1.3.6.1.4.1.674.10892.5.4.600.20.1.14.22.19|2|15 +1.3.6.1.4.1.674.10892.5.4.600.20.1.15.12.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.20.1.15.22.19|2|8 +1.3.6.1.4.1.674.10892.5.4.600.20.1.16.12.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.20.1.16.22.19|2|2 +1.3.6.1.4.1.674.10892.5.4.600.30.1.1.9.28|2|9 +1.3.6.1.4.1.674.10892.5.4.600.30.1.1.18.4|2|18 +1.3.6.1.4.1.674.10892.5.4.600.30.1.2.9.28|2|28 +1.3.6.1.4.1.674.10892.5.4.600.30.1.2.18.4|2|4 +1.3.6.1.4.1.674.10892.5.4.600.30.1.3.9.28|2|6 +1.3.6.1.4.1.674.10892.5.4.600.30.1.3.18.4|2|1 +1.3.6.1.4.1.674.10892.5.4.600.30.1.4.9.28|2|1 +1.3.6.1.4.1.674.10892.5.4.600.30.1.4.18.4|2|6 +1.3.6.1.4.1.674.10892.5.4.600.30.1.5.9.28|2|2 +1.3.6.1.4.1.674.10892.5.4.600.30.1.5.18.4|2|5 +1.3.6.1.4.1.674.10892.5.4.600.30.1.6.9.28|2|16 +1.3.6.1.4.1.674.10892.5.4.600.30.1.6.18.4|2|10 +1.3.6.1.4.1.674.10892.5.4.600.30.1.7.9.28|2|26 +1.3.6.1.4.1.674.10892.5.4.600.30.1.7.18.4|2|26 +1.3.6.1.4.1.674.10892.5.4.600.30.1.8.9.28|4x|64726976696e67207a6f6d626965732064726976696e6720717561696e746c7920717561696e746c79206b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.600.30.1.8.18.4|4x|4a61646564206b6570742062757420666f7277617264206163746564204a6164656420666f7277617264206b657074207468656972 +1.3.6.1.4.1.674.10892.5.4.600.30.1.9.9.28|2|1 +1.3.6.1.4.1.674.10892.5.4.600.30.1.9.18.4|2|14 +1.3.6.1.4.1.674.10892.5.4.600.30.1.10.9.28|2|2 +1.3.6.1.4.1.674.10892.5.4.600.30.1.10.18.4|2|19 +1.3.6.1.4.1.674.10892.5.4.600.30.1.11.9.28|2|25 +1.3.6.1.4.1.674.10892.5.4.600.30.1.11.18.4|2|13 +1.3.6.1.4.1.674.10892.5.4.600.30.1.12.9.28|2|12 +1.3.6.1.4.1.674.10892.5.4.600.30.1.12.18.4|2|10 +1.3.6.1.4.1.674.10892.5.4.600.30.1.13.9.28|2|19 +1.3.6.1.4.1.674.10892.5.4.600.30.1.13.18.4|2|19 +1.3.6.1.4.1.674.10892.5.4.600.30.1.14.9.28|2|31 +1.3.6.1.4.1.674.10892.5.4.600.30.1.14.18.4|2|23 +1.3.6.1.4.1.674.10892.5.4.600.30.1.15.9.28|2|8 +1.3.6.1.4.1.674.10892.5.4.600.30.1.15.18.4|2|8 +1.3.6.1.4.1.674.10892.5.4.600.30.1.16.9.28|2|2 +1.3.6.1.4.1.674.10892.5.4.600.30.1.16.18.4|2|1 +1.3.6.1.4.1.674.10892.5.4.600.50.1.1.20.31|2|20 +1.3.6.1.4.1.674.10892.5.4.600.50.1.1.21.13|2|21 +1.3.6.1.4.1.674.10892.5.4.600.50.1.2.20.31|2|31 +1.3.6.1.4.1.674.10892.5.4.600.50.1.2.21.13|2|13 +1.3.6.1.4.1.674.10892.5.4.600.50.1.3.20.31|2|1 +1.3.6.1.4.1.674.10892.5.4.600.50.1.3.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.4.20.31|2|6 +1.3.6.1.4.1.674.10892.5.4.600.50.1.4.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.5.20.31|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.5.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.6.20.31|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.6.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.7.20.31|4x|717561696e746c7920627574206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.50.1.7.21.13|4x|6b657074206b6570742074686569722062757420717561696e746c79206b65707420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.1.12.14|2|12 +1.3.6.1.4.1.674.10892.5.4.600.60.1.1.22.22|2|22 +1.3.6.1.4.1.674.10892.5.4.600.60.1.2.12.14|2|14 +1.3.6.1.4.1.674.10892.5.4.600.60.1.2.22.22|2|22 +1.3.6.1.4.1.674.10892.5.4.600.60.1.3.12.14|2|2 +1.3.6.1.4.1.674.10892.5.4.600.60.1.3.22.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.60.1.4.12.14|2|6 +1.3.6.1.4.1.674.10892.5.4.600.60.1.4.22.22|2|6 +1.3.6.1.4.1.674.10892.5.4.600.60.1.5.12.14|2|4 +1.3.6.1.4.1.674.10892.5.4.600.60.1.5.22.22|2|3 +1.3.6.1.4.1.674.10892.5.4.600.60.1.6.12.14|4x|7a6f6d6269657320717561696e746c7920666f727761726420616374656420717561696e746c79206163746564204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.600.60.1.6.22.22|4x|616374656420717561696e746c79207468656972204a61646564206f78656e20666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.600.60.1.7.12.14|2|20 +1.3.6.1.4.1.674.10892.5.4.600.60.1.7.22.22|2|7 +1.3.6.1.4.1.674.10892.5.4.600.60.1.8.12.14|4x|717561696e746c79206163746564206163746564206f78656e +1.3.6.1.4.1.674.10892.5.4.600.60.1.8.22.22|4x|746865697220717561696e746c79206b657074207468656972 +1.3.6.1.4.1.674.10892.5.4.600.60.1.9.12.14|2|15 +1.3.6.1.4.1.674.10892.5.4.600.60.1.9.22.22|2|26 +1.3.6.1.4.1.674.10892.5.4.600.60.1.10.12.14|4x|717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.600.60.1.10.22.22|4x|627574206f78656e20717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.11.12.14|4x|7a6f6d62696573206b657074206f78656e2064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.11.22.22|4x|6b657074206b657074206b657074207468656972206f78656e +1.3.6.1.4.1.674.10892.5.4.600.60.1.12.12.14|2|21 +1.3.6.1.4.1.674.10892.5.4.600.60.1.12.22.22|2|29 +1.3.6.1.4.1.674.10892.5.4.600.60.1.13.12.14|4x|7468656972207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.13.22.22|4x|64726976696e672064726976696e67204a6164656420627574 +1.3.6.1.4.1.674.10892.5.4.600.60.1.14.12.14|4x|717561696e746c7920717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.14.22.22|4x|6163746564207468656972204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.15.12.14|2|6 +1.3.6.1.4.1.674.10892.5.4.600.60.1.15.22.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.60.1.16.12.14|2|4 +1.3.6.1.4.1.674.10892.5.4.600.60.1.16.22.22|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.17.12.14|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.17.22.22|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.18.12.14|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.18.22.22|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.19.12.14|2|21 +1.3.6.1.4.1.674.10892.5.4.600.60.1.19.22.22|2|0 +1.3.6.1.4.1.674.10892.5.4.600.60.1.20.12.14|2|25 +1.3.6.1.4.1.674.10892.5.4.600.60.1.20.22.22|2|14 +1.3.6.1.4.1.674.10892.5.4.600.60.1.21.12.14|2|10 +1.3.6.1.4.1.674.10892.5.4.600.60.1.21.22.22|2|8 +1.3.6.1.4.1.674.10892.5.4.700.10.1.1.1.19|2|1 +1.3.6.1.4.1.674.10892.5.4.700.10.1.1.6.31|2|6 +1.3.6.1.4.1.674.10892.5.4.700.10.1.2.1.19|2|19 +1.3.6.1.4.1.674.10892.5.4.700.10.1.2.6.31|2|31 +1.3.6.1.4.1.674.10892.5.4.700.10.1.3.1.19|2|2 +1.3.6.1.4.1.674.10892.5.4.700.10.1.3.6.31|2|1 +1.3.6.1.4.1.674.10892.5.4.700.10.1.4.1.19|2|6 +1.3.6.1.4.1.674.10892.5.4.700.10.1.4.6.31|2|4 +1.3.6.1.4.1.674.10892.5.4.700.10.1.5.1.19|2|4 +1.3.6.1.4.1.674.10892.5.4.700.10.1.5.6.31|2|7 +1.3.6.1.4.1.674.10892.5.4.700.10.1.6.1.19|2|6 +1.3.6.1.4.1.674.10892.5.4.700.10.1.6.6.31|2|29 +1.3.6.1.4.1.674.10892.5.4.700.10.1.7.1.19|4x|64726976696e67206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.700.10.1.7.6.31|4x|7468656972204a6164656420717561696e746c79206275742062757420746865697220717561696e746c79206b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.700.10.1.8.1.19|2|3 +1.3.6.1.4.1.674.10892.5.4.700.10.1.8.6.31|2|6 +1.3.6.1.4.1.674.10892.5.4.700.12.1.1.8.11|2|8 +1.3.6.1.4.1.674.10892.5.4.700.12.1.1.19.3|2|19 +1.3.6.1.4.1.674.10892.5.4.700.12.1.2.8.11|2|11 +1.3.6.1.4.1.674.10892.5.4.700.12.1.2.19.3|2|3 +1.3.6.1.4.1.674.10892.5.4.700.12.1.3.8.11|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.3.19.3|2|1 +1.3.6.1.4.1.674.10892.5.4.700.12.1.4.8.11|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.4.19.3|2|1 +1.3.6.1.4.1.674.10892.5.4.700.12.1.5.8.11|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.5.19.3|2|5 +1.3.6.1.4.1.674.10892.5.4.700.12.1.6.8.11|2|11 +1.3.6.1.4.1.674.10892.5.4.700.12.1.6.19.3|2|21 +1.3.6.1.4.1.674.10892.5.4.700.12.1.7.8.11|2|9 +1.3.6.1.4.1.674.10892.5.4.700.12.1.7.19.3|2|10 +1.3.6.1.4.1.674.10892.5.4.700.12.1.8.8.11|4|acted +1.3.6.1.4.1.674.10892.5.4.700.12.1.8.19.3|4x|6163746564206f78656e20627574207a6f6d626965732064726976696e67206163746564204a61646564 +1.3.6.1.4.1.674.10892.5.4.700.12.1.9.8.11|2|23 +1.3.6.1.4.1.674.10892.5.4.700.12.1.9.19.3|2|18 +1.3.6.1.4.1.674.10892.5.4.700.12.1.10.8.11|2|3 +1.3.6.1.4.1.674.10892.5.4.700.12.1.10.19.3|2|26 +1.3.6.1.4.1.674.10892.5.4.700.12.1.11.8.11|2|13 +1.3.6.1.4.1.674.10892.5.4.700.12.1.11.19.3|2|18 +1.3.6.1.4.1.674.10892.5.4.700.12.1.12.8.11|2|7 +1.3.6.1.4.1.674.10892.5.4.700.12.1.12.19.3|2|17 +1.3.6.1.4.1.674.10892.5.4.700.12.1.13.8.11|2|21 +1.3.6.1.4.1.674.10892.5.4.700.12.1.13.19.3|2|7 +1.3.6.1.4.1.674.10892.5.4.700.12.1.14.8.11|2|7 +1.3.6.1.4.1.674.10892.5.4.700.12.1.14.19.3|2|30 +1.3.6.1.4.1.674.10892.5.4.700.12.1.15.8.11|2|11 +1.3.6.1.4.1.674.10892.5.4.700.12.1.15.19.3|2|4 +1.3.6.1.4.1.674.10892.5.4.700.12.1.16.8.11|2|4 +1.3.6.1.4.1.674.10892.5.4.700.12.1.16.19.3|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.17.8.11|2|8 +1.3.6.1.4.1.674.10892.5.4.700.12.1.17.19.3|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.18.8.11|2|1 +1.3.6.1.4.1.674.10892.5.4.700.12.1.18.19.3|2|1 +1.3.6.1.4.1.674.10892.5.4.700.12.1.19.8.11|4|acted +1.3.6.1.4.1.674.10892.5.4.700.12.1.19.19.3|4x|717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.4.700.20.1.1.7.28|2|7 +1.3.6.1.4.1.674.10892.5.4.700.20.1.1.15.28|2|15 +1.3.6.1.4.1.674.10892.5.4.700.20.1.2.7.28|2|28 +1.3.6.1.4.1.674.10892.5.4.700.20.1.2.15.28|2|28 +1.3.6.1.4.1.674.10892.5.4.700.20.1.3.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.3.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.4.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.4.15.28|2|6 +1.3.6.1.4.1.674.10892.5.4.700.20.1.5.7.28|2|6 +1.3.6.1.4.1.674.10892.5.4.700.20.1.5.15.28|2|3 +1.3.6.1.4.1.674.10892.5.4.700.20.1.6.7.28|2|12 +1.3.6.1.4.1.674.10892.5.4.700.20.1.6.15.28|2|14 +1.3.6.1.4.1.674.10892.5.4.700.20.1.7.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.7.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.8.7.28|4x|717561696e746c792074686569722062757420666f7277617264206163746564206163746564206b657074204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.700.20.1.8.15.28|4x|6275742064726976696e6720717561696e746c79206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.700.20.1.9.7.28|2|9 +1.3.6.1.4.1.674.10892.5.4.700.20.1.9.15.28|2|24 +1.3.6.1.4.1.674.10892.5.4.700.20.1.10.7.28|2|14 +1.3.6.1.4.1.674.10892.5.4.700.20.1.10.15.28|2|22 +1.3.6.1.4.1.674.10892.5.4.700.20.1.11.7.28|2|27 +1.3.6.1.4.1.674.10892.5.4.700.20.1.11.15.28|2|1 +1.3.6.1.4.1.674.10892.5.4.700.20.1.12.7.28|2|12 +1.3.6.1.4.1.674.10892.5.4.700.20.1.12.15.28|2|25 +1.3.6.1.4.1.674.10892.5.4.700.20.1.13.7.28|2|24 +1.3.6.1.4.1.674.10892.5.4.700.20.1.13.15.28|2|7 +1.3.6.1.4.1.674.10892.5.4.700.20.1.14.7.28|2|31 +1.3.6.1.4.1.674.10892.5.4.700.20.1.14.15.28|2|22 +1.3.6.1.4.1.674.10892.5.4.700.20.1.15.7.28|2|4 +1.3.6.1.4.1.674.10892.5.4.700.20.1.15.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.16.7.28|2|1 +1.3.6.1.4.1.674.10892.5.4.700.20.1.16.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.1.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.1.19.1|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.2.4.24|2|24 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.2.19.1|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.3.4.24|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.3.19.1|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.4.4.24|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.4.19.1|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.5.4.24|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.5.19.1|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.7.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.7.19.1|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.8.4.24|4x|4a61646564206b6570742064726976696e672064726976696e6720666f7277617264207468656972206163746564 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.8.19.1|4|driving +1.3.6.1.4.1.674.10892.5.4.1100.30.1.9.4.24|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.9.19.1|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.10.4.24|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.10.19.1|2|18 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.11.4.24|2|27 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.11.19.1|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.12.4.24|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.12.19.1|2|9 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.13.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.13.19.1|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.14.4.24|2|15 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.14.19.1|2|7 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.16.4.24|4x|7a6f6d6269657320717561696e746c792064726976696e6720717561696e746c7920666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.16.19.1|4x|717561696e746c7920627574206b657074 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.17.4.24|2|25 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.17.19.1|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.18.4.24|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.18.19.1|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.19.4.24|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.19.19.1|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.20.4.24|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.20.19.1|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.21.4.24|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.21.19.1|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.22.4.24|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.22.19.1|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.23.4.24|4x|627574206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.23.19.1|4x|6275742064726976696e67206f78656e206275742064726976696e67206f78656e206f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.26.4.24|4x|746865697220666f7277617264206f78656e +1.3.6.1.4.1.674.10892.5.4.1100.30.1.26.19.1|4x|7a6f6d6269657320717561696e746c79204a6164656420627574204a616465642064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.1.3.11|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.1.18.21|2|18 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.2.3.11|2|11 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.2.18.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.3.3.11|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.3.18.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.4.3.11|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.4.18.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.5.3.11|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.5.18.21|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.6.3.11|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.6.18.21|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.7.3.11|4x|64726976696e67207a6f6d62696573206f78656e2064726976696e67206b657074204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.7.18.21|4x|6b657074206b657074 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.1.22.21|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.1.29.4|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.2.22.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.2.29.4|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.3.22.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.3.29.4|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.4.22.21|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.4.29.4|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.5.22.21|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.5.29.4|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.7.22.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.7.29.4|2|26 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.8.22.21|4x|717561696e746c7920666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.8.29.4|4x|6b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.10.22.21|4|forward +1.3.6.1.4.1.674.10892.5.4.1100.50.1.10.29.4|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.14.22.21|2|7 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.14.29.4|2|28 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.15.22.21|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.15.29.4|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.21.22.21|4x|666f7277617264207a6f6d62696573204a61646564206b65707420717561696e746c79206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.21.29.4|4|driving +1.3.6.1.4.1.674.10892.5.4.1100.50.1.22.22.21|4x|4a61646564206163746564207468656972204a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.22.29.4|4x|7468656972206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.23.22.21|4x|6163746564204a61646564206163746564206f78656e2061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.23.29.4|4x|4a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.26.22.21|4x|6f78656e20627574206163746564207468656972206f78656e206b6570742061637465642064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.26.29.4|4|kept +1.3.6.1.4.1.674.10892.5.4.1100.50.1.27.22.21|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.27.29.4|2|23 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.1.10.9|2|10 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.1.20.20|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.2.10.9|2|9 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.2.20.20|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.3.10.9|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.3.20.20|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.4.10.9|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.4.20.20|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.5.10.9|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.5.20.20|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.7.10.9|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.7.20.20|2|10 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.8.10.9|4|acted +1.3.6.1.4.1.674.10892.5.4.1100.80.1.8.20.20|4x|4a61646564204a61646564204a61646564206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.9.10.9|4|device1 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.9.20.20|4|device2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.12.10.9|4|kept +1.3.6.1.4.1.674.10892.5.4.1100.80.1.12.20.20|4x|7468656972206b6570742064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.1.3.23|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.1.29.25|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.2.3.23|2|23 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.2.29.25|2|25 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.3.3.23|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.3.29.25|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.4.3.23|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.4.29.25|2|11 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.6.3.23|4x|7a6f6d62696573207468656972207a6f6d62696573206163746564206163746564207468656972206275742062757420627574 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.6.29.25|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.7.3.23|4x|7a6f6d626965732064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.4.1100.90.1.7.29.25|4x|7468656972206b657074206b657074207468656972206b657074204a6164656420666f727761726420616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.15.3.23|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.15.29.25|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.16.3.23|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.16.29.25|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.17.3.23|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.17.29.25|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.18.3.23|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.18.29.25|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.19.3.23|2|12 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.19.29.25|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.23.3.23|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.23.29.25|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.27.3.23|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.27.29.25|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.28.3.23|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.28.29.25|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.29.3.23|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.29.29.25|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.30.3.23|4|device1 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.30.29.25|4|device2 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.1.19.17|2|19 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.1.21.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.2.19.17|2|17 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.2.21.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.3.19.17|2|4 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.3.21.21|2|2 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.4.19.17|2|2 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.4.21.21|2|8 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.5.19.17|2|3 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.5.21.21|2|1 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.6.19.17|2|1 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.6.21.21|2|1 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.7.19.17|2|13 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.7.21.21|2|10 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.8.19.17|4|slot1 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.8.21.21|4|slot2 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.11.19.17|2|5 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.11.21.21|2|3 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.1.2.11|2|2 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.1.8.3|2|8 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.2.2.11|2|11 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.2.8.3|2|3 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.3.2.11|2|1 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.3.8.3|2|2 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.6.2.11|4x|666f7277617264206b6570742062757420717561696e746c79206b657074207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.6.8.3|4x|6b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.7.2.11|4x|6f78656e20717561696e746c79204a61646564207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.7.8.3|4x|6f78656e2064726976696e67206b657074207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.8.2.11|4x|627574207a6f6d6269657320627574206f78656e206163746564206163746564 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.8.8.3|4x|666f727761726420666f72776172642061637465642064726976696e67206b6570742064726976696e672064726976696e67204a61646564206f78656e +1.3.6.1.4.1.674.10892.5.4.2000.10.1.9.2.11|4x|666f72776172642062757420746865697220627574207a6f6d6269657320717561696e746c79207a6f6d62696573204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.9.8.3|4x|7468656972207468656972204a6164656420627574206163746564204a6164656420616374656420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.12.2.11|4x|627574206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.12.8.3|4x|717561696e746c7920717561696e746c79206f78656e206f78656e206b657074206b65707420746865697220616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.4|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.4|4|controller1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.21|4|controller2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.4|2|10 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.4|4x|616374656420627574206b65707420717561696e746c79206f78656e207a6f6d6269657320717561696e746c7920666f7277617264206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.21|4x|6f78656e206b6570742064726976696e6720746865697220616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.4|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.21|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.4|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.4|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.4|4x|6b657074207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.21|4x|4a61646564206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.4|4x|717561696e746c79206b65707420616374656420616374656420627574206163746564207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.21|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.4|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.21|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.4|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.21|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.4|2|18 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.21|2|27 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.4|2|23 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.21|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.4|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.4|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.21|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.4|4x|717561696e746c79206f78656e2064726976696e6720717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.21|4x|4a6164656420666f7277617264204a6164656420717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.4|4x|717561696e746c79207a6f6d626965732061637465642064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.21|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.4|4x|6b65707420717561696e746c792064726976696e672064726976696e6720627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.21|4x|717561696e746c7920717561696e746c79207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.4|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.21|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.7|2|7 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.26|2|26 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.7|4x|717561696e746c7920717561696e746c79207a6f6d6269657320666f727761726420616374656420717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.26|4x|666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.7|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.26|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.7|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.26|4|Jaded +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.7|4x|6f78656e20627574206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.26|4x|6b65707420627574206b657074206f78656e207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.7|4|kept +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.26|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.7|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.26|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.7|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.26|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.7|4x|4a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.26|4x|4a61646564206f78656e2064726976696e67204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.7|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.26|4x|6f78656e206f78656e2064726976696e67206275742064726976696e67207468656972206f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.7|2|15 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.26|2|23 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.7|2|28 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.26|2|28 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.7|4x|7468656972206f78656e207468656972206163746564204a6164656420666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.26|4x|6275742074686569722074686569722062757420666f72776172642062757420616374656420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.7|4x|6163746564207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.26|4x|717561696e746c79207a6f6d6269657320717561696e746c79204a61646564206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.7|4x|666f7277617264204a61646564206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.26|4x|64726976696e67206b65707420717561696e746c79204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.7|4x|7468656972206f78656e20666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.26|4x|6b657074206b65707420627574206b657074206b657074206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.7|4x|666f7277617264204a6164656420717561696e746c7920666f72776172642061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.26|4x|61637465642074686569722064726976696e67206b6570742064726976696e67206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.7|4x|64726976696e6720717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.26|4x|717561696e746c79204a61646564206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.7|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.26|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.7|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.26|4x|6b65707420666f7277617264204a6164656420666f7277617264206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.7|4x|7468656972204a61646564206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.26|4x|64726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.7|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.26|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.8|4x|6469736b31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.21|4x|6469736b32 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.8|4x|4a61646564204a61646564206f78656e204a61646564206b657074206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.21|4x|666f7277617264206f78656e2062757420627574204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.8|4x|717561696e746c7920717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.21|4x|6163746564206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.8|4x|666f727761726420616374656420616374656420666f7277617264207a6f6d62696573206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.21|4x|6b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.8|4|driving +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.21|4x|627574206b657074204a61646564207a6f6d6269657320616374656420627574206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.8|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.21|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.8|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.21|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.8|4x|74686569722064726976696e67206f78656e207a6f6d6269657320746865697220666f727761726420746865697220717561696e746c7920717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.21|4x|666f727761726420666f7277617264207a6f6d62696573206b65707420717561696e746c79206f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.8|4x|6f78656e206163746564204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.21|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.8|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.8|4x|64726976696e67206f78656e206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.21|4x|717561696e746c7920666f727761726420746865697220627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.8|4|forward +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.21|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.8|4x|4a61646564206f78656e206f78656e206163746564204a61646564207a6f6d62696573206275742062757420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.21|4x|717561696e746c792064726976696e6720666f7277617264207a6f6d62696573206b657074207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.8|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.21|2|19 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.8|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.8|4x|666f7277617264206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.21|4x|6b657074206f78656e206f78656e2064726976696e67206163746564204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.8|4x|6f78656e20666f7277617264206f78656e206f78656e20666f727761726420627574207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.21|4x|627574207a6f6d626965732062757420746865697220717561696e746c7920746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.8|2|29 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.8|4x|666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.21|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.8|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.21|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.8|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.1.19|2|19 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.1.24|2|24 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.2.19|4x|64726976696e6720717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.2.24|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.4.19|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.4.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.11.19|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.11.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.15.19|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.15.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.20.19|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.20.24|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.21.19|4|driving +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.21.24|4x|666f7277617264207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.1.13|2|13 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.1.16|2|16 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.2.13|4x|737570706c7931 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.2.16|4x|737570706c7932 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.4.13|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.4.16|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.7.13|4x|7468656972206275742064726976696e67207a6f6d62696573206b65707420666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.7.16|4x|717561696e746c7920717561696e746c7920666f72776172642074686569722064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.9.13|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.9.16|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.15.13|4x|666f7277617264207468656972206f78656e206163746564206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.15.16|4x|717561696e746c7920627574206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.16.13|4x|4a6164656420627574206b65707420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.16.16|4x|62757420717561696e746c7920627574207a6f6d62696573204a61646564206163746564207468656972204a6164656420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.1.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.2.6|4x|7a6f6d62696573206b657074204a61646564206f78656e2064726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.2.8|4x|6b65707420627574207a6f6d626965732061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.4.6|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.4.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.7.6|2|24 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.7.8|2|25 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.8.6|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.8.8|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.9.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.9.8|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.10.6|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.10.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.11.6|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.11.8|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.13.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.13.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.15.6|4|Jaded +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.15.8|4x|64726976696e6720717561696e746c79204a6164656420717561696e746c79206f78656e20717561696e746c7920627574207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.16.6|4x|7a6f6d626965732064726976696e67204a6164656420616374656420717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.16.8|4x|6b657074204a6164656420627574207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.1.14|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.1.30|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.2.14|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.2.30|4x|6b657074204a616465642064726976696e67204a61646564207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.4.14|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.4.30|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.6.14|4x|64726976696e67204a616465642062757420627574206163746564204a6164656420717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.6.30|4x|666f7277617264206163746564206f78656e20666f7277617264204a6164656420666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.8.14|4x|6f78656e2064726976696e672062757420717561696e746c79206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.8.30|4x|4a6164656420616374656420627574206b657074206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.11.14|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.11.30|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.15.14|4x|717561696e746c79207a6f6d626965732061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.15.30|4x|746865697220627574206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.16.14|4x|7a6f6d626965732064726976696e67207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.16.30|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.1.17|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.1.18|2|18 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.4.17|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.4.18|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.6.17|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.6.18|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.10.17|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.10.18|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.20.17|4x|627574206275742061637465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.20.18|4x|6f78656e206163746564204a6164656420717561696e746c79206b65707420666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.21.17|4|battery1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.21.18|4|battery2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.2|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.2|4x|64726976696e6720717561696e746c79206b657074204a6164656420666f72776172642062757420666f7277617264206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.8|4x|7a6f6d6269657320717561696e746c79206b657074206b6570742062757420717561696e746c7920666f727761726420717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.2|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.8|2|25 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.2|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.2|2|7 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.8|2|10 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.2|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.8|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.2|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.2|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.8|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.2|2|12 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.8|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.2|4x|4a6164656420717561696e746c7920717561696e746c792064726976696e67206b657074207468656972206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.8|4x|6f78656e206b6570742064726976696e6720717561696e746c79207a6f6d62696573204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.2|4x|6f78656e2064726976696e67204a61646564206f78656e206f78656e204a61646564204a616465642062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.8|4x|62757420746865697220666f7277617264206b65707420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.2|4x|4a6164656420627574204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.8|4x|6f78656e20616374656420746865697220746865697220666f727761726420627574204a61646564207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.2|4x|6163746564206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.8|4x|4a61646564207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.2|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.8|2|27 diff --git a/test/new-e2e/ndm/snmp/compose/data/if.snmprec b/test/new-e2e/ndm/snmp/compose/data/if.snmprec new file mode 100644 index 0000000000000..d8dddc43c8eb3 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/if.snmprec @@ -0,0 +1,2364 @@ +1.3.6.1.2.1.1.1.0|4x|4249472d4950205669727475616c2045646974696f6e203a204c696e757820332e31302e302d3836322e31342e342e656c372e76652e7838365f3634203a204249472d495020736f6674776172652072656c656173652031352e302e312c206275696c6420302e302e3131 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.3375.2.1.3.4.43 +1.3.6.1.2.1.1.3.0|67|181753721 +1.3.6.1.2.1.1.4.0|4x|437573746f6d6572204e616d65203c61646d696e40637573746f6d65722e636f6d3e +1.3.6.1.2.1.1.5.0|4x|66352d6269672d69702d6164632d676f6f642d62796f6c2d312d766d2e632e64617461646f672d696e746567726174696f6e732d6c61622e696e7465726e616c +1.3.6.1.2.1.1.6.0|4x|4e6574776f726b20436c6f7365742031 +1.3.6.1.2.1.1.7.0|2|78 +1.3.6.1.2.1.1.8.0|67|8266 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.6.3.11.3.1.1 +1.3.6.1.2.1.1.9.1.2.2|6|1.3.6.1.6.3.15.2.1.1 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.6.3.10.3.1.1 +1.3.6.1.2.1.1.9.1.2.4|6|1.3.6.1.6.3.1 +1.3.6.1.2.1.1.9.1.2.5|6|1.3.6.1.6.3.16.2.2.1 +1.3.6.1.2.1.1.9.1.2.6|6|1.3.6.1.6.3.13.3.1.3 +1.3.6.1.2.1.1.9.1.2.7|6|1.3.6.1.2.1.92 +1.3.6.1.2.1.1.9.1.2.8|6|1.3.6.1.2.1.31 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.2.1.48 +1.3.6.1.2.1.1.9.1.3.1|4x|546865204d494220666f72204d6573736167652050726f63657373696e6720616e64204469737061746368696e672e +1.3.6.1.2.1.1.9.1.3.2|4x|546865206d616e6167656d656e7420696e666f726d6174696f6e20646566696e6974696f6e7320666f722074686520534e4d5020557365722d6261736564205365637572697479204d6f64656c2e +1.3.6.1.2.1.1.9.1.3.3|4x|54686520534e4d50204d616e6167656d656e7420417263686974656374757265204d49422e +1.3.6.1.2.1.1.9.1.3.4|4x|546865204d4942206d6f64756c6520666f7220534e4d50763220656e746974696573 +1.3.6.1.2.1.1.9.1.3.5|4x|566965772d62617365642041636365737320436f6e74726f6c204d6f64656c20666f7220534e4d502e +1.3.6.1.2.1.1.9.1.3.6|4x|546865204d4942206d6f64756c657320666f72206d616e6167696e6720534e4d50204e6f74696669636174696f6e2c20706c75732066696c746572696e672e +1.3.6.1.2.1.1.9.1.3.7|4x|546865204d4942206d6f64756c6520666f72206c6f6767696e6720534e4d50204e6f74696669636174696f6e732e +1.3.6.1.2.1.1.9.1.3.8|4x|546865204d4942206d6f64756c6520746f2064657363726962652067656e65726963206f626a6563747320666f72206e6574776f726b20696e74657266616365207375622d6c6179657273 +1.3.6.1.2.1.1.9.1.3.9|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e6720495020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.4.1|67|92 +1.3.6.1.2.1.1.9.1.4.2|67|92 +1.3.6.1.2.1.1.9.1.4.3|67|92 +1.3.6.1.2.1.1.9.1.4.4|67|96 +1.3.6.1.2.1.1.9.1.4.5|67|96 +1.3.6.1.2.1.1.9.1.4.6|67|108 +1.3.6.1.2.1.1.9.1.4.7|67|108 +1.3.6.1.2.1.1.9.1.4.8|67|8261 +1.3.6.1.2.1.1.9.1.4.9|67|8266 +1.3.6.1.2.1.2.1.0|2|5 +1.3.6.1.2.1.2.2.1.1.32|2|32 +1.3.6.1.2.1.2.2.1.1.48|2|48 +1.3.6.1.2.1.2.2.1.1.80|2|80 +1.3.6.1.2.1.2.2.1.1.96|2|96 +1.3.6.1.2.1.2.2.1.1.112|2|112 +1.3.6.1.2.1.2.2.1.2.32|4|mgmt +1.3.6.1.2.1.2.2.1.2.48|4x|312e30 +1.3.6.1.2.1.2.2.1.2.80|4x|2f436f6d6d6f6e2f687474702d74756e6e656c +1.3.6.1.2.1.2.2.1.2.96|4x|2f436f6d6d6f6e2f736f636b732d74756e6e656c +1.3.6.1.2.1.2.2.1.2.112|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.2.1.2.2.1.3.32|2|6 +1.3.6.1.2.1.2.2.1.3.48|2|6 +1.3.6.1.2.1.2.2.1.3.80|2|0 +1.3.6.1.2.1.2.2.1.3.96|2|0 +1.3.6.1.2.1.2.2.1.3.112|2|6 +1.3.6.1.2.1.2.2.1.4.32|2|1460 +1.3.6.1.2.1.2.2.1.4.48|2|1460 +1.3.6.1.2.1.2.2.1.4.80|2|0 +1.3.6.1.2.1.2.2.1.4.96|2|0 +1.3.6.1.2.1.2.2.1.4.112|2|1460 +1.3.6.1.2.1.2.2.1.5.32|66|100000000 +1.3.6.1.2.1.2.2.1.5.48|66|4294967295 +1.3.6.1.2.1.2.2.1.5.80|66|0 +1.3.6.1.2.1.2.2.1.5.96|66|0 +1.3.6.1.2.1.2.2.1.5.112|66|4294967295 +1.3.6.1.2.1.2.2.1.6.32|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.48|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.80|4x|42010aa40034 +1.3.6.1.2.1.2.2.1.6.96|4x|42010aa40034 +1.3.6.1.2.1.2.2.1.6.112|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.7.32|2|1 +1.3.6.1.2.1.2.2.1.7.48|2|1 +1.3.6.1.2.1.2.2.1.7.80|2|1 +1.3.6.1.2.1.2.2.1.7.96|2|1 +1.3.6.1.2.1.2.2.1.7.112|2|1 +1.3.6.1.2.1.2.2.1.8.32|2|1 +1.3.6.1.2.1.2.2.1.8.48|2|1 +1.3.6.1.2.1.2.2.1.8.80|2|4 +1.3.6.1.2.1.2.2.1.8.96|2|4 +1.3.6.1.2.1.2.2.1.8.112|2|1 +1.3.6.1.2.1.2.2.1.9.32|67|0 +1.3.6.1.2.1.2.2.1.9.48|67|0 +1.3.6.1.2.1.2.2.1.9.80|67|0 +1.3.6.1.2.1.2.2.1.9.96|67|0 +1.3.6.1.2.1.2.2.1.9.112|67|0 +1.3.6.1.2.1.2.2.1.10.32|65|461436066 +1.3.6.1.2.1.2.2.1.10.48|65|605861862 +1.3.6.1.2.1.2.2.1.10.80|65|0 +1.3.6.1.2.1.2.2.1.10.96|65|0 +1.3.6.1.2.1.2.2.1.10.112|65|396657417 +1.3.6.1.2.1.2.2.1.11.32|65|928558 +1.3.6.1.2.1.2.2.1.11.48|65|797516 +1.3.6.1.2.1.2.2.1.11.80|65|0 +1.3.6.1.2.1.2.2.1.11.96|65|0 +1.3.6.1.2.1.2.2.1.11.112|65|896960 +1.3.6.1.2.1.2.2.1.12.32|65|0 +1.3.6.1.2.1.2.2.1.12.48|65|0 +1.3.6.1.2.1.2.2.1.12.80|65|0 +1.3.6.1.2.1.2.2.1.12.96|65|0 +1.3.6.1.2.1.2.2.1.12.112|65|0 +1.3.6.1.2.1.2.2.1.13.32|65|0 +1.3.6.1.2.1.2.2.1.13.48|65|0 +1.3.6.1.2.1.2.2.1.13.80|65|0 +1.3.6.1.2.1.2.2.1.13.96|65|0 +1.3.6.1.2.1.2.2.1.13.112|65|226244 +1.3.6.1.2.1.2.2.1.14.32|65|0 +1.3.6.1.2.1.2.2.1.14.48|65|0 +1.3.6.1.2.1.2.2.1.14.80|65|0 +1.3.6.1.2.1.2.2.1.14.96|65|0 +1.3.6.1.2.1.2.2.1.14.112|65|0 +1.3.6.1.2.1.2.2.1.15.32|65|0 +1.3.6.1.2.1.2.2.1.15.48|65|0 +1.3.6.1.2.1.2.2.1.15.80|65|0 +1.3.6.1.2.1.2.2.1.15.96|65|0 +1.3.6.1.2.1.2.2.1.15.112|65|0 +1.3.6.1.2.1.2.2.1.16.32|65|311840645 +1.3.6.1.2.1.2.2.1.16.48|65|67333343 +1.3.6.1.2.1.2.2.1.16.80|65|0 +1.3.6.1.2.1.2.2.1.16.96|65|0 +1.3.6.1.2.1.2.2.1.16.112|65|405970846 +1.3.6.1.2.1.2.2.1.17.32|65|771556 +1.3.6.1.2.1.2.2.1.17.48|65|521981 +1.3.6.1.2.1.2.2.1.17.80|65|0 +1.3.6.1.2.1.2.2.1.17.96|65|0 +1.3.6.1.2.1.2.2.1.17.112|65|878067 +1.3.6.1.2.1.2.2.1.18.32|65|0 +1.3.6.1.2.1.2.2.1.18.48|65|0 +1.3.6.1.2.1.2.2.1.18.80|65|0 +1.3.6.1.2.1.2.2.1.18.96|65|0 +1.3.6.1.2.1.2.2.1.18.112|65|0 +1.3.6.1.2.1.2.2.1.19.32|65|0 +1.3.6.1.2.1.2.2.1.19.48|65|0 +1.3.6.1.2.1.2.2.1.19.80|65|0 +1.3.6.1.2.1.2.2.1.19.96|65|0 +1.3.6.1.2.1.2.2.1.19.112|65|0 +1.3.6.1.2.1.2.2.1.20.32|65|0 +1.3.6.1.2.1.2.2.1.20.48|65|0 +1.3.6.1.2.1.2.2.1.20.80|65|0 +1.3.6.1.2.1.2.2.1.20.96|65|0 +1.3.6.1.2.1.2.2.1.20.112|65|0 +1.3.6.1.2.1.2.2.1.21.32|66|0 +1.3.6.1.2.1.2.2.1.21.48|66|0 +1.3.6.1.2.1.2.2.1.21.80|66|0 +1.3.6.1.2.1.2.2.1.21.96|66|0 +1.3.6.1.2.1.2.2.1.21.112|66|0 +1.3.6.1.2.1.2.2.1.22.32|6|0.0 +1.3.6.1.2.1.2.2.1.22.48|6|0.0 +1.3.6.1.2.1.2.2.1.22.80|6|0.0 +1.3.6.1.2.1.2.2.1.22.96|6|0.0 +1.3.6.1.2.1.2.2.1.22.112|6|0.0 +1.3.6.1.2.1.4.1.0|2|2 +1.3.6.1.2.1.4.2.0|2|64 +1.3.6.1.2.1.4.13.0|2|30 +1.3.6.1.2.1.4.20.1.1.10.164.0.51|64x|0aa40033 +1.3.6.1.2.1.4.20.1.2.10.164.0.51|2|32 +1.3.6.1.2.1.4.20.1.3.10.164.0.51|64x|ffffffff +1.3.6.1.2.1.4.20.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.25.0|2|2 +1.3.6.1.2.1.4.26.0|2|64 +1.3.6.1.2.1.4.31.1.1.1.1|2|1 +1.3.6.1.2.1.4.31.1.1.1.2|2|2 +1.3.6.1.2.1.4.31.1.1.3.1|65|8634962 +1.3.6.1.2.1.4.31.1.1.3.2|65|15145 +1.3.6.1.2.1.4.31.1.1.4.1|70|8634962 +1.3.6.1.2.1.4.31.1.1.4.2|70|15145 +1.3.6.1.2.1.4.31.1.1.7.1|65|0 +1.3.6.1.2.1.4.31.1.1.7.2|65|0 +1.3.6.1.2.1.4.31.1.1.14.1|65|0 +1.3.6.1.2.1.4.31.1.1.14.2|65|0 +1.3.6.1.2.1.4.31.1.1.16.1|65|0 +1.3.6.1.2.1.4.31.1.1.16.2|65|0 +1.3.6.1.2.1.4.31.1.1.26.1|65|0 +1.3.6.1.2.1.4.31.1.1.26.2|65|0 +1.3.6.1.2.1.4.31.1.1.28.1|65|0 +1.3.6.1.2.1.4.31.1.1.28.2|65|0 +1.3.6.1.2.1.4.31.1.1.30.1|65|8624653 +1.3.6.1.2.1.4.31.1.1.30.2|65|0 +1.3.6.1.2.1.4.31.1.1.31.1|70|8624653 +1.3.6.1.2.1.4.31.1.1.31.2|70|0 +1.3.6.1.2.1.4.31.1.1.34.1|65|0 +1.3.6.1.2.1.4.31.1.1.34.2|65|15145 +1.3.6.1.2.1.4.31.1.1.35.1|70|0 +1.3.6.1.2.1.4.31.1.1.35.2|70|15145 +1.3.6.1.2.1.4.31.1.1.38.1|65|0 +1.3.6.1.2.1.4.31.1.1.38.2|65|0 +1.3.6.1.2.1.4.31.1.1.39.1|70|0 +1.3.6.1.2.1.4.31.1.1.39.2|70|0 +1.3.6.1.2.1.4.31.1.1.47.1|66|2000 +1.3.6.1.2.1.4.31.1.1.47.2|66|2000 +1.3.6.1.2.1.4.32.1.5.32.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.5.112.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.6.32.1.4.10.164.0.51.32|2|1 +1.3.6.1.2.1.4.32.1.6.112.1.4.10.164.0.51.32|2|1 +1.3.6.1.2.1.4.32.1.7.32.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.7.112.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.8.32.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.8.112.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.9.32.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.9.112.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.33.0|2|459515095 +1.3.6.1.2.1.4.34.1.3.1.4.10.164.0.51|2|32 +1.3.6.1.2.1.4.34.1.4.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.5.1.4.10.164.0.51|6|1.3.6.1.2.1.4.32.1.5.32.1.4.10.164.0.51.32 +1.3.6.1.2.1.4.34.1.6.1.4.10.164.0.51|2|2 +1.3.6.1.2.1.4.34.1.7.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.8.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.34.1.10.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.11.1.4.10.164.0.51|2|3 +1.3.6.1.2.1.4.35.1.4.32.1.4.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.112.1.4.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.5.32.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.35.1.5.112.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.35.1.6.32.1.4.10.164.0.51|2|4 +1.3.6.1.2.1.4.35.1.6.112.1.4.10.164.0.51|2|4 +1.3.6.1.2.1.4.35.1.7.32.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.7.112.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.8.32.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.8.112.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.5.29.1.2.1|65|0 +1.3.6.1.2.1.5.29.1.2.2|65|15 +1.3.6.1.2.1.5.29.1.3.1|65|0 +1.3.6.1.2.1.5.29.1.3.2|65|35 +1.3.6.1.2.1.5.29.1.4.1|65|0 +1.3.6.1.2.1.5.29.1.4.2|65|30 +1.3.6.1.2.1.5.29.1.5.1|65|0 +1.3.6.1.2.1.5.29.1.5.2|65|0 +1.3.6.1.2.1.11.1.0|65|174703 +1.3.6.1.2.1.11.2.0|65|174606 +1.3.6.1.2.1.11.3.0|65|0 +1.3.6.1.2.1.11.4.0|65|0 +1.3.6.1.2.1.11.5.0|65|0 +1.3.6.1.2.1.11.6.0|65|0 +1.3.6.1.2.1.11.8.0|65|0 +1.3.6.1.2.1.11.9.0|65|0 +1.3.6.1.2.1.11.10.0|65|0 +1.3.6.1.2.1.11.11.0|65|0 +1.3.6.1.2.1.11.12.0|65|0 +1.3.6.1.2.1.11.13.0|65|795265 +1.3.6.1.2.1.11.14.0|65|0 +1.3.6.1.2.1.11.15.0|65|5815 +1.3.6.1.2.1.11.16.0|65|147446 +1.3.6.1.2.1.11.17.0|65|0 +1.3.6.1.2.1.11.18.0|65|0 +1.3.6.1.2.1.11.19.0|65|0 +1.3.6.1.2.1.11.20.0|65|0 +1.3.6.1.2.1.11.21.0|65|0 +1.3.6.1.2.1.11.22.0|65|0 +1.3.6.1.2.1.11.24.0|65|0 +1.3.6.1.2.1.11.25.0|65|0 +1.3.6.1.2.1.11.26.0|65|0 +1.3.6.1.2.1.11.27.0|65|0 +1.3.6.1.2.1.11.28.0|65|174630 +1.3.6.1.2.1.11.29.0|65|0 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.11.31.0|65|0 +1.3.6.1.2.1.11.32.0|65|0 +1.3.6.1.2.1.25.1.1.0|67|182098229 +1.3.6.1.2.1.25.1.2.0|4x|07e30a1504001d002d0700 +1.3.6.1.2.1.25.1.3.0|2|393216 +1.3.6.1.2.1.25.1.4.0|4x|726f20726f6f743d555549443d37313463316461302d646562372d346230332d383830642d34636564383531313965333520636f6e736f6c653d747479302020636f6e736f6c653d74747953302070616e69633d3120706c6174666f726d3d5a3130302064656661756c745f6370755f6f726465722071756965740a +1.3.6.1.2.1.25.1.5.0|66|0 +1.3.6.1.2.1.25.1.6.0|66|190 +1.3.6.1.2.1.25.1.7.0|2|0 +1.3.6.1.2.1.25.2.2.0|2|7660752 +1.3.6.1.2.1.25.2.3.1.1.1|2|1 +1.3.6.1.2.1.25.2.3.1.1.3|2|3 +1.3.6.1.2.1.25.2.3.1.1.6|2|6 +1.3.6.1.2.1.25.2.3.1.1.7|2|7 +1.3.6.1.2.1.25.2.3.1.1.8|2|8 +1.3.6.1.2.1.25.2.3.1.1.10|2|10 +1.3.6.1.2.1.25.2.3.1.1.31|2|31 +1.3.6.1.2.1.25.2.3.1.1.32|2|32 +1.3.6.1.2.1.25.2.3.1.1.37|2|37 +1.3.6.1.2.1.25.2.3.1.1.39|2|39 +1.3.6.1.2.1.25.2.3.1.1.40|2|40 +1.3.6.1.2.1.25.2.3.1.1.44|2|44 +1.3.6.1.2.1.25.2.3.1.1.50|2|50 +1.3.6.1.2.1.25.2.3.1.1.51|2|51 +1.3.6.1.2.1.25.2.3.1.1.52|2|52 +1.3.6.1.2.1.25.2.3.1.1.53|2|53 +1.3.6.1.2.1.25.2.3.1.1.54|2|54 +1.3.6.1.2.1.25.2.3.1.1.55|2|55 +1.3.6.1.2.1.25.2.3.1.1.56|2|56 +1.3.6.1.2.1.25.2.3.1.1.57|2|57 +1.3.6.1.2.1.25.2.3.1.1.58|2|58 +1.3.6.1.2.1.25.2.3.1.1.59|2|59 +1.3.6.1.2.1.25.2.3.1.2.1|6|1.3.6.1.2.1.25.2.1.2 +1.3.6.1.2.1.25.2.3.1.2.3|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.6|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.7|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.8|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.10|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.31|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.32|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.37|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.39|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.40|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.44|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.50|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.51|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.52|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.53|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.54|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.55|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.56|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.57|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.58|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.59|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.3.1|4x|506879736963616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.3|4x|5669727475616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.6|4x|4d656d6f72792062756666657273 +1.3.6.1.2.1.25.2.3.1.3.7|4x|436163686564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.8|4x|536861726564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.10|4x|53776170207370616365 +1.3.6.1.2.1.25.2.3.1.3.31|4x|2f +1.3.6.1.2.1.25.2.3.1.3.32|4x|2f766172 +1.3.6.1.2.1.25.2.3.1.3.37|4x|2f6465762f73686d +1.3.6.1.2.1.25.2.3.1.3.39|4x|2f72756e +1.3.6.1.2.1.25.2.3.1.3.40|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.2.3.1.3.44|4x|2f757372 +1.3.6.1.2.1.25.2.3.1.3.50|4x|2f736861726564 +1.3.6.1.2.1.25.2.3.1.3.51|4x|2f7368617265642f7272642e312e32 +1.3.6.1.2.1.25.2.3.1.3.52|4x|2f61707064617461 +1.3.6.1.2.1.25.2.3.1.3.53|4x|2f636f6e666967 +1.3.6.1.2.1.25.2.3.1.3.54|4x|2f7661722f70726f6d7074 +1.3.6.1.2.1.25.2.3.1.3.55|4x|2f7661722f746d73746174 +1.3.6.1.2.1.25.2.3.1.3.56|4x|2f7661722f6c6f67 +1.3.6.1.2.1.25.2.3.1.3.57|4x|2f7661722f6c6f697063 +1.3.6.1.2.1.25.2.3.1.3.58|4x|2f72756e2f757365722f3931 +1.3.6.1.2.1.25.2.3.1.3.59|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.2.1.25.2.3.1.4.1|2|1024 +1.3.6.1.2.1.25.2.3.1.4.3|2|1024 +1.3.6.1.2.1.25.2.3.1.4.6|2|1024 +1.3.6.1.2.1.25.2.3.1.4.7|2|1024 +1.3.6.1.2.1.25.2.3.1.4.8|2|1024 +1.3.6.1.2.1.25.2.3.1.4.10|2|1024 +1.3.6.1.2.1.25.2.3.1.4.31|2|1024 +1.3.6.1.2.1.25.2.3.1.4.32|2|4096 +1.3.6.1.2.1.25.2.3.1.4.37|2|4096 +1.3.6.1.2.1.25.2.3.1.4.39|2|4096 +1.3.6.1.2.1.25.2.3.1.4.40|2|4096 +1.3.6.1.2.1.25.2.3.1.4.44|2|4096 +1.3.6.1.2.1.25.2.3.1.4.50|2|4096 +1.3.6.1.2.1.25.2.3.1.4.51|2|4096 +1.3.6.1.2.1.25.2.3.1.4.52|2|1024 +1.3.6.1.2.1.25.2.3.1.4.53|2|1024 +1.3.6.1.2.1.25.2.3.1.4.54|2|4096 +1.3.6.1.2.1.25.2.3.1.4.55|2|4096 +1.3.6.1.2.1.25.2.3.1.4.56|2|4096 +1.3.6.1.2.1.25.2.3.1.4.57|2|4096 +1.3.6.1.2.1.25.2.3.1.4.58|2|4096 +1.3.6.1.2.1.25.2.3.1.4.59|2|4096 +1.3.6.1.2.1.25.2.3.1.5.1|2|7660752 +1.3.6.1.2.1.25.2.3.1.5.3|2|8684748 +1.3.6.1.2.1.25.2.3.1.5.6|2|7660752 +1.3.6.1.2.1.25.2.3.1.5.7|2|431048 +1.3.6.1.2.1.25.2.3.1.5.8|2|54064 +1.3.6.1.2.1.25.2.3.1.5.10|2|1023996 +1.3.6.1.2.1.25.2.3.1.5.31|2|428150 +1.3.6.1.2.1.25.2.3.1.5.32|2|235782 +1.3.6.1.2.1.25.2.3.1.5.37|2|957594 +1.3.6.1.2.1.25.2.3.1.5.39|2|957594 +1.3.6.1.2.1.25.2.3.1.5.40|2|957594 +1.3.6.1.2.1.25.2.3.1.5.44|2|1296662 +1.3.6.1.2.1.25.2.3.1.5.50|2|3837692 +1.3.6.1.2.1.25.2.3.1.5.51|2|957594 +1.3.6.1.2.1.25.2.3.1.5.52|2|31729 +1.3.6.1.2.1.25.2.3.1.5.53|2|479716 +1.3.6.1.2.1.25.2.3.1.5.54|2|1024 +1.3.6.1.2.1.25.2.3.1.5.55|2|957594 +1.3.6.1.2.1.25.2.3.1.5.56|2|247878 +1.3.6.1.2.1.25.2.3.1.5.57|2|957594 +1.3.6.1.2.1.25.2.3.1.5.58|2|191519 +1.3.6.1.2.1.25.2.3.1.5.59|2|235782 +1.3.6.1.2.1.25.2.3.1.6.1|2|7551356 +1.3.6.1.2.1.25.2.3.1.6.3|2|8012156 +1.3.6.1.2.1.25.2.3.1.6.6|2|42564 +1.3.6.1.2.1.25.2.3.1.6.7|2|431048 +1.3.6.1.2.1.25.2.3.1.6.8|2|54064 +1.3.6.1.2.1.25.2.3.1.6.10|2|460800 +1.3.6.1.2.1.25.2.3.1.6.31|2|78704 +1.3.6.1.2.1.25.2.3.1.6.32|2|90615 +1.3.6.1.2.1.25.2.3.1.6.37|2|569 +1.3.6.1.2.1.25.2.3.1.6.39|2|511 +1.3.6.1.2.1.25.2.3.1.6.40|2|0 +1.3.6.1.2.1.25.2.3.1.6.44|2|1040421 +1.3.6.1.2.1.25.2.3.1.6.50|2|43169 +1.3.6.1.2.1.25.2.3.1.6.51|2|7937 +1.3.6.1.2.1.25.2.3.1.6.52|2|4516 +1.3.6.1.2.1.25.2.3.1.6.53|2|14722 +1.3.6.1.2.1.25.2.3.1.6.54|2|7 +1.3.6.1.2.1.25.2.3.1.6.55|2|4360 +1.3.6.1.2.1.25.2.3.1.6.56|2|104596 +1.3.6.1.2.1.25.2.3.1.6.57|2|0 +1.3.6.1.2.1.25.2.3.1.6.58|2|0 +1.3.6.1.2.1.25.2.3.1.6.59|2|90615 +1.3.6.1.2.1.25.3.2.1.1.196608|2|196608 +1.3.6.1.2.1.25.3.2.1.1.196609|2|196609 +1.3.6.1.2.1.25.3.2.1.1.786432|2|786432 +1.3.6.1.2.1.25.3.2.1.2.196608|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.196609|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.786432|6|1.3.6.1.2.1.25.3.1.12 +1.3.6.1.2.1.25.3.2.1.3.196608|4x|47656e75696e65496e74656c3a20496e74656c2852292058656f6e28522920435055204020322e303047487a +1.3.6.1.2.1.25.3.2.1.3.196609|4x|47656e75696e65496e74656c3a20496e74656c2852292058656f6e28522920435055204020322e303047487a +1.3.6.1.2.1.25.3.2.1.3.786432|4x|4775657373696e6720746861742074686572652773206120666c6f6174696e6720706f696e7420636f2d70726f636573736f72 +1.3.6.1.2.1.25.3.2.1.4.196608|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.196609|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.786432|6|0.0 +1.3.6.1.2.1.25.3.2.1.5.196608|2|2 +1.3.6.1.2.1.25.3.2.1.5.196609|2|2 +1.3.6.1.2.1.25.3.3.1.1.196608|6|0.0 +1.3.6.1.2.1.25.3.3.1.1.196609|6|0.0 +1.3.6.1.2.1.25.3.3.1.2.196608|2|8 +1.3.6.1.2.1.25.3.3.1.2.196609|2|9 +1.3.6.1.2.1.25.3.8.1.1.1|2|1 +1.3.6.1.2.1.25.3.8.1.1.2|2|2 +1.3.6.1.2.1.25.3.8.1.1.7|2|7 +1.3.6.1.2.1.25.3.8.1.1.9|2|9 +1.3.6.1.2.1.25.3.8.1.1.10|2|10 +1.3.6.1.2.1.25.3.8.1.1.14|2|14 +1.3.6.1.2.1.25.3.8.1.1.20|2|20 +1.3.6.1.2.1.25.3.8.1.1.21|2|21 +1.3.6.1.2.1.25.3.8.1.1.22|2|22 +1.3.6.1.2.1.25.3.8.1.1.23|2|23 +1.3.6.1.2.1.25.3.8.1.1.24|2|24 +1.3.6.1.2.1.25.3.8.1.1.25|2|25 +1.3.6.1.2.1.25.3.8.1.1.26|2|26 +1.3.6.1.2.1.25.3.8.1.1.27|2|27 +1.3.6.1.2.1.25.3.8.1.1.28|2|28 +1.3.6.1.2.1.25.3.8.1.1.29|2|29 +1.3.6.1.2.1.25.3.8.1.2.1|4x|2f +1.3.6.1.2.1.25.3.8.1.2.2|4x|2f766172 +1.3.6.1.2.1.25.3.8.1.2.7|4x|2f6465762f73686d +1.3.6.1.2.1.25.3.8.1.2.9|4x|2f72756e +1.3.6.1.2.1.25.3.8.1.2.10|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.3.8.1.2.14|4x|2f757372 +1.3.6.1.2.1.25.3.8.1.2.20|4x|2f736861726564 +1.3.6.1.2.1.25.3.8.1.2.21|4x|2f7368617265642f7272642e312e32 +1.3.6.1.2.1.25.3.8.1.2.22|4x|2f61707064617461 +1.3.6.1.2.1.25.3.8.1.2.23|4x|2f636f6e666967 +1.3.6.1.2.1.25.3.8.1.2.24|4x|2f7661722f70726f6d7074 +1.3.6.1.2.1.25.3.8.1.2.25|4x|2f7661722f746d73746174 +1.3.6.1.2.1.25.3.8.1.2.26|4x|2f7661722f6c6f67 +1.3.6.1.2.1.25.3.8.1.2.27|4x|2f7661722f6c6f697063 +1.3.6.1.2.1.25.3.8.1.2.28|4x|2f72756e2f757365722f3931 +1.3.6.1.2.1.25.3.8.1.2.29|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.2.1.25.3.8.1.3.1|4| +1.3.6.1.2.1.25.3.8.1.3.2|4| +1.3.6.1.2.1.25.3.8.1.3.7|4| +1.3.6.1.2.1.25.3.8.1.3.9|4| +1.3.6.1.2.1.25.3.8.1.3.10|4| +1.3.6.1.2.1.25.3.8.1.3.14|4| +1.3.6.1.2.1.25.3.8.1.3.20|4| +1.3.6.1.2.1.25.3.8.1.3.21|4| +1.3.6.1.2.1.25.3.8.1.3.22|4| +1.3.6.1.2.1.25.3.8.1.3.23|4| +1.3.6.1.2.1.25.3.8.1.3.24|4| +1.3.6.1.2.1.25.3.8.1.3.25|4| +1.3.6.1.2.1.25.3.8.1.3.26|4| +1.3.6.1.2.1.25.3.8.1.3.27|4| +1.3.6.1.2.1.25.3.8.1.3.28|4| +1.3.6.1.2.1.25.3.8.1.3.29|4| +1.3.6.1.2.1.25.3.8.1.4.1|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.2|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.7|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.9|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.10|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.14|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.20|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.21|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.22|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.23|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.24|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.25|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.26|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.27|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.28|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.29|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.5.1|2|1 +1.3.6.1.2.1.25.3.8.1.5.2|2|1 +1.3.6.1.2.1.25.3.8.1.5.7|2|1 +1.3.6.1.2.1.25.3.8.1.5.9|2|1 +1.3.6.1.2.1.25.3.8.1.5.10|2|2 +1.3.6.1.2.1.25.3.8.1.5.14|2|2 +1.3.6.1.2.1.25.3.8.1.5.20|2|1 +1.3.6.1.2.1.25.3.8.1.5.21|2|1 +1.3.6.1.2.1.25.3.8.1.5.22|2|1 +1.3.6.1.2.1.25.3.8.1.5.23|2|1 +1.3.6.1.2.1.25.3.8.1.5.24|2|1 +1.3.6.1.2.1.25.3.8.1.5.25|2|1 +1.3.6.1.2.1.25.3.8.1.5.26|2|1 +1.3.6.1.2.1.25.3.8.1.5.27|2|1 +1.3.6.1.2.1.25.3.8.1.5.28|2|1 +1.3.6.1.2.1.25.3.8.1.5.29|2|1 +1.3.6.1.2.1.25.3.8.1.6.1|2|1 +1.3.6.1.2.1.25.3.8.1.6.2|2|2 +1.3.6.1.2.1.25.3.8.1.6.7|2|2 +1.3.6.1.2.1.25.3.8.1.6.9|2|2 +1.3.6.1.2.1.25.3.8.1.6.10|2|2 +1.3.6.1.2.1.25.3.8.1.6.14|2|2 +1.3.6.1.2.1.25.3.8.1.6.20|2|2 +1.3.6.1.2.1.25.3.8.1.6.21|2|2 +1.3.6.1.2.1.25.3.8.1.6.22|2|2 +1.3.6.1.2.1.25.3.8.1.6.23|2|2 +1.3.6.1.2.1.25.3.8.1.6.24|2|2 +1.3.6.1.2.1.25.3.8.1.6.25|2|2 +1.3.6.1.2.1.25.3.8.1.6.26|2|2 +1.3.6.1.2.1.25.3.8.1.6.27|2|2 +1.3.6.1.2.1.25.3.8.1.6.28|2|2 +1.3.6.1.2.1.25.3.8.1.6.29|2|2 +1.3.6.1.2.1.25.3.8.1.7.1|2|31 +1.3.6.1.2.1.25.3.8.1.7.2|2|32 +1.3.6.1.2.1.25.3.8.1.7.7|2|37 +1.3.6.1.2.1.25.3.8.1.7.9|2|39 +1.3.6.1.2.1.25.3.8.1.7.10|2|40 +1.3.6.1.2.1.25.3.8.1.7.14|2|44 +1.3.6.1.2.1.25.3.8.1.7.20|2|50 +1.3.6.1.2.1.25.3.8.1.7.21|2|51 +1.3.6.1.2.1.25.3.8.1.7.22|2|52 +1.3.6.1.2.1.25.3.8.1.7.23|2|53 +1.3.6.1.2.1.25.3.8.1.7.24|2|54 +1.3.6.1.2.1.25.3.8.1.7.25|2|55 +1.3.6.1.2.1.25.3.8.1.7.26|2|56 +1.3.6.1.2.1.25.3.8.1.7.27|2|57 +1.3.6.1.2.1.25.3.8.1.7.28|2|58 +1.3.6.1.2.1.25.3.8.1.7.29|2|59 +1.3.6.1.2.1.25.3.8.1.8.1|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.2|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.7|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.9|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.10|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.14|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.20|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.21|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.22|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.23|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.24|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.25|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.26|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.27|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.28|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.29|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.1|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.2|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.7|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.9|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.10|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.14|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.20|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.21|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.22|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.23|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.24|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.25|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.26|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.27|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.28|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.29|4x|0000010100000000 +1.3.6.1.2.1.25.4.2.1.1.1|2|1 +1.3.6.1.2.1.25.4.2.1.1.415|2|415 +1.3.6.1.2.1.25.4.2.1.1.440|2|440 +1.3.6.1.2.1.25.4.2.1.1.447|2|447 +1.3.6.1.2.1.25.4.2.1.1.921|2|921 +1.3.6.1.2.1.25.4.2.1.1.951|2|951 +1.3.6.1.2.1.25.4.2.1.1.977|2|977 +1.3.6.1.2.1.25.4.2.1.1.979|2|979 +1.3.6.1.2.1.25.4.2.1.1.982|2|982 +1.3.6.1.2.1.25.4.2.1.1.984|2|984 +1.3.6.1.2.1.25.4.2.1.1.1038|2|1038 +1.3.6.1.2.1.25.4.2.1.1.1826|2|1826 +1.3.6.1.2.1.25.4.2.1.1.2851|2|2851 +1.3.6.1.2.1.25.4.2.1.1.2852|2|2852 +1.3.6.1.2.1.25.4.2.1.1.2919|2|2919 +1.3.6.1.2.1.25.4.2.1.1.3773|2|3773 +1.3.6.1.2.1.25.4.2.1.1.4068|2|4068 +1.3.6.1.2.1.25.4.2.1.1.4085|2|4085 +1.3.6.1.2.1.25.4.2.1.1.4119|2|4119 +1.3.6.1.2.1.25.4.2.1.1.4122|2|4122 +1.3.6.1.2.1.25.4.2.1.1.4212|2|4212 +1.3.6.1.2.1.25.4.2.1.1.4213|2|4213 +1.3.6.1.2.1.25.4.2.1.1.4214|2|4214 +1.3.6.1.2.1.25.4.2.1.1.4215|2|4215 +1.3.6.1.2.1.25.4.2.1.1.4216|2|4216 +1.3.6.1.2.1.25.4.2.1.1.4217|2|4217 +1.3.6.1.2.1.25.4.2.1.1.4218|2|4218 +1.3.6.1.2.1.25.4.2.1.1.4219|2|4219 +1.3.6.1.2.1.25.4.2.1.1.4220|2|4220 +1.3.6.1.2.1.25.4.2.1.1.4221|2|4221 +1.3.6.1.2.1.25.4.2.1.1.4222|2|4222 +1.3.6.1.2.1.25.4.2.1.1.4224|2|4224 +1.3.6.1.2.1.25.4.2.1.1.4226|2|4226 +1.3.6.1.2.1.25.4.2.1.1.4434|2|4434 +1.3.6.1.2.1.25.4.2.1.1.4435|2|4435 +1.3.6.1.2.1.25.4.2.1.1.4436|2|4436 +1.3.6.1.2.1.25.4.2.1.1.4437|2|4437 +1.3.6.1.2.1.25.4.2.1.1.4438|2|4438 +1.3.6.1.2.1.25.4.2.1.1.4439|2|4439 +1.3.6.1.2.1.25.4.2.1.1.4440|2|4440 +1.3.6.1.2.1.25.4.2.1.1.4441|2|4441 +1.3.6.1.2.1.25.4.2.1.1.4442|2|4442 +1.3.6.1.2.1.25.4.2.1.1.4443|2|4443 +1.3.6.1.2.1.25.4.2.1.1.4451|2|4451 +1.3.6.1.2.1.25.4.2.1.1.4773|2|4773 +1.3.6.1.2.1.25.4.2.1.1.4774|2|4774 +1.3.6.1.2.1.25.4.2.1.1.4775|2|4775 +1.3.6.1.2.1.25.4.2.1.1.4776|2|4776 +1.3.6.1.2.1.25.4.2.1.1.4777|2|4777 +1.3.6.1.2.1.25.4.2.1.1.4778|2|4778 +1.3.6.1.2.1.25.4.2.1.1.4779|2|4779 +1.3.6.1.2.1.25.4.2.1.1.4780|2|4780 +1.3.6.1.2.1.25.4.2.1.1.4781|2|4781 +1.3.6.1.2.1.25.4.2.1.1.4782|2|4782 +1.3.6.1.2.1.25.4.2.1.1.4784|2|4784 +1.3.6.1.2.1.25.4.2.1.1.4786|2|4786 +1.3.6.1.2.1.25.4.2.1.1.4787|2|4787 +1.3.6.1.2.1.25.4.2.1.1.5137|2|5137 +1.3.6.1.2.1.25.4.2.1.1.5138|2|5138 +1.3.6.1.2.1.25.4.2.1.1.5139|2|5139 +1.3.6.1.2.1.25.4.2.1.1.5140|2|5140 +1.3.6.1.2.1.25.4.2.1.1.5141|2|5141 +1.3.6.1.2.1.25.4.2.1.1.5142|2|5142 +1.3.6.1.2.1.25.4.2.1.1.5143|2|5143 +1.3.6.1.2.1.25.4.2.1.1.5144|2|5144 +1.3.6.1.2.1.25.4.2.1.1.5145|2|5145 +1.3.6.1.2.1.25.4.2.1.1.5146|2|5146 +1.3.6.1.2.1.25.4.2.1.1.5148|2|5148 +1.3.6.1.2.1.25.4.2.1.1.5151|2|5151 +1.3.6.1.2.1.25.4.2.1.1.5155|2|5155 +1.3.6.1.2.1.25.4.2.1.1.5159|2|5159 +1.3.6.1.2.1.25.4.2.1.1.5501|2|5501 +1.3.6.1.2.1.25.4.2.1.1.5502|2|5502 +1.3.6.1.2.1.25.4.2.1.1.5503|2|5503 +1.3.6.1.2.1.25.4.2.1.1.5504|2|5504 +1.3.6.1.2.1.25.4.2.1.1.5505|2|5505 +1.3.6.1.2.1.25.4.2.1.1.5506|2|5506 +1.3.6.1.2.1.25.4.2.1.1.5507|2|5507 +1.3.6.1.2.1.25.4.2.1.1.5508|2|5508 +1.3.6.1.2.1.25.4.2.1.1.5509|2|5509 +1.3.6.1.2.1.25.4.2.1.1.5510|2|5510 +1.3.6.1.2.1.25.4.2.1.1.5516|2|5516 +1.3.6.1.2.1.25.4.2.1.1.5522|2|5522 +1.3.6.1.2.1.25.4.2.1.1.5861|2|5861 +1.3.6.1.2.1.25.4.2.1.1.5862|2|5862 +1.3.6.1.2.1.25.4.2.1.1.5863|2|5863 +1.3.6.1.2.1.25.4.2.1.1.5864|2|5864 +1.3.6.1.2.1.25.4.2.1.1.5865|2|5865 +1.3.6.1.2.1.25.4.2.1.1.5866|2|5866 +1.3.6.1.2.1.25.4.2.1.1.5867|2|5867 +1.3.6.1.2.1.25.4.2.1.1.5868|2|5868 +1.3.6.1.2.1.25.4.2.1.1.5869|2|5869 +1.3.6.1.2.1.25.4.2.1.1.5870|2|5870 +1.3.6.1.2.1.25.4.2.1.1.5872|2|5872 +1.3.6.1.2.1.25.4.2.1.1.5875|2|5875 +1.3.6.1.2.1.25.4.2.1.1.5878|2|5878 +1.3.6.1.2.1.25.4.2.1.1.5879|2|5879 +1.3.6.1.2.1.25.4.2.1.1.5884|2|5884 +1.3.6.1.2.1.25.4.2.1.1.6344|2|6344 +1.3.6.1.2.1.25.4.2.1.1.6345|2|6345 +1.3.6.1.2.1.25.4.2.1.1.6346|2|6346 +1.3.6.1.2.1.25.4.2.1.1.6347|2|6347 +1.3.6.1.2.1.25.4.2.1.1.6348|2|6348 +1.3.6.1.2.1.25.4.2.1.1.6349|2|6349 +1.3.6.1.2.1.25.4.2.1.1.6350|2|6350 +1.3.6.1.2.1.25.4.2.1.1.6351|2|6351 +1.3.6.1.2.1.25.4.2.1.1.6352|2|6352 +1.3.6.1.2.1.25.4.2.1.1.6353|2|6353 +1.3.6.1.2.1.25.4.2.1.1.6358|2|6358 +1.3.6.1.2.1.25.4.2.1.1.6366|2|6366 +1.3.6.1.2.1.25.4.2.1.1.6763|2|6763 +1.3.6.1.2.1.25.4.2.1.1.6764|2|6764 +1.3.6.1.2.1.25.4.2.1.1.6765|2|6765 +1.3.6.1.2.1.25.4.2.1.1.6766|2|6766 +1.3.6.1.2.1.25.4.2.1.1.6767|2|6767 +1.3.6.1.2.1.25.4.2.1.1.6768|2|6768 +1.3.6.1.2.1.25.4.2.1.1.6769|2|6769 +1.3.6.1.2.1.25.4.2.1.1.6770|2|6770 +1.3.6.1.2.1.25.4.2.1.1.6771|2|6771 +1.3.6.1.2.1.25.4.2.1.1.6772|2|6772 +1.3.6.1.2.1.25.4.2.1.1.6782|2|6782 +1.3.6.1.2.1.25.4.2.1.1.6784|2|6784 +1.3.6.1.2.1.25.4.2.1.1.7174|2|7174 +1.3.6.1.2.1.25.4.2.1.1.7175|2|7175 +1.3.6.1.2.1.25.4.2.1.1.7176|2|7176 +1.3.6.1.2.1.25.4.2.1.1.7177|2|7177 +1.3.6.1.2.1.25.4.2.1.1.7178|2|7178 +1.3.6.1.2.1.25.4.2.1.1.7179|2|7179 +1.3.6.1.2.1.25.4.2.1.1.7180|2|7180 +1.3.6.1.2.1.25.4.2.1.1.7181|2|7181 +1.3.6.1.2.1.25.4.2.1.1.7182|2|7182 +1.3.6.1.2.1.25.4.2.1.1.7183|2|7183 +1.3.6.1.2.1.25.4.2.1.1.7188|2|7188 +1.3.6.1.2.1.25.4.2.1.1.7192|2|7192 +1.3.6.1.2.1.25.4.2.1.1.7194|2|7194 +1.3.6.1.2.1.25.4.2.1.1.7196|2|7196 +1.3.6.1.2.1.25.4.2.1.1.7523|2|7523 +1.3.6.1.2.1.25.4.2.1.1.7524|2|7524 +1.3.6.1.2.1.25.4.2.1.1.7525|2|7525 +1.3.6.1.2.1.25.4.2.1.1.7526|2|7526 +1.3.6.1.2.1.25.4.2.1.1.7527|2|7527 +1.3.6.1.2.1.25.4.2.1.1.7528|2|7528 +1.3.6.1.2.1.25.4.2.1.1.7529|2|7529 +1.3.6.1.2.1.25.4.2.1.1.7530|2|7530 +1.3.6.1.2.1.25.4.2.1.1.7531|2|7531 +1.3.6.1.2.1.25.4.2.1.1.7532|2|7532 +1.3.6.1.2.1.25.4.2.1.1.7535|2|7535 +1.3.6.1.2.1.25.4.2.1.1.7539|2|7539 +1.3.6.1.2.1.25.4.2.1.1.7543|2|7543 +1.3.6.1.2.1.25.4.2.1.1.7544|2|7544 +1.3.6.1.2.1.25.4.2.1.1.7949|2|7949 +1.3.6.1.2.1.25.4.2.1.1.7950|2|7950 +1.3.6.1.2.1.25.4.2.1.1.7951|2|7951 +1.3.6.1.2.1.25.4.2.1.1.7952|2|7952 +1.3.6.1.2.1.25.4.2.1.1.7953|2|7953 +1.3.6.1.2.1.25.4.2.1.1.7954|2|7954 +1.3.6.1.2.1.25.4.2.1.1.9526|2|9526 +1.3.6.1.2.1.25.4.2.1.1.9602|2|9602 +1.3.6.1.2.1.25.4.2.1.1.11784|2|11784 +1.3.6.1.2.1.25.4.2.1.1.13563|2|13563 +1.3.6.1.2.1.25.4.2.1.1.13565|2|13565 +1.3.6.1.2.1.25.4.2.1.1.13566|2|13566 +1.3.6.1.2.1.25.4.2.1.1.15387|2|15387 +1.3.6.1.2.1.25.4.2.1.1.15921|2|15921 +1.3.6.1.2.1.25.4.2.1.1.16645|2|16645 +1.3.6.1.2.1.25.4.2.1.1.16646|2|16646 +1.3.6.1.2.1.25.4.2.1.1.16648|2|16648 +1.3.6.1.2.1.25.4.2.1.1.16651|2|16651 +1.3.6.1.2.1.25.4.2.1.1.16652|2|16652 +1.3.6.1.2.1.25.4.2.1.1.16653|2|16653 +1.3.6.1.2.1.25.4.2.1.1.16654|2|16654 +1.3.6.1.2.1.25.4.2.1.1.17900|2|17900 +1.3.6.1.2.1.25.4.2.1.1.18651|2|18651 +1.3.6.1.2.1.25.4.2.1.1.23175|2|23175 +1.3.6.1.2.1.25.4.2.1.1.23330|2|23330 +1.3.6.1.2.1.25.4.2.1.1.25514|2|25514 +1.3.6.1.2.1.25.4.2.1.1.25517|2|25517 +1.3.6.1.2.1.25.4.2.1.1.25518|2|25518 +1.3.6.1.2.1.25.4.2.1.1.25522|2|25522 +1.3.6.1.2.1.25.4.2.1.1.25524|2|25524 +1.3.6.1.2.1.25.4.2.1.1.25531|2|25531 +1.3.6.1.2.1.25.4.2.1.1.25946|2|25946 +1.3.6.1.2.1.25.4.2.1.1.27567|2|27567 +1.3.6.1.2.1.25.4.2.1.1.29431|2|29431 +1.3.6.1.2.1.25.4.2.1.1.29439|2|29439 +1.3.6.1.2.1.25.4.2.1.1.29440|2|29440 +1.3.6.1.2.1.25.4.2.1.1.30092|2|30092 +1.3.6.1.2.1.25.4.2.1.1.30120|2|30120 +1.3.6.1.2.1.25.4.2.1.1.30180|2|30180 +1.3.6.1.2.1.25.4.2.1.1.32031|2|32031 +1.3.6.1.2.1.25.4.2.1.2.1|4|systemd +1.3.6.1.2.1.25.4.2.1.2.415|4x|73797374656d642d6a6f75726e616c +1.3.6.1.2.1.25.4.2.1.2.440|4|lvmetad +1.3.6.1.2.1.25.4.2.1.2.447|4x|73797374656d642d7564657664 +1.3.6.1.2.1.25.4.2.1.2.921|4x|6a6974746572656e74726f70792d72 +1.3.6.1.2.1.25.4.2.1.2.951|4|auditd +1.3.6.1.2.1.25.4.2.1.2.977|4x|646275732d6461656d6f6e +1.3.6.1.2.1.25.4.2.1.2.979|4|acpid +1.3.6.1.2.1.25.4.2.1.2.982|4|irqbalance +1.3.6.1.2.1.25.4.2.1.2.984|4x|73797374656d642d6c6f67696e64 +1.3.6.1.2.1.25.4.2.1.2.1038|4x|696e6372656173655f656e74726f70 +1.3.6.1.2.1.25.4.2.1.2.1826|4x|7379736c6f672d6e67 +1.3.6.1.2.1.25.4.2.1.2.2851|4|crond +1.3.6.1.2.1.25.4.2.1.2.2852|4|promptstatusd +1.3.6.1.2.1.25.4.2.1.2.2919|4|overdog +1.3.6.1.2.1.25.4.2.1.2.3773|4|sshd +1.3.6.1.2.1.25.4.2.1.2.4068|4|httpd +1.3.6.1.2.1.25.4.2.1.2.4085|4|runsvdir +1.3.6.1.2.1.25.4.2.1.2.4119|4|agetty +1.3.6.1.2.1.25.4.2.1.2.4122|4|agetty +1.3.6.1.2.1.25.4.2.1.2.4212|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4213|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4214|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4215|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4216|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4217|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4218|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4219|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4220|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4221|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4222|4|eventd +1.3.6.1.2.1.25.4.2.1.2.4224|4x|72756e736d315f6e616d6564 +1.3.6.1.2.1.25.4.2.1.2.4226|4|wccpd +1.3.6.1.2.1.25.4.2.1.2.4434|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4435|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4436|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4437|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4438|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4439|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4440|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4441|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4442|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4443|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4451|4|scriptd +1.3.6.1.2.1.25.4.2.1.2.4773|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4774|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4775|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4776|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4777|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4778|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4779|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4780|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4781|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4782|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4784|4|tmrouted +1.3.6.1.2.1.25.4.2.1.2.4786|4|tamd +1.3.6.1.2.1.25.4.2.1.2.4787|4|alertd +1.3.6.1.2.1.25.4.2.1.2.5137|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5138|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5139|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5140|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5141|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5142|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5143|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5144|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5145|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5146|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5148|4|evrouted +1.3.6.1.2.1.25.4.2.1.2.5151|4|big3d +1.3.6.1.2.1.25.4.2.1.2.5155|4|csyncd +1.3.6.1.2.1.25.4.2.1.2.5159|4|syscalld +1.3.6.1.2.1.25.4.2.1.2.5501|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5502|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5503|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5504|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5505|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5506|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5507|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5508|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5509|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5510|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5516|4|errdefsd +1.3.6.1.2.1.25.4.2.1.2.5522|4|logstatd +1.3.6.1.2.1.25.4.2.1.2.5861|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5862|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5863|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5864|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5865|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5866|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5867|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5868|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5869|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5870|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5872|4|chmand +1.3.6.1.2.1.25.4.2.1.2.5875|4x|6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.2.5878|4|mcpd +1.3.6.1.2.1.25.4.2.1.2.5879|4|statsd +1.3.6.1.2.1.25.4.2.1.2.5884|4|zxfrd +1.3.6.1.2.1.25.4.2.1.2.6344|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6345|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6346|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6347|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6348|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6349|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6350|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6351|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6352|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6353|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6358|4|merged +1.3.6.1.2.1.25.4.2.1.2.6366|4|dynconfd +1.3.6.1.2.1.25.4.2.1.2.6763|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6764|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6765|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6766|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6767|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6768|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6769|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6770|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6771|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6772|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6782|4x|676f6f676c655f6163636f756e7473 +1.3.6.1.2.1.25.4.2.1.2.6784|4|keymgmtd +1.3.6.1.2.1.25.4.2.1.2.7174|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7175|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7176|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7177|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7178|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7179|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7180|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7181|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7182|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7183|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7188|4|java +1.3.6.1.2.1.25.4.2.1.2.7192|4|lacpd +1.3.6.1.2.1.25.4.2.1.2.7194|4|devmgmtd +1.3.6.1.2.1.25.4.2.1.2.7196|4|cbrd +1.3.6.1.2.1.25.4.2.1.2.7523|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7524|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7525|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7526|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7527|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7528|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7529|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7530|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7531|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7532|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7535|4|lind +1.3.6.1.2.1.25.4.2.1.2.7539|4|sod +1.3.6.1.2.1.25.4.2.1.2.7543|4x|73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.2.7544|4x|66352d726573742d6e6f6465 +1.3.6.1.2.1.25.4.2.1.2.7949|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7950|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7951|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7952|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7953|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7954|4|runsv +1.3.6.1.2.1.25.4.2.1.2.9526|4|dhclient +1.3.6.1.2.1.25.4.2.1.2.9602|4|dhclient +1.3.6.1.2.1.25.4.2.1.2.11784|4|su +1.3.6.1.2.1.25.4.2.1.2.13563|4|httpd +1.3.6.1.2.1.25.4.2.1.2.13565|4|httpd +1.3.6.1.2.1.25.4.2.1.2.13566|4|httpd +1.3.6.1.2.1.25.4.2.1.2.15387|4|ntpd +1.3.6.1.2.1.25.4.2.1.2.15921|4|java +1.3.6.1.2.1.25.4.2.1.2.16645|4|logger +1.3.6.1.2.1.25.4.2.1.2.16646|4|logger +1.3.6.1.2.1.25.4.2.1.2.16648|4|httpd +1.3.6.1.2.1.25.4.2.1.2.16651|4|mcpq +1.3.6.1.2.1.25.4.2.1.2.16652|4|rrdstats +1.3.6.1.2.1.25.4.2.1.2.16653|4|rtstats +1.3.6.1.2.1.25.4.2.1.2.16654|4x|69436f6e74726f6c506f7274616c2e +1.3.6.1.2.1.25.4.2.1.2.17900|4|named +1.3.6.1.2.1.25.4.2.1.2.18651|4x|696372645f6368696c64 +1.3.6.1.2.1.25.4.2.1.2.23175|4|rrdshim +1.3.6.1.2.1.25.4.2.1.2.23330|4|snmpd +1.3.6.1.2.1.25.4.2.1.2.25514|4|pccd +1.3.6.1.2.1.25.4.2.1.2.25517|4|tmipsecd +1.3.6.1.2.1.25.4.2.1.2.25518|4x|746d6d2e7374617274 +1.3.6.1.2.1.25.4.2.1.2.25522|4x|6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.2.25524|4|vxland +1.3.6.1.2.1.25.4.2.1.2.25531|4|iprepd +1.3.6.1.2.1.25.4.2.1.2.25946|4|bigd +1.3.6.1.2.1.25.4.2.1.2.27567|4|ntlmconnpool +1.3.6.1.2.1.25.4.2.1.2.29431|4|httpd +1.3.6.1.2.1.25.4.2.1.2.29439|4|httpd +1.3.6.1.2.1.25.4.2.1.2.29440|4|httpd +1.3.6.1.2.1.25.4.2.1.2.30092|4x|746d6d2e30 +1.3.6.1.2.1.25.4.2.1.2.30120|4|racoon +1.3.6.1.2.1.25.4.2.1.2.30180|4x|61756469745f666f72776172646572 +1.3.6.1.2.1.25.4.2.1.2.32031|4|agetty +1.3.6.1.2.1.25.4.2.1.3.1|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.415|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.447|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.921|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.951|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.977|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.979|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.982|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.984|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.1038|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.1826|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2851|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2852|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2919|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.3773|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4068|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4085|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4119|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4122|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4212|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4213|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4214|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4215|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4216|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4217|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4218|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4219|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4220|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4221|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4222|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4224|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4226|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4434|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4435|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4436|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4437|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4438|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4439|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4441|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4442|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4443|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4451|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4773|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4774|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4775|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4776|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4777|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4778|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4779|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4780|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4781|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4782|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4786|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4787|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5137|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5138|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5139|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5140|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5141|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5142|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5143|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5144|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5145|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5146|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5148|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5151|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5155|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5159|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5501|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5502|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5503|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5504|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5505|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5506|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5507|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5508|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5509|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5510|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5516|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5522|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5861|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5862|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5863|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5864|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5865|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5866|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5867|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5868|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5869|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5870|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5872|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5875|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5878|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5879|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5884|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6344|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6345|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6346|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6347|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6348|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6349|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6350|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6351|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6352|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6353|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6358|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6366|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6763|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6764|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6765|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6766|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6767|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6768|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6769|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6770|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6771|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6772|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6782|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7174|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7175|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7176|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7177|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7178|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7179|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7180|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7181|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7182|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7183|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7188|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7192|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7194|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7196|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7523|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7524|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7525|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7526|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7527|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7528|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7529|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7530|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7531|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7532|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7535|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7539|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7543|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7544|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7949|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7950|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7951|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7952|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7953|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7954|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.9526|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.9602|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.11784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13563|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13565|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13566|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.15387|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.15921|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16645|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16646|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16648|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16651|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16652|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16653|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16654|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.17900|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.18651|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.23175|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.23330|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25514|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25517|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25518|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25522|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25524|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25531|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25946|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.27567|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29431|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29439|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30092|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30120|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30180|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.32031|6|0.0 +1.3.6.1.2.1.25.4.2.1.4.1|4x|2f7573722f6c69622f73797374656d642f73797374656d64 +1.3.6.1.2.1.25.4.2.1.4.415|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6a6f75726e616c64 +1.3.6.1.2.1.25.4.2.1.4.440|4x|2f7573722f7362696e2f6c766d65746164 +1.3.6.1.2.1.25.4.2.1.4.447|4x|2f7573722f6c69622f73797374656d642f73797374656d642d7564657664 +1.3.6.1.2.1.25.4.2.1.4.921|4x|2f7573722f7362696e2f6a6974746572656e74726f70792d726e6764 +1.3.6.1.2.1.25.4.2.1.4.951|4x|2f7362696e2f617564697464 +1.3.6.1.2.1.25.4.2.1.4.977|4x|2f62696e2f646275732d6461656d6f6e +1.3.6.1.2.1.25.4.2.1.4.979|4x|2f7573722f7362696e2f6163706964 +1.3.6.1.2.1.25.4.2.1.4.982|4x|2f7573722f7362696e2f69727162616c616e6365 +1.3.6.1.2.1.25.4.2.1.4.984|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6c6f67696e64 +1.3.6.1.2.1.25.4.2.1.4.1038|4x|696e6372656173655f656e74726f7079 +1.3.6.1.2.1.25.4.2.1.4.1826|4x|2f7573722f7362696e2f7379736c6f672d6e67 +1.3.6.1.2.1.25.4.2.1.4.2851|4x|2f7573722f7362696e2f63726f6e64 +1.3.6.1.2.1.25.4.2.1.4.2852|4x|2f62696e2f70726f6d707473746174757364 +1.3.6.1.2.1.25.4.2.1.4.2919|4x|2f7573722f62696e2f6f766572646f67 +1.3.6.1.2.1.25.4.2.1.4.3773|4x|2f7573722f7362696e2f73736864 +1.3.6.1.2.1.25.4.2.1.4.4068|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.4085|4|runsvdir +1.3.6.1.2.1.25.4.2.1.4.4119|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.4122|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.4212|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4213|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4214|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4215|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4216|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4217|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4218|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4219|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4220|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4221|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4222|4x|2f7573722f62696e2f6576656e7464 +1.3.6.1.2.1.25.4.2.1.4.4224|4x|2f7362696e2f72756e736d315f6e616d6564 +1.3.6.1.2.1.25.4.2.1.4.4226|4x|2f7573722f62696e2f7763637064 +1.3.6.1.2.1.25.4.2.1.4.4434|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4435|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4436|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4437|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4438|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4439|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4440|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4441|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4442|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4443|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4451|4x|2f7573722f62696e2f73637269707464 +1.3.6.1.2.1.25.4.2.1.4.4773|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4774|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4775|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4776|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4777|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4778|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4779|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4780|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4781|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4782|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4784|4x|2f7573722f62696e2f746d726f75746564 +1.3.6.1.2.1.25.4.2.1.4.4786|4x|2f7573722f62696e2f74616d64 +1.3.6.1.2.1.25.4.2.1.4.4787|4x|2f7573722f7362696e2f616c65727464 +1.3.6.1.2.1.25.4.2.1.4.5137|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5138|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5139|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5140|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5141|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5142|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5143|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5144|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5145|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5146|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5148|4x|2f7573722f62696e2f6576726f75746564 +1.3.6.1.2.1.25.4.2.1.4.5151|4x|2f7368617265642f62696e2f6269673364 +1.3.6.1.2.1.25.4.2.1.4.5155|4x|2f7573722f62696e2f6373796e6364 +1.3.6.1.2.1.25.4.2.1.4.5159|4x|2f7573722f62696e2f73797363616c6c64 +1.3.6.1.2.1.25.4.2.1.4.5501|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5502|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5503|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5504|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5505|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5506|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5507|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5508|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5509|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5510|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5516|4x|2f7573722f62696e2f6572726465667364 +1.3.6.1.2.1.25.4.2.1.4.5522|4x|2f7573722f7362696e2f6c6f677374617464 +1.3.6.1.2.1.25.4.2.1.4.5861|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5862|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5863|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5864|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5865|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5866|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5867|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5868|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5869|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5870|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5872|4x|2f7573722f62696e2f63686d616e64 +1.3.6.1.2.1.25.4.2.1.4.5875|4x|2f7573722f62696e2f6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.4.5878|4x|2f7573722f62696e2f6d637064 +1.3.6.1.2.1.25.4.2.1.4.5879|4x|2f7573722f62696e2f737461747364 +1.3.6.1.2.1.25.4.2.1.4.5884|4x|2f7573722f62696e2f7a78667264 +1.3.6.1.2.1.25.4.2.1.4.6344|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6345|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6346|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6347|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6348|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6349|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6350|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6351|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6352|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6353|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6358|4x|2f7573722f62696e2f6d6572676564 +1.3.6.1.2.1.25.4.2.1.4.6366|4x|2f7573722f62696e2f64796e636f6e6664 +1.3.6.1.2.1.25.4.2.1.4.6763|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6764|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6765|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6766|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6767|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6768|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6769|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6770|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6771|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6772|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6782|4x|2f7573722f62696e2f707974686f6e +1.3.6.1.2.1.25.4.2.1.4.6784|4x|2f7573722f62696e2f6b65796d676d7464 +1.3.6.1.2.1.25.4.2.1.4.7174|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7175|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7176|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7177|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7178|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7179|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7180|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7181|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7182|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7183|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7188|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661 +1.3.6.1.2.1.25.4.2.1.4.7192|4x|2f7573722f62696e2f6c61637064 +1.3.6.1.2.1.25.4.2.1.4.7194|4x|2f7573722f62696e2f6465766d676d7464 +1.3.6.1.2.1.25.4.2.1.4.7196|4x|2f7573722f73686172652f6362722f62696e2f63627264 +1.3.6.1.2.1.25.4.2.1.4.7523|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7524|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7525|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7526|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7527|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7528|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7529|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7530|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7531|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7532|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7535|4x|2f7573722f62696e2f6c696e64 +1.3.6.1.2.1.25.4.2.1.4.7539|4x|2f7573722f62696e2f736f64 +1.3.6.1.2.1.25.4.2.1.4.7543|4x|2f7573722f7362696e2f73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.4.7544|4x|2f7573722f62696e2f66352d726573742d6e6f6465 +1.3.6.1.2.1.25.4.2.1.4.7949|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7950|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7951|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7952|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7953|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7954|4|runsv +1.3.6.1.2.1.25.4.2.1.4.9526|4x|2f7362696e2f6468636c69656e74 +1.3.6.1.2.1.25.4.2.1.4.9602|4x|2f7362696e2f6468636c69656e74 +1.3.6.1.2.1.25.4.2.1.4.11784|4|su +1.3.6.1.2.1.25.4.2.1.4.13563|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.13565|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.13566|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.15387|4|ntpd +1.3.6.1.2.1.25.4.2.1.4.15921|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661 +1.3.6.1.2.1.25.4.2.1.4.16645|4x|2f7573722f62696e2f6c6f67676572 +1.3.6.1.2.1.25.4.2.1.4.16646|4x|2f7573722f62696e2f6c6f67676572 +1.3.6.1.2.1.25.4.2.1.4.16648|4x|2f7573722f7362696e2f666367692d +1.3.6.1.2.1.25.4.2.1.4.16651|4x|2f7573722f6c6f63616c2f7777772f6d6370712f6d637071 +1.3.6.1.2.1.25.4.2.1.4.16652|4x|2f7573722f6c6f63616c2f7777772f72726473746174732f7272647374617473 +1.3.6.1.2.1.25.4.2.1.4.16653|4x|2f7573722f6c6f63616c2f7777772f727473746174732f72747374617473 +1.3.6.1.2.1.25.4.2.1.4.16654|4x|2f7573722f6c6f63616c2f7777772f69436f6e74726f6c2f69436f6e74726f6c506f7274616c2e636769 +1.3.6.1.2.1.25.4.2.1.4.17900|4x|2f7573722f7362696e2f6e616d6564 +1.3.6.1.2.1.25.4.2.1.4.18651|4x|696372645f6368696c64 +1.3.6.1.2.1.25.4.2.1.4.23175|4x|2f7573722f7362696e2f7272647368696d +1.3.6.1.2.1.25.4.2.1.4.23330|4x|2f7573722f7362696e2f736e6d7064 +1.3.6.1.2.1.25.4.2.1.4.25514|4x|2f7573722f62696e2f70636364 +1.3.6.1.2.1.25.4.2.1.4.25517|4x|2f7573722f62696e2f746d697073656364 +1.3.6.1.2.1.25.4.2.1.4.25518|4x|2f6574632f62696773746172742f736372697074732f746d6d2e7374617274 +1.3.6.1.2.1.25.4.2.1.4.25522|4x|2f7573722f62696e2f6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.4.25524|4x|2f7573722f62696e2f76786c616e64 +1.3.6.1.2.1.25.4.2.1.4.25531|4x|2f7573722f73686172652f6970726570642f62696e2f697072657064 +1.3.6.1.2.1.25.4.2.1.4.25946|4|bigd +1.3.6.1.2.1.25.4.2.1.4.27567|4x|2f7573722f7362696e2f6e746c6d636f6e6e706f6f6c +1.3.6.1.2.1.25.4.2.1.4.29431|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.29439|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.29440|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.30092|4x|746d6d2e30 +1.3.6.1.2.1.25.4.2.1.4.30120|4x|2f7573722f7362696e2f7261636f6f6e +1.3.6.1.2.1.25.4.2.1.4.30180|4x|2f7573722f62696e2f61756469745f666f72776172646572 +1.3.6.1.2.1.25.4.2.1.4.32031|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.5.1|4x|2d2d73776974636865642d726f6f74202d2d73797374656d202d2d646573657269616c697a65203230 +1.3.6.1.2.1.25.4.2.1.5.415|4| +1.3.6.1.2.1.25.4.2.1.5.440|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.447|4| +1.3.6.1.2.1.25.4.2.1.5.921|4| +1.3.6.1.2.1.25.4.2.1.5.951|4x|2d6e +1.3.6.1.2.1.25.4.2.1.5.977|4x|2d2d73797374656d202d2d616464726573733d73797374656d643a202d2d6e6f666f726b202d2d6e6f70696466696c65202d2d73797374656d642d61637469766174696f6e +1.3.6.1.2.1.25.4.2.1.5.979|4| +1.3.6.1.2.1.25.4.2.1.5.982|4x|2d2d666f726567726f756e64 +1.3.6.1.2.1.25.4.2.1.5.984|4| +1.3.6.1.2.1.25.4.2.1.5.1038|4x|2d64202d652034303030202d72202d712038 +1.3.6.1.2.1.25.4.2.1.5.1826|4x|2d46202d70202f7661722f72756e2f7379736c6f67642e706964 +1.3.6.1.2.1.25.4.2.1.5.2851|4x|2d6e +1.3.6.1.2.1.25.4.2.1.5.2852|4| +1.3.6.1.2.1.25.4.2.1.5.2919|4| +1.3.6.1.2.1.25.4.2.1.5.3773|4x|2d44 +1.3.6.1.2.1.25.4.2.1.5.4068|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.4085|4x|2f7661722f73657276696365206c6f673a202e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e +1.3.6.1.2.1.25.4.2.1.5.4119|4x|2d2d6e6f636c6561722074747931206c696e7578 +1.3.6.1.2.1.25.4.2.1.5.4122|4x|2d2d6b6565702d62617564203131353230302c33383430302c39363030207474795330207674323230 +1.3.6.1.2.1.25.4.2.1.5.4212|4|datastor +1.3.6.1.2.1.25.4.2.1.5.4213|4|eventd +1.3.6.1.2.1.25.4.2.1.5.4214|4|named +1.3.6.1.2.1.25.4.2.1.5.4215|4|sdmd +1.3.6.1.2.1.25.4.2.1.5.4216|4x|6f767364622d736572766572 +1.3.6.1.2.1.25.4.2.1.5.4217|4|wocd +1.3.6.1.2.1.25.4.2.1.5.4218|4|nlad +1.3.6.1.2.1.25.4.2.1.5.4219|4|wccpd +1.3.6.1.2.1.25.4.2.1.5.4220|4|dnscached +1.3.6.1.2.1.25.4.2.1.5.4221|4|rba +1.3.6.1.2.1.25.4.2.1.5.4222|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.4224|4x|2f7573722f7362696e2f6e616d6564202d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66202d6e2031 +1.3.6.1.2.1.25.4.2.1.5.4226|4| +1.3.6.1.2.1.25.4.2.1.5.4434|4|tmipsecd +1.3.6.1.2.1.25.4.2.1.5.4435|4|ntlmconnpool +1.3.6.1.2.1.25.4.2.1.5.4436|4|pgadmind +1.3.6.1.2.1.25.4.2.1.5.4437|4|antserver +1.3.6.1.2.1.25.4.2.1.5.4438|4x|64656475705f61646d696e +1.3.6.1.2.1.25.4.2.1.5.4439|4x|61706d5f77656273736f +1.3.6.1.2.1.25.4.2.1.5.4440|4|samlidpd +1.3.6.1.2.1.25.4.2.1.5.4441|4|eca +1.3.6.1.2.1.25.4.2.1.5.4442|4|autodosd +1.3.6.1.2.1.25.4.2.1.5.4443|4|scriptd +1.3.6.1.2.1.25.4.2.1.5.4451|4| +1.3.6.1.2.1.25.4.2.1.5.4773|4|tmrouted +1.3.6.1.2.1.25.4.2.1.5.4774|4|vdi +1.3.6.1.2.1.25.4.2.1.5.4775|4|alertd +1.3.6.1.2.1.25.4.2.1.5.4776|4|fpuserd +1.3.6.1.2.1.25.4.2.1.5.4777|4|bdosd +1.3.6.1.2.1.25.4.2.1.5.4778|4|pccd +1.3.6.1.2.1.25.4.2.1.5.4779|4|asm +1.3.6.1.2.1.25.4.2.1.5.4780|4|eam +1.3.6.1.2.1.25.4.2.1.5.4781|4|tamd +1.3.6.1.2.1.25.4.2.1.5.4782|4|rtconfd +1.3.6.1.2.1.25.4.2.1.5.4784|4x|2d642030202d6f202f7661722f746d702f746d726f757465642e6f7574 +1.3.6.1.2.1.25.4.2.1.5.4786|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.4787|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.5137|4|evrouted +1.3.6.1.2.1.25.4.2.1.5.5138|4|syscalld +1.3.6.1.2.1.25.4.2.1.5.5139|4|csyncd +1.3.6.1.2.1.25.4.2.1.5.5140|4|natstatsd +1.3.6.1.2.1.25.4.2.1.5.5141|4x|6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.5.5142|4x|616466735f70726f7879 +1.3.6.1.2.1.25.4.2.1.5.5143|4|rewrite +1.3.6.1.2.1.25.4.2.1.5.5144|4|big3d +1.3.6.1.2.1.25.4.2.1.5.5145|4|omapd +1.3.6.1.2.1.25.4.2.1.5.5146|4|updated +1.3.6.1.2.1.25.4.2.1.5.5148|4| +1.3.6.1.2.1.25.4.2.1.5.5151|4x|2d746c7320544c537631202d636970686572732041455347434d3a4145533a214144483a2141454344483a2150534b3a2161454344483a214453533a2145434453413a214145533132383a2d534841313a4145533235362d534841202d72656e6567203836343030 +1.3.6.1.2.1.25.4.2.1.5.5155|4| +1.3.6.1.2.1.25.4.2.1.5.5159|4| +1.3.6.1.2.1.25.4.2.1.5.5501|4|botd +1.3.6.1.2.1.25.4.2.1.5.5502|4|clusterd +1.3.6.1.2.1.25.4.2.1.5.5503|4|bigd +1.3.6.1.2.1.25.4.2.1.5.5504|4|urldb +1.3.6.1.2.1.25.4.2.1.5.5505|4|logstatd +1.3.6.1.2.1.25.4.2.1.5.5506|4|errdefsd +1.3.6.1.2.1.25.4.2.1.5.5507|4|mysql +1.3.6.1.2.1.25.4.2.1.5.5508|4|logmysqld +1.3.6.1.2.1.25.4.2.1.5.5509|4|flowspecd +1.3.6.1.2.1.25.4.2.1.5.5510|4|ecmd +1.3.6.1.2.1.25.4.2.1.5.5516|4| +1.3.6.1.2.1.25.4.2.1.5.5522|4| +1.3.6.1.2.1.25.4.2.1.5.5861|4x|6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.5.5862|4|debugd +1.3.6.1.2.1.25.4.2.1.5.5863|4|statsd +1.3.6.1.2.1.25.4.2.1.5.5864|4|mcpd +1.3.6.1.2.1.25.4.2.1.5.5865|4|zxfrd +1.3.6.1.2.1.25.4.2.1.5.5866|4x|646f736c37645f61747461636b5f6d6f6e69746f72 +1.3.6.1.2.1.25.4.2.1.5.5867|4|chmand +1.3.6.1.2.1.25.4.2.1.5.5868|4|autodiscd +1.3.6.1.2.1.25.4.2.1.5.5869|4|mdmsyncmgr +1.3.6.1.2.1.25.4.2.1.5.5870|4|apmd +1.3.6.1.2.1.25.4.2.1.5.5872|4x|2d66202d2d76617269616e7420316e6963 +1.3.6.1.2.1.25.4.2.1.5.5875|4| +1.3.6.1.2.1.25.4.2.1.5.5878|4x|2d64626d656d20353132202d6c697374656e203132372e302e302e31202d666f7263656c6f6164202d66 +1.3.6.1.2.1.25.4.2.1.5.5879|4x|2d532030202d66 +1.3.6.1.2.1.25.4.2.1.5.5884|4| +1.3.6.1.2.1.25.4.2.1.5.6344|4|gtmd +1.3.6.1.2.1.25.4.2.1.5.6345|4|dynconfd +1.3.6.1.2.1.25.4.2.1.5.6346|4|sshplugin +1.3.6.1.2.1.25.4.2.1.5.6347|4|tmm +1.3.6.1.2.1.25.4.2.1.5.6348|4|avrd +1.3.6.1.2.1.25.4.2.1.5.6349|4x|70696e675f6163636573735f6167656e74 +1.3.6.1.2.1.25.4.2.1.5.6350|4|dwbld +1.3.6.1.2.1.25.4.2.1.5.6351|4|merged +1.3.6.1.2.1.25.4.2.1.5.6352|4|wamd +1.3.6.1.2.1.25.4.2.1.5.6353|4|tomcat +1.3.6.1.2.1.25.4.2.1.5.6358|4x|2d532030202d66 +1.3.6.1.2.1.25.4.2.1.5.6366|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.6763|4|vxland +1.3.6.1.2.1.25.4.2.1.5.6764|4|hwpd +1.3.6.1.2.1.25.4.2.1.5.6765|4|tasd +1.3.6.1.2.1.25.4.2.1.5.6766|4|pkcs11d +1.3.6.1.2.1.25.4.2.1.5.6767|4|admd +1.3.6.1.2.1.25.4.2.1.5.6768|4|iprepd +1.3.6.1.2.1.25.4.2.1.5.6769|4x|676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.2.1.25.4.2.1.5.6770|4|snmpd +1.3.6.1.2.1.25.4.2.1.5.6771|4|keymgmtd +1.3.6.1.2.1.25.4.2.1.5.6772|4|oauth +1.3.6.1.2.1.25.4.2.1.5.6782|4x|2f7573722f62696e2f676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.2.1.25.4.2.1.5.6784|4| +1.3.6.1.2.1.25.4.2.1.5.7174|4|captured +1.3.6.1.2.1.25.4.2.1.5.7175|4|cbrd +1.3.6.1.2.1.25.4.2.1.5.7176|4|zrd +1.3.6.1.2.1.25.4.2.1.5.7177|4|lacpd +1.3.6.1.2.1.25.4.2.1.5.7178|4|monpd +1.3.6.1.2.1.25.4.2.1.5.7179|4|restjavad +1.3.6.1.2.1.25.4.2.1.5.7180|4|shmmapd +1.3.6.1.2.1.25.4.2.1.5.7181|4|websso +1.3.6.1.2.1.25.4.2.1.5.7182|4|devmgmtd +1.3.6.1.2.1.25.4.2.1.5.7183|4x|68747470645f61706d +1.3.6.1.2.1.25.4.2.1.5.7188|4x|2d446a6176612e7574696c2e6c6f6767696e672e6d616e616765723d636f6d2e66352e726573742e636f6d6d6f6e2e526573744c6f674d616e61676572202d446a6176612e7574696c2e6c6f6767696e672e636f6e6669672e66696c653d2f6574632f726573746a617661642e6c6f672e636f6e66202d446c6f67346a2e6465 +1.3.6.1.2.1.25.4.2.1.5.7192|4| +1.3.6.1.2.1.25.4.2.1.5.7194|4x|2d6c206e6f74696365 +1.3.6.1.2.1.25.4.2.1.5.7196|4x|2d2d746872656164733d32202d2d686f73742d6d656d6f72793d343032363533313834202d2d756d755f7468726573686f6c643d3930202d2d70656e64696e675f7472616e733d35303030202d2d726571756573745f73697a653d3130323430202d2d6269675f726571756573745f73697a652031303438353736202d2d6d61 +1.3.6.1.2.1.25.4.2.1.5.7523|4|sod +1.3.6.1.2.1.25.4.2.1.5.7524|4|wocplugin +1.3.6.1.2.1.25.4.2.1.5.7525|4x|73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.5.7526|4|urldbmgrd +1.3.6.1.2.1.25.4.2.1.5.7527|4x|66355f7570646174655f636865636b6572 +1.3.6.1.2.1.25.4.2.1.5.7528|4|nsyncd +1.3.6.1.2.1.25.4.2.1.5.7529|4|lind +1.3.6.1.2.1.25.4.2.1.5.7530|4|aced +1.3.6.1.2.1.25.4.2.1.5.7531|4|restnoded +1.3.6.1.2.1.25.4.2.1.5.7532|4|datasyncd +1.3.6.1.2.1.25.4.2.1.5.7535|4| +1.3.6.1.2.1.25.4.2.1.5.7539|4| +1.3.6.1.2.1.25.4.2.1.5.7543|4x|2d66202d4c462035202f7661722f6c6f672f73666c6f775f6167656e742e6c6f67 +1.3.6.1.2.1.25.4.2.1.5.7544|4x|2f7573722f73686172652f726573742f6e6f64652f7372632f726573746e6f64652e6a73202d702038313035202d2d6c6f674c6576656c2066696e657374202d69202f7661722f6c6f672f726573746e6f6465642f726573746e6f6465642e6c6f67202d73206e6f6e65 +1.3.6.1.2.1.25.4.2.1.5.7949|4|fslogd +1.3.6.1.2.1.25.4.2.1.5.7950|4|ipsd +1.3.6.1.2.1.25.4.2.1.5.7951|4|nokiasnmpd +1.3.6.1.2.1.25.4.2.1.5.7952|4|dosl7d +1.3.6.1.2.1.25.4.2.1.5.7953|4|localdbmgr +1.3.6.1.2.1.25.4.2.1.5.7954|4x|77725f75726c646264 +1.3.6.1.2.1.25.4.2.1.5.9526|4x|2d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f6468636c69656e742f6468636c69656e742e6c6561736573202d7066202f7661722f72756e2f6468636c69656e742e706964 +1.3.6.1.2.1.25.4.2.1.5.9602|4x|2d36202d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f6468636c69656e742f6468636c69656e74362d6d676d742e6c6561736573202d7066202f7661722f72756e2f6468636c69656e74362d6d676d742e706964 +1.3.6.1.2.1.25.4.2.1.5.11784|4x|746f6d636174202d73202f62696e2f62617368202d63206578706f7274204a4156415f4f5054533d272d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d44707974686f6e2e63616368656469723d2f7661722f746d70202d446a6176612e6c6962726172792e706174683d2f7573722f6c +1.3.6.1.2.1.25.4.2.1.5.13563|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.13565|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.13566|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.15387|4x|2d67 +1.3.6.1.2.1.25.4.2.1.5.15921|4x|2d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d44707974686f6e2e63616368656469723d2f7661722f746d70202d446a6176612e6c6962726172792e706174683d2f7573722f6c6962202d4466696c652e656e636f64696e673d5554462d38202d636c69656e74202d586d783133306d +1.3.6.1.2.1.25.4.2.1.5.16645|4x|2d70206c6f63616c362e696e666f +1.3.6.1.2.1.25.4.2.1.5.16646|4x|2d70206c6f63616c362e696e666f +1.3.6.1.2.1.25.4.2.1.5.16648|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.16651|4| +1.3.6.1.2.1.25.4.2.1.5.16652|4| +1.3.6.1.2.1.25.4.2.1.5.16653|4| +1.3.6.1.2.1.25.4.2.1.5.16654|4| +1.3.6.1.2.1.25.4.2.1.5.17900|4x|2d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66202d6e2031 +1.3.6.1.2.1.25.4.2.1.5.18651|4x|2d702038313030202d6c2032202d692034343038353361662d376362352d346530302d393631632d373133303033336265613235 +1.3.6.1.2.1.25.4.2.1.5.23175|4| +1.3.6.1.2.1.25.4.2.1.5.23330|4x|2d66202d63202f636f6e6669672f736e6d702f736e6d70642e636f6e66202d4c7364202d4c462036202f7661722f6c6f672f736e6d70642e6c6f67202d70202f7661722f72756e2f736e6d70642e706964 +1.3.6.1.2.1.25.4.2.1.5.25514|4| +1.3.6.1.2.1.25.4.2.1.5.25517|4x|2d2d746d6d636f756e742032 +1.3.6.1.2.1.25.4.2.1.5.25518|4x|2f7661722f72756e203220322030202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.2.1.25.4.2.1.5.25522|4| +1.3.6.1.2.1.25.4.2.1.5.25524|4| +1.3.6.1.2.1.25.4.2.1.5.25531|4| +1.3.6.1.2.1.25.4.2.1.5.25946|4x|2d53 +1.3.6.1.2.1.25.4.2.1.5.27567|4x|2d63206d656d3a2f2f6e746c6d +1.3.6.1.2.1.25.4.2.1.5.29431|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.29439|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.29440|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.30092|4x|2d542032202d2d746d69642030202d2d6e7075732032202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.2.1.25.4.2.1.5.30120|4x|2d6c202f7661722f6c6f672f7261636f6f6e2e6c6f67202d66202f6574632f7261636f6f6e2f7261636f6f6e2e636f6e66 +1.3.6.1.2.1.25.4.2.1.5.30180|4| +1.3.6.1.2.1.25.4.2.1.5.32066|4x|2d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.2.1.25.4.2.1.6.1|2|4 +1.3.6.1.2.1.25.4.2.1.6.415|2|4 +1.3.6.1.2.1.25.4.2.1.6.440|2|4 +1.3.6.1.2.1.25.4.2.1.6.447|2|4 +1.3.6.1.2.1.25.4.2.1.6.921|2|4 +1.3.6.1.2.1.25.4.2.1.6.951|2|4 +1.3.6.1.2.1.25.4.2.1.6.977|2|4 +1.3.6.1.2.1.25.4.2.1.6.979|2|4 +1.3.6.1.2.1.25.4.2.1.6.982|2|4 +1.3.6.1.2.1.25.4.2.1.6.984|2|4 +1.3.6.1.2.1.25.4.2.1.6.1038|2|4 +1.3.6.1.2.1.25.4.2.1.6.1826|2|4 +1.3.6.1.2.1.25.4.2.1.6.2851|2|4 +1.3.6.1.2.1.25.4.2.1.6.2852|2|4 +1.3.6.1.2.1.25.4.2.1.6.2919|2|4 +1.3.6.1.2.1.25.4.2.1.6.3773|2|4 +1.3.6.1.2.1.25.4.2.1.6.4068|2|4 +1.3.6.1.2.1.25.4.2.1.6.4085|2|4 +1.3.6.1.2.1.25.4.2.1.6.4119|2|4 +1.3.6.1.2.1.25.4.2.1.6.4122|2|4 +1.3.6.1.2.1.25.4.2.1.6.4212|2|4 +1.3.6.1.2.1.25.4.2.1.6.4213|2|4 +1.3.6.1.2.1.25.4.2.1.6.4214|2|4 +1.3.6.1.2.1.25.4.2.1.6.4215|2|4 +1.3.6.1.2.1.25.4.2.1.6.4216|2|4 +1.3.6.1.2.1.25.4.2.1.6.4217|2|4 +1.3.6.1.2.1.25.4.2.1.6.4218|2|4 +1.3.6.1.2.1.25.4.2.1.6.4219|2|4 +1.3.6.1.2.1.25.4.2.1.6.4220|2|4 +1.3.6.1.2.1.25.4.2.1.6.4221|2|4 +1.3.6.1.2.1.25.4.2.1.6.4222|2|4 +1.3.6.1.2.1.25.4.2.1.6.4224|2|4 +1.3.6.1.2.1.25.4.2.1.6.4226|2|4 +1.3.6.1.2.1.25.4.2.1.6.4434|2|4 +1.3.6.1.2.1.25.4.2.1.6.4435|2|4 +1.3.6.1.2.1.25.4.2.1.6.4436|2|4 +1.3.6.1.2.1.25.4.2.1.6.4437|2|4 +1.3.6.1.2.1.25.4.2.1.6.4438|2|4 +1.3.6.1.2.1.25.4.2.1.6.4439|2|4 +1.3.6.1.2.1.25.4.2.1.6.4440|2|4 +1.3.6.1.2.1.25.4.2.1.6.4441|2|4 +1.3.6.1.2.1.25.4.2.1.6.4442|2|4 +1.3.6.1.2.1.25.4.2.1.6.4443|2|4 +1.3.6.1.2.1.25.4.2.1.6.4451|2|4 +1.3.6.1.2.1.25.4.2.1.6.4773|2|4 +1.3.6.1.2.1.25.4.2.1.6.4774|2|4 +1.3.6.1.2.1.25.4.2.1.6.4775|2|4 +1.3.6.1.2.1.25.4.2.1.6.4776|2|4 +1.3.6.1.2.1.25.4.2.1.6.4777|2|4 +1.3.6.1.2.1.25.4.2.1.6.4778|2|4 +1.3.6.1.2.1.25.4.2.1.6.4779|2|4 +1.3.6.1.2.1.25.4.2.1.6.4780|2|4 +1.3.6.1.2.1.25.4.2.1.6.4781|2|4 +1.3.6.1.2.1.25.4.2.1.6.4782|2|4 +1.3.6.1.2.1.25.4.2.1.6.4784|2|4 +1.3.6.1.2.1.25.4.2.1.6.4786|2|4 +1.3.6.1.2.1.25.4.2.1.6.4787|2|4 +1.3.6.1.2.1.25.4.2.1.6.5137|2|4 +1.3.6.1.2.1.25.4.2.1.6.5138|2|4 +1.3.6.1.2.1.25.4.2.1.6.5139|2|4 +1.3.6.1.2.1.25.4.2.1.6.5140|2|4 +1.3.6.1.2.1.25.4.2.1.6.5141|2|4 +1.3.6.1.2.1.25.4.2.1.6.5142|2|4 +1.3.6.1.2.1.25.4.2.1.6.5143|2|4 +1.3.6.1.2.1.25.4.2.1.6.5144|2|4 +1.3.6.1.2.1.25.4.2.1.6.5145|2|4 +1.3.6.1.2.1.25.4.2.1.6.5146|2|4 +1.3.6.1.2.1.25.4.2.1.6.5148|2|4 +1.3.6.1.2.1.25.4.2.1.6.5151|2|4 +1.3.6.1.2.1.25.4.2.1.6.5155|2|4 +1.3.6.1.2.1.25.4.2.1.6.5159|2|4 +1.3.6.1.2.1.25.4.2.1.6.5501|2|4 +1.3.6.1.2.1.25.4.2.1.6.5502|2|4 +1.3.6.1.2.1.25.4.2.1.6.5503|2|4 +1.3.6.1.2.1.25.4.2.1.6.5504|2|4 +1.3.6.1.2.1.25.4.2.1.6.5505|2|4 +1.3.6.1.2.1.25.4.2.1.6.5506|2|4 +1.3.6.1.2.1.25.4.2.1.6.5507|2|4 +1.3.6.1.2.1.25.4.2.1.6.5508|2|4 +1.3.6.1.2.1.25.4.2.1.6.5509|2|4 +1.3.6.1.2.1.25.4.2.1.6.5510|2|4 +1.3.6.1.2.1.25.4.2.1.6.5516|2|4 +1.3.6.1.2.1.25.4.2.1.6.5522|2|4 +1.3.6.1.2.1.25.4.2.1.6.5861|2|4 +1.3.6.1.2.1.25.4.2.1.6.5862|2|4 +1.3.6.1.2.1.25.4.2.1.6.5863|2|4 +1.3.6.1.2.1.25.4.2.1.6.5864|2|4 +1.3.6.1.2.1.25.4.2.1.6.5865|2|4 +1.3.6.1.2.1.25.4.2.1.6.5866|2|4 +1.3.6.1.2.1.25.4.2.1.6.5867|2|4 +1.3.6.1.2.1.25.4.2.1.6.5868|2|4 +1.3.6.1.2.1.25.4.2.1.6.5869|2|4 +1.3.6.1.2.1.25.4.2.1.6.5870|2|4 +1.3.6.1.2.1.25.4.2.1.6.5872|2|4 +1.3.6.1.2.1.25.4.2.1.6.5875|2|4 +1.3.6.1.2.1.25.4.2.1.6.5878|2|4 +1.3.6.1.2.1.25.4.2.1.6.5879|2|4 +1.3.6.1.2.1.25.4.2.1.6.5884|2|4 +1.3.6.1.2.1.25.4.2.1.6.6344|2|4 +1.3.6.1.2.1.25.4.2.1.6.6345|2|4 +1.3.6.1.2.1.25.4.2.1.6.6346|2|4 +1.3.6.1.2.1.25.4.2.1.6.6347|2|4 +1.3.6.1.2.1.25.4.2.1.6.6348|2|4 +1.3.6.1.2.1.25.4.2.1.6.6349|2|4 +1.3.6.1.2.1.25.4.2.1.6.6350|2|4 +1.3.6.1.2.1.25.4.2.1.6.6351|2|4 +1.3.6.1.2.1.25.4.2.1.6.6352|2|4 +1.3.6.1.2.1.25.4.2.1.6.6353|2|4 +1.3.6.1.2.1.25.4.2.1.6.6358|2|4 +1.3.6.1.2.1.25.4.2.1.6.6366|2|4 +1.3.6.1.2.1.25.4.2.1.6.6763|2|4 +1.3.6.1.2.1.25.4.2.1.6.6764|2|4 +1.3.6.1.2.1.25.4.2.1.6.6765|2|4 +1.3.6.1.2.1.25.4.2.1.6.6766|2|4 +1.3.6.1.2.1.25.4.2.1.6.6767|2|4 +1.3.6.1.2.1.25.4.2.1.6.6768|2|4 +1.3.6.1.2.1.25.4.2.1.6.6769|2|4 +1.3.6.1.2.1.25.4.2.1.6.6770|2|4 +1.3.6.1.2.1.25.4.2.1.6.6771|2|4 +1.3.6.1.2.1.25.4.2.1.6.6772|2|4 +1.3.6.1.2.1.25.4.2.1.6.6782|2|4 +1.3.6.1.2.1.25.4.2.1.6.6784|2|4 +1.3.6.1.2.1.25.4.2.1.6.7174|2|4 +1.3.6.1.2.1.25.4.2.1.6.7175|2|4 +1.3.6.1.2.1.25.4.2.1.6.7176|2|4 +1.3.6.1.2.1.25.4.2.1.6.7177|2|4 +1.3.6.1.2.1.25.4.2.1.6.7178|2|4 +1.3.6.1.2.1.25.4.2.1.6.7179|2|4 +1.3.6.1.2.1.25.4.2.1.6.7180|2|4 +1.3.6.1.2.1.25.4.2.1.6.7181|2|4 +1.3.6.1.2.1.25.4.2.1.6.7182|2|4 +1.3.6.1.2.1.25.4.2.1.6.7183|2|4 +1.3.6.1.2.1.25.4.2.1.6.7188|2|4 +1.3.6.1.2.1.25.4.2.1.6.7192|2|4 +1.3.6.1.2.1.25.4.2.1.6.7194|2|4 +1.3.6.1.2.1.25.4.2.1.6.7196|2|4 +1.3.6.1.2.1.25.4.2.1.6.7523|2|4 +1.3.6.1.2.1.25.4.2.1.6.7524|2|4 +1.3.6.1.2.1.25.4.2.1.6.7525|2|4 +1.3.6.1.2.1.25.4.2.1.6.7526|2|4 +1.3.6.1.2.1.25.4.2.1.6.7527|2|4 +1.3.6.1.2.1.25.4.2.1.6.7528|2|4 +1.3.6.1.2.1.25.4.2.1.6.7529|2|4 +1.3.6.1.2.1.25.4.2.1.6.7530|2|4 +1.3.6.1.2.1.25.4.2.1.6.7531|2|4 +1.3.6.1.2.1.25.4.2.1.6.7532|2|4 +1.3.6.1.2.1.25.4.2.1.6.7535|2|4 +1.3.6.1.2.1.25.4.2.1.6.7539|2|4 +1.3.6.1.2.1.25.4.2.1.6.7543|2|4 +1.3.6.1.2.1.25.4.2.1.6.7544|2|4 +1.3.6.1.2.1.25.4.2.1.6.7949|2|4 +1.3.6.1.2.1.25.4.2.1.6.7950|2|4 +1.3.6.1.2.1.25.4.2.1.6.7951|2|4 +1.3.6.1.2.1.25.4.2.1.6.7952|2|4 +1.3.6.1.2.1.25.4.2.1.6.7953|2|4 +1.3.6.1.2.1.25.4.2.1.6.7954|2|4 +1.3.6.1.2.1.25.4.2.1.6.9526|2|4 +1.3.6.1.2.1.25.4.2.1.6.9602|2|4 +1.3.6.1.2.1.25.4.2.1.6.11784|2|4 +1.3.6.1.2.1.25.4.2.1.6.13563|2|4 +1.3.6.1.2.1.25.4.2.1.6.13565|2|4 +1.3.6.1.2.1.25.4.2.1.6.13566|2|4 +1.3.6.1.2.1.25.4.2.1.6.15387|2|4 +1.3.6.1.2.1.25.4.2.1.6.15921|2|4 +1.3.6.1.2.1.25.4.2.1.6.16645|2|4 +1.3.6.1.2.1.25.4.2.1.6.16646|2|4 +1.3.6.1.2.1.25.4.2.1.6.16648|2|4 +1.3.6.1.2.1.25.4.2.1.6.16651|2|4 +1.3.6.1.2.1.25.4.2.1.6.16652|2|4 +1.3.6.1.2.1.25.4.2.1.6.16653|2|4 +1.3.6.1.2.1.25.4.2.1.6.16654|2|4 +1.3.6.1.2.1.25.4.2.1.6.17900|2|4 +1.3.6.1.2.1.25.4.2.1.6.18651|2|4 +1.3.6.1.2.1.25.4.2.1.6.23175|2|4 +1.3.6.1.2.1.25.4.2.1.6.23330|2|4 +1.3.6.1.2.1.25.4.2.1.6.25514|2|4 +1.3.6.1.2.1.25.4.2.1.6.25517|2|4 +1.3.6.1.2.1.25.4.2.1.6.25518|2|4 +1.3.6.1.2.1.25.4.2.1.6.25522|2|4 +1.3.6.1.2.1.25.4.2.1.6.25524|2|4 +1.3.6.1.2.1.25.4.2.1.6.25531|2|4 +1.3.6.1.2.1.25.4.2.1.6.25946|2|4 +1.3.6.1.2.1.25.4.2.1.6.27567|2|4 +1.3.6.1.2.1.25.4.2.1.6.29431|2|4 +1.3.6.1.2.1.25.4.2.1.6.29439|2|4 +1.3.6.1.2.1.25.4.2.1.6.29440|2|4 +1.3.6.1.2.1.25.4.2.1.6.30092|2|4 +1.3.6.1.2.1.25.4.2.1.6.30120|2|4 +1.3.6.1.2.1.25.4.2.1.6.30180|2|4 +1.3.6.1.2.1.25.4.2.1.6.32066|2|4 +1.3.6.1.2.1.25.4.2.1.7.1|2|2 +1.3.6.1.2.1.25.4.2.1.7.415|2|2 +1.3.6.1.2.1.25.4.2.1.7.440|2|2 +1.3.6.1.2.1.25.4.2.1.7.447|2|2 +1.3.6.1.2.1.25.4.2.1.7.921|2|2 +1.3.6.1.2.1.25.4.2.1.7.951|2|2 +1.3.6.1.2.1.25.4.2.1.7.977|2|2 +1.3.6.1.2.1.25.4.2.1.7.979|2|2 +1.3.6.1.2.1.25.4.2.1.7.982|2|2 +1.3.6.1.2.1.25.4.2.1.7.984|2|2 +1.3.6.1.2.1.25.4.2.1.7.1038|2|2 +1.3.6.1.2.1.25.4.2.1.7.1826|2|2 +1.3.6.1.2.1.25.4.2.1.7.2851|2|2 +1.3.6.1.2.1.25.4.2.1.7.2852|2|2 +1.3.6.1.2.1.25.4.2.1.7.2919|2|2 +1.3.6.1.2.1.25.4.2.1.7.3773|2|2 +1.3.6.1.2.1.25.4.2.1.7.4068|2|2 +1.3.6.1.2.1.25.4.2.1.7.4085|2|2 +1.3.6.1.2.1.25.4.2.1.7.4119|2|2 +1.3.6.1.2.1.25.4.2.1.7.4122|2|2 +1.3.6.1.2.1.25.4.2.1.7.4212|2|2 +1.3.6.1.2.1.25.4.2.1.7.4213|2|2 +1.3.6.1.2.1.25.4.2.1.7.4214|2|2 +1.3.6.1.2.1.25.4.2.1.7.4215|2|2 +1.3.6.1.2.1.25.4.2.1.7.4216|2|2 +1.3.6.1.2.1.25.4.2.1.7.4217|2|2 +1.3.6.1.2.1.25.4.2.1.7.4218|2|2 +1.3.6.1.2.1.25.4.2.1.7.4219|2|2 +1.3.6.1.2.1.25.4.2.1.7.4220|2|2 +1.3.6.1.2.1.25.4.2.1.7.4221|2|2 +1.3.6.1.2.1.25.4.2.1.7.4222|2|2 +1.3.6.1.2.1.25.4.2.1.7.4224|2|2 +1.3.6.1.2.1.25.4.2.1.7.4226|2|2 +1.3.6.1.2.1.25.4.2.1.7.4434|2|2 +1.3.6.1.2.1.25.4.2.1.7.4435|2|2 +1.3.6.1.2.1.25.4.2.1.7.4436|2|2 +1.3.6.1.2.1.25.4.2.1.7.4437|2|2 +1.3.6.1.2.1.25.4.2.1.7.4438|2|2 +1.3.6.1.2.1.25.4.2.1.7.4439|2|2 +1.3.6.1.2.1.25.4.2.1.7.4440|2|2 +1.3.6.1.2.1.25.4.2.1.7.4441|2|2 +1.3.6.1.2.1.25.4.2.1.7.4442|2|2 +1.3.6.1.2.1.25.4.2.1.7.4443|2|2 +1.3.6.1.2.1.25.4.2.1.7.4451|2|2 +1.3.6.1.2.1.25.4.2.1.7.4773|2|2 +1.3.6.1.2.1.25.4.2.1.7.4774|2|2 +1.3.6.1.2.1.25.4.2.1.7.4775|2|2 +1.3.6.1.2.1.25.4.2.1.7.4776|2|2 +1.3.6.1.2.1.25.4.2.1.7.4777|2|2 +1.3.6.1.2.1.25.4.2.1.7.4778|2|2 +1.3.6.1.2.1.25.4.2.1.7.4779|2|2 +1.3.6.1.2.1.25.4.2.1.7.4780|2|2 +1.3.6.1.2.1.25.4.2.1.7.4781|2|2 +1.3.6.1.2.1.25.4.2.1.7.4782|2|2 +1.3.6.1.2.1.25.4.2.1.7.4784|2|2 +1.3.6.1.2.1.25.4.2.1.7.4786|2|2 +1.3.6.1.2.1.25.4.2.1.7.4787|2|2 +1.3.6.1.2.1.25.4.2.1.7.5137|2|2 +1.3.6.1.2.1.25.4.2.1.7.5138|2|2 +1.3.6.1.2.1.25.4.2.1.7.5139|2|2 +1.3.6.1.2.1.25.4.2.1.7.5140|2|2 +1.3.6.1.2.1.25.4.2.1.7.5141|2|2 +1.3.6.1.2.1.25.4.2.1.7.5142|2|2 +1.3.6.1.2.1.25.4.2.1.7.5143|2|2 +1.3.6.1.2.1.25.4.2.1.7.5144|2|2 +1.3.6.1.2.1.25.4.2.1.7.5145|2|2 +1.3.6.1.2.1.25.4.2.1.7.5146|2|2 +1.3.6.1.2.1.25.4.2.1.7.5148|2|2 +1.3.6.1.2.1.25.4.2.1.7.5151|2|2 +1.3.6.1.2.1.25.4.2.1.7.5155|2|2 +1.3.6.1.2.1.25.4.2.1.7.5159|2|2 +1.3.6.1.2.1.25.4.2.1.7.5501|2|2 +1.3.6.1.2.1.25.4.2.1.7.5502|2|2 +1.3.6.1.2.1.25.4.2.1.7.5503|2|2 +1.3.6.1.2.1.25.4.2.1.7.5504|2|2 +1.3.6.1.2.1.25.4.2.1.7.5505|2|2 +1.3.6.1.2.1.25.4.2.1.7.5506|2|2 +1.3.6.1.2.1.25.4.2.1.7.5507|2|2 +1.3.6.1.2.1.25.4.2.1.7.5508|2|2 +1.3.6.1.2.1.25.4.2.1.7.5509|2|2 +1.3.6.1.2.1.25.4.2.1.7.5510|2|2 +1.3.6.1.2.1.25.4.2.1.7.5516|2|2 +1.3.6.1.2.1.25.4.2.1.7.5522|2|2 +1.3.6.1.2.1.25.4.2.1.7.5861|2|2 +1.3.6.1.2.1.25.4.2.1.7.5862|2|2 +1.3.6.1.2.1.25.4.2.1.7.5863|2|2 +1.3.6.1.2.1.25.4.2.1.7.5864|2|2 +1.3.6.1.2.1.25.4.2.1.7.5865|2|2 +1.3.6.1.2.1.25.4.2.1.7.5866|2|2 +1.3.6.1.2.1.25.4.2.1.7.5867|2|2 +1.3.6.1.2.1.25.4.2.1.7.5868|2|2 +1.3.6.1.2.1.25.4.2.1.7.5869|2|2 +1.3.6.1.2.1.25.4.2.1.7.5870|2|2 +1.3.6.1.2.1.25.4.2.1.7.5872|2|2 +1.3.6.1.2.1.25.4.2.1.7.5875|2|2 +1.3.6.1.2.1.25.4.2.1.7.5878|2|2 +1.3.6.1.2.1.25.4.2.1.7.5879|2|2 +1.3.6.1.2.1.25.4.2.1.7.5884|2|2 +1.3.6.1.2.1.25.4.2.1.7.6344|2|2 +1.3.6.1.2.1.25.4.2.1.7.6345|2|2 +1.3.6.1.2.1.25.4.2.1.7.6346|2|2 +1.3.6.1.2.1.25.4.2.1.7.6347|2|2 +1.3.6.1.2.1.25.4.2.1.7.6348|2|2 +1.3.6.1.2.1.25.4.2.1.7.6349|2|2 +1.3.6.1.2.1.25.4.2.1.7.6350|2|2 +1.3.6.1.2.1.25.4.2.1.7.6351|2|2 +1.3.6.1.2.1.25.4.2.1.7.6352|2|2 +1.3.6.1.2.1.25.4.2.1.7.6353|2|2 +1.3.6.1.2.1.25.4.2.1.7.6358|2|2 +1.3.6.1.2.1.25.4.2.1.7.6366|2|2 +1.3.6.1.2.1.25.4.2.1.7.6763|2|2 +1.3.6.1.2.1.25.4.2.1.7.6764|2|2 +1.3.6.1.2.1.25.4.2.1.7.6765|2|2 +1.3.6.1.2.1.25.4.2.1.7.6766|2|2 +1.3.6.1.2.1.25.4.2.1.7.6767|2|2 +1.3.6.1.2.1.25.4.2.1.7.6768|2|2 +1.3.6.1.2.1.25.4.2.1.7.6769|2|2 +1.3.6.1.2.1.25.4.2.1.7.6770|2|2 +1.3.6.1.2.1.25.4.2.1.7.6771|2|2 +1.3.6.1.2.1.25.4.2.1.7.6772|2|2 +1.3.6.1.2.1.25.4.2.1.7.6782|2|2 +1.3.6.1.2.1.25.4.2.1.7.6784|2|2 +1.3.6.1.2.1.25.4.2.1.7.7174|2|2 +1.3.6.1.2.1.25.4.2.1.7.7175|2|2 +1.3.6.1.2.1.25.4.2.1.7.7176|2|2 +1.3.6.1.2.1.25.4.2.1.7.7177|2|2 +1.3.6.1.2.1.25.4.2.1.7.7178|2|2 +1.3.6.1.2.1.25.4.2.1.7.7179|2|2 +1.3.6.1.2.1.25.4.2.1.7.7180|2|2 +1.3.6.1.2.1.25.4.2.1.7.7181|2|2 +1.3.6.1.2.1.25.4.2.1.7.7182|2|2 +1.3.6.1.2.1.25.4.2.1.7.7183|2|2 +1.3.6.1.2.1.25.4.2.1.7.7188|2|2 +1.3.6.1.2.1.25.4.2.1.7.7192|2|2 +1.3.6.1.2.1.25.4.2.1.7.7194|2|2 +1.3.6.1.2.1.25.4.2.1.7.7196|2|2 +1.3.6.1.2.1.25.4.2.1.7.7523|2|2 +1.3.6.1.2.1.25.4.2.1.7.7524|2|2 +1.3.6.1.2.1.25.4.2.1.7.7525|2|2 +1.3.6.1.2.1.25.4.2.1.7.7526|2|2 +1.3.6.1.2.1.25.4.2.1.7.7527|2|2 +1.3.6.1.2.1.25.4.2.1.7.7528|2|2 +1.3.6.1.2.1.25.4.2.1.7.7529|2|2 +1.3.6.1.2.1.25.4.2.1.7.7530|2|2 +1.3.6.1.2.1.25.4.2.1.7.7531|2|2 +1.3.6.1.2.1.25.4.2.1.7.7532|2|2 +1.3.6.1.2.1.25.4.2.1.7.7535|2|2 +1.3.6.1.2.1.25.4.2.1.7.7539|2|2 +1.3.6.1.2.1.25.4.2.1.7.7543|2|2 +1.3.6.1.2.1.25.4.2.1.7.7544|2|2 +1.3.6.1.2.1.25.4.2.1.7.7949|2|2 +1.3.6.1.2.1.25.4.2.1.7.7950|2|2 +1.3.6.1.2.1.25.4.2.1.7.7951|2|2 +1.3.6.1.2.1.25.4.2.1.7.7952|2|2 +1.3.6.1.2.1.25.4.2.1.7.7953|2|2 +1.3.6.1.2.1.25.4.2.1.7.7954|2|2 +1.3.6.1.2.1.25.4.2.1.7.9526|2|2 +1.3.6.1.2.1.25.4.2.1.7.9602|2|2 +1.3.6.1.2.1.25.4.2.1.7.11784|2|2 +1.3.6.1.2.1.25.4.2.1.7.13563|2|2 +1.3.6.1.2.1.25.4.2.1.7.13565|2|2 +1.3.6.1.2.1.25.4.2.1.7.13566|2|2 +1.3.6.1.2.1.25.4.2.1.7.15387|2|2 +1.3.6.1.2.1.25.4.2.1.7.15921|2|2 +1.3.6.1.2.1.25.4.2.1.7.16645|2|2 +1.3.6.1.2.1.25.4.2.1.7.16646|2|2 +1.3.6.1.2.1.25.4.2.1.7.16648|2|2 +1.3.6.1.2.1.25.4.2.1.7.16651|2|2 +1.3.6.1.2.1.25.4.2.1.7.16652|2|2 +1.3.6.1.2.1.25.4.2.1.7.16653|2|2 +1.3.6.1.2.1.25.4.2.1.7.16654|2|2 +1.3.6.1.2.1.25.4.2.1.7.17900|2|2 +1.3.6.1.2.1.25.4.2.1.7.18651|2|2 +1.3.6.1.2.1.25.4.2.1.7.23175|2|2 +1.3.6.1.2.1.25.4.2.1.7.23330|2|1 +1.3.6.1.2.1.25.4.2.1.7.25514|2|2 +1.3.6.1.2.1.25.4.2.1.7.25517|2|2 +1.3.6.1.2.1.25.4.2.1.7.25518|2|2 +1.3.6.1.2.1.25.4.2.1.7.25522|2|2 +1.3.6.1.2.1.25.4.2.1.7.25524|2|2 +1.3.6.1.2.1.25.4.2.1.7.25531|2|2 +1.3.6.1.2.1.25.4.2.1.7.25946|2|2 +1.3.6.1.2.1.25.4.2.1.7.27567|2|2 +1.3.6.1.2.1.25.4.2.1.7.29431|2|2 +1.3.6.1.2.1.25.4.2.1.7.29439|2|2 +1.3.6.1.2.1.25.4.2.1.7.29440|2|2 +1.3.6.1.2.1.25.4.2.1.7.30092|2|2 +1.3.6.1.2.1.25.4.2.1.7.30120|2|2 +1.3.6.1.2.1.25.4.2.1.7.30180|2|2 +1.3.6.1.2.1.25.4.2.1.7.32066|2|2 +1.3.6.1.2.1.25.5.1.1.1.1|2|165262 +1.3.6.1.2.1.25.5.1.1.1.415|2|61390 +1.3.6.1.2.1.25.5.1.1.1.440|2|4 +1.3.6.1.2.1.25.5.1.1.1.447|2|39 +1.3.6.1.2.1.25.5.1.1.1.921|2|30333 +1.3.6.1.2.1.25.5.1.1.1.951|2|5692 +1.3.6.1.2.1.25.5.1.1.1.977|2|40480 +1.3.6.1.2.1.25.5.1.1.1.979|2|0 +1.3.6.1.2.1.25.5.1.1.1.982|2|12218 +1.3.6.1.2.1.25.5.1.1.1.984|2|25789 +1.3.6.1.2.1.25.5.1.1.1.1038|2|4465 +1.3.6.1.2.1.25.5.1.1.1.1826|2|48202 +1.3.6.1.2.1.25.5.1.1.1.2851|2|7058 +1.3.6.1.2.1.25.5.1.1.1.2852|2|17967 +1.3.6.1.2.1.25.5.1.1.1.2919|2|42261 +1.3.6.1.2.1.25.5.1.1.1.3773|2|6 +1.3.6.1.2.1.25.5.1.1.1.4068|2|8841 +1.3.6.1.2.1.25.5.1.1.1.4085|2|7824 +1.3.6.1.2.1.25.5.1.1.1.4119|2|1 +1.3.6.1.2.1.25.5.1.1.1.4122|2|0 +1.3.6.1.2.1.25.5.1.1.1.4212|2|8 +1.3.6.1.2.1.25.5.1.1.1.4213|2|7 +1.3.6.1.2.1.25.5.1.1.1.4214|2|6 +1.3.6.1.2.1.25.5.1.1.1.4215|2|7 +1.3.6.1.2.1.25.5.1.1.1.4216|2|13 +1.3.6.1.2.1.25.5.1.1.1.4217|2|7 +1.3.6.1.2.1.25.5.1.1.1.4218|2|7 +1.3.6.1.2.1.25.5.1.1.1.4219|2|6 +1.3.6.1.2.1.25.5.1.1.1.4220|2|6 +1.3.6.1.2.1.25.5.1.1.1.4221|2|6 +1.3.6.1.2.1.25.5.1.1.1.4222|2|6290 +1.3.6.1.2.1.25.5.1.1.1.4224|2|5535 +1.3.6.1.2.1.25.5.1.1.1.4226|2|7801 +1.3.6.1.2.1.25.5.1.1.1.4434|2|6 +1.3.6.1.2.1.25.5.1.1.1.4435|2|5 +1.3.6.1.2.1.25.5.1.1.1.4436|2|7 +1.3.6.1.2.1.25.5.1.1.1.4437|2|7 +1.3.6.1.2.1.25.5.1.1.1.4438|2|7 +1.3.6.1.2.1.25.5.1.1.1.4439|2|6 +1.3.6.1.2.1.25.5.1.1.1.4440|2|6 +1.3.6.1.2.1.25.5.1.1.1.4441|2|6 +1.3.6.1.2.1.25.5.1.1.1.4442|2|9 +1.3.6.1.2.1.25.5.1.1.1.4443|2|7 +1.3.6.1.2.1.25.5.1.1.1.4451|2|5345 +1.3.6.1.2.1.25.5.1.1.1.4773|2|6 +1.3.6.1.2.1.25.5.1.1.1.4774|2|6 +1.3.6.1.2.1.25.5.1.1.1.4775|2|14 +1.3.6.1.2.1.25.5.1.1.1.4776|2|6 +1.3.6.1.2.1.25.5.1.1.1.4777|2|6 +1.3.6.1.2.1.25.5.1.1.1.4778|2|8 +1.3.6.1.2.1.25.5.1.1.1.4779|2|10 +1.3.6.1.2.1.25.5.1.1.1.4780|2|6 +1.3.6.1.2.1.25.5.1.1.1.4781|2|6 +1.3.6.1.2.1.25.5.1.1.1.4782|2|6 +1.3.6.1.2.1.25.5.1.1.1.4784|2|25 +1.3.6.1.2.1.25.5.1.1.1.4786|2|6114 +1.3.6.1.2.1.25.5.1.1.1.4787|2|18170 +1.3.6.1.2.1.25.5.1.1.1.5137|2|8 +1.3.6.1.2.1.25.5.1.1.1.5138|2|6 +1.3.6.1.2.1.25.5.1.1.1.5139|2|290 +1.3.6.1.2.1.25.5.1.1.1.5140|2|8 +1.3.6.1.2.1.25.5.1.1.1.5141|2|6 +1.3.6.1.2.1.25.5.1.1.1.5142|2|7 +1.3.6.1.2.1.25.5.1.1.1.5143|2|7 +1.3.6.1.2.1.25.5.1.1.1.5144|2|232 +1.3.6.1.2.1.25.5.1.1.1.5145|2|6 +1.3.6.1.2.1.25.5.1.1.1.5146|2|6 +1.3.6.1.2.1.25.5.1.1.1.5148|2|10704 +1.3.6.1.2.1.25.5.1.1.1.5151|2|766 +1.3.6.1.2.1.25.5.1.1.1.5155|2|249218 +1.3.6.1.2.1.25.5.1.1.1.5159|2|19 +1.3.6.1.2.1.25.5.1.1.1.5501|2|7 +1.3.6.1.2.1.25.5.1.1.1.5502|2|6 +1.3.6.1.2.1.25.5.1.1.1.5503|2|253 +1.3.6.1.2.1.25.5.1.1.1.5504|2|6 +1.3.6.1.2.1.25.5.1.1.1.5505|2|6 +1.3.6.1.2.1.25.5.1.1.1.5506|2|232 +1.3.6.1.2.1.25.5.1.1.1.5507|2|7 +1.3.6.1.2.1.25.5.1.1.1.5508|2|6 +1.3.6.1.2.1.25.5.1.1.1.5509|2|6 +1.3.6.1.2.1.25.5.1.1.1.5510|2|5 +1.3.6.1.2.1.25.5.1.1.1.5516|2|6706 +1.3.6.1.2.1.25.5.1.1.1.5522|2|9313 +1.3.6.1.2.1.25.5.1.1.1.5861|2|7 +1.3.6.1.2.1.25.5.1.1.1.5862|2|7 +1.3.6.1.2.1.25.5.1.1.1.5863|2|6 +1.3.6.1.2.1.25.5.1.1.1.5864|2|254 +1.3.6.1.2.1.25.5.1.1.1.5865|2|255 +1.3.6.1.2.1.25.5.1.1.1.5866|2|6 +1.3.6.1.2.1.25.5.1.1.1.5867|2|8 +1.3.6.1.2.1.25.5.1.1.1.5868|2|8 +1.3.6.1.2.1.25.5.1.1.1.5869|2|6 +1.3.6.1.2.1.25.5.1.1.1.5870|2|6 +1.3.6.1.2.1.25.5.1.1.1.5872|2|89111 +1.3.6.1.2.1.25.5.1.1.1.5875|2|1578 +1.3.6.1.2.1.25.5.1.1.1.5878|2|315974 +1.3.6.1.2.1.25.5.1.1.1.5879|2|135920 +1.3.6.1.2.1.25.5.1.1.1.5884|2|125 +1.3.6.1.2.1.25.5.1.1.1.6344|2|8 +1.3.6.1.2.1.25.5.1.1.1.6345|2|226 +1.3.6.1.2.1.25.5.1.1.1.6346|2|7 +1.3.6.1.2.1.25.5.1.1.1.6347|2|7 +1.3.6.1.2.1.25.5.1.1.1.6348|2|6 +1.3.6.1.2.1.25.5.1.1.1.6349|2|6 +1.3.6.1.2.1.25.5.1.1.1.6350|2|7 +1.3.6.1.2.1.25.5.1.1.1.6351|2|7 +1.3.6.1.2.1.25.5.1.1.1.6352|2|6 +1.3.6.1.2.1.25.5.1.1.1.6353|2|6 +1.3.6.1.2.1.25.5.1.1.1.6358|2|1124348 +1.3.6.1.2.1.25.5.1.1.1.6366|2|24875 +1.3.6.1.2.1.25.5.1.1.1.6763|2|7 +1.3.6.1.2.1.25.5.1.1.1.6764|2|6 +1.3.6.1.2.1.25.5.1.1.1.6765|2|7 +1.3.6.1.2.1.25.5.1.1.1.6766|2|9 +1.3.6.1.2.1.25.5.1.1.1.6767|2|6 +1.3.6.1.2.1.25.5.1.1.1.6768|2|8 +1.3.6.1.2.1.25.5.1.1.1.6769|2|6 +1.3.6.1.2.1.25.5.1.1.1.6770|2|279 +1.3.6.1.2.1.25.5.1.1.1.6771|2|6 +1.3.6.1.2.1.25.5.1.1.1.6772|2|6 +1.3.6.1.2.1.25.5.1.1.1.6782|2|16931 +1.3.6.1.2.1.25.5.1.1.1.6784|2|13643 +1.3.6.1.2.1.25.5.1.1.1.7174|2|7 +1.3.6.1.2.1.25.5.1.1.1.7175|2|248 +1.3.6.1.2.1.25.5.1.1.1.7176|2|6 +1.3.6.1.2.1.25.5.1.1.1.7177|2|6 +1.3.6.1.2.1.25.5.1.1.1.7178|2|7 +1.3.6.1.2.1.25.5.1.1.1.7179|2|7 +1.3.6.1.2.1.25.5.1.1.1.7180|2|11 +1.3.6.1.2.1.25.5.1.1.1.7181|2|7 +1.3.6.1.2.1.25.5.1.1.1.7182|2|231 +1.3.6.1.2.1.25.5.1.1.1.7183|2|6 +1.3.6.1.2.1.25.5.1.1.1.7188|2|444388 +1.3.6.1.2.1.25.5.1.1.1.7192|2|58233 +1.3.6.1.2.1.25.5.1.1.1.7194|2|375 +1.3.6.1.2.1.25.5.1.1.1.7196|2|19748 +1.3.6.1.2.1.25.5.1.1.1.7523|2|26 +1.3.6.1.2.1.25.5.1.1.1.7524|2|7 +1.3.6.1.2.1.25.5.1.1.1.7525|2|5 +1.3.6.1.2.1.25.5.1.1.1.7526|2|9 +1.3.6.1.2.1.25.5.1.1.1.7527|2|6 +1.3.6.1.2.1.25.5.1.1.1.7528|2|7 +1.3.6.1.2.1.25.5.1.1.1.7529|2|7 +1.3.6.1.2.1.25.5.1.1.1.7530|2|6 +1.3.6.1.2.1.25.5.1.1.1.7531|2|7 +1.3.6.1.2.1.25.5.1.1.1.7532|2|6 +1.3.6.1.2.1.25.5.1.1.1.7535|2|12645 +1.3.6.1.2.1.25.5.1.1.1.7539|2|250095 +1.3.6.1.2.1.25.5.1.1.1.7543|2|1623 +1.3.6.1.2.1.25.5.1.1.1.7544|2|464 +1.3.6.1.2.1.25.5.1.1.1.7949|2|6 +1.3.6.1.2.1.25.5.1.1.1.7950|2|6 +1.3.6.1.2.1.25.5.1.1.1.7951|2|6 +1.3.6.1.2.1.25.5.1.1.1.7952|2|6 +1.3.6.1.2.1.25.5.1.1.1.7953|2|6 +1.3.6.1.2.1.25.5.1.1.1.7954|2|8 +1.3.6.1.2.1.25.5.1.1.1.9526|2|19 +1.3.6.1.2.1.25.5.1.1.1.9602|2|2907 +1.3.6.1.2.1.25.5.1.1.1.11784|2|5 +1.3.6.1.2.1.25.5.1.1.1.13563|2|9 +1.3.6.1.2.1.25.5.1.1.1.13565|2|19 +1.3.6.1.2.1.25.5.1.1.1.13566|2|165 +1.3.6.1.2.1.25.5.1.1.1.15387|2|1377 +1.3.6.1.2.1.25.5.1.1.1.15921|2|2408518 +1.3.6.1.2.1.25.5.1.1.1.16645|2|553 +1.3.6.1.2.1.25.5.1.1.1.16646|2|353 +1.3.6.1.2.1.25.5.1.1.1.16648|2|23 +1.3.6.1.2.1.25.5.1.1.1.16651|2|372 +1.3.6.1.2.1.25.5.1.1.1.16652|2|1145 +1.3.6.1.2.1.25.5.1.1.1.16653|2|4450 +1.3.6.1.2.1.25.5.1.1.1.16654|2|75 +1.3.6.1.2.1.25.5.1.1.1.17900|2|78 +1.3.6.1.2.1.25.5.1.1.1.18651|2|169141 +1.3.6.1.2.1.25.5.1.1.1.23175|2|39960 +1.3.6.1.2.1.25.5.1.1.1.23330|2|34970 +1.3.6.1.2.1.25.5.1.1.1.25514|2|214 +1.3.6.1.2.1.25.5.1.1.1.25517|2|1974 +1.3.6.1.2.1.25.5.1.1.1.25518|2|4 +1.3.6.1.2.1.25.5.1.1.1.25522|2|55110 +1.3.6.1.2.1.25.5.1.1.1.25524|2|1527 +1.3.6.1.2.1.25.5.1.1.1.25531|2|6703 +1.3.6.1.2.1.25.5.1.1.1.25946|2|105695 +1.3.6.1.2.1.25.5.1.1.1.27567|2|1 +1.3.6.1.2.1.25.5.1.1.1.29431|2|390 +1.3.6.1.2.1.25.5.1.1.1.29439|2|397 +1.3.6.1.2.1.25.5.1.1.1.29440|2|562 +1.3.6.1.2.1.25.5.1.1.1.30092|2|30725875 +1.3.6.1.2.1.25.5.1.1.1.30120|2|502 +1.3.6.1.2.1.25.5.1.1.1.30180|2|17 +1.3.6.1.2.1.25.5.1.1.1.32066|2|0 +1.3.6.1.2.1.25.5.1.1.2.1|2|4500 +1.3.6.1.2.1.25.5.1.1.2.415|2|1948 +1.3.6.1.2.1.25.5.1.1.2.440|2|220 +1.3.6.1.2.1.25.5.1.1.2.447|2|144 +1.3.6.1.2.1.25.5.1.1.2.921|2|40 +1.3.6.1.2.1.25.5.1.1.2.951|2|492 +1.3.6.1.2.1.25.5.1.1.2.977|2|1040 +1.3.6.1.2.1.25.5.1.1.2.979|2|48 +1.3.6.1.2.1.25.5.1.1.2.982|2|444 +1.3.6.1.2.1.25.5.1.1.2.984|2|1108 +1.3.6.1.2.1.25.5.1.1.2.1038|2|16 +1.3.6.1.2.1.25.5.1.1.2.1826|2|5652 +1.3.6.1.2.1.25.5.1.1.2.2851|2|436 +1.3.6.1.2.1.25.5.1.1.2.2852|2|15216 +1.3.6.1.2.1.25.5.1.1.2.2919|2|89012 +1.3.6.1.2.1.25.5.1.1.2.3773|2|140 +1.3.6.1.2.1.25.5.1.1.2.4068|2|6820 +1.3.6.1.2.1.25.5.1.1.2.4085|2|188 +1.3.6.1.2.1.25.5.1.1.2.4119|2|48 +1.3.6.1.2.1.25.5.1.1.2.4122|2|44 +1.3.6.1.2.1.25.5.1.1.2.4212|2|212 +1.3.6.1.2.1.25.5.1.1.2.4213|2|152 +1.3.6.1.2.1.25.5.1.1.2.4214|2|172 +1.3.6.1.2.1.25.5.1.1.2.4215|2|336 +1.3.6.1.2.1.25.5.1.1.2.4216|2|304 +1.3.6.1.2.1.25.5.1.1.2.4217|2|312 +1.3.6.1.2.1.25.5.1.1.2.4218|2|276 +1.3.6.1.2.1.25.5.1.1.2.4219|2|172 +1.3.6.1.2.1.25.5.1.1.2.4220|2|296 +1.3.6.1.2.1.25.5.1.1.2.4221|2|276 +1.3.6.1.2.1.25.5.1.1.2.4222|2|15716 +1.3.6.1.2.1.25.5.1.1.2.4224|2|2548 +1.3.6.1.2.1.25.5.1.1.2.4226|2|4060 +1.3.6.1.2.1.25.5.1.1.2.4434|2|312 +1.3.6.1.2.1.25.5.1.1.2.4435|2|348 +1.3.6.1.2.1.25.5.1.1.2.4436|2|280 +1.3.6.1.2.1.25.5.1.1.2.4437|2|304 +1.3.6.1.2.1.25.5.1.1.2.4438|2|272 +1.3.6.1.2.1.25.5.1.1.2.4439|2|296 +1.3.6.1.2.1.25.5.1.1.2.4440|2|296 +1.3.6.1.2.1.25.5.1.1.2.4441|2|280 +1.3.6.1.2.1.25.5.1.1.2.4442|2|300 +1.3.6.1.2.1.25.5.1.1.2.4443|2|164 +1.3.6.1.2.1.25.5.1.1.2.4451|2|16160 +1.3.6.1.2.1.25.5.1.1.2.4773|2|152 +1.3.6.1.2.1.25.5.1.1.2.4774|2|348 +1.3.6.1.2.1.25.5.1.1.2.4775|2|380 +1.3.6.1.2.1.25.5.1.1.2.4776|2|348 +1.3.6.1.2.1.25.5.1.1.2.4777|2|292 +1.3.6.1.2.1.25.5.1.1.2.4778|2|308 +1.3.6.1.2.1.25.5.1.1.2.4779|2|256 +1.3.6.1.2.1.25.5.1.1.2.4780|2|264 +1.3.6.1.2.1.25.5.1.1.2.4781|2|172 +1.3.6.1.2.1.25.5.1.1.2.4782|2|364 +1.3.6.1.2.1.25.5.1.1.2.4784|2|760 +1.3.6.1.2.1.25.5.1.1.2.4786|2|3064 +1.3.6.1.2.1.25.5.1.1.2.4787|2|5052 +1.3.6.1.2.1.25.5.1.1.2.5137|2|176 +1.3.6.1.2.1.25.5.1.1.2.5138|2|176 +1.3.6.1.2.1.25.5.1.1.2.5139|2|164 +1.3.6.1.2.1.25.5.1.1.2.5140|2|324 +1.3.6.1.2.1.25.5.1.1.2.5141|2|356 +1.3.6.1.2.1.25.5.1.1.2.5142|2|332 +1.3.6.1.2.1.25.5.1.1.2.5143|2|296 +1.3.6.1.2.1.25.5.1.1.2.5144|2|176 +1.3.6.1.2.1.25.5.1.1.2.5145|2|280 +1.3.6.1.2.1.25.5.1.1.2.5146|2|300 +1.3.6.1.2.1.25.5.1.1.2.5148|2|16600 +1.3.6.1.2.1.25.5.1.1.2.5151|2|1032 +1.3.6.1.2.1.25.5.1.1.2.5155|2|16436 +1.3.6.1.2.1.25.5.1.1.2.5159|2|16788 +1.3.6.1.2.1.25.5.1.1.2.5501|2|324 +1.3.6.1.2.1.25.5.1.1.2.5502|2|348 +1.3.6.1.2.1.25.5.1.1.2.5503|2|256 +1.3.6.1.2.1.25.5.1.1.2.5504|2|284 +1.3.6.1.2.1.25.5.1.1.2.5505|2|152 +1.3.6.1.2.1.25.5.1.1.2.5506|2|176 +1.3.6.1.2.1.25.5.1.1.2.5507|2|296 +1.3.6.1.2.1.25.5.1.1.2.5508|2|304 +1.3.6.1.2.1.25.5.1.1.2.5509|2|284 +1.3.6.1.2.1.25.5.1.1.2.5510|2|304 +1.3.6.1.2.1.25.5.1.1.2.5516|2|4252 +1.3.6.1.2.1.25.5.1.1.2.5522|2|4436 +1.3.6.1.2.1.25.5.1.1.2.5861|2|144 +1.3.6.1.2.1.25.5.1.1.2.5862|2|324 +1.3.6.1.2.1.25.5.1.1.2.5863|2|144 +1.3.6.1.2.1.25.5.1.1.2.5864|2|140 +1.3.6.1.2.1.25.5.1.1.2.5865|2|392 +1.3.6.1.2.1.25.5.1.1.2.5866|2|308 +1.3.6.1.2.1.25.5.1.1.2.5867|2|384 +1.3.6.1.2.1.25.5.1.1.2.5868|2|324 +1.3.6.1.2.1.25.5.1.1.2.5869|2|268 +1.3.6.1.2.1.25.5.1.1.2.5870|2|284 +1.3.6.1.2.1.25.5.1.1.2.5872|2|21036 +1.3.6.1.2.1.25.5.1.1.2.5875|2|17260 +1.3.6.1.2.1.25.5.1.1.2.5878|2|93932 +1.3.6.1.2.1.25.5.1.1.2.5879|2|22224 +1.3.6.1.2.1.25.5.1.1.2.5884|2|384 +1.3.6.1.2.1.25.5.1.1.2.6344|2|328 +1.3.6.1.2.1.25.5.1.1.2.6345|2|144 +1.3.6.1.2.1.25.5.1.1.2.6346|2|280 +1.3.6.1.2.1.25.5.1.1.2.6347|2|300 +1.3.6.1.2.1.25.5.1.1.2.6348|2|280 +1.3.6.1.2.1.25.5.1.1.2.6349|2|280 +1.3.6.1.2.1.25.5.1.1.2.6350|2|296 +1.3.6.1.2.1.25.5.1.1.2.6351|2|144 +1.3.6.1.2.1.25.5.1.1.2.6352|2|280 +1.3.6.1.2.1.25.5.1.1.2.6353|2|388 +1.3.6.1.2.1.25.5.1.1.2.6358|2|14944 +1.3.6.1.2.1.25.5.1.1.2.6366|2|832 +1.3.6.1.2.1.25.5.1.1.2.6763|2|328 +1.3.6.1.2.1.25.5.1.1.2.6764|2|356 +1.3.6.1.2.1.25.5.1.1.2.6765|2|268 +1.3.6.1.2.1.25.5.1.1.2.6766|2|356 +1.3.6.1.2.1.25.5.1.1.2.6767|2|268 +1.3.6.1.2.1.25.5.1.1.2.6768|2|320 +1.3.6.1.2.1.25.5.1.1.2.6769|2|144 +1.3.6.1.2.1.25.5.1.1.2.6770|2|340 +1.3.6.1.2.1.25.5.1.1.2.6771|2|144 +1.3.6.1.2.1.25.5.1.1.2.6772|2|296 +1.3.6.1.2.1.25.5.1.1.2.6782|2|7868 +1.3.6.1.2.1.25.5.1.1.2.6784|2|17968 +1.3.6.1.2.1.25.5.1.1.2.7174|2|292 +1.3.6.1.2.1.25.5.1.1.2.7175|2|144 +1.3.6.1.2.1.25.5.1.1.2.7176|2|332 +1.3.6.1.2.1.25.5.1.1.2.7177|2|144 +1.3.6.1.2.1.25.5.1.1.2.7178|2|332 +1.3.6.1.2.1.25.5.1.1.2.7179|2|144 +1.3.6.1.2.1.25.5.1.1.2.7180|2|320 +1.3.6.1.2.1.25.5.1.1.2.7181|2|268 +1.3.6.1.2.1.25.5.1.1.2.7182|2|136 +1.3.6.1.2.1.25.5.1.1.2.7183|2|292 +1.3.6.1.2.1.25.5.1.1.2.7188|2|171088 +1.3.6.1.2.1.25.5.1.1.2.7192|2|32956 +1.3.6.1.2.1.25.5.1.1.2.7194|2|17216 +1.3.6.1.2.1.25.5.1.1.2.7196|2|14212 +1.3.6.1.2.1.25.5.1.1.2.7523|2|140 +1.3.6.1.2.1.25.5.1.1.2.7524|2|300 +1.3.6.1.2.1.25.5.1.1.2.7525|2|144 +1.3.6.1.2.1.25.5.1.1.2.7526|2|280 +1.3.6.1.2.1.25.5.1.1.2.7527|2|336 +1.3.6.1.2.1.25.5.1.1.2.7528|2|288 +1.3.6.1.2.1.25.5.1.1.2.7529|2|136 +1.3.6.1.2.1.25.5.1.1.2.7530|2|296 +1.3.6.1.2.1.25.5.1.1.2.7531|2|144 +1.3.6.1.2.1.25.5.1.1.2.7532|2|276 +1.3.6.1.2.1.25.5.1.1.2.7535|2|15752 +1.3.6.1.2.1.25.5.1.1.2.7539|2|81804 +1.3.6.1.2.1.25.5.1.1.2.7543|2|1900 +1.3.6.1.2.1.25.5.1.1.2.7544|2|19704 +1.3.6.1.2.1.25.5.1.1.2.7949|2|288 +1.3.6.1.2.1.25.5.1.1.2.7950|2|284 +1.3.6.1.2.1.25.5.1.1.2.7951|2|280 +1.3.6.1.2.1.25.5.1.1.2.7952|2|276 +1.3.6.1.2.1.25.5.1.1.2.7953|2|284 +1.3.6.1.2.1.25.5.1.1.2.7954|2|328 +1.3.6.1.2.1.25.5.1.1.2.9526|2|896 +1.3.6.1.2.1.25.5.1.1.2.9602|2|560 +1.3.6.1.2.1.25.5.1.1.2.11784|2|68 +1.3.6.1.2.1.25.5.1.1.2.13563|2|5956 +1.3.6.1.2.1.25.5.1.1.2.13565|2|5788 +1.3.6.1.2.1.25.5.1.1.2.13566|2|5064 +1.3.6.1.2.1.25.5.1.1.2.15387|2|1948 +1.3.6.1.2.1.25.5.1.1.2.15921|2|226040 +1.3.6.1.2.1.25.5.1.1.2.16645|2|272 +1.3.6.1.2.1.25.5.1.1.2.16646|2|300 +1.3.6.1.2.1.25.5.1.1.2.16648|2|3144 +1.3.6.1.2.1.25.5.1.1.2.16651|2|18536 +1.3.6.1.2.1.25.5.1.1.2.16652|2|1256 +1.3.6.1.2.1.25.5.1.1.2.16653|2|1440 +1.3.6.1.2.1.25.5.1.1.2.16654|2|17096 +1.3.6.1.2.1.25.5.1.1.2.17900|2|1416 +1.3.6.1.2.1.25.5.1.1.2.18651|2|93160 +1.3.6.1.2.1.25.5.1.1.2.23175|2|1200 +1.3.6.1.2.1.25.5.1.1.2.23330|2|36220 +1.3.6.1.2.1.25.5.1.1.2.25514|2|21768 +1.3.6.1.2.1.25.5.1.1.2.25517|2|25124 +1.3.6.1.2.1.25.5.1.1.2.25518|2|584 +1.3.6.1.2.1.25.5.1.1.2.25522|2|25256 +1.3.6.1.2.1.25.5.1.1.2.25524|2|25460 +1.3.6.1.2.1.25.5.1.1.2.25531|2|25184 +1.3.6.1.2.1.25.5.1.1.2.25946|2|25848 +1.3.6.1.2.1.25.5.1.1.2.27567|2|1228 +1.3.6.1.2.1.25.5.1.1.2.29431|2|14544 +1.3.6.1.2.1.25.5.1.1.2.29439|2|8036 +1.3.6.1.2.1.25.5.1.1.2.29440|2|8220 +1.3.6.1.2.1.25.5.1.1.2.30092|2|108020 +1.3.6.1.2.1.25.5.1.1.2.30120|2|1128 +1.3.6.1.2.1.25.5.1.1.2.30180|2|23888 +1.3.6.1.2.1.25.5.1.1.2.32066|2|840 +1.3.6.1.2.1.31.1.1.1.1.32|4|mgmt +1.3.6.1.2.1.31.1.1.1.1.48|4x|312e30 +1.3.6.1.2.1.31.1.1.1.1.80|4x|2f436f6d6d6f6e2f687474702d74756e6e656c +1.3.6.1.2.1.31.1.1.1.1.96|4x|2f436f6d6d6f6e2f736f636b732d74756e6e656c +1.3.6.1.2.1.31.1.1.1.1.112|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.2.1.31.1.1.1.2.32|65|0 +1.3.6.1.2.1.31.1.1.1.2.48|65|0 +1.3.6.1.2.1.31.1.1.1.2.80|65|0 +1.3.6.1.2.1.31.1.1.1.2.96|65|0 +1.3.6.1.2.1.31.1.1.1.2.112|65|15131 +1.3.6.1.2.1.31.1.1.1.3.32|65|0 +1.3.6.1.2.1.31.1.1.1.3.48|65|0 +1.3.6.1.2.1.31.1.1.1.3.80|65|0 +1.3.6.1.2.1.31.1.1.1.3.96|65|0 +1.3.6.1.2.1.31.1.1.1.3.112|65|2923 +1.3.6.1.2.1.31.1.1.1.4.32|65|0 +1.3.6.1.2.1.31.1.1.1.4.48|65|0 +1.3.6.1.2.1.31.1.1.1.4.80|65|0 +1.3.6.1.2.1.31.1.1.1.4.96|65|0 +1.3.6.1.2.1.31.1.1.1.4.112|65|15146 +1.3.6.1.2.1.31.1.1.1.5.32|65|0 +1.3.6.1.2.1.31.1.1.1.5.48|65|0 +1.3.6.1.2.1.31.1.1.1.5.80|65|0 +1.3.6.1.2.1.31.1.1.1.5.96|65|0 +1.3.6.1.2.1.31.1.1.1.5.112|65|609 +1.3.6.1.2.1.31.1.1.1.6.32|70|461638459 +1.3.6.1.2.1.31.1.1.1.6.48|70|606070952 +1.3.6.1.2.1.31.1.1.1.6.80|70|0 +1.3.6.1.2.1.31.1.1.1.6.96|70|0 +1.3.6.1.2.1.31.1.1.1.6.112|70|396870497 +1.3.6.1.2.1.31.1.1.1.7.32|70|930864 +1.3.6.1.2.1.31.1.1.1.7.48|70|799796 +1.3.6.1.2.1.31.1.1.1.7.80|70|0 +1.3.6.1.2.1.31.1.1.1.7.96|70|0 +1.3.6.1.2.1.31.1.1.1.7.112|70|899250 +1.3.6.1.2.1.31.1.1.1.8.32|70|0 +1.3.6.1.2.1.31.1.1.1.8.48|70|0 +1.3.6.1.2.1.31.1.1.1.8.80|70|0 +1.3.6.1.2.1.31.1.1.1.8.96|70|0 +1.3.6.1.2.1.31.1.1.1.8.112|70|15131 +1.3.6.1.2.1.31.1.1.1.9.32|70|0 +1.3.6.1.2.1.31.1.1.1.9.48|70|0 +1.3.6.1.2.1.31.1.1.1.9.80|70|0 +1.3.6.1.2.1.31.1.1.1.9.96|70|0 +1.3.6.1.2.1.31.1.1.1.9.112|70|2923 +1.3.6.1.2.1.31.1.1.1.10.32|70|312056025 +1.3.6.1.2.1.31.1.1.1.10.48|70|67545566 +1.3.6.1.2.1.31.1.1.1.10.80|70|0 +1.3.6.1.2.1.31.1.1.1.10.96|70|0 +1.3.6.1.2.1.31.1.1.1.10.112|70|406193723 +1.3.6.1.2.1.31.1.1.1.11.32|70|773861 +1.3.6.1.2.1.31.1.1.1.11.48|70|524259 +1.3.6.1.2.1.31.1.1.1.11.80|70|0 +1.3.6.1.2.1.31.1.1.1.11.96|70|0 +1.3.6.1.2.1.31.1.1.1.11.112|70|880356 +1.3.6.1.2.1.31.1.1.1.12.32|70|0 +1.3.6.1.2.1.31.1.1.1.12.48|70|0 +1.3.6.1.2.1.31.1.1.1.12.80|70|0 +1.3.6.1.2.1.31.1.1.1.12.96|70|0 +1.3.6.1.2.1.31.1.1.1.12.112|70|15146 +1.3.6.1.2.1.31.1.1.1.13.32|70|0 +1.3.6.1.2.1.31.1.1.1.13.48|70|0 +1.3.6.1.2.1.31.1.1.1.13.80|70|0 +1.3.6.1.2.1.31.1.1.1.13.96|70|0 +1.3.6.1.2.1.31.1.1.1.13.112|70|609 +1.3.6.1.2.1.31.1.1.1.14.32|2|1 +1.3.6.1.2.1.31.1.1.1.14.48|2|1 +1.3.6.1.2.1.31.1.1.1.14.80|2|2 +1.3.6.1.2.1.31.1.1.1.14.96|2|2 +1.3.6.1.2.1.31.1.1.1.14.112|2|2 +1.3.6.1.2.1.31.1.1.1.15.32|66|100 +1.3.6.1.2.1.31.1.1.1.15.48|66|10000 +1.3.6.1.2.1.31.1.1.1.15.80|66|0 +1.3.6.1.2.1.31.1.1.1.15.96|66|0 +1.3.6.1.2.1.31.1.1.1.15.112|66|10000 +1.3.6.1.2.1.31.1.1.1.16.32|2|2 +1.3.6.1.2.1.31.1.1.1.16.48|2|2 +1.3.6.1.2.1.31.1.1.1.16.80|2|2 +1.3.6.1.2.1.31.1.1.1.16.96|2|2 +1.3.6.1.2.1.31.1.1.1.16.112|2|2 +1.3.6.1.2.1.31.1.1.1.17.32|2|1 +1.3.6.1.2.1.31.1.1.1.17.48|2|1 +1.3.6.1.2.1.31.1.1.1.17.80|2|2 +1.3.6.1.2.1.31.1.1.1.17.96|2|2 +1.3.6.1.2.1.31.1.1.1.17.112|2|2 +1.3.6.1.2.1.31.1.1.1.18.32|4| +1.3.6.1.2.1.31.1.1.1.18.48|4| +1.3.6.1.2.1.31.1.1.1.18.80|4| +1.3.6.1.2.1.31.1.1.1.18.96|4| +1.3.6.1.2.1.31.1.1.1.18.112|4| +1.3.6.1.2.1.31.1.1.1.19.32|67|0 +1.3.6.1.2.1.31.1.1.1.19.48|67|0 +1.3.6.1.2.1.31.1.1.1.19.80|67|0 +1.3.6.1.2.1.31.1.1.1.19.96|67|0 +1.3.6.1.2.1.31.1.1.1.19.112|67|0 +1.3.6.1.2.1.92.1.1.1.0|66|1000 +1.3.6.1.2.1.92.1.1.2.0|66|1440 +1.3.6.1.2.1.92.1.2.1.0|65|0 +1.3.6.1.2.1.92.1.2.2.0|65|0 diff --git a/test/new-e2e/ndm/snmp/compose/data/isilon.snmprec b/test/new-e2e/ndm/snmp/compose/data/isilon.snmprec new file mode 100644 index 0000000000000..d2be07e8088d6 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/isilon.snmprec @@ -0,0 +1,283 @@ +1.3.6.1.2.1.1.1.0|4|device-name-3 263829375 Isilon OneFS v8.2.0.0 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.12325.1.1.2.1.1 +1.3.6.1.4.1.12124.1.1.1.0|4|testcluster1 +1.3.6.1.4.1.12124.1.1.2.0|2|2 +1.3.6.1.4.1.12124.1.1.3.0|4x|4a61646564204a61646564204a61646564207a6f6d62696573207a6f6d62696573206f78656e204a6164656420717561696e746c79 +1.3.6.1.4.1.12124.1.1.4.0|2|24 +1.3.6.1.4.1.12124.1.1.5.0|4x|62757420717561696e746c79206163746564207a6f6d62696573207a6f6d62696573206b65707420627574206b657074 +1.3.6.1.4.1.12124.1.1.6.0|4x|7468656972206f78656e206163746564 +1.3.6.1.4.1.12124.1.1.7.0|4x|7a6f6d6269657320666f72776172642062757420627574206275742062757420627574 +1.3.6.1.4.1.12124.1.2.1.1.0|70|14915978989122343125 +1.3.6.1.4.1.12124.1.2.1.2.0|70|5989494319893319288 +1.3.6.1.4.1.12124.1.2.1.3.0|70|1754593291386024149 +1.3.6.1.4.1.12124.1.3.1.0|70|8770442281780220975 +1.3.6.1.4.1.12124.1.3.2.0|70|9618541326343820131 +1.3.6.1.4.1.12124.1.12.1.1.1.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|4x|4a61646564207a6f6d626965732064726976696e67206f78656e206f78656e207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.12124.1.12.1.1.1.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|4x|6163746564206f78656e206b657074207a6f6d626965732061637465642064726976696e67206b657074206163746564 +1.3.6.1.4.1.12124.1.12.1.1.1.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|4x|616374656420717561696e746c79207a6f6d62696573206f78656e20717561696e746c79206163746564207468656972 +1.3.6.1.4.1.12124.1.12.1.1.1.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|4x|627574204a6164656420717561696e746c7920627574206b65707420627574206163746564206b657074207468656972 +1.3.6.1.4.1.12124.1.12.1.1.1.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|4x|666f7277617264204a616465642064726976696e67206f78656e2064726976696e672062757420627574204a61646564 +1.3.6.1.4.1.12124.1.12.1.1.1.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|4x|6b65707420627574207a6f6d62696573207a6f6d626965732062757420717561696e746c79206f78656e204a61646564 +1.3.6.1.4.1.12124.1.12.1.1.1.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|4x|6f78656e2064726976696e67204a6164656420666f7277617264207a6f6d6269657320616374656420666f7277617264 +1.3.6.1.4.1.12124.1.12.1.1.1.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|4x|6f78656e2064726976696e67206163746564206f78656e206f78656e20616374656420616374656420666f7277617264 +1.3.6.1.4.1.12124.1.12.1.1.1.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|4x|717561696e746c79207a6f6d62696573206b657074206f78656e207468656972206f78656e206f78656e204a61646564 +1.3.6.1.4.1.12124.1.12.1.1.1.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|4x|7a6f6d62696573206f78656e2064726976696e67206b657074204a61646564207468656972206163746564206f78656e +1.3.6.1.4.1.12124.1.12.1.1.2.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.2.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.2.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|4 +1.3.6.1.4.1.12124.1.12.1.1.2.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.2.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.2.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|5 +1.3.6.1.4.1.12124.1.12.1.1.2.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.2.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|4 +1.3.6.1.4.1.12124.1.12.1.1.2.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|3 +1.3.6.1.4.1.12124.1.12.1.1.2.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.3.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|66|4245321451 +1.3.6.1.4.1.12124.1.12.1.1.3.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|66|1424325378 +1.3.6.1.4.1.12124.1.12.1.1.3.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|66|1198032230 +1.3.6.1.4.1.12124.1.12.1.1.3.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|66|1383990869 +1.3.6.1.4.1.12124.1.12.1.1.3.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|66|422978632 +1.3.6.1.4.1.12124.1.12.1.1.3.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|66|153533730 +1.3.6.1.4.1.12124.1.12.1.1.3.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|66|2328145711 +1.3.6.1.4.1.12124.1.12.1.1.3.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|66|3299369987 +1.3.6.1.4.1.12124.1.12.1.1.3.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|66|2149993012 +1.3.6.1.4.1.12124.1.12.1.1.3.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|66|1232918362 +1.3.6.1.4.1.12124.1.12.1.1.4.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.4.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.4.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.4.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.5.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|4x|4a61646564204a616465642064726976696e67207a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.12124.1.12.1.1.5.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|4x|666f72776172642064726976696e672062757420717561696e746c79207a6f6d6269657320717561696e746c7920666f72776172642064726976696e67 +1.3.6.1.4.1.12124.1.12.1.1.5.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|4x|4a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.12124.1.12.1.1.5.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|4x|746865697220627574 +1.3.6.1.4.1.12124.1.12.1.1.5.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|4|kept +1.3.6.1.4.1.12124.1.12.1.1.5.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|4x|717561696e746c7920666f7277617264207a6f6d62696573207a6f6d626965732064726976696e6720717561696e746c79204a6164656420627574206163746564 +1.3.6.1.4.1.12124.1.12.1.1.5.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|4x|666f7277617264207468656972206163746564207a6f6d62696573206b65707420666f727761726420717561696e746c79 +1.3.6.1.4.1.12124.1.12.1.1.5.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|4x|627574206163746564206163746564206f78656e20666f727761726420717561696e746c792064726976696e67206f78656e +1.3.6.1.4.1.12124.1.12.1.1.5.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|4x|666f72776172642064726976696e6720666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.12124.1.12.1.1.5.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|4x|4a616465642064726976696e67204a61646564 +1.3.6.1.4.1.12124.1.12.1.1.6.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.6.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.6.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.6.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.6.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.7.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|14068735141461358875 +1.3.6.1.4.1.12124.1.12.1.1.7.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|14141761287896411851 +1.3.6.1.4.1.12124.1.12.1.1.7.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|4396056103365993660 +1.3.6.1.4.1.12124.1.12.1.1.7.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|1371817059523693496 +1.3.6.1.4.1.12124.1.12.1.1.7.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|10171121418117998868 +1.3.6.1.4.1.12124.1.12.1.1.7.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|3398225771200639361 +1.3.6.1.4.1.12124.1.12.1.1.7.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|5898542388878010463 +1.3.6.1.4.1.12124.1.12.1.1.7.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|18330784183411284000 +1.3.6.1.4.1.12124.1.12.1.1.7.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|15891904626150790899 +1.3.6.1.4.1.12124.1.12.1.1.7.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|3964854350772733777 +1.3.6.1.4.1.12124.1.12.1.1.8.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.8.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.8.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.8.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.9.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|10878510489985257555 +1.3.6.1.4.1.12124.1.12.1.1.9.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|17884829191702312333 +1.3.6.1.4.1.12124.1.12.1.1.9.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|17683458948031193496 +1.3.6.1.4.1.12124.1.12.1.1.9.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|1562680605879207291 +1.3.6.1.4.1.12124.1.12.1.1.9.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|2320996266713311448 +1.3.6.1.4.1.12124.1.12.1.1.9.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|6675308316651121892 +1.3.6.1.4.1.12124.1.12.1.1.9.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|9186412959534298702 +1.3.6.1.4.1.12124.1.12.1.1.9.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|17115911786314565708 +1.3.6.1.4.1.12124.1.12.1.1.9.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|16844145145026932773 +1.3.6.1.4.1.12124.1.12.1.1.9.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|15292439690659474411 +1.3.6.1.4.1.12124.1.12.1.1.10.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.10.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.10.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.10.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.10.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.11.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|2168519118019170047 +1.3.6.1.4.1.12124.1.12.1.1.11.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|6570751579969436010 +1.3.6.1.4.1.12124.1.12.1.1.11.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|11902954585507984496 +1.3.6.1.4.1.12124.1.12.1.1.11.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|11517712360320809523 +1.3.6.1.4.1.12124.1.12.1.1.11.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|14574172490728580351 +1.3.6.1.4.1.12124.1.12.1.1.11.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|3191226950406170185 +1.3.6.1.4.1.12124.1.12.1.1.11.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|415926289354243698 +1.3.6.1.4.1.12124.1.12.1.1.11.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|15699602191143923019 +1.3.6.1.4.1.12124.1.12.1.1.11.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|18150590286584755406 +1.3.6.1.4.1.12124.1.12.1.1.11.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|5073807639686004081 +1.3.6.1.4.1.12124.1.12.1.1.12.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|7 +1.3.6.1.4.1.12124.1.12.1.1.12.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|14 +1.3.6.1.4.1.12124.1.12.1.1.12.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|16 +1.3.6.1.4.1.12124.1.12.1.1.12.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|10 +1.3.6.1.4.1.12124.1.12.1.1.12.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.12.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|7 +1.3.6.1.4.1.12124.1.12.1.1.12.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|10 +1.3.6.1.4.1.12124.1.12.1.1.12.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.12.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.12.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|23 +1.3.6.1.4.1.12124.1.12.1.1.13.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|16658813196626137413 +1.3.6.1.4.1.12124.1.12.1.1.13.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|10579262605391229559 +1.3.6.1.4.1.12124.1.12.1.1.13.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|2895734051327977707 +1.3.6.1.4.1.12124.1.12.1.1.13.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|14132024138787183222 +1.3.6.1.4.1.12124.1.12.1.1.13.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|1355803849695214167 +1.3.6.1.4.1.12124.1.12.1.1.13.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|15083223700331535701 +1.3.6.1.4.1.12124.1.12.1.1.13.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|8404133733057700200 +1.3.6.1.4.1.12124.1.12.1.1.13.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|65584190702113825 +1.3.6.1.4.1.12124.1.12.1.1.13.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|8792403321736251647 +1.3.6.1.4.1.12124.1.12.1.1.13.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|6931490394265709371 +1.3.6.1.4.1.12124.1.12.1.1.14.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|6873213022946757334 +1.3.6.1.4.1.12124.1.12.1.1.14.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|11854883466118480434 +1.3.6.1.4.1.12124.1.12.1.1.14.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|14374798610186795374 +1.3.6.1.4.1.12124.1.12.1.1.14.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|8414299381585435100 +1.3.6.1.4.1.12124.1.12.1.1.14.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|14389144092639811440 +1.3.6.1.4.1.12124.1.12.1.1.14.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|11655278498430189886 +1.3.6.1.4.1.12124.1.12.1.1.14.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|2487786073619070642 +1.3.6.1.4.1.12124.1.12.1.1.14.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|697274845398117848 +1.3.6.1.4.1.12124.1.12.1.1.14.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|10325815763224778148 +1.3.6.1.4.1.12124.1.12.1.1.14.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|3137558558145556741 +1.3.6.1.4.1.12124.1.12.1.1.15.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|14208649948373965591 +1.3.6.1.4.1.12124.1.12.1.1.15.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|2520343364835162939 +1.3.6.1.4.1.12124.1.12.1.1.15.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|8238533666442885424 +1.3.6.1.4.1.12124.1.12.1.1.15.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|4544543621297054007 +1.3.6.1.4.1.12124.1.12.1.1.15.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|4617601726928202620 +1.3.6.1.4.1.12124.1.12.1.1.15.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|18188978664644708782 +1.3.6.1.4.1.12124.1.12.1.1.15.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|3050010041221971238 +1.3.6.1.4.1.12124.1.12.1.1.15.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|16039139242868212892 +1.3.6.1.4.1.12124.1.12.1.1.15.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|1164982365338428846 +1.3.6.1.4.1.12124.1.12.1.1.15.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|5877862756907244788 +1.3.6.1.4.1.12124.1.12.1.1.16.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|1 +1.3.6.1.4.1.12124.1.12.1.1.16.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.16.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.16.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.16.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|0 +1.3.6.1.4.1.12124.2.1.1.0|4|node1 +1.3.6.1.4.1.12124.2.1.2.0|2|3 +1.3.6.1.4.1.12124.2.1.3.0|2|1 +1.3.6.1.4.1.12124.2.2.1.1.0|70|10214025674005007309 +1.3.6.1.4.1.12124.2.2.1.2.0|70|5852609904331811105 +1.3.6.1.4.1.12124.2.2.1.3.0|70|4777469071568308184 +1.3.6.1.4.1.12124.2.2.10.1.1.98.117.116|4|testprotocol1 +1.3.6.1.4.1.12124.2.2.10.1.1.107.101.112.116|4|testprotocol2 +1.3.6.1.4.1.12124.2.2.10.1.1.111.120.101.110|4|testprotocol3 +1.3.6.1.4.1.12124.2.2.10.1.2.98.117.116|66|3551703331 +1.3.6.1.4.1.12124.2.2.10.1.2.107.101.112.116|66|1938763264 +1.3.6.1.4.1.12124.2.2.10.1.2.111.120.101.110|66|1442758574 +1.3.6.1.4.1.12124.2.2.10.1.3.98.117.116|66|142697340 +1.3.6.1.4.1.12124.2.2.10.1.3.107.101.112.116|66|2614873994 +1.3.6.1.4.1.12124.2.2.10.1.3.111.120.101.110|66|3156857036 +1.3.6.1.4.1.12124.2.2.10.1.4.98.117.116|66|2466447412 +1.3.6.1.4.1.12124.2.2.10.1.4.107.101.112.116|66|1829315851 +1.3.6.1.4.1.12124.2.2.10.1.4.111.120.101.110|66|2970586930 +1.3.6.1.4.1.12124.2.2.10.1.5.98.117.116|66|4016748651 +1.3.6.1.4.1.12124.2.2.10.1.5.107.101.112.116|66|3101244480 +1.3.6.1.4.1.12124.2.2.10.1.5.111.120.101.110|66|1353009103 +1.3.6.1.4.1.12124.2.2.10.1.6.98.117.116|66|273174898 +1.3.6.1.4.1.12124.2.2.10.1.6.107.101.112.116|66|2741571715 +1.3.6.1.4.1.12124.2.2.10.1.6.111.120.101.110|66|504374602 +1.3.6.1.4.1.12124.2.2.10.1.7.98.117.116|66|1908027462 +1.3.6.1.4.1.12124.2.2.10.1.7.107.101.112.116|66|1144308333 +1.3.6.1.4.1.12124.2.2.10.1.7.111.120.101.110|66|1703129581 +1.3.6.1.4.1.12124.2.2.10.1.8.98.117.116|70|8217880946653419538 +1.3.6.1.4.1.12124.2.2.10.1.8.107.101.112.116|70|11771153183005327732 +1.3.6.1.4.1.12124.2.2.10.1.8.111.120.101.110|70|17788181537717597525 +1.3.6.1.4.1.12124.2.2.10.1.9.98.117.116|66|998626442 +1.3.6.1.4.1.12124.2.2.10.1.9.107.101.112.116|66|1211116252 +1.3.6.1.4.1.12124.2.2.10.1.9.111.120.101.110|66|1711845175 +1.3.6.1.4.1.12124.2.2.10.1.10.98.117.116|66|2261694935 +1.3.6.1.4.1.12124.2.2.10.1.10.107.101.112.116|66|3236408506 +1.3.6.1.4.1.12124.2.2.10.1.10.111.120.101.110|66|334932961 +1.3.6.1.4.1.12124.2.2.10.1.11.98.117.116|66|1993235324 +1.3.6.1.4.1.12124.2.2.10.1.11.107.101.112.116|66|3999292325 +1.3.6.1.4.1.12124.2.2.10.1.11.111.120.101.110|66|2690928510 +1.3.6.1.4.1.12124.2.2.10.1.12.98.117.116|66|3538269492 +1.3.6.1.4.1.12124.2.2.10.1.12.107.101.112.116|66|736904324 +1.3.6.1.4.1.12124.2.2.10.1.12.111.120.101.110|66|253116863 +1.3.6.1.4.1.12124.2.2.10.1.13.98.117.116|70|985995245017295438 +1.3.6.1.4.1.12124.2.2.10.1.13.107.101.112.116|70|15372934104243170967 +1.3.6.1.4.1.12124.2.2.10.1.13.111.120.101.110|70|3827567253869289485 +1.3.6.1.4.1.12124.2.2.10.1.14.98.117.116|66|1247886357 +1.3.6.1.4.1.12124.2.2.10.1.14.107.101.112.116|66|2800987047 +1.3.6.1.4.1.12124.2.2.10.1.14.111.120.101.110|66|1266831756 +1.3.6.1.4.1.12124.2.2.10.1.15.98.117.116|66|1593641322 +1.3.6.1.4.1.12124.2.2.10.1.15.107.101.112.116|66|3442678644 +1.3.6.1.4.1.12124.2.2.10.1.15.111.120.101.110|66|1150963851 +1.3.6.1.4.1.12124.2.2.10.1.16.98.117.116|66|839559806 +1.3.6.1.4.1.12124.2.2.10.1.16.107.101.112.116|66|2774045199 +1.3.6.1.4.1.12124.2.2.10.1.16.111.120.101.110|66|2748542234 +1.3.6.1.4.1.12124.2.2.10.1.17.98.117.116|66|2258745481 +1.3.6.1.4.1.12124.2.2.10.1.17.107.101.112.116|66|3237597125 +1.3.6.1.4.1.12124.2.2.10.1.17.111.120.101.110|66|853869338 +1.3.6.1.4.1.12124.2.51.1.2.1|4|400-0049-03 +1.3.6.1.4.1.12124.2.51.1.3.1|4|SX410-251604-0122 +1.3.6.1.4.1.12124.2.51.1.4.1|4|X410-4U-Dual-64GB-2x1GE-2x10GE SFP+-34TB-800GB SSD +1.3.6.1.4.1.12124.2.52.1.1.1|2|1 +1.3.6.1.4.1.12124.2.52.1.1.2|2|2 +1.3.6.1.4.1.12124.2.52.1.1.3|2|3 +1.3.6.1.4.1.12124.2.52.1.5.1|4|SMARTFAIL +1.3.6.1.4.1.12124.2.52.1.5.2|4|HEALTHY +1.3.6.1.4.1.12124.2.52.1.5.3|4|DEAD +1.3.6.1.4.1.12124.2.52.1.9.1|70|13875364071017423041 +1.3.6.1.4.1.12124.2.52.1.9.2|70|16599833035174131388 +1.3.6.1.4.1.12124.2.52.1.9.3|70|10194238433266281818 +1.3.6.1.4.1.12124.2.53.1.1.4|2|4 +1.3.6.1.4.1.12124.2.53.1.1.6|2|6 +1.3.6.1.4.1.12124.2.53.1.1.10|2|10 +1.3.6.1.4.1.12124.2.53.1.1.11|2|11 +1.3.6.1.4.1.12124.2.53.1.1.14|2|14 +1.3.6.1.4.1.12124.2.53.1.1.21|2|21 +1.3.6.1.4.1.12124.2.53.1.1.22|2|22 +1.3.6.1.4.1.12124.2.53.1.1.23|2|23 +1.3.6.1.4.1.12124.2.53.1.1.25|2|25 +1.3.6.1.4.1.12124.2.53.1.1.30|2|30 +1.3.6.1.4.1.12124.2.53.1.2.4|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.6|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.10|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.11|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.14|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.21|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.22|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.23|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.25|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.30|4|testfan +1.3.6.1.4.1.12124.2.53.1.3.4|4x|6f78656e2064726976696e67204a61646564206163746564 +1.3.6.1.4.1.12124.2.53.1.3.6|4x|4a61646564207468656972206163746564206f78656e206f78656e204a6164656420666f7277617264206b657074207468656972 +1.3.6.1.4.1.12124.2.53.1.3.10|4x|6b657074206b657074206f78656e20717561696e746c79 +1.3.6.1.4.1.12124.2.53.1.3.11|4x|717561696e746c792064726976696e67206163746564206f78656e206f78656e2064726976696e67 +1.3.6.1.4.1.12124.2.53.1.3.14|4x|746865697220717561696e746c79 +1.3.6.1.4.1.12124.2.53.1.3.21|4x|4a6164656420627574206b657074 +1.3.6.1.4.1.12124.2.53.1.3.22|4|kept +1.3.6.1.4.1.12124.2.53.1.3.23|4x|6163746564206163746564206b65707420717561696e746c79206f78656e +1.3.6.1.4.1.12124.2.53.1.3.25|4x|64726976696e67206163746564206163746564204a616465642062757420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.12124.2.53.1.3.30|4x|4a616465642064726976696e67206b657074206b6570742064726976696e6720627574207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.12124.2.53.1.4.4|2|3 +1.3.6.1.4.1.12124.2.53.1.4.6|2|27 +1.3.6.1.4.1.12124.2.53.1.4.10|2|29 +1.3.6.1.4.1.12124.2.53.1.4.11|2|0 +1.3.6.1.4.1.12124.2.53.1.4.14|2|22 +1.3.6.1.4.1.12124.2.53.1.4.21|2|23 +1.3.6.1.4.1.12124.2.53.1.4.22|2|1 +1.3.6.1.4.1.12124.2.53.1.4.23|2|7 +1.3.6.1.4.1.12124.2.53.1.4.25|2|12 +1.3.6.1.4.1.12124.2.53.1.4.30|2|22 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-ex-variation.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-ex-variation.snmprec new file mode 100644 index 0000000000000..5080ddd4e931f --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-ex-variation.snmprec @@ -0,0 +1,292 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.4.30.2 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.5.2.1.1.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|74686569722064726976696e6720717561696e746c7920627574204a61646564206f78656e +1.3.6.1.4.1.2636.3.5.2.1.1.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6b657074206b65707420627574206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2636.3.5.2.1.1.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|64726976696e67206b657074206163746564204a61646564207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2636.3.5.2.1.2.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|4a61646564206f78656e206b6570742074686569722064726976696e6720627574206b657074 +1.3.6.1.4.1.2636.3.5.2.1.2.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6f78656e20666f7277617264204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2636.3.5.2.1.2.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|6275742062757420627574207468656972207468656972207468656972206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2636.3.5.2.1.3.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.4.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|4454094099404974412 +1.3.6.1.4.1.2636.3.5.2.1.4.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|9206254963072680169 +1.3.6.1.4.1.2636.3.5.2.1.4.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|3696546830171348582 +1.3.6.1.4.1.2636.3.5.2.1.5.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|696736619041929696 +1.3.6.1.4.1.2636.3.5.2.1.5.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|16785242467789528990 +1.3.6.1.4.1.2636.3.5.2.1.5.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|17939108183311980476 +1.3.6.1.4.1.2636.3.5.2.1.6.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|717561696e746c792064726976696e6720666f727761726420666f7277617264206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2636.3.5.2.1.6.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320666f7277617264206f78656e206f78656e20746865697220627574 +1.3.6.1.4.1.2636.3.5.2.1.6.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|616374656420627574207468656972206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2636.3.5.2.1.7.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4|driving +1.3.6.1.4.1.2636.3.5.2.1.7.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|717561696e746c792064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.2636.3.5.2.1.7.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|7a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2636.3.5.2.1.8.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|1 +1.3.6.1.4.1.2636.3.5.2.1.8.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|2 +1.3.6.1.4.1.2636.3.5.2.1.8.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|2 +1.3.6.1.4.1.2636.3.6.2.1.1.83.1.5.116.104.101.105.114|2|83 +1.3.6.1.4.1.2636.3.6.2.1.1.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|780 +1.3.6.1.4.1.2636.3.6.2.1.1.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|907 +1.3.6.1.4.1.2636.3.6.2.1.2.83.1.5.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|2 +1.3.6.1.4.1.2636.3.6.2.1.3.83.1.5.116.104.101.105.114|4|their +1.3.6.1.4.1.2636.3.6.2.1.3.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|61637465642062757420666f7277617264206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2636.3.6.2.1.3.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e204a61646564206f78656e204a6164656420666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2636.3.6.2.1.4.83.1.5.116.104.101.105.114|70|12317383665498203792 +1.3.6.1.4.1.2636.3.6.2.1.4.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|18298564239260252878 +1.3.6.1.4.1.2636.3.6.2.1.4.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|14296161882202174757 +1.3.6.1.4.1.2636.3.6.2.1.5.83.1.5.116.104.101.105.114|70|11494977799318547626 +1.3.6.1.4.1.2636.3.6.2.1.5.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|3147422798697337841 +1.3.6.1.4.1.2636.3.6.2.1.5.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|9179463037551089633 +1.3.6.1.4.1.2636.3.6.2.1.6.83.1.5.116.104.101.105.114|4|driving +1.3.6.1.4.1.2636.3.6.2.1.6.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2636.3.6.2.1.6.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e206b657074207a6f6d62696573 +1.3.6.1.4.1.2636.3.15.9.1.1.170|2|11 +1.3.6.1.4.1.2636.3.15.9.1.1.243|2|919 +1.3.6.1.4.1.2636.3.15.9.1.1.463|2|981 +1.3.6.1.4.1.2636.3.15.9.1.2.170|4x|6163746564206f78656e206f78656e20666f727761726420717561696e746c79206b657074207a6f6d6269657320627574206f78656e +1.3.6.1.4.1.2636.3.15.9.1.2.243|4x|6163746564206b65707420717561696e746c79206163746564206f78656e206b657074 +1.3.6.1.4.1.2636.3.15.9.1.2.463|4|their +1.3.6.1.4.1.2636.3.15.10.1.1.170.25|2|170 +1.3.6.1.4.1.2636.3.15.10.1.1.243.50|2|243 +1.3.6.1.4.1.2636.3.15.10.1.1.463.15|2|463 +1.3.6.1.4.1.2636.3.15.10.1.2.170.25|2|25 +1.3.6.1.4.1.2636.3.15.10.1.2.243.50|2|50 +1.3.6.1.4.1.2636.3.15.10.1.2.463.15|2|15 +1.3.6.1.4.1.2636.3.15.10.1.3.170.25|70|12770856836917969245 +1.3.6.1.4.1.2636.3.15.10.1.3.243.50|70|9663869619250073385 +1.3.6.1.4.1.2636.3.15.10.1.3.463.15|70|4128978860610001207 +1.3.6.1.4.1.2636.3.15.10.1.4.170.25|70|1002399613905247533 +1.3.6.1.4.1.2636.3.15.10.1.4.243.50|70|996423942118251217 +1.3.6.1.4.1.2636.3.15.10.1.4.463.15|70|4764867759487322545 +1.3.6.1.4.1.2636.3.15.10.1.5.170.25|70|9232681433406374088 +1.3.6.1.4.1.2636.3.15.10.1.5.243.50|70|8035400151290454024 +1.3.6.1.4.1.2636.3.15.10.1.5.463.15|70|5990647624742140325 +1.3.6.1.4.1.2636.3.15.10.1.6.170.25|70|1065640835557330094 +1.3.6.1.4.1.2636.3.15.10.1.6.243.50|70|17558806293727990360 +1.3.6.1.4.1.2636.3.15.10.1.6.463.15|70|11908438181160168105 +1.3.6.1.4.1.2636.3.15.10.1.7.170.25|70|18273158544474451497 +1.3.6.1.4.1.2636.3.15.10.1.7.243.50|70|13777396596348831423 +1.3.6.1.4.1.2636.3.15.10.1.7.463.15|70|2487683329818536869 +1.3.6.1.4.1.2636.3.15.10.1.8.170.25|70|3466222661774951990 +1.3.6.1.4.1.2636.3.15.10.1.8.243.50|70|12670568689846152972 +1.3.6.1.4.1.2636.3.15.10.1.8.463.15|70|8075791252460836529 +1.3.6.1.4.1.2636.3.15.10.1.9.170.25|70|8020605155612723028 +1.3.6.1.4.1.2636.3.15.10.1.9.243.50|70|12997273506749046582 +1.3.6.1.4.1.2636.3.15.10.1.9.463.15|70|18231535980456700136 +1.3.6.1.4.1.2636.3.15.10.1.10.170.25|70|3314807028774900920 +1.3.6.1.4.1.2636.3.15.10.1.10.243.50|70|12384249738747780022 +1.3.6.1.4.1.2636.3.15.10.1.10.463.15|70|5706341066266616742 +1.3.6.1.4.1.2636.3.15.10.1.11.170.25|70|9543706072360554442 +1.3.6.1.4.1.2636.3.15.10.1.11.243.50|70|15353080467434378674 +1.3.6.1.4.1.2636.3.15.10.1.11.463.15|70|7000096561546418502 +1.3.6.1.4.1.2636.3.15.10.1.12.170.25|70|13553825566144951217 +1.3.6.1.4.1.2636.3.15.10.1.12.243.50|70|2884686421611507766 +1.3.6.1.4.1.2636.3.15.10.1.12.463.15|70|7950960221026326783 +1.3.6.1.4.1.2636.3.15.10.1.13.170.25|70|6461751168224122855 +1.3.6.1.4.1.2636.3.15.10.1.13.243.50|70|8626132824337957526 +1.3.6.1.4.1.2636.3.15.10.1.13.463.15|70|17731588095000145998 +1.3.6.1.4.1.2636.3.15.10.1.14.170.25|70|15619102596973248473 +1.3.6.1.4.1.2636.3.15.10.1.14.243.50|70|16692053855289491043 +1.3.6.1.4.1.2636.3.15.10.1.14.463.15|70|8456156210951462249 +1.3.6.1.4.1.2636.3.15.10.1.15.170.25|70|2299977202421036105 +1.3.6.1.4.1.2636.3.15.10.1.15.243.50|70|813117570951116201 +1.3.6.1.4.1.2636.3.15.10.1.15.463.15|70|1188478793913849482 +1.3.6.1.4.1.2636.3.15.10.1.16.170.25|70|2893929287389891965 +1.3.6.1.4.1.2636.3.15.10.1.16.243.50|70|16289010184593102625 +1.3.6.1.4.1.2636.3.15.10.1.16.463.15|70|14190997503223661814 +1.3.6.1.4.1.2636.3.15.10.1.17.170.25|70|14493484350074177035 +1.3.6.1.4.1.2636.3.15.10.1.17.243.50|70|13596150666639387175 +1.3.6.1.4.1.2636.3.15.10.1.17.463.15|70|14424565573160285076 +1.3.6.1.4.1.2636.3.15.10.1.18.170.25|70|10529534850679351483 +1.3.6.1.4.1.2636.3.15.10.1.18.243.50|70|2906176364604264292 +1.3.6.1.4.1.2636.3.15.10.1.18.463.15|70|8315217861465467611 +1.3.6.1.4.1.2636.3.15.10.1.19.170.25|70|8170434880350759573 +1.3.6.1.4.1.2636.3.15.10.1.19.243.50|70|887688327484631583 +1.3.6.1.4.1.2636.3.15.10.1.19.463.15|70|10060318579349968784 +1.3.6.1.4.1.2636.3.15.10.1.20.170.25|70|5815198282439278933 +1.3.6.1.4.1.2636.3.15.10.1.20.243.50|70|14749506163780204940 +1.3.6.1.4.1.2636.3.15.10.1.20.463.15|70|9286269907376035246 +1.3.6.1.4.1.2636.3.15.10.1.21.170.25|70|2825795754297694874 +1.3.6.1.4.1.2636.3.15.10.1.21.243.50|70|11285523882234093093 +1.3.6.1.4.1.2636.3.15.10.1.21.463.15|70|15090187984937318802 +1.3.6.1.4.1.2636.3.15.10.1.22.170.25|70|7863778897832470889 +1.3.6.1.4.1.2636.3.15.10.1.22.243.50|70|3553508407684051674 +1.3.6.1.4.1.2636.3.15.10.1.22.463.15|70|13931708594683902426 +1.3.6.1.4.1.2636.3.15.10.1.23.170.25|70|12906613682638875307 +1.3.6.1.4.1.2636.3.15.10.1.23.243.50|70|11949204969119103650 +1.3.6.1.4.1.2636.3.15.10.1.23.463.15|70|5956153079277958221 +1.3.6.1.4.1.2636.3.15.10.1.24.170.25|70|11477234301196000227 +1.3.6.1.4.1.2636.3.15.10.1.24.243.50|70|3314652739024033013 +1.3.6.1.4.1.2636.3.15.10.1.24.463.15|70|15017127765184020318 +1.3.6.1.4.1.2636.3.15.10.1.25.170.25|70|8424154835415081760 +1.3.6.1.4.1.2636.3.15.10.1.25.243.50|70|7471672866813717794 +1.3.6.1.4.1.2636.3.15.10.1.25.463.15|70|17857076078061565547 +1.3.6.1.4.1.2636.3.15.10.1.26.170.25|70|3793853525121104339 +1.3.6.1.4.1.2636.3.15.10.1.26.243.50|70|3989409530853199526 +1.3.6.1.4.1.2636.3.15.10.1.26.463.15|70|15735187836465138700 +1.3.6.1.4.1.2636.3.15.10.1.27.170.25|70|18213777320258743968 +1.3.6.1.4.1.2636.3.15.10.1.27.243.50|70|14971409743913453864 +1.3.6.1.4.1.2636.3.15.10.1.27.463.15|70|4036774420969319248 +1.3.6.1.4.1.2636.3.15.10.1.28.170.25|70|11024421017883614152 +1.3.6.1.4.1.2636.3.15.10.1.28.243.50|70|90364654298972704 +1.3.6.1.4.1.2636.3.15.10.1.28.463.15|70|8686770717862532224 +1.3.6.1.4.1.2636.3.15.10.1.29.170.25|70|12300319506603429604 +1.3.6.1.4.1.2636.3.15.10.1.29.243.50|70|1280552904131433006 +1.3.6.1.4.1.2636.3.15.10.1.29.463.15|70|1984703258989993414 +1.3.6.1.4.1.2636.3.15.10.1.30.170.25|70|14325491697305781346 +1.3.6.1.4.1.2636.3.15.10.1.30.243.50|70|9672229296991156990 +1.3.6.1.4.1.2636.3.15.10.1.30.463.15|70|17512343358386083614 +1.3.6.1.4.1.2636.3.15.10.1.31.170.25|70|5927227884246572881 +1.3.6.1.4.1.2636.3.15.10.1.31.243.50|70|9450776281406177093 +1.3.6.1.4.1.2636.3.15.10.1.31.463.15|70|17370561485432592141 +1.3.6.1.4.1.2636.3.15.10.1.32.170.25|70|7967882224524493134 +1.3.6.1.4.1.2636.3.15.10.1.32.243.50|70|3172465735716905246 +1.3.6.1.4.1.2636.3.15.10.1.32.463.15|70|11533409651162362033 +1.3.6.1.4.1.2636.3.15.10.1.33.170.25|70|16548575809615604796 +1.3.6.1.4.1.2636.3.15.10.1.33.243.50|70|6442873042770202449 +1.3.6.1.4.1.2636.3.15.10.1.33.463.15|70|1918875848098423600 +1.3.6.1.4.1.2636.3.15.10.1.34.170.25|70|12105898413641506478 +1.3.6.1.4.1.2636.3.15.10.1.34.243.50|70|5385799517301974188 +1.3.6.1.4.1.2636.3.15.10.1.34.463.15|70|9277777983354765895 +1.3.6.1.4.1.2636.3.15.10.1.35.170.25|70|786407073866759825 +1.3.6.1.4.1.2636.3.15.10.1.35.243.50|70|12567184007500140055 +1.3.6.1.4.1.2636.3.15.10.1.35.463.15|70|6530228175190559355 +1.3.6.1.4.1.2636.3.15.10.1.36.170.25|70|22369930787572654 +1.3.6.1.4.1.2636.3.15.10.1.36.243.50|70|2397774807429625982 +1.3.6.1.4.1.2636.3.15.10.1.36.463.15|70|15156373897980262200 +1.3.6.1.4.1.2636.3.15.10.1.37.170.25|70|5148517373031836367 +1.3.6.1.4.1.2636.3.15.10.1.37.243.50|70|7721607394473998281 +1.3.6.1.4.1.2636.3.15.10.1.37.463.15|70|8714575013162753417 +1.3.6.1.4.1.2636.3.15.10.1.38.170.25|70|10930247236210764218 +1.3.6.1.4.1.2636.3.15.10.1.38.243.50|70|5146652189836621240 +1.3.6.1.4.1.2636.3.15.10.1.38.463.15|70|8864307502844767136 +1.3.6.1.4.1.2636.3.15.10.1.39.170.25|70|17987422552752788069 +1.3.6.1.4.1.2636.3.15.10.1.39.243.50|70|7828400400494290544 +1.3.6.1.4.1.2636.3.15.10.1.39.463.15|70|10564281255194113941 +1.3.6.1.4.1.2636.3.15.10.1.40.170.25|70|4456908988229385506 +1.3.6.1.4.1.2636.3.15.10.1.40.243.50|70|4548509587568319054 +1.3.6.1.4.1.2636.3.15.10.1.40.463.15|70|12654679094639954721 +1.3.6.1.4.1.2636.3.15.10.1.41.170.25|70|319452186197743737 +1.3.6.1.4.1.2636.3.15.10.1.41.243.50|70|16364791724635672240 +1.3.6.1.4.1.2636.3.15.10.1.41.463.15|70|17828705365509861774 +1.3.6.1.4.1.2636.3.15.10.1.42.170.25|70|9913951142041236635 +1.3.6.1.4.1.2636.3.15.10.1.42.243.50|70|4590232569604987384 +1.3.6.1.4.1.2636.3.15.10.1.42.463.15|70|16879636922511149261 +1.3.6.1.4.1.2636.3.15.10.1.43.170.25|70|16128554786484754487 +1.3.6.1.4.1.2636.3.15.10.1.43.243.50|70|6720587125918748618 +1.3.6.1.4.1.2636.3.15.10.1.43.463.15|70|10982123962446739740 +1.3.6.1.4.1.2636.3.15.10.1.44.170.25|70|6625476741978175421 +1.3.6.1.4.1.2636.3.15.10.1.44.243.50|70|14758624194210778093 +1.3.6.1.4.1.2636.3.15.10.1.44.463.15|70|3510595354408991883 +1.3.6.1.4.1.2636.3.15.10.1.45.170.25|70|12193077799780761280 +1.3.6.1.4.1.2636.3.15.10.1.45.243.50|70|434156370935591348 +1.3.6.1.4.1.2636.3.15.10.1.45.463.15|70|14701761228332844190 +1.3.6.1.4.1.2636.3.15.10.1.46.170.25|70|4097961753211413825 +1.3.6.1.4.1.2636.3.15.10.1.46.243.50|70|14198283656685665373 +1.3.6.1.4.1.2636.3.15.10.1.46.463.15|70|9981844938014966456 +1.3.6.1.4.1.2636.3.15.10.1.47.170.25|70|4499862665732599823 +1.3.6.1.4.1.2636.3.15.10.1.47.243.50|70|7208392381338046179 +1.3.6.1.4.1.2636.3.15.10.1.47.463.15|70|6241021335515696595 +1.3.6.1.4.1.2636.3.15.10.1.48.170.25|70|4799882603978889044 +1.3.6.1.4.1.2636.3.15.10.1.48.243.50|70|11687294706629489122 +1.3.6.1.4.1.2636.3.15.10.1.48.463.15|70|8189775643826190503 +1.3.6.1.4.1.2636.3.15.10.1.49.170.25|70|14943326773818355422 +1.3.6.1.4.1.2636.3.15.10.1.49.243.50|70|3029491279441157558 +1.3.6.1.4.1.2636.3.15.10.1.49.463.15|70|14724608253725676036 +1.3.6.1.4.1.2636.3.15.10.1.50.170.25|70|8089079564874181657 +1.3.6.1.4.1.2636.3.15.10.1.50.243.50|70|3777655493494241512 +1.3.6.1.4.1.2636.3.15.10.1.50.463.15|70|9345336414379681585 +1.3.6.1.4.1.2636.3.15.10.1.51.170.25|70|1461276263793545759 +1.3.6.1.4.1.2636.3.15.10.1.51.243.50|70|12409543167456089371 +1.3.6.1.4.1.2636.3.15.10.1.51.463.15|70|4329004572229054293 +1.3.6.1.4.1.2636.3.15.10.1.52.170.25|70|6602329256452145238 +1.3.6.1.4.1.2636.3.15.10.1.52.243.50|70|6601473160297645100 +1.3.6.1.4.1.2636.3.15.10.1.52.463.15|70|16308867362923996690 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|11 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|22 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|24 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|4a6164656420666f727761726420627574206f78656e20717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|4x|666f727761726420666f72776172642064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|3 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|12189304536513319332 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7722656158153650831 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10603165628512588309 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3843980053062837517 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|12509302819583194366 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|3885376250889014561 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10352052349549821463 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7177674967410638136 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|5091222764852841190 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|13715573869517889886 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|10130509551224208352 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|2504343572792914641 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2938889684826768032 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11291252729780336384 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|1481668101793427313 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|6310274704585370658 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6789462645369539630 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|491028968499993270 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3608875038808074952 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|797075051605537720 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14085552435037248689 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5552625442655846107 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4454798770846396730 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|9088428039091030198 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10229778388752303226 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11069391749223800156 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|11894101190314294086 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5808123009872645909 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|3572737769193079165 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|6853689900557367040 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|8372358451243013065 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|2058660889925691752 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|15823042855195793586 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|11700083343423325868 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4448772641108495089 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|676318422458825171 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|15142294159964046333 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|18390833596244657351 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10182233820378904307 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2057784955673108988 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6276174311039281296 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14694007361821605096 +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.1|4|Mycroft Holmes +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.2|4|Jim Moriarty +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.1|4|brother +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.2|4|enemy +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.2|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.1|65|2048000 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-ex.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-ex.snmprec new file mode 100644 index 0000000000000..4dab0344bd09f --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-ex.snmprec @@ -0,0 +1,296 @@ +1.3.6.1.2.1.1.1.0|4|Juniper Networks, Inc. ex2200-24t-4g internet router, kernel JUNOS 10.2R1.8 #0: 2010-05-27 20:13:49 UTC +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.2.30 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.1.2.0|4|EX2200 Ethernet Switch +1.3.6.1.4.1.2636.3.1.3.0|4|dXPEdPBE5yKtjW9xx3 +1.3.6.1.4.1.2636.3.1.4.0|4|version-1.0 +1.3.6.1.4.1.2636.3.5.2.1.1.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|74686569722064726976696e6720717561696e746c7920627574204a61646564206f78656e +1.3.6.1.4.1.2636.3.5.2.1.1.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6b657074206b65707420627574206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2636.3.5.2.1.1.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|64726976696e67206b657074206163746564204a61646564207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2636.3.5.2.1.2.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|4a61646564206f78656e206b6570742074686569722064726976696e6720627574206b657074 +1.3.6.1.4.1.2636.3.5.2.1.2.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6f78656e20666f7277617264204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2636.3.5.2.1.2.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|6275742062757420627574207468656972207468656972207468656972206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2636.3.5.2.1.3.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.4.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|4454094099404974412 +1.3.6.1.4.1.2636.3.5.2.1.4.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|9206254963072680169 +1.3.6.1.4.1.2636.3.5.2.1.4.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|3696546830171348582 +1.3.6.1.4.1.2636.3.5.2.1.5.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|696736619041929696 +1.3.6.1.4.1.2636.3.5.2.1.5.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|16785242467789528990 +1.3.6.1.4.1.2636.3.5.2.1.5.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|17939108183311980476 +1.3.6.1.4.1.2636.3.5.2.1.6.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|717561696e746c792064726976696e6720666f727761726420666f7277617264206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2636.3.5.2.1.6.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320666f7277617264206f78656e206f78656e20746865697220627574 +1.3.6.1.4.1.2636.3.5.2.1.6.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|616374656420627574207468656972206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2636.3.5.2.1.7.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4|driving +1.3.6.1.4.1.2636.3.5.2.1.7.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|717561696e746c792064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.2636.3.5.2.1.7.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|7a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2636.3.5.2.1.8.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|1 +1.3.6.1.4.1.2636.3.5.2.1.8.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|2 +1.3.6.1.4.1.2636.3.5.2.1.8.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|2 +1.3.6.1.4.1.2636.3.6.2.1.1.83.1.5.116.104.101.105.114|2|83 +1.3.6.1.4.1.2636.3.6.2.1.1.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|780 +1.3.6.1.4.1.2636.3.6.2.1.1.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|907 +1.3.6.1.4.1.2636.3.6.2.1.2.83.1.5.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|2 +1.3.6.1.4.1.2636.3.6.2.1.3.83.1.5.116.104.101.105.114|4|their +1.3.6.1.4.1.2636.3.6.2.1.3.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|61637465642062757420666f7277617264206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2636.3.6.2.1.3.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e204a61646564206f78656e204a6164656420666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2636.3.6.2.1.4.83.1.5.116.104.101.105.114|70|12317383665498203792 +1.3.6.1.4.1.2636.3.6.2.1.4.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|18298564239260252878 +1.3.6.1.4.1.2636.3.6.2.1.4.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|14296161882202174757 +1.3.6.1.4.1.2636.3.6.2.1.5.83.1.5.116.104.101.105.114|70|11494977799318547626 +1.3.6.1.4.1.2636.3.6.2.1.5.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|3147422798697337841 +1.3.6.1.4.1.2636.3.6.2.1.5.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|9179463037551089633 +1.3.6.1.4.1.2636.3.6.2.1.6.83.1.5.116.104.101.105.114|4|driving +1.3.6.1.4.1.2636.3.6.2.1.6.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2636.3.6.2.1.6.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e206b657074207a6f6d62696573 +1.3.6.1.4.1.2636.3.15.9.1.1.170|2|11 +1.3.6.1.4.1.2636.3.15.9.1.1.243|2|919 +1.3.6.1.4.1.2636.3.15.9.1.1.463|2|981 +1.3.6.1.4.1.2636.3.15.9.1.2.170|4x|6163746564206f78656e206f78656e20666f727761726420717561696e746c79206b657074207a6f6d6269657320627574206f78656e +1.3.6.1.4.1.2636.3.15.9.1.2.243|4x|6163746564206b65707420717561696e746c79206163746564206f78656e206b657074 +1.3.6.1.4.1.2636.3.15.9.1.2.463|4|their +1.3.6.1.4.1.2636.3.15.10.1.1.170.25|2|170 +1.3.6.1.4.1.2636.3.15.10.1.1.243.50|2|243 +1.3.6.1.4.1.2636.3.15.10.1.1.463.15|2|463 +1.3.6.1.4.1.2636.3.15.10.1.2.170.25|2|25 +1.3.6.1.4.1.2636.3.15.10.1.2.243.50|2|50 +1.3.6.1.4.1.2636.3.15.10.1.2.463.15|2|15 +1.3.6.1.4.1.2636.3.15.10.1.3.170.25|70|12770856836917969245 +1.3.6.1.4.1.2636.3.15.10.1.3.243.50|70|9663869619250073385 +1.3.6.1.4.1.2636.3.15.10.1.3.463.15|70|4128978860610001207 +1.3.6.1.4.1.2636.3.15.10.1.4.170.25|70|1002399613905247533 +1.3.6.1.4.1.2636.3.15.10.1.4.243.50|70|996423942118251217 +1.3.6.1.4.1.2636.3.15.10.1.4.463.15|70|4764867759487322545 +1.3.6.1.4.1.2636.3.15.10.1.5.170.25|70|9232681433406374088 +1.3.6.1.4.1.2636.3.15.10.1.5.243.50|70|8035400151290454024 +1.3.6.1.4.1.2636.3.15.10.1.5.463.15|70|5990647624742140325 +1.3.6.1.4.1.2636.3.15.10.1.6.170.25|70|1065640835557330094 +1.3.6.1.4.1.2636.3.15.10.1.6.243.50|70|17558806293727990360 +1.3.6.1.4.1.2636.3.15.10.1.6.463.15|70|11908438181160168105 +1.3.6.1.4.1.2636.3.15.10.1.7.170.25|70|18273158544474451497 +1.3.6.1.4.1.2636.3.15.10.1.7.243.50|70|13777396596348831423 +1.3.6.1.4.1.2636.3.15.10.1.7.463.15|70|2487683329818536869 +1.3.6.1.4.1.2636.3.15.10.1.8.170.25|70|3466222661774951990 +1.3.6.1.4.1.2636.3.15.10.1.8.243.50|70|12670568689846152972 +1.3.6.1.4.1.2636.3.15.10.1.8.463.15|70|8075791252460836529 +1.3.6.1.4.1.2636.3.15.10.1.9.170.25|70|8020605155612723028 +1.3.6.1.4.1.2636.3.15.10.1.9.243.50|70|12997273506749046582 +1.3.6.1.4.1.2636.3.15.10.1.9.463.15|70|18231535980456700136 +1.3.6.1.4.1.2636.3.15.10.1.10.170.25|70|3314807028774900920 +1.3.6.1.4.1.2636.3.15.10.1.10.243.50|70|12384249738747780022 +1.3.6.1.4.1.2636.3.15.10.1.10.463.15|70|5706341066266616742 +1.3.6.1.4.1.2636.3.15.10.1.11.170.25|70|9543706072360554442 +1.3.6.1.4.1.2636.3.15.10.1.11.243.50|70|15353080467434378674 +1.3.6.1.4.1.2636.3.15.10.1.11.463.15|70|7000096561546418502 +1.3.6.1.4.1.2636.3.15.10.1.12.170.25|70|13553825566144951217 +1.3.6.1.4.1.2636.3.15.10.1.12.243.50|70|2884686421611507766 +1.3.6.1.4.1.2636.3.15.10.1.12.463.15|70|7950960221026326783 +1.3.6.1.4.1.2636.3.15.10.1.13.170.25|70|6461751168224122855 +1.3.6.1.4.1.2636.3.15.10.1.13.243.50|70|8626132824337957526 +1.3.6.1.4.1.2636.3.15.10.1.13.463.15|70|17731588095000145998 +1.3.6.1.4.1.2636.3.15.10.1.14.170.25|70|15619102596973248473 +1.3.6.1.4.1.2636.3.15.10.1.14.243.50|70|16692053855289491043 +1.3.6.1.4.1.2636.3.15.10.1.14.463.15|70|8456156210951462249 +1.3.6.1.4.1.2636.3.15.10.1.15.170.25|70|2299977202421036105 +1.3.6.1.4.1.2636.3.15.10.1.15.243.50|70|813117570951116201 +1.3.6.1.4.1.2636.3.15.10.1.15.463.15|70|1188478793913849482 +1.3.6.1.4.1.2636.3.15.10.1.16.170.25|70|2893929287389891965 +1.3.6.1.4.1.2636.3.15.10.1.16.243.50|70|16289010184593102625 +1.3.6.1.4.1.2636.3.15.10.1.16.463.15|70|14190997503223661814 +1.3.6.1.4.1.2636.3.15.10.1.17.170.25|70|14493484350074177035 +1.3.6.1.4.1.2636.3.15.10.1.17.243.50|70|13596150666639387175 +1.3.6.1.4.1.2636.3.15.10.1.17.463.15|70|14424565573160285076 +1.3.6.1.4.1.2636.3.15.10.1.18.170.25|70|10529534850679351483 +1.3.6.1.4.1.2636.3.15.10.1.18.243.50|70|2906176364604264292 +1.3.6.1.4.1.2636.3.15.10.1.18.463.15|70|8315217861465467611 +1.3.6.1.4.1.2636.3.15.10.1.19.170.25|70|8170434880350759573 +1.3.6.1.4.1.2636.3.15.10.1.19.243.50|70|887688327484631583 +1.3.6.1.4.1.2636.3.15.10.1.19.463.15|70|10060318579349968784 +1.3.6.1.4.1.2636.3.15.10.1.20.170.25|70|5815198282439278933 +1.3.6.1.4.1.2636.3.15.10.1.20.243.50|70|14749506163780204940 +1.3.6.1.4.1.2636.3.15.10.1.20.463.15|70|9286269907376035246 +1.3.6.1.4.1.2636.3.15.10.1.21.170.25|70|2825795754297694874 +1.3.6.1.4.1.2636.3.15.10.1.21.243.50|70|11285523882234093093 +1.3.6.1.4.1.2636.3.15.10.1.21.463.15|70|15090187984937318802 +1.3.6.1.4.1.2636.3.15.10.1.22.170.25|70|7863778897832470889 +1.3.6.1.4.1.2636.3.15.10.1.22.243.50|70|3553508407684051674 +1.3.6.1.4.1.2636.3.15.10.1.22.463.15|70|13931708594683902426 +1.3.6.1.4.1.2636.3.15.10.1.23.170.25|70|12906613682638875307 +1.3.6.1.4.1.2636.3.15.10.1.23.243.50|70|11949204969119103650 +1.3.6.1.4.1.2636.3.15.10.1.23.463.15|70|5956153079277958221 +1.3.6.1.4.1.2636.3.15.10.1.24.170.25|70|11477234301196000227 +1.3.6.1.4.1.2636.3.15.10.1.24.243.50|70|3314652739024033013 +1.3.6.1.4.1.2636.3.15.10.1.24.463.15|70|15017127765184020318 +1.3.6.1.4.1.2636.3.15.10.1.25.170.25|70|8424154835415081760 +1.3.6.1.4.1.2636.3.15.10.1.25.243.50|70|7471672866813717794 +1.3.6.1.4.1.2636.3.15.10.1.25.463.15|70|17857076078061565547 +1.3.6.1.4.1.2636.3.15.10.1.26.170.25|70|3793853525121104339 +1.3.6.1.4.1.2636.3.15.10.1.26.243.50|70|3989409530853199526 +1.3.6.1.4.1.2636.3.15.10.1.26.463.15|70|15735187836465138700 +1.3.6.1.4.1.2636.3.15.10.1.27.170.25|70|18213777320258743968 +1.3.6.1.4.1.2636.3.15.10.1.27.243.50|70|14971409743913453864 +1.3.6.1.4.1.2636.3.15.10.1.27.463.15|70|4036774420969319248 +1.3.6.1.4.1.2636.3.15.10.1.28.170.25|70|11024421017883614152 +1.3.6.1.4.1.2636.3.15.10.1.28.243.50|70|90364654298972704 +1.3.6.1.4.1.2636.3.15.10.1.28.463.15|70|8686770717862532224 +1.3.6.1.4.1.2636.3.15.10.1.29.170.25|70|12300319506603429604 +1.3.6.1.4.1.2636.3.15.10.1.29.243.50|70|1280552904131433006 +1.3.6.1.4.1.2636.3.15.10.1.29.463.15|70|1984703258989993414 +1.3.6.1.4.1.2636.3.15.10.1.30.170.25|70|14325491697305781346 +1.3.6.1.4.1.2636.3.15.10.1.30.243.50|70|9672229296991156990 +1.3.6.1.4.1.2636.3.15.10.1.30.463.15|70|17512343358386083614 +1.3.6.1.4.1.2636.3.15.10.1.31.170.25|70|5927227884246572881 +1.3.6.1.4.1.2636.3.15.10.1.31.243.50|70|9450776281406177093 +1.3.6.1.4.1.2636.3.15.10.1.31.463.15|70|17370561485432592141 +1.3.6.1.4.1.2636.3.15.10.1.32.170.25|70|7967882224524493134 +1.3.6.1.4.1.2636.3.15.10.1.32.243.50|70|3172465735716905246 +1.3.6.1.4.1.2636.3.15.10.1.32.463.15|70|11533409651162362033 +1.3.6.1.4.1.2636.3.15.10.1.33.170.25|70|16548575809615604796 +1.3.6.1.4.1.2636.3.15.10.1.33.243.50|70|6442873042770202449 +1.3.6.1.4.1.2636.3.15.10.1.33.463.15|70|1918875848098423600 +1.3.6.1.4.1.2636.3.15.10.1.34.170.25|70|12105898413641506478 +1.3.6.1.4.1.2636.3.15.10.1.34.243.50|70|5385799517301974188 +1.3.6.1.4.1.2636.3.15.10.1.34.463.15|70|9277777983354765895 +1.3.6.1.4.1.2636.3.15.10.1.35.170.25|70|786407073866759825 +1.3.6.1.4.1.2636.3.15.10.1.35.243.50|70|12567184007500140055 +1.3.6.1.4.1.2636.3.15.10.1.35.463.15|70|6530228175190559355 +1.3.6.1.4.1.2636.3.15.10.1.36.170.25|70|22369930787572654 +1.3.6.1.4.1.2636.3.15.10.1.36.243.50|70|2397774807429625982 +1.3.6.1.4.1.2636.3.15.10.1.36.463.15|70|15156373897980262200 +1.3.6.1.4.1.2636.3.15.10.1.37.170.25|70|5148517373031836367 +1.3.6.1.4.1.2636.3.15.10.1.37.243.50|70|7721607394473998281 +1.3.6.1.4.1.2636.3.15.10.1.37.463.15|70|8714575013162753417 +1.3.6.1.4.1.2636.3.15.10.1.38.170.25|70|10930247236210764218 +1.3.6.1.4.1.2636.3.15.10.1.38.243.50|70|5146652189836621240 +1.3.6.1.4.1.2636.3.15.10.1.38.463.15|70|8864307502844767136 +1.3.6.1.4.1.2636.3.15.10.1.39.170.25|70|17987422552752788069 +1.3.6.1.4.1.2636.3.15.10.1.39.243.50|70|7828400400494290544 +1.3.6.1.4.1.2636.3.15.10.1.39.463.15|70|10564281255194113941 +1.3.6.1.4.1.2636.3.15.10.1.40.170.25|70|4456908988229385506 +1.3.6.1.4.1.2636.3.15.10.1.40.243.50|70|4548509587568319054 +1.3.6.1.4.1.2636.3.15.10.1.40.463.15|70|12654679094639954721 +1.3.6.1.4.1.2636.3.15.10.1.41.170.25|70|319452186197743737 +1.3.6.1.4.1.2636.3.15.10.1.41.243.50|70|16364791724635672240 +1.3.6.1.4.1.2636.3.15.10.1.41.463.15|70|17828705365509861774 +1.3.6.1.4.1.2636.3.15.10.1.42.170.25|70|9913951142041236635 +1.3.6.1.4.1.2636.3.15.10.1.42.243.50|70|4590232569604987384 +1.3.6.1.4.1.2636.3.15.10.1.42.463.15|70|16879636922511149261 +1.3.6.1.4.1.2636.3.15.10.1.43.170.25|70|16128554786484754487 +1.3.6.1.4.1.2636.3.15.10.1.43.243.50|70|6720587125918748618 +1.3.6.1.4.1.2636.3.15.10.1.43.463.15|70|10982123962446739740 +1.3.6.1.4.1.2636.3.15.10.1.44.170.25|70|6625476741978175421 +1.3.6.1.4.1.2636.3.15.10.1.44.243.50|70|14758624194210778093 +1.3.6.1.4.1.2636.3.15.10.1.44.463.15|70|3510595354408991883 +1.3.6.1.4.1.2636.3.15.10.1.45.170.25|70|12193077799780761280 +1.3.6.1.4.1.2636.3.15.10.1.45.243.50|70|434156370935591348 +1.3.6.1.4.1.2636.3.15.10.1.45.463.15|70|14701761228332844190 +1.3.6.1.4.1.2636.3.15.10.1.46.170.25|70|4097961753211413825 +1.3.6.1.4.1.2636.3.15.10.1.46.243.50|70|14198283656685665373 +1.3.6.1.4.1.2636.3.15.10.1.46.463.15|70|9981844938014966456 +1.3.6.1.4.1.2636.3.15.10.1.47.170.25|70|4499862665732599823 +1.3.6.1.4.1.2636.3.15.10.1.47.243.50|70|7208392381338046179 +1.3.6.1.4.1.2636.3.15.10.1.47.463.15|70|6241021335515696595 +1.3.6.1.4.1.2636.3.15.10.1.48.170.25|70|4799882603978889044 +1.3.6.1.4.1.2636.3.15.10.1.48.243.50|70|11687294706629489122 +1.3.6.1.4.1.2636.3.15.10.1.48.463.15|70|8189775643826190503 +1.3.6.1.4.1.2636.3.15.10.1.49.170.25|70|14943326773818355422 +1.3.6.1.4.1.2636.3.15.10.1.49.243.50|70|3029491279441157558 +1.3.6.1.4.1.2636.3.15.10.1.49.463.15|70|14724608253725676036 +1.3.6.1.4.1.2636.3.15.10.1.50.170.25|70|8089079564874181657 +1.3.6.1.4.1.2636.3.15.10.1.50.243.50|70|3777655493494241512 +1.3.6.1.4.1.2636.3.15.10.1.50.463.15|70|9345336414379681585 +1.3.6.1.4.1.2636.3.15.10.1.51.170.25|70|1461276263793545759 +1.3.6.1.4.1.2636.3.15.10.1.51.243.50|70|12409543167456089371 +1.3.6.1.4.1.2636.3.15.10.1.51.463.15|70|4329004572229054293 +1.3.6.1.4.1.2636.3.15.10.1.52.170.25|70|6602329256452145238 +1.3.6.1.4.1.2636.3.15.10.1.52.243.50|70|6601473160297645100 +1.3.6.1.4.1.2636.3.15.10.1.52.463.15|70|16308867362923996690 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|11 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|22 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|24 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|4a6164656420666f727761726420627574206f78656e20717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|4x|666f727761726420666f72776172642064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|3 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|12189304536513319332 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7722656158153650831 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10603165628512588309 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3843980053062837517 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|12509302819583194366 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|3885376250889014561 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10352052349549821463 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7177674967410638136 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|5091222764852841190 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|13715573869517889886 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|10130509551224208352 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|2504343572792914641 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2938889684826768032 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11291252729780336384 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|1481668101793427313 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|6310274704585370658 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6789462645369539630 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|491028968499993270 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3608875038808074952 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|797075051605537720 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14085552435037248689 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5552625442655846107 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4454798770846396730 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|9088428039091030198 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10229778388752303226 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11069391749223800156 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|11894101190314294086 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5808123009872645909 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|3572737769193079165 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|6853689900557367040 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|8372358451243013065 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|2058660889925691752 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|15823042855195793586 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|11700083343423325868 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4448772641108495089 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|676318422458825171 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|15142294159964046333 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|18390833596244657351 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10182233820378904307 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2057784955673108988 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6276174311039281296 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14694007361821605096 +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.1|4|Mycroft Holmes +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.2|4|Jim Moriarty +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.1|4|brother +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.2|4|enemy +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.2|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.1|65|2048000 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-mx-variation.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-mx-variation.snmprec new file mode 100644 index 0000000000000..230453ef3880d --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-mx-variation.snmprec @@ -0,0 +1,105 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.4.25.1 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.5.2.1.1.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|74686569722064726976696e6720717561696e746c7920627574204a61646564206f78656e +1.3.6.1.4.1.2636.3.5.2.1.1.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6b657074206b65707420627574206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2636.3.5.2.1.1.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|64726976696e67206b657074206163746564204a61646564207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2636.3.5.2.1.2.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|4a61646564206f78656e206b6570742074686569722064726976696e6720627574206b657074 +1.3.6.1.4.1.2636.3.5.2.1.2.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6f78656e20666f7277617264204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2636.3.5.2.1.2.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|6275742062757420627574207468656972207468656972207468656972206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2636.3.5.2.1.3.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.4.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|4454094099404974412 +1.3.6.1.4.1.2636.3.5.2.1.4.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|9206254963072680169 +1.3.6.1.4.1.2636.3.5.2.1.4.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|3696546830171348582 +1.3.6.1.4.1.2636.3.5.2.1.5.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|696736619041929696 +1.3.6.1.4.1.2636.3.5.2.1.5.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|16785242467789528990 +1.3.6.1.4.1.2636.3.5.2.1.5.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|17939108183311980476 +1.3.6.1.4.1.2636.3.5.2.1.6.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|717561696e746c792064726976696e6720666f727761726420666f7277617264206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2636.3.5.2.1.6.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320666f7277617264206f78656e206f78656e20746865697220627574 +1.3.6.1.4.1.2636.3.5.2.1.6.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|616374656420627574207468656972206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2636.3.5.2.1.7.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4|driving +1.3.6.1.4.1.2636.3.5.2.1.7.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|717561696e746c792064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.2636.3.5.2.1.7.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|7a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2636.3.5.2.1.8.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|1 +1.3.6.1.4.1.2636.3.5.2.1.8.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|2 +1.3.6.1.4.1.2636.3.5.2.1.8.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|11 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|22 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|24 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|4a6164656420666f727761726420627574206f78656e20717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|4x|666f727761726420666f72776172642064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|3 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|12189304536513319332 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7722656158153650831 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10603165628512588309 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3843980053062837517 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|12509302819583194366 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|3885376250889014561 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10352052349549821463 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7177674967410638136 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|5091222764852841190 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|13715573869517889886 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|10130509551224208352 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|2504343572792914641 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2938889684826768032 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11291252729780336384 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|1481668101793427313 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|6310274704585370658 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6789462645369539630 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|491028968499993270 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3608875038808074952 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|797075051605537720 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14085552435037248689 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5552625442655846107 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4454798770846396730 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|9088428039091030198 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10229778388752303226 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11069391749223800156 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|11894101190314294086 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5808123009872645909 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|3572737769193079165 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|6853689900557367040 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|8372358451243013065 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|2058660889925691752 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|15823042855195793586 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|11700083343423325868 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4448772641108495089 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|676318422458825171 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|15142294159964046333 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|18390833596244657351 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10182233820378904307 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2057784955673108988 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6276174311039281296 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14694007361821605096 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-mx.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-mx.snmprec new file mode 100644 index 0000000000000..4eda0496a907c --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-mx.snmprec @@ -0,0 +1,109 @@ +1.3.6.1.2.1.1.1.0|4|Juniper Networks, Inc. mx480 internet router, kernel JUNOS 11.2R1.10 #0: 2011-07-29 07:15:34 UTC +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.2.25 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.1.2.0|4|MX480 Router +1.3.6.1.4.1.2636.3.1.3.0|4|dXPEdPBE5yKtjW9xx4 +1.3.6.1.4.1.2636.3.1.4.0|4|version-1.1 +1.3.6.1.4.1.2636.3.5.2.1.1.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|74686569722064726976696e6720717561696e746c7920627574204a61646564206f78656e +1.3.6.1.4.1.2636.3.5.2.1.1.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6b657074206b65707420627574206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2636.3.5.2.1.1.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|64726976696e67206b657074206163746564204a61646564207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2636.3.5.2.1.2.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|4a61646564206f78656e206b6570742074686569722064726976696e6720627574206b657074 +1.3.6.1.4.1.2636.3.5.2.1.2.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6f78656e20666f7277617264204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2636.3.5.2.1.2.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|6275742062757420627574207468656972207468656972207468656972206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2636.3.5.2.1.3.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.4.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|4454094099404974412 +1.3.6.1.4.1.2636.3.5.2.1.4.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|9206254963072680169 +1.3.6.1.4.1.2636.3.5.2.1.4.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|3696546830171348582 +1.3.6.1.4.1.2636.3.5.2.1.5.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|696736619041929696 +1.3.6.1.4.1.2636.3.5.2.1.5.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|16785242467789528990 +1.3.6.1.4.1.2636.3.5.2.1.5.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|17939108183311980476 +1.3.6.1.4.1.2636.3.5.2.1.6.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|717561696e746c792064726976696e6720666f727761726420666f7277617264206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2636.3.5.2.1.6.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320666f7277617264206f78656e206f78656e20746865697220627574 +1.3.6.1.4.1.2636.3.5.2.1.6.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|616374656420627574207468656972206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2636.3.5.2.1.7.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4|driving +1.3.6.1.4.1.2636.3.5.2.1.7.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|717561696e746c792064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.2636.3.5.2.1.7.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|7a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2636.3.5.2.1.8.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|1 +1.3.6.1.4.1.2636.3.5.2.1.8.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|2 +1.3.6.1.4.1.2636.3.5.2.1.8.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|11 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|22 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|24 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|4a6164656420666f727761726420627574206f78656e20717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|4x|666f727761726420666f72776172642064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|3 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|12189304536513319332 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7722656158153650831 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10603165628512588309 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3843980053062837517 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|12509302819583194366 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|3885376250889014561 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10352052349549821463 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7177674967410638136 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|5091222764852841190 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|13715573869517889886 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|10130509551224208352 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|2504343572792914641 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2938889684826768032 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11291252729780336384 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|1481668101793427313 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|6310274704585370658 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6789462645369539630 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|491028968499993270 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3608875038808074952 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|797075051605537720 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14085552435037248689 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5552625442655846107 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4454798770846396730 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|9088428039091030198 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10229778388752303226 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11069391749223800156 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|11894101190314294086 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5808123009872645909 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|3572737769193079165 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|6853689900557367040 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|8372358451243013065 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|2058660889925691752 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|15823042855195793586 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|11700083343423325868 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4448772641108495089 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|676318422458825171 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|15142294159964046333 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|18390833596244657351 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10182233820378904307 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2057784955673108988 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6276174311039281296 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14694007361821605096 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-srx-variation.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-srx-variation.snmprec new file mode 100644 index 0000000000000..4f57710ec1845 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-srx-variation.snmprec @@ -0,0 +1,85 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.4.35.1 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.6.2.1.1.83.1.5.116.104.101.105.114|2|83 +1.3.6.1.4.1.2636.3.6.2.1.1.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|780 +1.3.6.1.4.1.2636.3.6.2.1.1.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|907 +1.3.6.1.4.1.2636.3.6.2.1.2.83.1.5.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|2 +1.3.6.1.4.1.2636.3.6.2.1.3.83.1.5.116.104.101.105.114|4|their +1.3.6.1.4.1.2636.3.6.2.1.3.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|61637465642062757420666f7277617264206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2636.3.6.2.1.3.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e204a61646564206f78656e204a6164656420666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2636.3.6.2.1.4.83.1.5.116.104.101.105.114|70|12317383665498203792 +1.3.6.1.4.1.2636.3.6.2.1.4.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|18298564239260252878 +1.3.6.1.4.1.2636.3.6.2.1.4.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|14296161882202174757 +1.3.6.1.4.1.2636.3.6.2.1.5.83.1.5.116.104.101.105.114|70|11494977799318547626 +1.3.6.1.4.1.2636.3.6.2.1.5.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|3147422798697337841 +1.3.6.1.4.1.2636.3.6.2.1.5.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|9179463037551089633 +1.3.6.1.4.1.2636.3.6.2.1.6.83.1.5.116.104.101.105.114|4|driving +1.3.6.1.4.1.2636.3.6.2.1.6.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2636.3.6.2.1.6.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e206b657074207a6f6d62696573 +1.3.6.1.4.1.2636.3.16.1.1.1.1.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|2|116 +1.3.6.1.4.1.2636.3.16.1.1.1.1.780.1.5.97.99.116.101.100|2|403 +1.3.6.1.4.1.2636.3.16.1.1.1.1.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|2|796 +1.3.6.1.4.1.2636.3.16.1.1.1.2.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.2.780.1.5.97.99.116.101.100|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.2.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.3.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|4x|717561696e746c79206f78656e2064726976696e67207a6f6d6269657320616374656420717561696e746c79 +1.3.6.1.4.1.2636.3.16.1.1.1.3.780.1.5.97.99.116.101.100|4|acted +1.3.6.1.4.1.2636.3.16.1.1.1.3.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|4x|6163746564207a6f6d62696573204a6164656420666f727761726420627574204a61646564 +1.3.6.1.4.1.2636.3.16.1.1.1.4.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|70|6160475318969358761 +1.3.6.1.4.1.2636.3.16.1.1.1.4.780.1.5.97.99.116.101.100|70|15152137479357665383 +1.3.6.1.4.1.2636.3.16.1.1.1.4.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|70|8362446845569884768 +1.3.6.1.4.1.2636.3.16.1.1.1.5.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|70|5039501432693393801 +1.3.6.1.4.1.2636.3.16.1.1.1.5.780.1.5.97.99.116.101.100|70|4992162073054637767 +1.3.6.1.4.1.2636.3.16.1.1.1.5.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|70|4746642765674161328 +1.3.6.1.4.1.2636.3.16.1.1.1.6.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|4x|64726976696e6720717561696e746c79206f78656e204a616465642062757420746865697220627574 +1.3.6.1.4.1.2636.3.16.1.1.1.6.780.1.5.97.99.116.101.100|4x|717561696e746c79204a61646564206275742061637465642061637465642064726976696e67204a61646564 +1.3.6.1.4.1.2636.3.16.1.1.1.6.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|4x|62757420717561696e746c7920627574206f78656e20666f7277617264 +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.1|4|Mycroft Holmes +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.2|4|Jim Moriarty +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.1|4|brother +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.2|4|enemy +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.2|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.2|65|2048000 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.21.165.122.212 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.105.107.123.14.187.39 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.106.82.171.151.194.140.17.11 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.181.44.102.54.128.164.245.225 +1.3.6.1.6.3.1.1.6.1.0|2|14 +1.3.6.1.6.3.1.1.6.1.0|2|172 +1.3.6.1.6.3.10.2.1.1.0|4x|6b657074206f78656e +1.3.6.1.6.3.10.2.1.1.0|4x|62757420717561696e746c79 +1.3.6.1.6.3.10.2.1.2.0|2|70 +1.3.6.1.6.3.10.2.1.2.0|2|406 +1.3.6.1.6.3.10.2.1.3.0|2|261 +1.3.6.1.6.3.10.2.1.3.0|2|492 +1.3.6.1.6.3.10.2.1.4.0|2|505 +1.3.6.1.6.3.10.2.1.4.0|2|565 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-srx.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-srx.snmprec new file mode 100644 index 0000000000000..ed25a1fc82c4d --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-srx.snmprec @@ -0,0 +1,89 @@ +1.3.6.1.2.1.1.1.0|4|Juniper Networks, Inc. srx3400 internet router, kernel JUNOS 10.4R3.4 #0: 2011-03-19 22:06:23 UTC +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.2.35 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.1.2.0|4|SRX 3400 Router +1.3.6.1.4.1.2636.3.1.3.0|4|dXPEdPBE5yKtjW9xx5 +1.3.6.1.4.1.2636.3.1.4.0|4|version-1.2 +1.3.6.1.4.1.2636.3.6.2.1.1.83.1.5.116.104.101.105.114|2|83 +1.3.6.1.4.1.2636.3.6.2.1.1.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|780 +1.3.6.1.4.1.2636.3.6.2.1.1.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|907 +1.3.6.1.4.1.2636.3.6.2.1.2.83.1.5.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|2 +1.3.6.1.4.1.2636.3.6.2.1.3.83.1.5.116.104.101.105.114|4|their +1.3.6.1.4.1.2636.3.6.2.1.3.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|61637465642062757420666f7277617264206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2636.3.6.2.1.3.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e204a61646564206f78656e204a6164656420666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2636.3.6.2.1.4.83.1.5.116.104.101.105.114|70|12317383665498203792 +1.3.6.1.4.1.2636.3.6.2.1.4.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|18298564239260252878 +1.3.6.1.4.1.2636.3.6.2.1.4.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|14296161882202174757 +1.3.6.1.4.1.2636.3.6.2.1.5.83.1.5.116.104.101.105.114|70|11494977799318547626 +1.3.6.1.4.1.2636.3.6.2.1.5.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|3147422798697337841 +1.3.6.1.4.1.2636.3.6.2.1.5.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|9179463037551089633 +1.3.6.1.4.1.2636.3.6.2.1.6.83.1.5.116.104.101.105.114|4|driving +1.3.6.1.4.1.2636.3.6.2.1.6.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2636.3.6.2.1.6.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e206b657074207a6f6d62696573 +1.3.6.1.4.1.2636.3.16.1.1.1.1.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|2|116 +1.3.6.1.4.1.2636.3.16.1.1.1.1.780.1.5.97.99.116.101.100|2|403 +1.3.6.1.4.1.2636.3.16.1.1.1.1.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|2|796 +1.3.6.1.4.1.2636.3.16.1.1.1.2.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.2.780.1.5.97.99.116.101.100|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.2.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.3.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|4x|717561696e746c79206f78656e2064726976696e67207a6f6d6269657320616374656420717561696e746c79 +1.3.6.1.4.1.2636.3.16.1.1.1.3.780.1.5.97.99.116.101.100|4|acted +1.3.6.1.4.1.2636.3.16.1.1.1.3.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|4x|6163746564207a6f6d62696573204a6164656420666f727761726420627574204a61646564 +1.3.6.1.4.1.2636.3.16.1.1.1.4.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|70|6160475318969358761 +1.3.6.1.4.1.2636.3.16.1.1.1.4.780.1.5.97.99.116.101.100|70|15152137479357665383 +1.3.6.1.4.1.2636.3.16.1.1.1.4.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|70|8362446845569884768 +1.3.6.1.4.1.2636.3.16.1.1.1.5.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|70|5039501432693393801 +1.3.6.1.4.1.2636.3.16.1.1.1.5.780.1.5.97.99.116.101.100|70|4992162073054637767 +1.3.6.1.4.1.2636.3.16.1.1.1.5.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|70|4746642765674161328 +1.3.6.1.4.1.2636.3.16.1.1.1.6.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|4x|64726976696e6720717561696e746c79206f78656e204a616465642062757420746865697220627574 +1.3.6.1.4.1.2636.3.16.1.1.1.6.780.1.5.97.99.116.101.100|4x|717561696e746c79204a61646564206275742061637465642061637465642064726976696e67204a61646564 +1.3.6.1.4.1.2636.3.16.1.1.1.6.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|4x|62757420717561696e746c7920627574206f78656e20666f7277617264 +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.1|4|Mycroft Holmes +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.2|4|Jim Moriarty +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.1|4|brother +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.2|4|enemy +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.2|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.2|65|2048000 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.21.165.122.212 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.105.107.123.14.187.39 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.106.82.171.151.194.140.17.11 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.181.44.102.54.128.164.245.225 +1.3.6.1.6.3.1.1.6.1.0|2|14 +1.3.6.1.6.3.1.1.6.1.0|2|172 +1.3.6.1.6.3.10.2.1.1.0|4x|6b657074206f78656e +1.3.6.1.6.3.10.2.1.1.0|4x|62757420717561696e746c79 +1.3.6.1.6.3.10.2.1.2.0|2|70 +1.3.6.1.6.3.10.2.1.2.0|2|406 +1.3.6.1.6.3.10.2.1.3.0|2|261 +1.3.6.1.6.3.10.2.1.3.0|2|492 +1.3.6.1.6.3.10.2.1.4.0|2|505 +1.3.6.1.6.3.10.2.1.4.0|2|565 diff --git a/test/new-e2e/ndm/snmp/compose/data/meraki-cloud-controller.snmprec b/test/new-e2e/ndm/snmp/compose/data/meraki-cloud-controller.snmprec new file mode 100644 index 0000000000000..7e30e577bcc1b --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/meraki-cloud-controller.snmprec @@ -0,0 +1,96 @@ +1.3.6.1.2.1.1.1.0|4|Cisco Meraki Cloud Controller +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.29671.1 +1.3.6.1.2.1.1.3.0|67|3046294100 +1.3.6.1.2.1.1.4.0|4|support@meraki.com +1.3.6.1.2.1.1.5.0|4|dashboard.meraki.com +1.3.6.1.2.1.1.6.0|4|123 Fake Blvd, San Francisco, CA 94158, USA +1.3.6.1.2.1.2.2.1.1.11|2|11 +1.3.6.1.2.1.2.2.1.2.11|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.3.11|2|29 +1.3.6.1.2.1.2.2.1.4.11|2|10 +1.3.6.1.2.1.2.2.1.5.11|66|842689539 +1.3.6.1.2.1.2.2.1.6.11|4x|00 +1.3.6.1.2.1.2.2.1.7.11|2|2 +1.3.6.1.2.1.2.2.1.8.11|2|7 +1.3.6.1.2.1.2.2.1.9.11|67|4043941980 +1.3.6.1.2.1.2.2.1.10.11|65|2268799121 +1.3.6.1.2.1.2.2.1.11.11|65|1358081555 +1.3.6.1.2.1.2.2.1.12.11|65|2804916297 +1.3.6.1.2.1.2.2.1.13.11|65|1953269825 +1.3.6.1.2.1.2.2.1.14.11|65|3659465164 +1.3.6.1.2.1.2.2.1.15.11|65|3028473442 +1.3.6.1.2.1.2.2.1.16.11|65|2204618213 +1.3.6.1.2.1.2.2.1.17.11|65|3659357157 +1.3.6.1.2.1.2.2.1.18.11|65|1946069301 +1.3.6.1.2.1.2.2.1.19.11|65|1976763204 +1.3.6.1.2.1.2.2.1.20.11|65|1287028500 +1.3.6.1.2.1.2.2.1.21.11|66|3693484051 +1.3.6.1.2.1.31.1.1.1.1.11|4x|65746830 +1.3.6.1.2.1.31.1.1.1.2.11|65|3971642957 +1.3.6.1.2.1.31.1.1.1.3.11|65|3271801795 +1.3.6.1.2.1.31.1.1.1.4.11|65|3342364789 +1.3.6.1.2.1.31.1.1.1.5.11|65|3388467146 +1.3.6.1.2.1.31.1.1.1.6.11|70|14670660891743438939 +1.3.6.1.2.1.31.1.1.1.7.11|70|10886984631120028416 +1.3.6.1.2.1.31.1.1.1.8.11|70|17994136813414766052 +1.3.6.1.2.1.31.1.1.1.9.11|70|10439183159610289289 +1.3.6.1.2.1.31.1.1.1.10.11|70|2583386891169315520 +1.3.6.1.2.1.31.1.1.1.11.11|70|8885889412380302445 +1.3.6.1.2.1.31.1.1.1.12.11|70|10885548970511406028 +1.3.6.1.2.1.31.1.1.1.13.11|70|10028224865574503284 +1.3.6.1.2.1.31.1.1.1.15.11|66|31298329 +1.3.6.1.4.1.29671.1.1.1.0|4|user@example.com - Live Demo +1.3.6.1.4.1.29671.1.1.2.1.1.67.118.68.105.78.98.109.99|4|CvDiNbmc +1.3.6.1.4.1.29671.1.1.2.1.1.71.99.115.86.89.99.109.99|4|GcsVYcmc +1.3.6.1.4.1.29671.1.1.2.1.1.81.122.70.83.101.98.109.99|4|QzFSebmc +1.3.6.1.4.1.29671.1.1.2.1.1.115.53.82.71.74.97.109.99|4|s5RGJamc +1.3.6.1.4.1.29671.1.1.2.1.1.121.119.82.55.83.97.109.99|4|ywR7Samc +1.3.6.1.4.1.29671.1.1.2.1.2.67.118.68.105.78.98.109.99|4|Live Demo - Firewall +1.3.6.1.4.1.29671.1.1.2.1.2.71.99.115.86.89.99.109.99|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.2.1.2.81.122.70.83.101.98.109.99|4|Live Demo - Switches +1.3.6.1.4.1.29671.1.1.2.1.2.115.53.82.71.74.97.109.99|4|Live Demo - Branch Firewall +1.3.6.1.4.1.29671.1.1.2.1.2.121.119.82.55.83.97.109.99|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.71.99.115.86.89.99.109.99.1|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.71.99.115.86.89.99.109.99.2|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.71.99.115.86.89.99.109.99.3|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.71.99.115.86.89.99.109.99.4|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.121.119.82.55.83.97.109.99.1|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.121.119.82.55.83.97.109.99.2|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.121.119.82.55.83.97.109.99.3|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.121.119.82.55.83.97.109.99.4|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.2.71.99.115.86.89.99.109.99.1|2|1 +1.3.6.1.4.1.29671.1.1.3.1.2.71.99.115.86.89.99.109.99.2|2|2 +1.3.6.1.4.1.29671.1.1.3.1.2.71.99.115.86.89.99.109.99.3|2|3 +1.3.6.1.4.1.29671.1.1.3.1.2.71.99.115.86.89.99.109.99.4|2|4 +1.3.6.1.4.1.29671.1.1.3.1.2.121.119.82.55.83.97.109.99.1|2|1 +1.3.6.1.4.1.29671.1.1.3.1.2.121.119.82.55.83.97.109.99.2|2|2 +1.3.6.1.4.1.29671.1.1.3.1.2.121.119.82.55.83.97.109.99.3|2|3 +1.3.6.1.4.1.29671.1.1.3.1.2.121.119.82.55.83.97.109.99.4|2|4 +1.3.6.1.4.1.29671.1.1.3.1.3.71.99.115.86.89.99.109.99.1|4|Private students +1.3.6.1.4.1.29671.1.1.3.1.3.71.99.115.86.89.99.109.99.2|4|Private faculty +1.3.6.1.4.1.29671.1.1.3.1.3.71.99.115.86.89.99.109.99.3|4|Public guest +1.3.6.1.4.1.29671.1.1.3.1.3.71.99.115.86.89.99.109.99.4|4|University IT +1.3.6.1.4.1.29671.1.1.3.1.3.121.119.82.55.83.97.109.99.1|4|Public guest +1.3.6.1.4.1.29671.1.1.3.1.3.121.119.82.55.83.97.109.99.2|4|Private employee +1.3.6.1.4.1.29671.1.1.3.1.3.121.119.82.55.83.97.109.99.3|4|VOIP +1.3.6.1.4.1.29671.1.1.3.1.3.121.119.82.55.83.97.109.99.4|4|Corporate IT +1.3.6.1.4.1.29671.1.1.4.1.1.2.2.0.102.245.127|4e|\x02\x02\x00f\xf5\x7f +1.3.6.1.4.1.29671.1.1.4.1.2.2.2.0.102.245.127|4|Gymnasium +1.3.6.1.4.1.29671.1.1.4.1.3.2.2.0.102.245.127|2|1 +1.3.6.1.4.1.29671.1.1.4.1.4.2.2.0.102.245.127|4e|\x07\xdb\x06\t\x14\x1b\x15\x00+\x00\x00 +1.3.6.1.4.1.29671.1.1.4.1.5.2.2.0.102.245.127|2|6 +1.3.6.1.4.1.29671.1.1.4.1.6.2.2.0.102.245.127|2|0 +1.3.6.1.4.1.29671.1.1.4.1.7.2.2.0.102.245.127|64e|b\xad\xd1\xd6 +1.3.6.1.4.1.29671.1.1.4.1.8.2.2.0.102.245.127|4|VRT-2207619937663 +1.3.6.1.4.1.29671.1.1.4.1.9.2.2.0.102.245.127|4|MR16-HW +1.3.6.1.4.1.29671.1.1.4.1.10.2.2.0.102.245.127|4|Meraki MR16 Cloud Managed AP +1.3.6.1.4.1.29671.1.1.4.1.11.2.2.0.102.245.127|4|L_NETWORK +1.3.6.1.4.1.29671.1.1.5.1.1.2.2.0.102.245.127|4e|\x02\x02\x00f\xf5\x00 +1.3.6.1.4.1.29671.1.1.5.1.2.2.2.0.102.245.127|65|4 +1.3.6.1.4.1.29671.1.1.5.1.3.2.2.0.102.245.127|4|wifi0 +1.3.6.1.4.1.29671.1.1.5.1.4.2.2.0.102.245.127|65|342858662 +1.3.6.1.4.1.29671.1.1.5.1.5.2.2.0.102.245.127|65|423658599 +1.3.6.1.4.1.29671.1.1.5.1.6.2.2.0.102.245.127|65|204966843 +1.3.6.1.4.1.29671.1.1.5.1.7.2.2.0.102.245.127|65|433234633 +1.3.6.1.4.1.29671.1.1.5.1.8.2.2.0.102.245.127|4|Model +1.3.6.1.4.1.29671.1.1.5.1.9.2.2.0.102.245.127|4|4332 diff --git a/test/new-e2e/ndm/snmp/compose/data/netapp.snmprec b/test/new-e2e/ndm/snmp/compose/data/netapp.snmprec new file mode 100644 index 0000000000000..10b128d052875 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/netapp.snmprec @@ -0,0 +1,676 @@ +1.3.6.1.2.1.1.1.0|4|NetApp Release 9.3P7: Wed Jul 25 10:11:10 UTC 2018 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.789.2.5 +1.3.6.1.2.1.1.3.0|67|4294967295 +1.3.6.1.2.1.1.4.0|4|admin@example.company +1.3.6.1.2.1.1.5.0|4|example-datacenter.company +1.3.6.1.2.1.1.6.0|4|France +1.3.6.1.2.1.1.7.0|2|72 +1.3.6.1.4.1.789.1.1.1.0|2|2 +1.3.6.1.4.1.789.1.1.2.0|4|NetApp Release 9.3P7: Wed Jul 25 10:11:10 UTC 2018 +1.3.6.1.4.1.789.1.1.3.0|4| +1.3.6.1.4.1.789.1.1.4.0|2|1 +1.3.6.1.4.1.789.1.1.5.0|4|example-model +1.3.6.1.4.1.789.1.1.6.0|4|11.1 +1.3.6.1.4.1.789.1.1.7.0|4|http://127.0.0.1/cem +1.3.6.1.4.1.789.1.1.8.0|4|http://127.0.0.1/servlets/netapp.servlets.admin.XMLrequest_filer +1.3.6.1.4.1.789.1.1.9.0|4|1-23-456789 +1.3.6.1.4.1.789.1.1.10.0|4|unknown +1.3.6.1.4.1.789.1.1.11.0|2|1 +1.3.6.1.4.1.789.1.1.12.0|4|Trap variable currrently unused. +1.3.6.1.4.1.789.1.1.13.0|4| +1.3.6.1.4.1.789.1.2.1.1.0|67|1403140598 +1.3.6.1.4.1.789.1.2.1.2.0|67|1014385684 +1.3.6.1.4.1.789.1.2.1.3.0|2|2 +1.3.6.1.4.1.789.1.2.1.4.0|67|388754933 +1.3.6.1.4.1.789.1.2.1.5.0|2|99 +1.3.6.1.4.1.789.1.2.1.6.0|2|6 +1.3.6.1.4.1.789.1.2.1.7.0|65|93010879 +1.3.6.1.4.1.789.1.2.1.8.0|65|55622093 +1.3.6.1.4.1.789.1.2.1.9.0|65|3104312523 +1.3.6.1.4.1.789.1.2.1.10.0|65|898238502 +1.3.6.1.4.1.789.1.2.1.11.0|2|0 +1.3.6.1.4.1.789.1.2.1.12.0|2|0 +1.3.6.1.4.1.789.1.2.1.13.0|65|487465628 +1.3.6.1.4.1.789.1.2.1.14.1.1.105.101.102.105.108.101.114.48.51.45.48.49|4|iefiler03-01 +1.3.6.1.4.1.789.1.2.1.14.1.1.105.101.102.105.108.101.114.48.51.45.48.50|4|iefiler03-02 +1.3.6.1.4.1.789.1.2.1.14.1.2.105.101.102.105.108.101.114.48.51.45.48.49|70|5698107992 +1.3.6.1.4.1.789.1.2.1.14.1.2.105.101.102.105.108.101.114.48.51.45.48.50|70|5698124708 +1.3.6.1.4.1.789.1.2.1.14.1.3.105.101.102.105.108.101.114.48.51.45.48.49|70|1014385688 +1.3.6.1.4.1.789.1.2.1.14.1.3.105.101.102.105.108.101.114.48.51.45.48.50|70|969565517 +1.3.6.1.4.1.789.1.2.1.14.1.4.105.101.102.105.108.101.114.48.51.45.48.49|2|2 +1.3.6.1.4.1.789.1.2.1.14.1.4.105.101.102.105.108.101.114.48.51.45.48.50|2|5 +1.3.6.1.4.1.789.1.2.1.14.1.5.105.101.102.105.108.101.114.48.51.45.48.49|70|4683722343 +1.3.6.1.4.1.789.1.2.1.14.1.5.105.101.102.105.108.101.114.48.51.45.48.50|70|4728559230 +1.3.6.1.4.1.789.1.2.1.14.1.6.105.101.102.105.108.101.114.48.51.45.48.49|2|98 +1.3.6.1.4.1.789.1.2.1.14.1.6.105.101.102.105.108.101.114.48.51.45.48.50|2|95 +1.3.6.1.4.1.789.1.2.1.14.1.7.105.101.102.105.108.101.114.48.51.45.48.49|2|6 +1.3.6.1.4.1.789.1.2.1.14.1.7.105.101.102.105.108.101.114.48.51.45.48.50|2|6 +1.3.6.1.4.1.789.1.2.1.14.1.8.105.101.102.105.108.101.114.48.51.45.48.49|70|93032618 +1.3.6.1.4.1.789.1.2.1.14.1.8.105.101.102.105.108.101.114.48.51.45.48.50|70|2112931330 +1.3.6.1.4.1.789.1.2.1.14.1.9.105.101.102.105.108.101.114.48.51.45.48.49|70|55644487 +1.3.6.1.4.1.789.1.2.1.14.1.9.105.101.102.105.108.101.114.48.51.45.48.50|70|1021079057 +1.3.6.1.4.1.789.1.2.1.14.1.10.105.101.102.105.108.101.114.48.51.45.48.49|70|3104313087 +1.3.6.1.4.1.789.1.2.1.14.1.10.105.101.102.105.108.101.114.48.51.45.48.50|70|3640609337 +1.3.6.1.4.1.789.1.2.1.14.1.11.105.101.102.105.108.101.114.48.51.45.48.49|70|898257319 +1.3.6.1.4.1.789.1.2.1.14.1.11.105.101.102.105.108.101.114.48.51.45.48.50|70|3708864711 +1.3.6.1.4.1.789.1.2.1.14.1.12.105.101.102.105.108.101.114.48.51.45.48.49|2|0 +1.3.6.1.4.1.789.1.2.1.14.1.12.105.101.102.105.108.101.114.48.51.45.48.50|2|0 +1.3.6.1.4.1.789.1.2.1.14.1.13.105.101.102.105.108.101.114.48.51.45.48.49|2|1 +1.3.6.1.4.1.789.1.2.1.14.1.13.105.101.102.105.108.101.114.48.51.45.48.50|2|1 +1.3.6.1.4.1.789.1.2.1.14.1.14.105.101.102.105.108.101.114.48.51.45.48.49|70|13372368618 +1.3.6.1.4.1.789.1.2.1.14.1.14.105.101.102.105.108.101.114.48.51.45.48.50|70|13957447734 +1.3.6.1.4.1.789.1.2.2.23.0|2|60 +1.3.6.1.4.1.789.1.2.3.8.0|2|4 +1.3.6.1.4.1.789.1.2.6.1.0|67|159088104 +1.3.6.1.4.1.789.1.2.6.2.0|65|8502459 +1.3.6.1.4.1.789.1.2.6.3.0|65|2174485 +1.3.6.1.4.1.789.1.2.6.4.0|65|0 +1.3.6.1.4.1.789.1.2.6.5.0|65|205975 +1.3.6.1.4.1.789.1.2.6.6.0|65|13773 +1.3.6.1.4.1.789.1.2.6.7.0|65|10581 +1.3.6.1.4.1.789.1.2.6.8.0|65|16294034 +1.3.6.1.4.1.789.1.2.6.9.0|65|0 +1.3.6.1.4.1.789.1.2.6.10.0|65|5350031 +1.3.6.1.4.1.789.1.2.6.12.0|65|0 +1.3.6.1.4.1.789.1.2.6.13.0|65|0 +1.3.6.1.4.1.789.1.2.6.14.0|65|0 +1.3.6.1.4.1.789.1.2.6.15.0|65|0 +1.3.6.1.4.1.789.1.2.6.16.1.2.105.101.102.105.108.101.114.48.51.45.48.49|70|159088112 +1.3.6.1.4.1.789.1.2.6.16.1.2.105.101.102.105.108.101.114.48.51.45.48.50|70|116996856 +1.3.6.1.4.1.789.1.2.6.16.1.3.105.101.102.105.108.101.114.48.51.45.48.49|70|8502460 +1.3.6.1.4.1.789.1.2.6.16.1.3.105.101.102.105.108.101.114.48.51.45.48.50|70|6840201 +1.3.6.1.4.1.789.1.2.6.16.1.4.105.101.102.105.108.101.114.48.51.45.48.49|70|2174485 +1.3.6.1.4.1.789.1.2.6.16.1.4.105.101.102.105.108.101.114.48.51.45.48.50|70|769275 +1.3.6.1.4.1.789.1.2.6.16.1.5.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.5.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.6.105.101.102.105.108.101.114.48.51.45.48.49|70|205975 +1.3.6.1.4.1.789.1.2.6.16.1.6.105.101.102.105.108.101.114.48.51.45.48.50|70|847063 +1.3.6.1.4.1.789.1.2.6.16.1.7.105.101.102.105.108.101.114.48.51.45.48.49|70|13773 +1.3.6.1.4.1.789.1.2.6.16.1.7.105.101.102.105.108.101.114.48.51.45.48.50|70|4487 +1.3.6.1.4.1.789.1.2.6.16.1.8.105.101.102.105.108.101.114.48.51.45.48.49|70|10581 +1.3.6.1.4.1.789.1.2.6.16.1.8.105.101.102.105.108.101.114.48.51.45.48.50|70|57843 +1.3.6.1.4.1.789.1.2.6.16.1.9.105.101.102.105.108.101.114.48.51.45.48.49|70|16294035 +1.3.6.1.4.1.789.1.2.6.16.1.9.105.101.102.105.108.101.114.48.51.45.48.50|70|12008505 +1.3.6.1.4.1.789.1.2.6.16.1.10.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.10.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.11.105.101.102.105.108.101.114.48.51.45.48.49|70|5350031 +1.3.6.1.4.1.789.1.2.6.16.1.11.105.101.102.105.108.101.114.48.51.45.48.50|70|3458213 +1.3.6.1.4.1.789.1.2.6.16.1.12.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.12.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.13.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.13.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.14.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.14.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.15.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.15.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.7.1.0|2|1 +1.3.6.1.4.1.789.1.2.7.2.0|4|The last AutoSupport message was sent successfully. +1.3.6.1.4.1.789.1.2.7.3.0|65|1242 +1.3.6.1.4.1.789.1.2.7.4.0|65|2 +1.3.6.1.4.1.789.1.4.4.1.1.1036|2|1036 +1.3.6.1.4.1.789.1.4.4.1.1.1038|2|1038 +1.3.6.1.4.1.789.1.4.4.1.1.1040|2|1040 +1.3.6.1.4.1.789.1.4.4.1.1.1042|2|1042 +1.3.6.1.4.1.789.1.4.4.1.1.1044|2|1044 +1.3.6.1.4.1.789.1.4.4.1.1.1046|2|1046 +1.3.6.1.4.1.789.1.4.4.1.1.1048|2|1048 +1.3.6.1.4.1.789.1.4.4.1.1.1050|2|1050 +1.3.6.1.4.1.789.1.4.4.1.1.1052|2|1052 +1.3.6.1.4.1.789.1.4.4.1.1.1054|2|1054 +1.3.6.1.4.1.789.1.4.4.1.1.1056|2|1056 +1.3.6.1.4.1.789.1.4.4.1.1.1058|2|1058 +1.3.6.1.4.1.789.1.4.4.1.1.1060|2|1060 +1.3.6.1.4.1.789.1.4.4.1.1.1062|2|1062 +1.3.6.1.4.1.789.1.4.4.1.1.1064|2|1064 +1.3.6.1.4.1.789.1.4.4.1.1.1066|2|1066 +1.3.6.1.4.1.789.1.4.4.1.1.1068|2|1068 +1.3.6.1.4.1.789.1.4.4.1.1.1070|2|1070 +1.3.6.1.4.1.789.1.4.4.1.1.1072|2|1072 +1.3.6.1.4.1.789.1.4.4.1.1.1074|2|1074 +1.3.6.1.4.1.789.1.4.4.1.1.1076|2|1076 +1.3.6.1.4.1.789.1.4.4.1.1.1078|2|1078 +1.3.6.1.4.1.789.1.4.4.1.1.1080|2|1080 +1.3.6.1.4.1.789.1.4.4.1.1.1082|2|1082 +1.3.6.1.4.1.789.1.4.4.1.1.1084|2|1084 +1.3.6.1.4.1.789.1.4.4.1.1.1086|2|1086 +1.3.6.1.4.1.789.1.4.4.1.1.1088|2|1088 +1.3.6.1.4.1.789.1.4.4.1.1.1092|2|1092 +1.3.6.1.4.1.789.1.4.4.1.1.1094|2|1094 +1.3.6.1.4.1.789.1.4.4.1.1.1096|2|1096 +1.3.6.1.4.1.789.1.4.4.1.1.1098|2|1098 +1.3.6.1.4.1.789.1.4.4.1.1.1100|2|1100 +1.3.6.1.4.1.789.1.4.4.1.1.1102|2|1102 +1.3.6.1.4.1.789.1.4.4.1.1.1104|2|1104 +1.3.6.1.4.1.789.1.4.4.1.1.1108|2|1108 +1.3.6.1.4.1.789.1.4.4.1.1.1114|2|1114 +1.3.6.1.4.1.789.1.4.4.1.1.1116|2|1116 +1.3.6.1.4.1.789.1.4.4.1.1.1118|2|1118 +1.3.6.1.4.1.789.1.4.4.1.2.1036|4|vol1 +1.3.6.1.4.1.789.1.4.4.1.2.1038|4|vol2 +1.3.6.1.4.1.789.1.4.4.1.2.1040|4|vol3 +1.3.6.1.4.1.789.1.4.4.1.2.1042|4|vol4 +1.3.6.1.4.1.789.1.4.4.1.2.1044|4|vol5 +1.3.6.1.4.1.789.1.4.4.1.2.1046|4|vol6 +1.3.6.1.4.1.789.1.4.4.1.2.1048|4|vol7 +1.3.6.1.4.1.789.1.4.4.1.2.1050|4|vol8 +1.3.6.1.4.1.789.1.4.4.1.2.1052|4|vol9 +1.3.6.1.4.1.789.1.4.4.1.2.1054|4|vol10 +1.3.6.1.4.1.789.1.4.4.1.2.1056|4|vol11 +1.3.6.1.4.1.789.1.4.4.1.2.1058|4|vol12 +1.3.6.1.4.1.789.1.4.4.1.2.1060|4|vol13 +1.3.6.1.4.1.789.1.4.4.1.2.1062|4|vol14 +1.3.6.1.4.1.789.1.4.4.1.2.1064|4|vol15 +1.3.6.1.4.1.789.1.4.4.1.2.1066|4|vol16 +1.3.6.1.4.1.789.1.4.4.1.2.1068|4|vol17 +1.3.6.1.4.1.789.1.4.4.1.2.1070|4|vol18 +1.3.6.1.4.1.789.1.4.4.1.2.1072|4|vol19 +1.3.6.1.4.1.789.1.4.4.1.2.1074|4|vol20 +1.3.6.1.4.1.789.1.4.4.1.2.1076|4|vol21 +1.3.6.1.4.1.789.1.4.4.1.2.1078|4|vol22 +1.3.6.1.4.1.789.1.4.4.1.2.1080|4|vol23 +1.3.6.1.4.1.789.1.4.4.1.2.1082|4|vol24 +1.3.6.1.4.1.789.1.4.4.1.2.1084|4|vol25 +1.3.6.1.4.1.789.1.4.4.1.2.1086|4|vol26 +1.3.6.1.4.1.789.1.4.4.1.2.1088|4|vol27 +1.3.6.1.4.1.789.1.4.4.1.2.1092|4|vol28 +1.3.6.1.4.1.789.1.4.4.1.2.1094|4|vol29 +1.3.6.1.4.1.789.1.4.4.1.2.1096|4|vol30 +1.3.6.1.4.1.789.1.4.4.1.2.1098|4|vol31 +1.3.6.1.4.1.789.1.4.4.1.2.1100|4|vol32 +1.3.6.1.4.1.789.1.4.4.1.2.1102|4|vol33 +1.3.6.1.4.1.789.1.4.4.1.2.1104|4|vol34 +1.3.6.1.4.1.789.1.4.4.1.2.1108|4|vol35 +1.3.6.1.4.1.789.1.4.4.1.2.1114|4|vol36 +1.3.6.1.4.1.789.1.4.4.1.2.1116|4|vol37 +1.3.6.1.4.1.789.1.4.4.1.2.1118|4|vol38 +1.3.6.1.4.1.789.1.4.4.1.3.1036|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1038|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1040|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1042|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1044|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1046|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1048|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1050|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1052|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1054|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1056|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1058|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1060|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1062|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1064|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1066|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1068|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1070|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1072|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1074|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1076|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1078|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1080|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1082|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1084|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1086|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1088|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1092|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1094|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1096|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1098|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1100|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1102|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1104|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1108|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1114|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1116|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1118|2|1 +1.3.6.1.4.1.789.1.4.4.1.4.1036|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1038|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1040|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1042|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1044|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1046|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1048|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1050|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1052|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1054|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1056|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1058|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1060|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1062|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1064|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1066|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1068|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1070|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1072|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1074|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1076|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1078|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1080|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1082|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1084|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1086|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1088|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1092|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1094|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1096|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1098|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1100|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1102|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1104|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1108|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1114|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1116|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1118|2|0 +1.3.6.1.4.1.789.1.4.4.1.5.1036|4|vserver1 +1.3.6.1.4.1.789.1.4.4.1.5.1038|4|vserver2 +1.3.6.1.4.1.789.1.4.4.1.5.1040|4|vserver3 +1.3.6.1.4.1.789.1.4.4.1.5.1042|4|vserver4 +1.3.6.1.4.1.789.1.4.4.1.5.1044|4|vserver5 +1.3.6.1.4.1.789.1.4.4.1.5.1046|4|vserver6 +1.3.6.1.4.1.789.1.4.4.1.5.1048|4|vserver7 +1.3.6.1.4.1.789.1.4.4.1.5.1050|4|vserver8 +1.3.6.1.4.1.789.1.4.4.1.5.1052|4|vserver9 +1.3.6.1.4.1.789.1.4.4.1.5.1054|4|vserver10 +1.3.6.1.4.1.789.1.4.4.1.5.1056|4|vserver11 +1.3.6.1.4.1.789.1.4.4.1.5.1058|4|vserver12 +1.3.6.1.4.1.789.1.4.4.1.5.1060|4|vserver13 +1.3.6.1.4.1.789.1.4.4.1.5.1062|4|vserver14 +1.3.6.1.4.1.789.1.4.4.1.5.1064|4|vserver15 +1.3.6.1.4.1.789.1.4.4.1.5.1066|4|vserver16 +1.3.6.1.4.1.789.1.4.4.1.5.1068|4|vserver17 +1.3.6.1.4.1.789.1.4.4.1.5.1070|4|vserver18 +1.3.6.1.4.1.789.1.4.4.1.5.1072|4|vserver19 +1.3.6.1.4.1.789.1.4.4.1.5.1074|4|vserver20 +1.3.6.1.4.1.789.1.4.4.1.5.1076|4|vserver21 +1.3.6.1.4.1.789.1.4.4.1.5.1078|4|vserver22 +1.3.6.1.4.1.789.1.4.4.1.5.1080|4|vserver23 +1.3.6.1.4.1.789.1.4.4.1.5.1082|4|vserver24 +1.3.6.1.4.1.789.1.4.4.1.5.1084|4|vserver25 +1.3.6.1.4.1.789.1.4.4.1.5.1086|4|vserver26 +1.3.6.1.4.1.789.1.4.4.1.5.1088|4|vserver27 +1.3.6.1.4.1.789.1.4.4.1.5.1092|4|vserver28 +1.3.6.1.4.1.789.1.4.4.1.5.1094|4|vserver29 +1.3.6.1.4.1.789.1.4.4.1.5.1096|4|vserver30 +1.3.6.1.4.1.789.1.4.4.1.5.1098|4|vserver31 +1.3.6.1.4.1.789.1.4.4.1.5.1100|4|vserver32 +1.3.6.1.4.1.789.1.4.4.1.5.1102|4|vserver33 +1.3.6.1.4.1.789.1.4.4.1.5.1104|4|vserver34 +1.3.6.1.4.1.789.1.4.4.1.5.1108|4|vserver35 +1.3.6.1.4.1.789.1.4.4.1.5.1114|4|vserver36 +1.3.6.1.4.1.789.1.4.4.1.5.1116|4|vserver37 +1.3.6.1.4.1.789.1.4.4.1.5.1118|4|vserver38 +1.3.6.1.4.1.789.1.5.4.1.1.1022|2|1022 +1.3.6.1.4.1.789.1.5.4.1.1.1023|2|1023 +1.3.6.1.4.1.789.1.5.4.1.1.1024|2|1024 +1.3.6.1.4.1.789.1.5.4.1.1.1025|2|1025 +1.3.6.1.4.1.789.1.5.4.1.1.1026|2|1026 +1.3.6.1.4.1.789.1.5.4.1.1.1027|2|1027 +1.3.6.1.4.1.789.1.5.4.1.1.1028|2|1028 +1.3.6.1.4.1.789.1.5.4.1.1.1029|2|1029 +1.3.6.1.4.1.789.1.5.4.1.1.1032|2|1032 +1.3.6.1.4.1.789.1.5.4.1.1.1033|2|1033 +1.3.6.1.4.1.789.1.5.4.1.2.1022|4|/vol/dir1 +1.3.6.1.4.1.789.1.5.4.1.2.1023|4|/vol/dir2 +1.3.6.1.4.1.789.1.5.4.1.2.1024|4|/vol/dir3 +1.3.6.1.4.1.789.1.5.4.1.2.1025|4|/vol/dir4 +1.3.6.1.4.1.789.1.5.4.1.2.1026|4|/vol/dir5 +1.3.6.1.4.1.789.1.5.4.1.2.1027|4|/vol/dir6 +1.3.6.1.4.1.789.1.5.4.1.2.1028|4|/vol/dir7 +1.3.6.1.4.1.789.1.5.4.1.2.1029|4|/vol/dir8 +1.3.6.1.4.1.789.1.5.4.1.2.1032|4|/vol/dir9 +1.3.6.1.4.1.789.1.5.4.1.2.1033|4|/vol/dir10 +1.3.6.1.4.1.789.1.5.4.1.3.1022|2|386319076 +1.3.6.1.4.1.789.1.5.4.1.3.1023|2|20332580 +1.3.6.1.4.1.789.1.5.4.1.3.1024|2|347278676 +1.3.6.1.4.1.789.1.5.4.1.3.1025|2|18277824 +1.3.6.1.4.1.789.1.5.4.1.3.1026|2|386319076 +1.3.6.1.4.1.789.1.5.4.1.3.1027|2|20332580 +1.3.6.1.4.1.789.1.5.4.1.3.1028|2|347278676 +1.3.6.1.4.1.789.1.5.4.1.3.1029|2|18277824 +1.3.6.1.4.1.789.1.5.4.1.3.1032|2|-1183973408 +1.3.6.1.4.1.789.1.5.4.1.3.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.4.1022|2|367601688 +1.3.6.1.4.1.789.1.5.4.1.4.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.4.1024|2|32601124 +1.3.6.1.4.1.789.1.5.4.1.4.1025|2|5088704 +1.3.6.1.4.1.789.1.5.4.1.4.1026|2|367601684 +1.3.6.1.4.1.789.1.5.4.1.4.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.4.1028|2|28785076 +1.3.6.1.4.1.789.1.5.4.1.4.1029|2|4367672 +1.3.6.1.4.1.789.1.5.4.1.4.1032|2|-1624663680 +1.3.6.1.4.1.789.1.5.4.1.4.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.5.1022|2|18717388 +1.3.6.1.4.1.789.1.5.4.1.5.1023|2|20332580 +1.3.6.1.4.1.789.1.5.4.1.5.1024|2|314677464 +1.3.6.1.4.1.789.1.5.4.1.5.1025|2|13189112 +1.3.6.1.4.1.789.1.5.4.1.5.1026|2|18717392 +1.3.6.1.4.1.789.1.5.4.1.5.1027|2|20332580 +1.3.6.1.4.1.789.1.5.4.1.5.1028|2|318493432 +1.3.6.1.4.1.789.1.5.4.1.5.1029|2|13910152 +1.3.6.1.4.1.789.1.5.4.1.5.1032|2|440690328 +1.3.6.1.4.1.789.1.5.4.1.5.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.6.1022|2|95 +1.3.6.1.4.1.789.1.5.4.1.6.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.6.1024|2|13 +1.3.6.1.4.1.789.1.5.4.1.6.1025|2|28 +1.3.6.1.4.1.789.1.5.4.1.6.1026|2|95 +1.3.6.1.4.1.789.1.5.4.1.6.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.6.1028|2|12 +1.3.6.1.4.1.789.1.5.4.1.6.1029|2|24 +1.3.6.1.4.1.789.1.5.4.1.6.1032|2|13 +1.3.6.1.4.1.789.1.5.4.1.6.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1022|2|96 +1.3.6.1.4.1.789.1.5.4.1.7.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1024|2|59971 +1.3.6.1.4.1.789.1.5.4.1.7.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1026|2|96 +1.3.6.1.4.1.789.1.5.4.1.7.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1028|2|59931 +1.3.6.1.4.1.789.1.5.4.1.7.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1032|2|96 +1.3.6.1.4.1.789.1.5.4.1.7.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1022|2|31040 +1.3.6.1.4.1.789.1.5.4.1.8.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1024|2|10792484 +1.3.6.1.4.1.789.1.5.4.1.8.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1026|2|31040 +1.3.6.1.4.1.789.1.5.4.1.8.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1028|2|10792523 +1.3.6.1.4.1.789.1.5.4.1.8.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1032|2|31040 +1.3.6.1.4.1.789.1.5.4.1.8.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1022|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1024|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1026|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1028|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1032|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.10.1022|4|/dir1 +1.3.6.1.4.1.789.1.5.4.1.10.1023|4|/dir2 +1.3.6.1.4.1.789.1.5.4.1.10.1024|4|/dir3 +1.3.6.1.4.1.789.1.5.4.1.10.1025|4| +1.3.6.1.4.1.789.1.5.4.1.10.1026|4|/dir4 +1.3.6.1.4.1.789.1.5.4.1.10.1027|4|/dir5 +1.3.6.1.4.1.789.1.5.4.1.10.1028|4| +1.3.6.1.4.1.789.1.5.4.1.10.1029|4|/dir6 +1.3.6.1.4.1.789.1.5.4.1.10.1032|4|/dir7 +1.3.6.1.4.1.789.1.5.4.1.10.1033|4|/dir8 +1.3.6.1.4.1.789.1.5.4.1.11.1022|2|31136 +1.3.6.1.4.1.789.1.5.4.1.11.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.11.1024|2|10852455 +1.3.6.1.4.1.789.1.5.4.1.11.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.11.1026|2|31136 +1.3.6.1.4.1.789.1.5.4.1.11.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.11.1028|2|10852455 +1.3.6.1.4.1.789.1.5.4.1.11.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.11.1032|2|31136 +1.3.6.1.4.1.789.1.5.4.1.11.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1022|2|96 +1.3.6.1.4.1.789.1.5.4.1.12.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1024|2|59971 +1.3.6.1.4.1.789.1.5.4.1.12.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1026|2|96 +1.3.6.1.4.1.789.1.5.4.1.12.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1028|2|59934 +1.3.6.1.4.1.789.1.5.4.1.12.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1032|2|96 +1.3.6.1.4.1.789.1.5.4.1.12.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1022|2|107310838 +1.3.6.1.4.1.789.1.5.4.1.13.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1024|2|86819661 +1.3.6.1.4.1.789.1.5.4.1.13.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1026|2|107310838 +1.3.6.1.4.1.789.1.5.4.1.13.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1028|2|86819661 +1.3.6.1.4.1.789.1.5.4.1.13.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1032|2|2040109451 +1.3.6.1.4.1.789.1.5.4.1.13.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1022|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1024|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1026|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1028|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1032|2|4 +1.3.6.1.4.1.789.1.5.4.1.14.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.18.1022|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1023|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1024|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1025|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1026|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1027|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1028|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1029|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1032|2|1048572 +1.3.6.1.4.1.789.1.5.4.1.18.1033|2|1048576 +1.3.6.1.4.1.789.1.8.3.6.36.0|2|154 +1.3.6.1.4.1.789.1.9.20.1.1.6|2|6 +1.3.6.1.4.1.789.1.9.20.1.1.9|2|9 +1.3.6.1.4.1.789.1.9.20.1.1.29|2|29 +1.3.6.1.4.1.789.1.9.20.1.2.6|4x|666f7277617264207a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.789.1.9.20.1.2.9|4|driving +1.3.6.1.4.1.789.1.9.20.1.2.29|4x|627574207a6f6d6269657320627574 +1.3.6.1.4.1.789.1.9.20.1.3.6|4x|64726976696e6720627574207468656972 +1.3.6.1.4.1.789.1.9.20.1.3.9|4x|6f78656e207468656972207468656972204a61646564207a6f6d62696573206f78656e +1.3.6.1.4.1.789.1.9.20.1.3.29|4|but +1.3.6.1.4.1.789.1.9.20.1.4.6|2|5 +1.3.6.1.4.1.789.1.9.20.1.4.9|2|2 +1.3.6.1.4.1.789.1.9.20.1.4.29|2|3 +1.3.6.1.4.1.789.1.9.20.1.5.6|2|1 +1.3.6.1.4.1.789.1.9.20.1.5.9|2|5 +1.3.6.1.4.1.789.1.9.20.1.5.29|2|1 +1.3.6.1.4.1.789.1.9.20.1.6.6|67|2148500168 +1.3.6.1.4.1.789.1.9.20.1.6.9|67|33376617 +1.3.6.1.4.1.789.1.9.20.1.6.29|67|1327130653 +1.3.6.1.4.1.789.1.9.20.1.7.6|65|233195524 +1.3.6.1.4.1.789.1.9.20.1.7.9|65|3434682106 +1.3.6.1.4.1.789.1.9.20.1.7.29|65|937699975 +1.3.6.1.4.1.789.1.9.20.1.8.6|65|1094865962 +1.3.6.1.4.1.789.1.9.20.1.8.9|65|3958931918 +1.3.6.1.4.1.789.1.9.20.1.8.29|65|2504427016 +1.3.6.1.4.1.789.1.9.20.1.9.6|65|1938298517 +1.3.6.1.4.1.789.1.9.20.1.9.9|65|1808088975 +1.3.6.1.4.1.789.1.9.20.1.9.29|65|902364095 +1.3.6.1.4.1.789.1.9.20.1.10.6|65|197651960 +1.3.6.1.4.1.789.1.9.20.1.10.9|65|3818953017 +1.3.6.1.4.1.789.1.9.20.1.10.29|65|3933690275 +1.3.6.1.4.1.789.1.9.20.1.11.6|65|3180232593 +1.3.6.1.4.1.789.1.9.20.1.11.9|65|3636823181 +1.3.6.1.4.1.789.1.9.20.1.11.29|65|1239606740 +1.3.6.1.4.1.789.1.9.20.1.12.6|65|3093739540 +1.3.6.1.4.1.789.1.9.20.1.12.9|65|2043249196 +1.3.6.1.4.1.789.1.9.20.1.12.29|65|3301153675 +1.3.6.1.4.1.789.1.9.20.1.13.6|2|27 +1.3.6.1.4.1.789.1.9.20.1.13.9|2|21 +1.3.6.1.4.1.789.1.9.20.1.13.29|2|2 +1.3.6.1.4.1.789.1.9.20.1.14.6|4x|64726976696e67204a61646564206163746564204a61646564207468656972 +1.3.6.1.4.1.789.1.9.20.1.14.9|4|quaintly +1.3.6.1.4.1.789.1.9.20.1.14.29|4x|4a616465642064726976696e67207a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.789.1.9.20.1.15.6|4x|6f78656e20746865697220717561696e746c7920627574206b65707420666f7277617264 +1.3.6.1.4.1.789.1.9.20.1.15.9|4x|7a6f6d62696573204a61646564 +1.3.6.1.4.1.789.1.9.20.1.15.29|4x|6163746564206f78656e206163746564 +1.3.6.1.4.1.789.1.9.20.1.16.6|4x|62757420666f7277617264 +1.3.6.1.4.1.789.1.9.20.1.16.9|4x|64726976696e67207468656972207468656972 +1.3.6.1.4.1.789.1.9.20.1.16.29|4x|6f78656e20717561696e746c7920627574 +1.3.6.1.4.1.789.1.9.20.1.17.6|65|1097711823 +1.3.6.1.4.1.789.1.9.20.1.17.9|65|3430555101 +1.3.6.1.4.1.789.1.9.20.1.17.29|65|940834027 +1.3.6.1.4.1.789.1.9.20.1.18.6|65|351320996 +1.3.6.1.4.1.789.1.9.20.1.18.9|65|3966637341 +1.3.6.1.4.1.789.1.9.20.1.18.29|65|2322123930 +1.3.6.1.4.1.789.1.9.20.1.19.6|4x|6f78656e207468656972204a6164656420616374656420627574204a61646564 +1.3.6.1.4.1.789.1.9.20.1.19.9|4x|6b657074206f78656e +1.3.6.1.4.1.789.1.9.20.1.19.29|4x|666f727761726420717561696e746c79204a6164656420746865697220746865697220717561696e746c7920717561696e746c79 +1.3.6.1.4.1.789.1.9.20.1.20.6|4x|717561696e746c792064726976696e67206163746564206f78656e206163746564204a61646564207a6f6d62696573206163746564206b657074 +1.3.6.1.4.1.789.1.9.20.1.20.9|4x|7468656972206f78656e207468656972206b6570742064726976696e67 +1.3.6.1.4.1.789.1.9.20.1.20.29|4x|64726976696e67207a6f6d626965732074686569722062757420666f7277617264 +1.3.6.1.4.1.789.1.9.20.1.21.6|4x|6163746564207468656972 +1.3.6.1.4.1.789.1.9.20.1.21.9|4x|7468656972207a6f6d6269657320627574206f78656e204a61646564207a6f6d6269657320666f7277617264204a61646564 +1.3.6.1.4.1.789.1.9.20.1.21.29|4x|4a616465642064726976696e67207a6f6d62696573207a6f6d62696573204a6164656420666f7277617264 +1.3.6.1.4.1.789.1.9.20.1.22.6|65|1836206239 +1.3.6.1.4.1.789.1.9.20.1.22.9|65|3330980271 +1.3.6.1.4.1.789.1.9.20.1.22.29|65|2038416243 +1.3.6.1.4.1.789.1.19.11.1.1.5|2|5 +1.3.6.1.4.1.789.1.19.11.1.1.6|2|6 +1.3.6.1.4.1.789.1.19.11.1.1.18|2|18 +1.3.6.1.4.1.789.1.19.11.1.2.5|4x|717561696e746c792062757420666f7277617264207a6f6d62696573206f78656e206163746564 +1.3.6.1.4.1.789.1.19.11.1.2.6|4|driving +1.3.6.1.4.1.789.1.19.11.1.2.18|4x|6163746564204a6164656420627574206163746564207a6f6d6269657320666f7277617264204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.789.1.19.11.1.3.5|4|/vol/dir1 +1.3.6.1.4.1.789.1.19.11.1.3.6|4|/vol/dir3 +1.3.6.1.4.1.789.1.19.11.1.3.18|4|/vol/dir9 +1.3.6.1.4.1.789.1.19.11.1.4.5|2|2 +1.3.6.1.4.1.789.1.19.11.1.4.6|2|3 +1.3.6.1.4.1.789.1.19.11.1.4.18|2|2 +1.3.6.1.4.1.789.1.19.11.1.5.5|2|5 +1.3.6.1.4.1.789.1.19.11.1.5.6|2|2 +1.3.6.1.4.1.789.1.19.11.1.5.18|2|4 +1.3.6.1.4.1.789.1.19.11.1.6.5|67|2858127266 +1.3.6.1.4.1.789.1.19.11.1.6.6|67|2252180442 +1.3.6.1.4.1.789.1.19.11.1.6.18|67|1889602529 +1.3.6.1.4.1.789.1.19.11.1.7.5|65|2140650761 +1.3.6.1.4.1.789.1.19.11.1.7.6|65|2775153215 +1.3.6.1.4.1.789.1.19.11.1.7.18|65|2765758867 +1.3.6.1.4.1.789.1.19.11.1.8.5|65|3314928275 +1.3.6.1.4.1.789.1.19.11.1.8.6|65|2593737561 +1.3.6.1.4.1.789.1.19.11.1.8.18|65|1966401782 +1.3.6.1.4.1.789.1.19.11.1.9.5|65|1485004649 +1.3.6.1.4.1.789.1.19.11.1.9.6|65|1162900248 +1.3.6.1.4.1.789.1.19.11.1.9.18|65|3841004544 +1.3.6.1.4.1.789.1.19.11.1.10.5|65|4265174678 +1.3.6.1.4.1.789.1.19.11.1.10.6|65|398446661 +1.3.6.1.4.1.789.1.19.11.1.10.18|65|3276252538 +1.3.6.1.4.1.789.1.19.11.1.11.5|65|2921590899 +1.3.6.1.4.1.789.1.19.11.1.11.6|65|2934781544 +1.3.6.1.4.1.789.1.19.11.1.11.18|65|241301562 +1.3.6.1.4.1.789.1.19.11.1.12.5|65|2238761078 +1.3.6.1.4.1.789.1.19.11.1.12.6|65|3323601747 +1.3.6.1.4.1.789.1.19.11.1.12.18|65|2090674196 +1.3.6.1.4.1.789.1.19.11.1.13.5|2|29 +1.3.6.1.4.1.789.1.19.11.1.13.6|2|29 +1.3.6.1.4.1.789.1.19.11.1.13.18|2|2 +1.3.6.1.4.1.789.1.19.11.1.14.5|2|16 +1.3.6.1.4.1.789.1.19.11.1.14.6|2|18 +1.3.6.1.4.1.789.1.19.11.1.14.18|2|24 +1.3.6.1.4.1.789.1.19.11.1.15.5|4x|6f78656e207468656972206b657074204a6164656420627574 +1.3.6.1.4.1.789.1.19.11.1.15.6|4x|6275742064726976696e67206275742062757420627574206f78656e206163746564204a6164656420666f7277617264 +1.3.6.1.4.1.789.1.19.11.1.15.18|4|acted +1.3.6.1.4.1.789.1.19.11.1.16.5|4x|4a61646564206275742062757420666f727761726420627574 +1.3.6.1.4.1.789.1.19.11.1.16.6|4x|666f7277617264207a6f6d6269657320616374656420717561696e746c792064726976696e6720717561696e746c79206b657074 +1.3.6.1.4.1.789.1.19.11.1.16.18|4x|6f78656e20717561696e746c79207a6f6d62696573204a61646564206b657074207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.789.1.19.11.1.17.5|2|20 +1.3.6.1.4.1.789.1.19.11.1.17.6|2|7 +1.3.6.1.4.1.789.1.19.11.1.17.18|2|18 +1.3.6.1.4.1.789.1.19.11.1.18.5|2|12 +1.3.6.1.4.1.789.1.19.11.1.18.6|2|0 +1.3.6.1.4.1.789.1.19.11.1.18.18|2|24 +1.3.6.1.4.1.789.1.22.1.2.1.1.6|2|6 +1.3.6.1.4.1.789.1.22.1.2.1.1.7|2|7 +1.3.6.1.4.1.789.1.22.1.2.1.1.23|2|23 +1.3.6.1.4.1.789.1.22.1.2.1.2.6|4|netgear ifX300 v1 +1.3.6.1.4.1.789.1.22.1.2.1.2.7|4|junyper proto12 12.3 +1.3.6.1.4.1.789.1.22.1.2.1.2.23|4|malabar yz42 10.2020 +1.3.6.1.4.1.789.1.22.1.2.1.3.6|65|4023387039 +1.3.6.1.4.1.789.1.22.1.2.1.3.7|65|2924545773 +1.3.6.1.4.1.789.1.22.1.2.1.3.23|65|42748770 +1.3.6.1.4.1.789.1.22.1.2.1.4.6|65|2027435892 +1.3.6.1.4.1.789.1.22.1.2.1.4.7|65|2130571275 +1.3.6.1.4.1.789.1.22.1.2.1.4.23|65|3471790003 +1.3.6.1.4.1.789.1.22.1.2.1.5.6|65|2590514276 +1.3.6.1.4.1.789.1.22.1.2.1.5.7|65|1858882606 +1.3.6.1.4.1.789.1.22.1.2.1.5.23|65|4237386340 +1.3.6.1.4.1.789.1.22.1.2.1.6.6|65|3451729845 +1.3.6.1.4.1.789.1.22.1.2.1.6.7|65|2057183875 +1.3.6.1.4.1.789.1.22.1.2.1.6.23|65|3178876314 +1.3.6.1.4.1.789.1.22.1.2.1.7.6|65|1743887402 +1.3.6.1.4.1.789.1.22.1.2.1.7.7|65|3604020808 +1.3.6.1.4.1.789.1.22.1.2.1.7.23|65|1171772028 +1.3.6.1.4.1.789.1.22.1.2.1.8.6|65|1299615212 +1.3.6.1.4.1.789.1.22.1.2.1.8.7|65|2967566972 +1.3.6.1.4.1.789.1.22.1.2.1.8.23|65|892674277 +1.3.6.1.4.1.789.1.22.1.2.1.9.6|65|2731453710 +1.3.6.1.4.1.789.1.22.1.2.1.9.7|65|359492341 +1.3.6.1.4.1.789.1.22.1.2.1.9.23|65|1346518799 +1.3.6.1.4.1.789.1.22.1.2.1.10.6|65|377846011 +1.3.6.1.4.1.789.1.22.1.2.1.10.7|65|3248795595 +1.3.6.1.4.1.789.1.22.1.2.1.10.23|65|4079228536 +1.3.6.1.4.1.789.1.22.1.2.1.11.6|65|1164507255 +1.3.6.1.4.1.789.1.22.1.2.1.11.7|65|3380817615 +1.3.6.1.4.1.789.1.22.1.2.1.11.23|65|4279166533 +1.3.6.1.4.1.789.1.22.1.2.1.12.6|65|941334646 +1.3.6.1.4.1.789.1.22.1.2.1.12.7|65|2976253990 +1.3.6.1.4.1.789.1.22.1.2.1.12.23|65|1891892810 +1.3.6.1.4.1.789.1.22.1.2.1.13.6|65|818749376 +1.3.6.1.4.1.789.1.22.1.2.1.13.7|65|503301418 +1.3.6.1.4.1.789.1.22.1.2.1.13.23|65|2823687843 +1.3.6.1.4.1.789.1.22.1.2.1.14.6|65|152198430 +1.3.6.1.4.1.789.1.22.1.2.1.14.7|65|2718551226 +1.3.6.1.4.1.789.1.22.1.2.1.14.23|65|3299378579 +1.3.6.1.4.1.789.1.22.1.2.1.15.6|65|1177485339 +1.3.6.1.4.1.789.1.22.1.2.1.15.7|65|2922571527 +1.3.6.1.4.1.789.1.22.1.2.1.15.23|65|2100046585 +1.3.6.1.4.1.789.1.22.1.2.1.16.6|65|3266952106 +1.3.6.1.4.1.789.1.22.1.2.1.16.7|65|2189576905 +1.3.6.1.4.1.789.1.22.1.2.1.16.23|65|1034177319 +1.3.6.1.4.1.789.1.22.1.2.1.17.6|65|3093752857 +1.3.6.1.4.1.789.1.22.1.2.1.17.7|65|458296967 +1.3.6.1.4.1.789.1.22.1.2.1.17.23|65|3389342656 +1.3.6.1.4.1.789.1.22.1.2.1.18.6|65|739742743 +1.3.6.1.4.1.789.1.22.1.2.1.18.7|65|4200543391 +1.3.6.1.4.1.789.1.22.1.2.1.18.23|65|3411406602 +1.3.6.1.4.1.789.1.22.1.2.1.19.6|65|360676744 +1.3.6.1.4.1.789.1.22.1.2.1.19.7|65|3658872739 +1.3.6.1.4.1.789.1.22.1.2.1.19.23|65|54377685 +1.3.6.1.4.1.789.1.22.1.2.1.20.6|65|3644592433 +1.3.6.1.4.1.789.1.22.1.2.1.20.7|65|1391241708 +1.3.6.1.4.1.789.1.22.1.2.1.20.23|65|3529999812 +1.3.6.1.4.1.789.1.22.1.2.1.21.6|65|3653574409 +1.3.6.1.4.1.789.1.22.1.2.1.21.7|65|3268436993 +1.3.6.1.4.1.789.1.22.1.2.1.21.23|65|1387022878 +1.3.6.1.4.1.789.1.22.1.2.1.22.6|65|3533491998 +1.3.6.1.4.1.789.1.22.1.2.1.22.7|65|73119879 +1.3.6.1.4.1.789.1.22.1.2.1.22.23|65|2717921276 +1.3.6.1.4.1.789.1.22.1.2.1.23.6|65|1177645447 +1.3.6.1.4.1.789.1.22.1.2.1.23.7|65|2991246072 +1.3.6.1.4.1.789.1.22.1.2.1.23.23|65|2069363319 +1.3.6.1.4.1.789.1.22.1.2.1.24.6|65|1936905453 +1.3.6.1.4.1.789.1.22.1.2.1.24.7|65|97158952 +1.3.6.1.4.1.789.1.22.1.2.1.24.23|65|4146332775 +1.3.6.1.4.1.789.1.22.1.2.1.25.6|70|6630960446522266569 +1.3.6.1.4.1.789.1.22.1.2.1.25.7|70|1394129750971589677 +1.3.6.1.4.1.789.1.22.1.2.1.25.23|70|4789803936209880467 +1.3.6.1.4.1.789.1.22.1.2.1.26.6|70|13226236270429990957 +1.3.6.1.4.1.789.1.22.1.2.1.26.7|70|8545501372360309798 +1.3.6.1.4.1.789.1.22.1.2.1.26.23|70|7836676582086537424 +1.3.6.1.4.1.789.1.22.1.2.1.27.6|70|17511108149895206912 +1.3.6.1.4.1.789.1.22.1.2.1.27.7|70|10683333357754696498 +1.3.6.1.4.1.789.1.22.1.2.1.27.23|70|12155690821542598356 +1.3.6.1.4.1.789.1.22.1.2.1.28.6|70|3629438078831663450 +1.3.6.1.4.1.789.1.22.1.2.1.28.7|70|13381337974009196480 +1.3.6.1.4.1.789.1.22.1.2.1.28.23|70|8506716347061908357 +1.3.6.1.4.1.789.1.22.1.2.1.29.6|70|1355115279229469243 +1.3.6.1.4.1.789.1.22.1.2.1.29.7|70|1289878761605610146 +1.3.6.1.4.1.789.1.22.1.2.1.29.23|70|8981517187502032224 +1.3.6.1.4.1.789.1.22.1.2.1.30.6|70|13019202706001305434 +1.3.6.1.4.1.789.1.22.1.2.1.30.7|70|12675834093042246636 +1.3.6.1.4.1.789.1.22.1.2.1.30.23|70|4729822938835614081 +1.3.6.1.4.1.789.1.22.1.2.1.31.6|70|8699335681328777303 +1.3.6.1.4.1.789.1.22.1.2.1.31.7|70|422713175730114923 +1.3.6.1.4.1.789.1.22.1.2.1.31.23|70|4711699423531515905 +1.3.6.1.4.1.789.1.22.1.2.1.32.6|70|13527122655220392462 +1.3.6.1.4.1.789.1.22.1.2.1.32.7|70|8676245860628856359 +1.3.6.1.4.1.789.1.22.1.2.1.32.23|70|13210951846639192082 +1.3.6.1.4.1.789.1.22.1.2.1.33.6|70|4596248993055945907 +1.3.6.1.4.1.789.1.22.1.2.1.33.7|70|3504432763097441473 +1.3.6.1.4.1.789.1.22.1.2.1.33.23|70|926332403044254414 +1.3.6.1.4.1.789.1.22.1.2.1.34.6|70|4391895979905654502 +1.3.6.1.4.1.789.1.22.1.2.1.34.7|70|12955473091591107964 +1.3.6.1.4.1.789.1.22.1.2.1.34.23|70|599362475845011369 +1.3.6.1.4.1.789.1.22.1.2.1.35.6|70|15496255435321981616 +1.3.6.1.4.1.789.1.22.1.2.1.35.7|70|1722656829636789191 +1.3.6.1.4.1.789.1.22.1.2.1.35.23|70|1764720109889350137 +1.3.6.1.4.1.789.1.26.8.0|70|453656 diff --git a/test/new-e2e/ndm/snmp/compose/data/palo-alto.snmprec b/test/new-e2e/ndm/snmp/compose/data/palo-alto.snmprec new file mode 100644 index 0000000000000..08ea4b4b070ab --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/palo-alto.snmprec @@ -0,0 +1,78 @@ +1.3.6.1.2.1.1.1.0|4|Palo Alto Networks PA-3000 series firewall +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.25461.2.3.18 +1.3.6.1.2.1.47.1.1.1.1.1.1|2|1 +1.3.6.1.2.1.47.1.1.1.1.2.1|4|PA-3020 +1.3.6.1.2.1.47.1.1.1.1.3.1|6|1.3.6.1.4.1.25461.2.3.18 +1.3.6.1.2.1.47.1.1.1.1.4.1|2|0 +1.3.6.1.2.1.47.1.1.1.1.5.1|2|3 +1.3.6.1.2.1.47.1.1.1.1.6.1|2|-1 +1.3.6.1.2.1.47.1.1.1.1.7.1|4|PA-3020 +1.3.6.1.2.1.47.1.1.1.1.8.1|4|1.1 +1.3.6.1.2.1.47.1.1.1.1.9.1|4| +1.3.6.1.2.1.47.1.1.1.1.10.1|4|9.0.5 +1.3.6.1.2.1.47.1.1.1.1.11.1|4| +1.3.6.1.2.1.47.1.1.1.1.12.1|4|Palo Alto Networks +1.3.6.1.2.1.47.1.1.1.1.13.1|4|PA-3020 +1.3.6.1.2.1.47.1.1.1.1.14.1|4| +1.3.6.1.2.1.47.1.1.1.1.15.1|4| +1.3.6.1.2.1.47.1.1.1.1.16.1|2|2 +1.3.6.1.2.1.47.1.1.1.1.17.1|4|0000000000000000 +1.3.6.1.2.1.47.1.1.1.1.18.1|4| +1.3.6.1.4.1.25461.1.1.7.1.1.1.0|2|23 +1.3.6.1.4.1.25461.1.1.7.1.1.2.0|2|29 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.8|2|19 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.11|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.13|2|5 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.15|2|18 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.17|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.20|2|10 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.21|2|0 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.24|2|0 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.25|2|10 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.8|2|22 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.11|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.13|2|7 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.15|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.17|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.20|2|27 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.21|2|9 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.24|2|16 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.25|2|26 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.2|2|0 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.4|2|13 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.14|2|21 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.18|2|23 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.20|2|3 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.21|2|13 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.22|2|16 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.29|2|6 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.31|2|5 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.3|2|30 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.11|2|23 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.13|2|15 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.15|2|2 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.16|2|8 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.19|2|24 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.27|2|10 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.29|2|11 +1.3.6.1.4.1.25461.2.1.2.1.1.0|4|9.0.5 +1.3.6.1.4.1.25461.2.1.2.1.3.0|4|015351000009999 +1.3.6.1.4.1.25461.2.1.2.1.11.0|4|active +1.3.6.1.4.1.25461.2.1.2.1.12.0|4|passive +1.3.6.1.4.1.25461.2.1.2.1.13.0|4|active-passive +1.3.6.1.4.1.25461.2.1.2.2.1.0|4|PA-3020 +1.3.6.1.4.1.25461.2.1.2.3.1.0|2|16 +1.3.6.1.4.1.25461.2.1.2.3.2.0|2|1 +1.3.6.1.4.1.25461.2.1.2.3.3.0|2|13 +1.3.6.1.4.1.25461.2.1.2.3.4.0|2|4 +1.3.6.1.4.1.25461.2.1.2.3.5.0|2|18 +1.3.6.1.4.1.25461.2.1.2.3.6.0|2|8 +1.3.6.1.4.1.25461.2.1.2.3.7.0|2|12 +1.3.6.1.4.1.25461.2.1.2.3.8.0|2|21 +1.3.6.1.4.1.25461.2.1.2.5.1.1.0|2|6 +1.3.6.1.4.1.25461.2.1.2.5.1.2.0|2|28 +1.3.6.1.4.1.25461.2.1.2.5.1.3.0|2|5 +1.3.6.1.6.3.10.2.1.1.0|4x|7a6f6d62696573206b657074206163746564 +1.3.6.1.6.3.10.2.1.2.0|2|9 +1.3.6.1.6.3.10.2.1.3.0|2|17 +1.3.6.1.6.3.10.2.1.4.0|2|2147483647 diff --git a/test/new-e2e/ndm/snmp/compose/data/public.snmprec b/test/new-e2e/ndm/snmp/compose/data/public.snmprec new file mode 100644 index 0000000000000..484771fe27cd0 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/public.snmprec @@ -0,0 +1,3988 @@ +1.3.6.1.2.1.1.1.0|4x|4c696e75782034316261393438393131623920342e392e38372d6c696e75786b69742d6175667320233120534d5020576564204d61722031342031353a31323a3136205554432032303138207838365f3634 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.8072.3.2.10 +1.3.6.1.2.1.1.3.0|67|4226041 +1.3.6.1.2.1.1.4.0|4x|726f6f74406c6f63616c686f7374 +1.3.6.1.2.1.1.5.0|4|41ba948911b9 +1.3.6.1.2.1.1.6.0|4|Unknown +1.3.6.1.2.1.1.8.0|67|9 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.6.3.11.3.1.1 +1.3.6.1.2.1.1.9.1.2.2|6|1.3.6.1.6.3.15.2.1.1 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.6.3.10.3.1.1 +1.3.6.1.2.1.1.9.1.2.4|6|1.3.6.1.6.3.1 +1.3.6.1.2.1.1.9.1.2.5|6|1.3.6.1.2.1.49 +1.3.6.1.2.1.1.9.1.2.6|6|1.3.6.1.2.1.4 +1.3.6.1.2.1.1.9.1.2.7|6|1.3.6.1.2.1.50 +1.3.6.1.2.1.1.9.1.2.8|6|1.3.6.1.6.3.16.2.2.1 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.6.3.13.3.1.3 +1.3.6.1.2.1.1.9.1.2.10|6|1.3.6.1.2.1.92 +1.3.6.1.2.1.1.9.1.3.1|4x|546865204d494220666f72204d6573736167652050726f63657373696e6720616e64204469737061746368696e672e +1.3.6.1.2.1.1.9.1.3.2|4x|546865206d616e6167656d656e7420696e666f726d6174696f6e20646566696e6974696f6e7320666f722074686520534e4d5020557365722d6261736564205365637572697479204d6f64656c2e +1.3.6.1.2.1.1.9.1.3.3|4x|54686520534e4d50204d616e6167656d656e7420417263686974656374757265204d49422e +1.3.6.1.2.1.1.9.1.3.4|4x|546865204d4942206d6f64756c6520666f7220534e4d50763220656e746974696573 +1.3.6.1.2.1.1.9.1.3.5|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e672054435020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.6|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e6720495020616e642049434d5020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.7|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e672055445020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.8|4x|566965772d62617365642041636365737320436f6e74726f6c204d6f64656c20666f7220534e4d502e +1.3.6.1.2.1.1.9.1.3.9|4x|546865204d4942206d6f64756c657320666f72206d616e6167696e6720534e4d50204e6f74696669636174696f6e2c20706c75732066696c746572696e672e +1.3.6.1.2.1.1.9.1.3.10|4x|546865204d4942206d6f64756c6520666f72206c6f6767696e6720534e4d50204e6f74696669636174696f6e732e +1.3.6.1.2.1.1.9.1.4.1|67|9 +1.3.6.1.2.1.1.9.1.4.2|67|9 +1.3.6.1.2.1.1.9.1.4.3|67|9 +1.3.6.1.2.1.1.9.1.4.4|67|9 +1.3.6.1.2.1.1.9.1.4.5|67|9 +1.3.6.1.2.1.1.9.1.4.6|67|9 +1.3.6.1.2.1.1.9.1.4.7|67|9 +1.3.6.1.2.1.1.9.1.4.8|67|9 +1.3.6.1.2.1.1.9.1.4.9|67|9 +1.3.6.1.2.1.1.9.1.4.10|67|9 +1.3.6.1.2.1.2.1.0|2|4 +1.3.6.1.2.1.2.2.1.1.1|2|1 +1.3.6.1.2.1.2.2.1.1.2|2|2 +1.3.6.1.2.1.2.2.1.1.3|2|3 +1.3.6.1.2.1.2.2.1.1.90|2|90 +1.3.6.1.2.1.2.2.1.2.1|4|lo +1.3.6.1.2.1.2.2.1.2.2|4|tunl0 +1.3.6.1.2.1.2.2.1.2.3|4|ip6tnl0 +1.3.6.1.2.1.2.2.1.2.90|4|eth0 +1.3.6.1.2.1.2.2.1.3.1|2|24 +1.3.6.1.2.1.2.2.1.3.2|2|131 +1.3.6.1.2.1.2.2.1.3.3|2|131 +1.3.6.1.2.1.2.2.1.3.90|2|6 +1.3.6.1.2.1.2.2.1.4.1|2|65536 +1.3.6.1.2.1.2.2.1.4.2|2|1480 +1.3.6.1.2.1.2.2.1.4.3|2|1452 +1.3.6.1.2.1.2.2.1.4.90|2|1500 +1.3.6.1.2.1.2.2.1.5.1|66|10000000 +1.3.6.1.2.1.2.2.1.5.2|66|0 +1.3.6.1.2.1.2.2.1.5.3|66|0 +1.3.6.1.2.1.2.2.1.5.90|66|4294967295 +1.3.6.1.2.1.2.2.1.6.1|4| +1.3.6.1.2.1.2.2.1.6.2|4| +1.3.6.1.2.1.2.2.1.6.3|4| +1.3.6.1.2.1.2.2.1.6.90|4x|0242ac110002 +1.3.6.1.2.1.2.2.1.7.1|2|1 +1.3.6.1.2.1.2.2.1.7.2|2|2 +1.3.6.1.2.1.2.2.1.7.3|2|2 +1.3.6.1.2.1.2.2.1.7.90|2|1 +1.3.6.1.2.1.2.2.1.8.1|2|1 +1.3.6.1.2.1.2.2.1.8.2|2|2 +1.3.6.1.2.1.2.2.1.8.3|2|2 +1.3.6.1.2.1.2.2.1.8.90|2|1 +1.3.6.1.2.1.2.2.1.9.1|67|0 +1.3.6.1.2.1.2.2.1.9.2|67|0 +1.3.6.1.2.1.2.2.1.9.3|67|0 +1.3.6.1.2.1.2.2.1.9.90|67|0 +1.3.6.1.2.1.2.2.1.10.1|65|5300203 +1.3.6.1.2.1.2.2.1.10.2|65|0 +1.3.6.1.2.1.2.2.1.10.3|65|0 +1.3.6.1.2.1.2.2.1.10.90|65|2928 +1.3.6.1.2.1.2.2.1.11.1|65|63808 +1.3.6.1.2.1.2.2.1.11.2|65|0 +1.3.6.1.2.1.2.2.1.11.3|65|0 +1.3.6.1.2.1.2.2.1.11.90|65|40 +1.3.6.1.2.1.2.2.1.12.1|65|0 +1.3.6.1.2.1.2.2.1.12.2|65|0 +1.3.6.1.2.1.2.2.1.12.3|65|0 +1.3.6.1.2.1.2.2.1.12.90|65|0 +1.3.6.1.2.1.2.2.1.13.1|65|0 +1.3.6.1.2.1.2.2.1.13.2|65|0 +1.3.6.1.2.1.2.2.1.13.3|65|0 +1.3.6.1.2.1.2.2.1.13.90|65|0 +1.3.6.1.2.1.2.2.1.14.1|65|0 +1.3.6.1.2.1.2.2.1.14.2|65|0 +1.3.6.1.2.1.2.2.1.14.3|65|0 +1.3.6.1.2.1.2.2.1.14.90|65|0 +1.3.6.1.2.1.2.2.1.15.1|65|0 +1.3.6.1.2.1.2.2.1.15.2|65|0 +1.3.6.1.2.1.2.2.1.15.3|65|0 +1.3.6.1.2.1.2.2.1.15.90|65|0 +1.3.6.1.2.1.2.2.1.16.1|65|5300203 +1.3.6.1.2.1.2.2.1.16.2|65|0 +1.3.6.1.2.1.2.2.1.16.3|65|0 +1.3.6.1.2.1.2.2.1.16.90|65|0 +1.3.6.1.2.1.2.2.1.17.1|65|63808 +1.3.6.1.2.1.2.2.1.17.2|65|0 +1.3.6.1.2.1.2.2.1.17.3|65|0 +1.3.6.1.2.1.2.2.1.17.90|65|0 +1.3.6.1.2.1.2.2.1.18.1|65|0 +1.3.6.1.2.1.2.2.1.18.2|65|0 +1.3.6.1.2.1.2.2.1.18.3|65|0 +1.3.6.1.2.1.2.2.1.18.90|65|0 +1.3.6.1.2.1.2.2.1.19.1|65|0 +1.3.6.1.2.1.2.2.1.19.2|65|0 +1.3.6.1.2.1.2.2.1.19.3|65|0 +1.3.6.1.2.1.2.2.1.19.90|65|0 +1.3.6.1.2.1.2.2.1.20.1|65|0 +1.3.6.1.2.1.2.2.1.20.2|65|0 +1.3.6.1.2.1.2.2.1.20.3|65|0 +1.3.6.1.2.1.2.2.1.20.90|65|0 +1.3.6.1.2.1.2.2.1.21.1|66|0 +1.3.6.1.2.1.2.2.1.21.2|66|0 +1.3.6.1.2.1.2.2.1.21.3|66|0 +1.3.6.1.2.1.2.2.1.21.90|66|0 +1.3.6.1.2.1.2.2.1.22.1|6|0.0 +1.3.6.1.2.1.2.2.1.22.2|6|0.0 +1.3.6.1.2.1.2.2.1.22.3|6|0.0 +1.3.6.1.2.1.2.2.1.22.90|6|0.0 +1.3.6.1.2.1.4.1.0|2|1 +1.3.6.1.2.1.4.2.0|2|64 +1.3.6.1.2.1.4.3.0|65|64061 +1.3.6.1.2.1.4.4.0|65|0 +1.3.6.1.2.1.4.5.0|65|0 +1.3.6.1.2.1.4.6.0|65|0 +1.3.6.1.2.1.4.7.0|65|0 +1.3.6.1.2.1.4.8.0|65|0 +1.3.6.1.2.1.4.9.0|65|64061 +1.3.6.1.2.1.4.10.0|65|64061 +1.3.6.1.2.1.4.11.0|65|0 +1.3.6.1.2.1.4.12.0|65|0 +1.3.6.1.2.1.4.13.0|2|30 +1.3.6.1.2.1.4.14.0|65|0 +1.3.6.1.2.1.4.15.0|65|0 +1.3.6.1.2.1.4.16.0|65|0 +1.3.6.1.2.1.4.17.0|65|0 +1.3.6.1.2.1.4.18.0|65|0 +1.3.6.1.2.1.4.19.0|65|0 +1.3.6.1.2.1.4.20.1.1.127.0.0.1|64x|7f000001 +1.3.6.1.2.1.4.20.1.1.172.17.0.2|64x|ac110002 +1.3.6.1.2.1.4.20.1.2.127.0.0.1|2|1 +1.3.6.1.2.1.4.20.1.2.172.17.0.2|2|90 +1.3.6.1.2.1.4.20.1.3.127.0.0.1|64x|ff000000 +1.3.6.1.2.1.4.20.1.3.172.17.0.2|64x|ffff0000 +1.3.6.1.2.1.4.20.1.4.127.0.0.1|2|0 +1.3.6.1.2.1.4.20.1.4.172.17.0.2|2|1 +1.3.6.1.2.1.4.21.1.1.0.0.0.0|64x|00000000 +1.3.6.1.2.1.4.21.1.1.172.17.0.0|64x|ac110000 +1.3.6.1.2.1.4.21.1.2.0.0.0.0|2|90 +1.3.6.1.2.1.4.21.1.2.172.17.0.0|2|90 +1.3.6.1.2.1.4.21.1.3.0.0.0.0|2|1 +1.3.6.1.2.1.4.21.1.3.172.17.0.0|2|0 +1.3.6.1.2.1.4.21.1.7.0.0.0.0|64x|ac110001 +1.3.6.1.2.1.4.21.1.7.172.17.0.0|64x|00000000 +1.3.6.1.2.1.4.21.1.8.0.0.0.0|2|4 +1.3.6.1.2.1.4.21.1.8.172.17.0.0|2|3 +1.3.6.1.2.1.4.21.1.9.0.0.0.0|2|2 +1.3.6.1.2.1.4.21.1.9.172.17.0.0|2|2 +1.3.6.1.2.1.4.21.1.11.0.0.0.0|64x|00000000 +1.3.6.1.2.1.4.21.1.11.172.17.0.0|64x|ffff0000 +1.3.6.1.2.1.4.21.1.13.0.0.0.0|6|0.0 +1.3.6.1.2.1.4.21.1.13.172.17.0.0|6|0.0 +1.3.6.1.2.1.4.23.0|65|0 +1.3.6.1.2.1.4.24.4.1.1.0.0.0.0.0.0.0.0.0.172.17.0.1|64x|00000000 +1.3.6.1.2.1.4.24.4.1.1.172.17.0.0.255.255.0.0.0.0.0.0.0|64x|ac110000 +1.3.6.1.2.1.4.24.4.1.2.0.0.0.0.0.0.0.0.0.172.17.0.1|64x|00000000 +1.3.6.1.2.1.4.24.4.1.2.172.17.0.0.255.255.0.0.0.0.0.0.0|64x|ffff0000 +1.3.6.1.2.1.4.24.4.1.3.0.0.0.0.0.0.0.0.0.172.17.0.1|2|0 +1.3.6.1.2.1.4.24.4.1.3.172.17.0.0.255.255.0.0.0.0.0.0.0|2|0 +1.3.6.1.2.1.4.24.4.1.4.0.0.0.0.0.0.0.0.0.172.17.0.1|64x|ac110001 +1.3.6.1.2.1.4.24.4.1.4.172.17.0.0.255.255.0.0.0.0.0.0.0|64x|00000000 +1.3.6.1.2.1.4.24.4.1.5.0.0.0.0.0.0.0.0.0.172.17.0.1|2|90 +1.3.6.1.2.1.4.24.4.1.5.172.17.0.0.255.255.0.0.0.0.0.0.0|2|90 +1.3.6.1.2.1.4.24.4.1.6.0.0.0.0.0.0.0.0.0.172.17.0.1|2|4 +1.3.6.1.2.1.4.24.4.1.6.172.17.0.0.255.255.0.0.0.0.0.0.0|2|3 +1.3.6.1.2.1.4.24.4.1.7.0.0.0.0.0.0.0.0.0.172.17.0.1|2|2 +1.3.6.1.2.1.4.24.4.1.7.172.17.0.0.255.255.0.0.0.0.0.0.0|2|2 +1.3.6.1.2.1.4.24.4.1.9.0.0.0.0.0.0.0.0.0.172.17.0.1|6|0.0 +1.3.6.1.2.1.4.24.4.1.9.172.17.0.0.255.255.0.0.0.0.0.0.0|6|0.0 +1.3.6.1.2.1.4.24.4.1.10.0.0.0.0.0.0.0.0.0.172.17.0.1|2|0 +1.3.6.1.2.1.4.24.4.1.10.172.17.0.0.255.255.0.0.0.0.0.0.0|2|0 +1.3.6.1.2.1.4.24.4.1.11.0.0.0.0.0.0.0.0.0.172.17.0.1|2|0 +1.3.6.1.2.1.4.24.4.1.11.172.17.0.0.255.255.0.0.0.0.0.0.0|2|0 +1.3.6.1.2.1.4.24.4.1.12.0.0.0.0.0.0.0.0.0.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.4.1.12.172.17.0.0.255.255.0.0.0.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.4.1.13.0.0.0.0.0.0.0.0.0.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.4.1.13.172.17.0.0.255.255.0.0.0.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.4.1.14.0.0.0.0.0.0.0.0.0.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.4.1.14.172.17.0.0.255.255.0.0.0.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.4.1.15.0.0.0.0.0.0.0.0.0.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.4.1.15.172.17.0.0.255.255.0.0.0.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.4.1.16.0.0.0.0.0.0.0.0.0.172.17.0.1|2|1 +1.3.6.1.2.1.4.24.4.1.16.172.17.0.0.255.255.0.0.0.0.0.0.0|2|1 +1.3.6.1.2.1.4.24.6.0|66|2 +1.3.6.1.2.1.4.24.7.1.7.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|90 +1.3.6.1.2.1.4.24.7.1.7.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|90 +1.3.6.1.2.1.4.24.7.1.8.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|4 +1.3.6.1.2.1.4.24.7.1.8.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|3 +1.3.6.1.2.1.4.24.7.1.9.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|2 +1.3.6.1.2.1.4.24.7.1.9.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|2 +1.3.6.1.2.1.4.24.7.1.10.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|66|0 +1.3.6.1.2.1.4.24.7.1.10.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|66|0 +1.3.6.1.2.1.4.24.7.1.11.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|66|0 +1.3.6.1.2.1.4.24.7.1.11.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|66|0 +1.3.6.1.2.1.4.24.7.1.12.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|0 +1.3.6.1.2.1.4.24.7.1.12.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|0 +1.3.6.1.2.1.4.24.7.1.13.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.7.1.13.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.7.1.14.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.7.1.14.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.7.1.15.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.7.1.15.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.7.1.16.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.7.1.16.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.7.1.17.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|1 +1.3.6.1.2.1.4.24.7.1.17.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|1 +1.3.6.1.2.1.4.25.0|2|2 +1.3.6.1.2.1.4.26.0|2|64 +1.3.6.1.2.1.4.27.0|67|0 +1.3.6.1.2.1.4.28.1.2.1|2|65535 +1.3.6.1.2.1.4.28.1.2.90|2|65535 +1.3.6.1.2.1.4.28.1.3.1|2|1 +1.3.6.1.2.1.4.28.1.3.90|2|1 +1.3.6.1.2.1.4.28.1.4.1|66|1000 +1.3.6.1.2.1.4.28.1.4.90|66|1000 +1.3.6.1.2.1.4.29.0|67|0 +1.3.6.1.2.1.4.31.1.1.3.1|65|63808 +1.3.6.1.2.1.4.31.1.1.3.2|65|40 +1.3.6.1.2.1.4.31.1.1.4.1|70|63808 +1.3.6.1.2.1.4.31.1.1.4.2|70|40 +1.3.6.1.2.1.4.31.1.1.5.1|65|5300203 +1.3.6.1.2.1.4.31.1.1.5.2|65|2368 +1.3.6.1.2.1.4.31.1.1.6.1|70|5300203 +1.3.6.1.2.1.4.31.1.1.6.2|70|2368 +1.3.6.1.2.1.4.31.1.1.7.1|65|0 +1.3.6.1.2.1.4.31.1.1.7.2|65|0 +1.3.6.1.2.1.4.31.1.1.8.1|65|0 +1.3.6.1.2.1.4.31.1.1.8.2|65|0 +1.3.6.1.2.1.4.31.1.1.9.1|65|0 +1.3.6.1.2.1.4.31.1.1.9.2|65|0 +1.3.6.1.2.1.4.31.1.1.10.1|65|0 +1.3.6.1.2.1.4.31.1.1.10.2|65|0 +1.3.6.1.2.1.4.31.1.1.11.1|65|0 +1.3.6.1.2.1.4.31.1.1.11.2|65|0 +1.3.6.1.2.1.4.31.1.1.12.1|65|0 +1.3.6.1.2.1.4.31.1.1.12.2|65|0 +1.3.6.1.2.1.4.31.1.1.13.1|70|0 +1.3.6.1.2.1.4.31.1.1.13.2|70|0 +1.3.6.1.2.1.4.31.1.1.14.1|65|0 +1.3.6.1.2.1.4.31.1.1.14.2|65|0 +1.3.6.1.2.1.4.31.1.1.15.1|65|0 +1.3.6.1.2.1.4.31.1.1.15.2|65|0 +1.3.6.1.2.1.4.31.1.1.16.1|65|0 +1.3.6.1.2.1.4.31.1.1.16.2|65|0 +1.3.6.1.2.1.4.31.1.1.17.1|65|0 +1.3.6.1.2.1.4.31.1.1.17.2|65|40 +1.3.6.1.2.1.4.31.1.1.18.1|65|63808 +1.3.6.1.2.1.4.31.1.1.18.2|65|0 +1.3.6.1.2.1.4.31.1.1.19.1|70|63808 +1.3.6.1.2.1.4.31.1.1.19.2|70|0 +1.3.6.1.2.1.4.31.1.1.20.1|65|63808 +1.3.6.1.2.1.4.31.1.1.20.2|65|0 +1.3.6.1.2.1.4.31.1.1.21.1|70|63808 +1.3.6.1.2.1.4.31.1.1.21.2|70|0 +1.3.6.1.2.1.4.31.1.1.22.1|65|0 +1.3.6.1.2.1.4.31.1.1.22.2|65|0 +1.3.6.1.2.1.4.31.1.1.23.1|65|0 +1.3.6.1.2.1.4.31.1.1.23.2|65|0 +1.3.6.1.2.1.4.31.1.1.24.1|70|0 +1.3.6.1.2.1.4.31.1.1.24.2|70|0 +1.3.6.1.2.1.4.31.1.1.25.1|65|0 +1.3.6.1.2.1.4.31.1.1.25.2|65|0 +1.3.6.1.2.1.4.31.1.1.26.1|65|0 +1.3.6.1.2.1.4.31.1.1.26.2|65|0 +1.3.6.1.2.1.4.31.1.1.27.1|65|0 +1.3.6.1.2.1.4.31.1.1.27.2|65|0 +1.3.6.1.2.1.4.31.1.1.28.1|65|0 +1.3.6.1.2.1.4.31.1.1.28.2|65|0 +1.3.6.1.2.1.4.31.1.1.29.1|65|0 +1.3.6.1.2.1.4.31.1.1.29.2|65|0 +1.3.6.1.2.1.4.31.1.1.30.1|65|63808 +1.3.6.1.2.1.4.31.1.1.30.2|65|0 +1.3.6.1.2.1.4.31.1.1.31.1|70|63808 +1.3.6.1.2.1.4.31.1.1.31.2|70|0 +1.3.6.1.2.1.4.31.1.1.32.1|65|5300203 +1.3.6.1.2.1.4.31.1.1.32.2|65|0 +1.3.6.1.2.1.4.31.1.1.33.1|70|5300203 +1.3.6.1.2.1.4.31.1.1.33.2|70|0 +1.3.6.1.2.1.4.31.1.1.34.1|65|0 +1.3.6.1.2.1.4.31.1.1.34.2|65|0 +1.3.6.1.2.1.4.31.1.1.35.1|70|0 +1.3.6.1.2.1.4.31.1.1.35.2|70|0 +1.3.6.1.2.1.4.31.1.1.36.1|65|0 +1.3.6.1.2.1.4.31.1.1.36.2|65|0 +1.3.6.1.2.1.4.31.1.1.37.1|70|0 +1.3.6.1.2.1.4.31.1.1.37.2|70|0 +1.3.6.1.2.1.4.31.1.1.38.1|65|0 +1.3.6.1.2.1.4.31.1.1.38.2|65|0 +1.3.6.1.2.1.4.31.1.1.39.1|70|0 +1.3.6.1.2.1.4.31.1.1.39.2|70|0 +1.3.6.1.2.1.4.31.1.1.40.1|65|0 +1.3.6.1.2.1.4.31.1.1.40.2|65|0 +1.3.6.1.2.1.4.31.1.1.41.1|70|0 +1.3.6.1.2.1.4.31.1.1.41.2|70|0 +1.3.6.1.2.1.4.31.1.1.42.1|65|0 +1.3.6.1.2.1.4.31.1.1.43.1|70|0 +1.3.6.1.2.1.4.31.1.1.44.1|65|0 +1.3.6.1.2.1.4.31.1.1.45.1|70|0 +1.3.6.1.2.1.4.31.1.1.46.1|67|0 +1.3.6.1.2.1.4.31.1.1.46.2|67|0 +1.3.6.1.2.1.4.31.1.1.47.1|66|60000 +1.3.6.1.2.1.4.31.1.1.47.2|66|60000 +1.3.6.1.2.1.4.31.2.0|67|0 +1.3.6.1.2.1.4.31.3.1.3.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.3.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.3.2.90|65|40 +1.3.6.1.2.1.4.31.3.1.4.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.4.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.4.2.90|70|40 +1.3.6.1.2.1.4.31.3.1.5.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.5.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.5.2.90|65|2368 +1.3.6.1.2.1.4.31.3.1.6.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.6.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.6.2.90|70|2368 +1.3.6.1.2.1.4.31.3.1.7.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.7.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.7.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.8.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.8.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.8.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.9.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.9.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.9.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.10.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.10.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.10.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.11.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.11.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.11.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.12.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.12.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.12.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.13.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.13.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.13.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.14.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.14.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.14.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.15.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.15.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.15.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.16.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.16.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.16.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.17.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.17.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.17.2.90|65|40 +1.3.6.1.2.1.4.31.3.1.18.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.18.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.18.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.19.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.19.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.19.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.20.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.20.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.20.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.21.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.21.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.21.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.23.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.23.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.23.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.24.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.24.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.24.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.25.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.25.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.25.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.26.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.26.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.26.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.27.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.27.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.27.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.28.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.28.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.28.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.29.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.29.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.29.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.30.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.30.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.30.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.31.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.31.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.31.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.32.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.32.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.32.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.33.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.33.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.33.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.34.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.34.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.34.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.35.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.35.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.35.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.36.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.36.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.36.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.37.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.37.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.37.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.38.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.38.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.38.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.39.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.39.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.39.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.40.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.40.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.40.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.41.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.41.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.41.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.46.2.1|67|0 +1.3.6.1.2.1.4.31.3.1.46.2.3|67|0 +1.3.6.1.2.1.4.31.3.1.46.2.90|67|0 +1.3.6.1.2.1.4.31.3.1.47.2.1|66|60000 +1.3.6.1.2.1.4.31.3.1.47.2.3|66|60000 +1.3.6.1.2.1.4.31.3.1.47.2.90|66|60000 +1.3.6.1.2.1.4.32.1.5.1.1.4.127.0.0.0.8|2|2 +1.3.6.1.2.1.4.32.1.5.90.1.4.172.17.0.0.16|2|2 +1.3.6.1.2.1.4.32.1.6.1.1.4.127.0.0.0.8|2|1 +1.3.6.1.2.1.4.32.1.6.90.1.4.172.17.0.0.16|2|1 +1.3.6.1.2.1.4.32.1.7.1.1.4.127.0.0.0.8|2|2 +1.3.6.1.2.1.4.32.1.7.90.1.4.172.17.0.0.16|2|2 +1.3.6.1.2.1.4.32.1.8.1.1.4.127.0.0.0.8|66|4294967295 +1.3.6.1.2.1.4.32.1.8.90.1.4.172.17.0.0.16|66|4294967295 +1.3.6.1.2.1.4.32.1.9.1.1.4.127.0.0.0.8|66|4294967295 +1.3.6.1.2.1.4.32.1.9.90.1.4.172.17.0.0.16|66|4294967295 +1.3.6.1.2.1.4.33.0|2|1640220749 +1.3.6.1.2.1.4.34.1.3.1.4.127.0.0.1|2|1 +1.3.6.1.2.1.4.34.1.3.1.4.172.17.0.2|2|90 +1.3.6.1.2.1.4.34.1.3.1.4.172.17.255.255|2|90 +1.3.6.1.2.1.4.34.1.4.1.4.127.0.0.1|2|1 +1.3.6.1.2.1.4.34.1.4.1.4.172.17.0.2|2|1 +1.3.6.1.2.1.4.34.1.4.1.4.172.17.255.255|2|3 +1.3.6.1.2.1.4.34.1.5.1.4.127.0.0.1|6|1.3.6.1.2.1.4.32.1.5.1.1.4.127.0.0.0.8 +1.3.6.1.2.1.4.34.1.5.1.4.172.17.0.2|6|1.3.6.1.2.1.4.32.1.5.90.1.4.172.17.0.0.16 +1.3.6.1.2.1.4.34.1.5.1.4.172.17.255.255|6|1.3.6.1.2.1.4.32.1.5.90.1.4.172.17.0.0.16 +1.3.6.1.2.1.4.34.1.6.1.4.127.0.0.1|2|2 +1.3.6.1.2.1.4.34.1.6.1.4.172.17.0.2|2|2 +1.3.6.1.2.1.4.34.1.6.1.4.172.17.255.255|2|2 +1.3.6.1.2.1.4.34.1.7.1.4.127.0.0.1|2|1 +1.3.6.1.2.1.4.34.1.7.1.4.172.17.0.2|2|1 +1.3.6.1.2.1.4.34.1.7.1.4.172.17.255.255|2|1 +1.3.6.1.2.1.4.34.1.8.1.4.127.0.0.1|67|0 +1.3.6.1.2.1.4.34.1.8.1.4.172.17.0.2|67|0 +1.3.6.1.2.1.4.34.1.8.1.4.172.17.255.255|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.127.0.0.1|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.172.17.0.2|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.172.17.255.255|67|0 +1.3.6.1.2.1.4.34.1.10.1.4.127.0.0.1|2|1 +1.3.6.1.2.1.4.34.1.10.1.4.172.17.0.2|2|1 +1.3.6.1.2.1.4.34.1.10.1.4.172.17.255.255|2|1 +1.3.6.1.2.1.4.34.1.11.1.4.127.0.0.1|2|2 +1.3.6.1.2.1.4.34.1.11.1.4.172.17.0.2|2|2 +1.3.6.1.2.1.4.34.1.11.1.4.172.17.255.255|2|2 +1.3.6.1.2.1.4.37.1.4.1.4.172.17.0.1.90|66|4294967295 +1.3.6.1.2.1.4.37.1.5.1.4.172.17.0.1.90|2|0 +1.3.6.1.2.1.5.1.0|65|0 +1.3.6.1.2.1.5.2.0|65|0 +1.3.6.1.2.1.5.3.0|65|0 +1.3.6.1.2.1.5.4.0|65|0 +1.3.6.1.2.1.5.5.0|65|0 +1.3.6.1.2.1.5.6.0|65|0 +1.3.6.1.2.1.5.7.0|65|0 +1.3.6.1.2.1.5.8.0|65|0 +1.3.6.1.2.1.5.9.0|65|0 +1.3.6.1.2.1.5.10.0|65|0 +1.3.6.1.2.1.5.11.0|65|0 +1.3.6.1.2.1.5.12.0|65|0 +1.3.6.1.2.1.5.13.0|65|0 +1.3.6.1.2.1.5.14.0|65|0 +1.3.6.1.2.1.5.15.0|65|0 +1.3.6.1.2.1.5.16.0|65|0 +1.3.6.1.2.1.5.17.0|65|0 +1.3.6.1.2.1.5.18.0|65|0 +1.3.6.1.2.1.5.19.0|65|0 +1.3.6.1.2.1.5.20.0|65|0 +1.3.6.1.2.1.5.21.0|65|0 +1.3.6.1.2.1.5.22.0|65|0 +1.3.6.1.2.1.5.23.0|65|0 +1.3.6.1.2.1.5.24.0|65|0 +1.3.6.1.2.1.5.25.0|65|0 +1.3.6.1.2.1.5.26.0|65|0 +1.3.6.1.2.1.5.29.1.2.1|65|0 +1.3.6.1.2.1.5.29.1.2.2|65|0 +1.3.6.1.2.1.5.29.1.3.1|65|0 +1.3.6.1.2.1.5.29.1.3.2|65|0 +1.3.6.1.2.1.5.29.1.4.1|65|0 +1.3.6.1.2.1.5.29.1.4.2|65|0 +1.3.6.1.2.1.5.29.1.5.1|65|0 +1.3.6.1.2.1.5.29.1.5.2|65|0 +1.3.6.1.2.1.5.30.1.3.1.0|65|0 +1.3.6.1.2.1.5.30.1.3.1.1|65|0 +1.3.6.1.2.1.5.30.1.3.1.2|65|0 +1.3.6.1.2.1.5.30.1.3.1.3|65|0 +1.3.6.1.2.1.5.30.1.3.1.4|65|0 +1.3.6.1.2.1.5.30.1.3.1.5|65|0 +1.3.6.1.2.1.5.30.1.3.1.8|65|0 +1.3.6.1.2.1.5.30.1.3.1.11|65|0 +1.3.6.1.2.1.5.30.1.3.1.12|65|0 +1.3.6.1.2.1.5.30.1.3.1.13|65|0 +1.3.6.1.2.1.5.30.1.3.1.14|65|0 +1.3.6.1.2.1.5.30.1.3.1.17|65|0 +1.3.6.1.2.1.5.30.1.3.1.18|65|0 +1.3.6.1.2.1.5.30.1.3.1.128|65|0 +1.3.6.1.2.1.5.30.1.3.1.129|65|0 +1.3.6.1.2.1.5.30.1.3.1.130|65|0 +1.3.6.1.2.1.5.30.1.3.1.131|65|0 +1.3.6.1.2.1.5.30.1.3.1.132|65|0 +1.3.6.1.2.1.5.30.1.3.1.133|65|0 +1.3.6.1.2.1.5.30.1.3.1.134|65|0 +1.3.6.1.2.1.5.30.1.3.1.135|65|0 +1.3.6.1.2.1.5.30.1.3.1.136|65|0 +1.3.6.1.2.1.5.30.1.3.1.137|65|0 +1.3.6.1.2.1.5.30.1.3.2.0|65|0 +1.3.6.1.2.1.5.30.1.4.1.0|65|0 +1.3.6.1.2.1.5.30.1.4.1.1|65|0 +1.3.6.1.2.1.5.30.1.4.1.2|65|0 +1.3.6.1.2.1.5.30.1.4.1.3|65|0 +1.3.6.1.2.1.5.30.1.4.1.4|65|0 +1.3.6.1.2.1.5.30.1.4.1.5|65|0 +1.3.6.1.2.1.5.30.1.4.1.8|65|0 +1.3.6.1.2.1.5.30.1.4.1.11|65|0 +1.3.6.1.2.1.5.30.1.4.1.12|65|0 +1.3.6.1.2.1.5.30.1.4.1.13|65|0 +1.3.6.1.2.1.5.30.1.4.1.14|65|0 +1.3.6.1.2.1.5.30.1.4.1.17|65|0 +1.3.6.1.2.1.5.30.1.4.1.18|65|0 +1.3.6.1.2.1.5.30.1.4.1.129|65|0 +1.3.6.1.2.1.5.30.1.4.1.131|65|0 +1.3.6.1.2.1.5.30.1.4.1.132|65|0 +1.3.6.1.2.1.5.30.1.4.1.133|65|0 +1.3.6.1.2.1.5.30.1.4.1.135|65|0 +1.3.6.1.2.1.5.30.1.4.1.136|65|0 +1.3.6.1.2.1.5.30.1.4.1.137|65|0 +1.3.6.1.2.1.5.30.1.4.2.0|65|0 +1.3.6.1.2.1.6.1.0|2|1 +1.3.6.1.2.1.6.2.0|2|200 +1.3.6.1.2.1.6.3.0|2|120000 +1.3.6.1.2.1.6.4.0|2|-1 +1.3.6.1.2.1.6.5.0|65|0 +1.3.6.1.2.1.6.6.0|65|0 +1.3.6.1.2.1.6.7.0|65|0 +1.3.6.1.2.1.6.8.0|65|0 +1.3.6.1.2.1.6.9.0|66|0 +1.3.6.1.2.1.6.10.0|65|0 +1.3.6.1.2.1.6.11.0|65|0 +1.3.6.1.2.1.6.12.0|65|0 +1.3.6.1.2.1.6.13.1.1.127.0.0.1.199.0.0.0.0.0|2|2 +1.3.6.1.2.1.6.13.1.2.127.0.0.1.199.0.0.0.0.0|64x|7f000001 +1.3.6.1.2.1.6.13.1.3.127.0.0.1.199.0.0.0.0.0|2|199 +1.3.6.1.2.1.6.13.1.4.127.0.0.1.199.0.0.0.0.0|64x|00000000 +1.3.6.1.2.1.6.13.1.5.127.0.0.1.199.0.0.0.0.0|2|0 +1.3.6.1.2.1.6.14.0|65|0 +1.3.6.1.2.1.6.15.0|65|0 +1.3.6.1.2.1.6.20.1.4.1.4.127.0.0.1.199|66|6 +1.3.6.1.2.1.7.1.0|65|64967 +1.3.6.1.2.1.7.2.0|65|0 +1.3.6.1.2.1.7.3.0|65|0 +1.3.6.1.2.1.7.4.0|65|64967 +1.3.6.1.2.1.7.5.1.1.0.0.0.0.161|64x|00000000 +1.3.6.1.2.1.7.5.1.1.0.0.0.0.59208|64x|00000000 +1.3.6.1.2.1.7.5.1.2.0.0.0.0.161|2|161 +1.3.6.1.2.1.7.5.1.2.0.0.0.0.59208|2|59208 +1.3.6.1.2.1.7.7.1.8.1.4.0.0.0.0.161.1.4.0.0.0.0.0.136817|66|6 +1.3.6.1.2.1.7.7.1.8.1.4.0.0.0.0.59208.1.4.0.0.0.0.0.314197|66|64 +1.3.6.1.2.1.10.7.2.1.1.90|2|90 +1.3.6.1.2.1.10.7.2.1.3.90|65|0 +1.3.6.1.2.1.10.7.2.1.7.90|65|0 +1.3.6.1.2.1.10.7.2.1.10.90|65|0 +1.3.6.1.2.1.10.7.2.1.11.90|65|0 +1.3.6.1.2.1.10.7.2.1.13.90|65|0 +1.3.6.1.2.1.10.7.2.1.16.90|65|0 +1.3.6.1.2.1.10.7.2.1.19.90|2|3 +1.3.6.1.2.1.11.1.0|65|32502 +1.3.6.1.2.1.11.2.0|65|32502 +1.3.6.1.2.1.11.3.0|65|0 +1.3.6.1.2.1.11.4.0|65|0 +1.3.6.1.2.1.11.5.0|65|0 +1.3.6.1.2.1.11.6.0|65|0 +1.3.6.1.2.1.11.8.0|65|0 +1.3.6.1.2.1.11.9.0|65|0 +1.3.6.1.2.1.11.10.0|65|0 +1.3.6.1.2.1.11.11.0|65|0 +1.3.6.1.2.1.11.12.0|65|0 +1.3.6.1.2.1.11.13.0|65|32512 +1.3.6.1.2.1.11.14.0|65|0 +1.3.6.1.2.1.11.15.0|65|0 +1.3.6.1.2.1.11.16.0|65|32516 +1.3.6.1.2.1.11.17.0|65|0 +1.3.6.1.2.1.11.18.0|65|0 +1.3.6.1.2.1.11.19.0|65|0 +1.3.6.1.2.1.11.20.0|65|0 +1.3.6.1.2.1.11.21.0|65|0 +1.3.6.1.2.1.11.22.0|65|0 +1.3.6.1.2.1.11.24.0|65|0 +1.3.6.1.2.1.11.25.0|65|0 +1.3.6.1.2.1.11.26.0|65|0 +1.3.6.1.2.1.11.27.0|65|0 +1.3.6.1.2.1.11.28.0|65|32526 +1.3.6.1.2.1.11.29.0|65|0 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.11.31.0|65|0 +1.3.6.1.2.1.11.32.0|65|0 +1.3.6.1.2.1.16.1.1.1.1.90|2|90 +1.3.6.1.2.1.25.1.1.0|67|83761247 +1.3.6.1.2.1.25.1.2.0|4x|323031382d31302d312c393a35373a32352e302c2b303a30 +1.3.6.1.2.1.25.1.3.0|2|393216 +1.3.6.1.2.1.25.1.4.0|4x|22424f4f545f494d4147453d2f626f6f742f6b65726e656c20636f6e736f6c653d747479533020706167655f706f69736f6e3d31206e74703d67617465776179207673797363616c6c3d656d756c6174652070616e69633d3120726f6f743d2f6465762f7372302074657874 +1.3.6.1.2.1.25.1.5.0|66|0 +1.3.6.1.2.1.25.1.6.0|66|4 +1.3.6.1.2.1.25.1.7.0|2|0 +1.3.6.1.2.1.25.2.2.0|2|2046940 +1.3.6.1.2.1.25.2.3.1.1.1|2|1 +1.3.6.1.2.1.25.2.3.1.1.3|2|3 +1.3.6.1.2.1.25.2.3.1.1.6|2|6 +1.3.6.1.2.1.25.2.3.1.1.7|2|7 +1.3.6.1.2.1.25.2.3.1.1.8|2|8 +1.3.6.1.2.1.25.2.3.1.1.10|2|10 +1.3.6.1.2.1.25.2.3.1.1.33|2|33 +1.3.6.1.2.1.25.2.3.1.1.36|2|36 +1.3.6.1.2.1.25.2.3.1.1.52|2|52 +1.3.6.1.2.1.25.2.3.1.1.53|2|53 +1.3.6.1.2.1.25.2.3.1.1.54|2|54 +1.3.6.1.2.1.25.2.3.1.1.55|2|55 +1.3.6.1.2.1.25.2.3.1.1.61|2|61 +1.3.6.1.2.1.25.2.3.1.1.62|2|62 +1.3.6.1.2.1.25.2.3.1.1.63|2|63 +1.3.6.1.2.1.25.2.3.1.1.64|2|64 +1.3.6.1.2.1.25.2.3.1.1.65|2|65 +1.3.6.1.2.1.25.2.3.1.2.1|6|1.3.6.1.2.1.25.2.1.2 +1.3.6.1.2.1.25.2.3.1.2.3|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.6|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.7|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.8|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.10|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.33|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.36|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.52|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.53|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.54|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.55|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.61|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.62|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.63|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.64|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.65|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.3.1|4x|506879736963616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.3|4x|5669727475616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.6|4x|4d656d6f72792062756666657273 +1.3.6.1.2.1.25.2.3.1.3.7|4x|436163686564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.8|4x|536861726564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.10|4x|53776170207370616365 +1.3.6.1.2.1.25.2.3.1.3.33|4x|2f646576 +1.3.6.1.2.1.25.2.3.1.3.36|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.2.3.1.3.52|4x|2f6574632f7265736f6c762e636f6e66 +1.3.6.1.2.1.25.2.3.1.3.53|4x|2f6574632f686f73746e616d65 +1.3.6.1.2.1.25.2.3.1.3.54|4x|2f6574632f686f737473 +1.3.6.1.2.1.25.2.3.1.3.55|4x|2f6465762f73686d +1.3.6.1.2.1.25.2.3.1.3.61|4x|2f70726f632f6b636f7265 +1.3.6.1.2.1.25.2.3.1.3.62|4x|2f70726f632f6b657973 +1.3.6.1.2.1.25.2.3.1.3.63|4x|2f70726f632f74696d65725f6c697374 +1.3.6.1.2.1.25.2.3.1.3.64|4x|2f70726f632f73636865645f6465627567 +1.3.6.1.2.1.25.2.3.1.3.65|4x|2f7379732f6669726d77617265 +1.3.6.1.2.1.25.2.3.1.4.1|2|1024 +1.3.6.1.2.1.25.2.3.1.4.3|2|1024 +1.3.6.1.2.1.25.2.3.1.4.6|2|1024 +1.3.6.1.2.1.25.2.3.1.4.7|2|1024 +1.3.6.1.2.1.25.2.3.1.4.8|2|1024 +1.3.6.1.2.1.25.2.3.1.4.10|2|1024 +1.3.6.1.2.1.25.2.3.1.4.33|2|4096 +1.3.6.1.2.1.25.2.3.1.4.36|2|4096 +1.3.6.1.2.1.25.2.3.1.4.52|2|4096 +1.3.6.1.2.1.25.2.3.1.4.53|2|4096 +1.3.6.1.2.1.25.2.3.1.4.54|2|4096 +1.3.6.1.2.1.25.2.3.1.4.55|2|4096 +1.3.6.1.2.1.25.2.3.1.4.61|2|4096 +1.3.6.1.2.1.25.2.3.1.4.62|2|4096 +1.3.6.1.2.1.25.2.3.1.4.63|2|4096 +1.3.6.1.2.1.25.2.3.1.4.64|2|4096 +1.3.6.1.2.1.25.2.3.1.4.65|2|4096 +1.3.6.1.2.1.25.2.3.1.5.1|2|2046940 +1.3.6.1.2.1.25.2.3.1.5.3|2|3095512 +1.3.6.1.2.1.25.2.3.1.5.6|2|2046940 +1.3.6.1.2.1.25.2.3.1.5.7|2|1577648 +1.3.6.1.2.1.25.2.3.1.5.8|2|2940 +1.3.6.1.2.1.25.2.3.1.5.10|2|1048572 +1.3.6.1.2.1.25.2.3.1.5.33|2|16384 +1.3.6.1.2.1.25.2.3.1.5.36|2|255867 +1.3.6.1.2.1.25.2.3.1.5.52|2|16448139 +1.3.6.1.2.1.25.2.3.1.5.53|2|16448139 +1.3.6.1.2.1.25.2.3.1.5.54|2|16448139 +1.3.6.1.2.1.25.2.3.1.5.55|2|16384 +1.3.6.1.2.1.25.2.3.1.5.61|2|16384 +1.3.6.1.2.1.25.2.3.1.5.62|2|16384 +1.3.6.1.2.1.25.2.3.1.5.63|2|16384 +1.3.6.1.2.1.25.2.3.1.5.64|2|16384 +1.3.6.1.2.1.25.2.3.1.5.65|2|255867 +1.3.6.1.2.1.25.2.3.1.6.1|2|1969964 +1.3.6.1.2.1.25.2.3.1.6.3|2|1969964 +1.3.6.1.2.1.25.2.3.1.6.6|2|73580 +1.3.6.1.2.1.25.2.3.1.6.7|2|1577648 +1.3.6.1.2.1.25.2.3.1.6.8|2|2940 +1.3.6.1.2.1.25.2.3.1.6.10|2|0 +1.3.6.1.2.1.25.2.3.1.6.33|2|0 +1.3.6.1.2.1.25.2.3.1.6.36|2|0 +1.3.6.1.2.1.25.2.3.1.6.52|2|6493059 +1.3.6.1.2.1.25.2.3.1.6.53|2|6493059 +1.3.6.1.2.1.25.2.3.1.6.54|2|6493059 +1.3.6.1.2.1.25.2.3.1.6.55|2|0 +1.3.6.1.2.1.25.2.3.1.6.61|2|0 +1.3.6.1.2.1.25.2.3.1.6.62|2|0 +1.3.6.1.2.1.25.2.3.1.6.63|2|0 +1.3.6.1.2.1.25.2.3.1.6.64|2|0 +1.3.6.1.2.1.25.2.3.1.6.65|2|0 +1.3.6.1.2.1.25.3.2.1.1.196608|2|196608 +1.3.6.1.2.1.25.3.2.1.1.196609|2|196609 +1.3.6.1.2.1.25.3.2.1.1.262145|2|262145 +1.3.6.1.2.1.25.3.2.1.1.262146|2|262146 +1.3.6.1.2.1.25.3.2.1.1.262147|2|262147 +1.3.6.1.2.1.25.3.2.1.1.262234|2|262234 +1.3.6.1.2.1.25.3.2.1.1.786432|2|786432 +1.3.6.1.2.1.25.3.2.1.2.196608|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.196609|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.262145|6|1.3.6.1.2.1.25.3.1.4 +1.3.6.1.2.1.25.3.2.1.2.262146|6|1.3.6.1.2.1.25.3.1.4 +1.3.6.1.2.1.25.3.2.1.2.262147|6|1.3.6.1.2.1.25.3.1.4 +1.3.6.1.2.1.25.3.2.1.2.262234|6|1.3.6.1.2.1.25.3.1.4 +1.3.6.1.2.1.25.3.2.1.2.786432|6|1.3.6.1.2.1.25.3.1.12 +1.3.6.1.2.1.25.3.2.1.3.196608|4x|47656e75696e65496e74656c3a20496e74656c28522920436f726528544d292069372d343537385520435055204020332e303047487a +1.3.6.1.2.1.25.3.2.1.3.196609|4x|47656e75696e65496e74656c3a20496e74656c28522920436f726528544d292069372d343537385520435055204020332e303047487a +1.3.6.1.2.1.25.3.2.1.3.262145|4x|6e6574776f726b20696e74657266616365206c6f +1.3.6.1.2.1.25.3.2.1.3.262146|4x|6e6574776f726b20696e746572666163652074756e6c30 +1.3.6.1.2.1.25.3.2.1.3.262147|4x|6e6574776f726b20696e7465726661636520697036746e6c30 +1.3.6.1.2.1.25.3.2.1.3.262234|4x|6e6574776f726b20696e746572666163652065746830 +1.3.6.1.2.1.25.3.2.1.3.786432|4x|4775657373696e6720746861742074686572652773206120666c6f6174696e6720706f696e7420636f2d70726f636573736f72 +1.3.6.1.2.1.25.3.2.1.4.196608|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.196609|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.262145|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.262146|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.262147|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.262234|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.786432|6|0.0 +1.3.6.1.2.1.25.3.2.1.5.196608|2|2 +1.3.6.1.2.1.25.3.2.1.5.196609|2|2 +1.3.6.1.2.1.25.3.2.1.5.262145|2|2 +1.3.6.1.2.1.25.3.2.1.5.262146|2|5 +1.3.6.1.2.1.25.3.2.1.5.262147|2|5 +1.3.6.1.2.1.25.3.2.1.5.262234|2|2 +1.3.6.1.2.1.25.3.2.1.6.262145|65|0 +1.3.6.1.2.1.25.3.2.1.6.262146|65|0 +1.3.6.1.2.1.25.3.2.1.6.262147|65|0 +1.3.6.1.2.1.25.3.2.1.6.262234|65|0 +1.3.6.1.2.1.25.3.3.1.1.196608|6|0.0 +1.3.6.1.2.1.25.3.3.1.1.196609|6|0.0 +1.3.6.1.2.1.25.3.3.1.2.196608|2|1 +1.3.6.1.2.1.25.3.3.1.2.196609|2|1 +1.3.6.1.2.1.25.3.4.1.1.262145|2|1 +1.3.6.1.2.1.25.3.4.1.1.262146|2|2 +1.3.6.1.2.1.25.3.4.1.1.262147|2|3 +1.3.6.1.2.1.25.3.4.1.1.262234|2|90 +1.3.6.1.2.1.25.3.8.1.1.3|2|3 +1.3.6.1.2.1.25.3.8.1.1.6|2|6 +1.3.6.1.2.1.25.3.8.1.1.22|2|22 +1.3.6.1.2.1.25.3.8.1.1.23|2|23 +1.3.6.1.2.1.25.3.8.1.1.24|2|24 +1.3.6.1.2.1.25.3.8.1.1.25|2|25 +1.3.6.1.2.1.25.3.8.1.1.31|2|31 +1.3.6.1.2.1.25.3.8.1.1.32|2|32 +1.3.6.1.2.1.25.3.8.1.1.33|2|33 +1.3.6.1.2.1.25.3.8.1.1.34|2|34 +1.3.6.1.2.1.25.3.8.1.1.35|2|35 +1.3.6.1.2.1.25.3.8.1.2.3|4x|2f646576 +1.3.6.1.2.1.25.3.8.1.2.6|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.3.8.1.2.22|4x|2f6574632f7265736f6c762e636f6e66 +1.3.6.1.2.1.25.3.8.1.2.23|4x|2f6574632f686f73746e616d65 +1.3.6.1.2.1.25.3.8.1.2.24|4x|2f6574632f686f737473 +1.3.6.1.2.1.25.3.8.1.2.25|4x|2f6465762f73686d +1.3.6.1.2.1.25.3.8.1.2.31|4x|2f70726f632f6b636f7265 +1.3.6.1.2.1.25.3.8.1.2.32|4x|2f70726f632f6b657973 +1.3.6.1.2.1.25.3.8.1.2.33|4x|2f70726f632f74696d65725f6c697374 +1.3.6.1.2.1.25.3.8.1.2.34|4x|2f70726f632f73636865645f6465627567 +1.3.6.1.2.1.25.3.8.1.2.35|4x|2f7379732f6669726d77617265 +1.3.6.1.2.1.25.3.8.1.3.3|4| +1.3.6.1.2.1.25.3.8.1.3.6|4| +1.3.6.1.2.1.25.3.8.1.3.22|4| +1.3.6.1.2.1.25.3.8.1.3.23|4| +1.3.6.1.2.1.25.3.8.1.3.24|4| +1.3.6.1.2.1.25.3.8.1.3.25|4| +1.3.6.1.2.1.25.3.8.1.3.31|4| +1.3.6.1.2.1.25.3.8.1.3.32|4| +1.3.6.1.2.1.25.3.8.1.3.33|4| +1.3.6.1.2.1.25.3.8.1.3.34|4| +1.3.6.1.2.1.25.3.8.1.3.35|4| +1.3.6.1.2.1.25.3.8.1.4.3|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.6|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.22|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.23|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.24|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.25|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.31|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.32|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.33|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.34|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.35|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.5.3|2|1 +1.3.6.1.2.1.25.3.8.1.5.6|2|2 +1.3.6.1.2.1.25.3.8.1.5.22|2|1 +1.3.6.1.2.1.25.3.8.1.5.23|2|1 +1.3.6.1.2.1.25.3.8.1.5.24|2|1 +1.3.6.1.2.1.25.3.8.1.5.25|2|1 +1.3.6.1.2.1.25.3.8.1.5.31|2|1 +1.3.6.1.2.1.25.3.8.1.5.32|2|1 +1.3.6.1.2.1.25.3.8.1.5.33|2|1 +1.3.6.1.2.1.25.3.8.1.5.34|2|1 +1.3.6.1.2.1.25.3.8.1.5.35|2|2 +1.3.6.1.2.1.25.3.8.1.6.3|2|2 +1.3.6.1.2.1.25.3.8.1.6.6|2|2 +1.3.6.1.2.1.25.3.8.1.6.22|2|2 +1.3.6.1.2.1.25.3.8.1.6.23|2|2 +1.3.6.1.2.1.25.3.8.1.6.24|2|2 +1.3.6.1.2.1.25.3.8.1.6.25|2|2 +1.3.6.1.2.1.25.3.8.1.6.31|2|2 +1.3.6.1.2.1.25.3.8.1.6.32|2|2 +1.3.6.1.2.1.25.3.8.1.6.33|2|2 +1.3.6.1.2.1.25.3.8.1.6.34|2|2 +1.3.6.1.2.1.25.3.8.1.6.35|2|2 +1.3.6.1.2.1.25.3.8.1.7.3|2|33 +1.3.6.1.2.1.25.3.8.1.7.6|2|36 +1.3.6.1.2.1.25.3.8.1.7.22|2|52 +1.3.6.1.2.1.25.3.8.1.7.23|2|53 +1.3.6.1.2.1.25.3.8.1.7.24|2|54 +1.3.6.1.2.1.25.3.8.1.7.25|2|55 +1.3.6.1.2.1.25.3.8.1.7.31|2|61 +1.3.6.1.2.1.25.3.8.1.7.32|2|62 +1.3.6.1.2.1.25.3.8.1.7.33|2|63 +1.3.6.1.2.1.25.3.8.1.7.34|2|64 +1.3.6.1.2.1.25.3.8.1.7.35|2|65 +1.3.6.1.2.1.25.3.8.1.8.3|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.6|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.22|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.23|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.24|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.25|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.31|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.32|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.33|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.34|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.35|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.3|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.6|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.22|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.23|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.24|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.25|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.31|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.32|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.33|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.34|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.35|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.4.2.1.1.1|2|1 +1.3.6.1.2.1.25.4.2.1.1.6|2|6 +1.3.6.1.2.1.25.4.2.1.1.26|2|26 +1.3.6.1.2.1.25.4.2.1.1.64|2|64 +1.3.6.1.2.1.25.4.2.1.2.1|4x|626f6f7473747261702e7368 +1.3.6.1.2.1.25.4.2.1.2.6|4|snmpd +1.3.6.1.2.1.25.4.2.1.2.26|4|bash +1.3.6.1.2.1.25.4.2.1.2.64|4|snmpwalk +1.3.6.1.2.1.25.4.2.1.3.1|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.26|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.64|6|0.0 +1.3.6.1.2.1.25.4.2.1.4.1|4x|2f62696e2f7368 +1.3.6.1.2.1.25.4.2.1.4.6|4|snmpd +1.3.6.1.2.1.25.4.2.1.4.26|4|bash +1.3.6.1.2.1.25.4.2.1.4.64|4|snmpwalk +1.3.6.1.2.1.25.4.2.1.5.1|4x|2f626f6f7473747261702e7368202d64202d56202d63202f6574632f736e6d702f736e6d70642e636f6e66 +1.3.6.1.2.1.25.4.2.1.5.6|4x|2d66202d64202d56202d63202f6574632f736e6d702f736e6d70642e636f6e66 +1.3.6.1.2.1.25.4.2.1.5.26|4| +1.3.6.1.2.1.25.4.2.1.5.64|4x|2d763263202d63 +1.3.6.1.2.1.25.4.2.1.6.1|2|4 +1.3.6.1.2.1.25.4.2.1.6.6|2|4 +1.3.6.1.2.1.25.4.2.1.6.26|2|4 +1.3.6.1.2.1.25.4.2.1.6.64|2|4 +1.3.6.1.2.1.25.4.2.1.7.1|2|2 +1.3.6.1.2.1.25.4.2.1.7.6|2|1 +1.3.6.1.2.1.25.4.2.1.7.26|2|2 +1.3.6.1.2.1.25.4.2.1.7.64|2|2 +1.3.6.1.2.1.25.5.1.1.1.1|2|3 +1.3.6.1.2.1.25.5.1.1.1.6|2|2636 +1.3.6.1.2.1.25.5.1.1.1.26|2|12 +1.3.6.1.2.1.25.5.1.1.1.64|2|5 +1.3.6.1.2.1.25.5.1.1.2.1|2|2672 +1.3.6.1.2.1.25.5.1.1.2.6|2|17500 +1.3.6.1.2.1.25.5.1.1.2.26|2|3500 +1.3.6.1.2.1.25.5.1.1.2.64|2|7664 +1.3.6.1.2.1.25.6.3.1.1.1|2|1 +1.3.6.1.2.1.25.6.3.1.1.2|2|2 +1.3.6.1.2.1.25.6.3.1.1.3|2|3 +1.3.6.1.2.1.25.6.3.1.1.4|2|4 +1.3.6.1.2.1.25.6.3.1.1.5|2|5 +1.3.6.1.2.1.25.6.3.1.1.6|2|6 +1.3.6.1.2.1.25.6.3.1.1.7|2|7 +1.3.6.1.2.1.25.6.3.1.1.8|2|8 +1.3.6.1.2.1.25.6.3.1.1.9|2|9 +1.3.6.1.2.1.25.6.3.1.1.10|2|10 +1.3.6.1.2.1.25.6.3.1.1.11|2|11 +1.3.6.1.2.1.25.6.3.1.1.12|2|12 +1.3.6.1.2.1.25.6.3.1.1.13|2|13 +1.3.6.1.2.1.25.6.3.1.1.14|2|14 +1.3.6.1.2.1.25.6.3.1.1.15|2|15 +1.3.6.1.2.1.25.6.3.1.1.16|2|16 +1.3.6.1.2.1.25.6.3.1.1.17|2|17 +1.3.6.1.2.1.25.6.3.1.1.18|2|18 +1.3.6.1.2.1.25.6.3.1.1.19|2|19 +1.3.6.1.2.1.25.6.3.1.1.20|2|20 +1.3.6.1.2.1.25.6.3.1.1.21|2|21 +1.3.6.1.2.1.25.6.3.1.1.22|2|22 +1.3.6.1.2.1.25.6.3.1.1.23|2|23 +1.3.6.1.2.1.25.6.3.1.1.24|2|24 +1.3.6.1.2.1.25.6.3.1.1.25|2|25 +1.3.6.1.2.1.25.6.3.1.1.26|2|26 +1.3.6.1.2.1.25.6.3.1.1.27|2|27 +1.3.6.1.2.1.25.6.3.1.1.28|2|28 +1.3.6.1.2.1.25.6.3.1.1.29|2|29 +1.3.6.1.2.1.25.6.3.1.1.30|2|30 +1.3.6.1.2.1.25.6.3.1.1.31|2|31 +1.3.6.1.2.1.25.6.3.1.1.32|2|32 +1.3.6.1.2.1.25.6.3.1.1.33|2|33 +1.3.6.1.2.1.25.6.3.1.1.34|2|34 +1.3.6.1.2.1.25.6.3.1.1.35|2|35 +1.3.6.1.2.1.25.6.3.1.1.36|2|36 +1.3.6.1.2.1.25.6.3.1.1.37|2|37 +1.3.6.1.2.1.25.6.3.1.1.38|2|38 +1.3.6.1.2.1.25.6.3.1.1.39|2|39 +1.3.6.1.2.1.25.6.3.1.1.40|2|40 +1.3.6.1.2.1.25.6.3.1.1.41|2|41 +1.3.6.1.2.1.25.6.3.1.1.42|2|42 +1.3.6.1.2.1.25.6.3.1.1.43|2|43 +1.3.6.1.2.1.25.6.3.1.1.44|2|44 +1.3.6.1.2.1.25.6.3.1.1.45|2|45 +1.3.6.1.2.1.25.6.3.1.1.46|2|46 +1.3.6.1.2.1.25.6.3.1.1.47|2|47 +1.3.6.1.2.1.25.6.3.1.1.48|2|48 +1.3.6.1.2.1.25.6.3.1.1.49|2|49 +1.3.6.1.2.1.25.6.3.1.1.50|2|50 +1.3.6.1.2.1.25.6.3.1.1.51|2|51 +1.3.6.1.2.1.25.6.3.1.1.52|2|52 +1.3.6.1.2.1.25.6.3.1.1.53|2|53 +1.3.6.1.2.1.25.6.3.1.1.54|2|54 +1.3.6.1.2.1.25.6.3.1.1.55|2|55 +1.3.6.1.2.1.25.6.3.1.1.56|2|56 +1.3.6.1.2.1.25.6.3.1.1.57|2|57 +1.3.6.1.2.1.25.6.3.1.1.58|2|58 +1.3.6.1.2.1.25.6.3.1.1.59|2|59 +1.3.6.1.2.1.25.6.3.1.1.60|2|60 +1.3.6.1.2.1.25.6.3.1.1.61|2|61 +1.3.6.1.2.1.25.6.3.1.1.62|2|62 +1.3.6.1.2.1.25.6.3.1.1.63|2|63 +1.3.6.1.2.1.25.6.3.1.1.64|2|64 +1.3.6.1.2.1.25.6.3.1.1.65|2|65 +1.3.6.1.2.1.25.6.3.1.1.66|2|66 +1.3.6.1.2.1.25.6.3.1.1.67|2|67 +1.3.6.1.2.1.25.6.3.1.1.68|2|68 +1.3.6.1.2.1.25.6.3.1.1.69|2|69 +1.3.6.1.2.1.25.6.3.1.1.70|2|70 +1.3.6.1.2.1.25.6.3.1.1.71|2|71 +1.3.6.1.2.1.25.6.3.1.1.72|2|72 +1.3.6.1.2.1.25.6.3.1.1.73|2|73 +1.3.6.1.2.1.25.6.3.1.1.74|2|74 +1.3.6.1.2.1.25.6.3.1.1.75|2|75 +1.3.6.1.2.1.25.6.3.1.1.76|2|76 +1.3.6.1.2.1.25.6.3.1.1.77|2|77 +1.3.6.1.2.1.25.6.3.1.1.78|2|78 +1.3.6.1.2.1.25.6.3.1.1.79|2|79 +1.3.6.1.2.1.25.6.3.1.1.80|2|80 +1.3.6.1.2.1.25.6.3.1.1.81|2|81 +1.3.6.1.2.1.25.6.3.1.1.82|2|82 +1.3.6.1.2.1.25.6.3.1.1.83|2|83 +1.3.6.1.2.1.25.6.3.1.1.84|2|84 +1.3.6.1.2.1.25.6.3.1.1.85|2|85 +1.3.6.1.2.1.25.6.3.1.1.86|2|86 +1.3.6.1.2.1.25.6.3.1.1.87|2|87 +1.3.6.1.2.1.25.6.3.1.1.88|2|88 +1.3.6.1.2.1.25.6.3.1.1.89|2|89 +1.3.6.1.2.1.25.6.3.1.1.90|2|90 +1.3.6.1.2.1.25.6.3.1.1.91|2|91 +1.3.6.1.2.1.25.6.3.1.1.92|2|92 +1.3.6.1.2.1.25.6.3.1.1.93|2|93 +1.3.6.1.2.1.25.6.3.1.1.94|2|94 +1.3.6.1.2.1.25.6.3.1.1.95|2|95 +1.3.6.1.2.1.25.6.3.1.1.96|2|96 +1.3.6.1.2.1.25.6.3.1.1.97|2|97 +1.3.6.1.2.1.25.6.3.1.1.98|2|98 +1.3.6.1.2.1.25.6.3.1.1.99|2|99 +1.3.6.1.2.1.25.6.3.1.1.100|2|100 +1.3.6.1.2.1.25.6.3.1.1.101|2|101 +1.3.6.1.2.1.25.6.3.1.1.102|2|102 +1.3.6.1.2.1.25.6.3.1.1.103|2|103 +1.3.6.1.2.1.25.6.3.1.1.104|2|104 +1.3.6.1.2.1.25.6.3.1.1.105|2|105 +1.3.6.1.2.1.25.6.3.1.1.106|2|106 +1.3.6.1.2.1.25.6.3.1.1.107|2|107 +1.3.6.1.2.1.25.6.3.1.1.108|2|108 +1.3.6.1.2.1.25.6.3.1.1.109|2|109 +1.3.6.1.2.1.25.6.3.1.1.110|2|110 +1.3.6.1.2.1.25.6.3.1.1.111|2|111 +1.3.6.1.2.1.25.6.3.1.1.112|2|112 +1.3.6.1.2.1.25.6.3.1.1.113|2|113 +1.3.6.1.2.1.25.6.3.1.1.114|2|114 +1.3.6.1.2.1.25.6.3.1.1.115|2|115 +1.3.6.1.2.1.25.6.3.1.1.116|2|116 +1.3.6.1.2.1.25.6.3.1.1.117|2|117 +1.3.6.1.2.1.25.6.3.1.1.118|2|118 +1.3.6.1.2.1.25.6.3.1.1.119|2|119 +1.3.6.1.2.1.25.6.3.1.1.120|2|120 +1.3.6.1.2.1.25.6.3.1.1.121|2|121 +1.3.6.1.2.1.25.6.3.1.1.122|2|122 +1.3.6.1.2.1.25.6.3.1.1.123|2|123 +1.3.6.1.2.1.25.6.3.1.1.124|2|124 +1.3.6.1.2.1.25.6.3.1.1.125|2|125 +1.3.6.1.2.1.25.6.3.1.1.126|2|126 +1.3.6.1.2.1.25.6.3.1.1.127|2|127 +1.3.6.1.2.1.25.6.3.1.1.128|2|128 +1.3.6.1.2.1.25.6.3.1.1.129|2|129 +1.3.6.1.2.1.25.6.3.1.1.130|2|130 +1.3.6.1.2.1.25.6.3.1.1.131|2|131 +1.3.6.1.2.1.25.6.3.1.1.132|2|132 +1.3.6.1.2.1.25.6.3.1.1.133|2|133 +1.3.6.1.2.1.25.6.3.1.1.134|2|134 +1.3.6.1.2.1.25.6.3.1.1.135|2|135 +1.3.6.1.2.1.25.6.3.1.1.136|2|136 +1.3.6.1.2.1.25.6.3.1.1.137|2|137 +1.3.6.1.2.1.25.6.3.1.1.138|2|138 +1.3.6.1.2.1.25.6.3.1.1.139|2|139 +1.3.6.1.2.1.25.6.3.1.1.140|2|140 +1.3.6.1.2.1.25.6.3.1.1.141|2|141 +1.3.6.1.2.1.25.6.3.1.1.142|2|142 +1.3.6.1.2.1.25.6.3.1.1.143|2|143 +1.3.6.1.2.1.25.6.3.1.1.144|2|144 +1.3.6.1.2.1.25.6.3.1.1.145|2|145 +1.3.6.1.2.1.25.6.3.1.1.146|2|146 +1.3.6.1.2.1.25.6.3.1.1.147|2|147 +1.3.6.1.2.1.25.6.3.1.1.148|2|148 +1.3.6.1.2.1.25.6.3.1.1.149|2|149 +1.3.6.1.2.1.25.6.3.1.1.150|2|150 +1.3.6.1.2.1.25.6.3.1.1.151|2|151 +1.3.6.1.2.1.25.6.3.1.1.152|2|152 +1.3.6.1.2.1.25.6.3.1.1.153|2|153 +1.3.6.1.2.1.25.6.3.1.1.154|2|154 +1.3.6.1.2.1.25.6.3.1.1.155|2|155 +1.3.6.1.2.1.25.6.3.1.1.156|2|156 +1.3.6.1.2.1.25.6.3.1.1.157|2|157 +1.3.6.1.2.1.25.6.3.1.1.158|2|158 +1.3.6.1.2.1.25.6.3.1.1.159|2|159 +1.3.6.1.2.1.25.6.3.1.1.160|2|160 +1.3.6.1.2.1.25.6.3.1.1.161|2|161 +1.3.6.1.2.1.25.6.3.1.1.162|2|162 +1.3.6.1.2.1.25.6.3.1.1.163|2|163 +1.3.6.1.2.1.25.6.3.1.1.164|2|164 +1.3.6.1.2.1.25.6.3.1.1.165|2|165 +1.3.6.1.2.1.25.6.3.1.1.166|2|166 +1.3.6.1.2.1.25.6.3.1.1.167|2|167 +1.3.6.1.2.1.25.6.3.1.1.168|2|168 +1.3.6.1.2.1.25.6.3.1.1.169|2|169 +1.3.6.1.2.1.25.6.3.1.1.170|2|170 +1.3.6.1.2.1.25.6.3.1.1.171|2|171 +1.3.6.1.2.1.25.6.3.1.1.172|2|172 +1.3.6.1.2.1.25.6.3.1.1.173|2|173 +1.3.6.1.2.1.25.6.3.1.1.174|2|174 +1.3.6.1.2.1.25.6.3.1.1.175|2|175 +1.3.6.1.2.1.25.6.3.1.1.176|2|176 +1.3.6.1.2.1.25.6.3.1.1.177|2|177 +1.3.6.1.2.1.25.6.3.1.1.178|2|178 +1.3.6.1.2.1.25.6.3.1.1.179|2|179 +1.3.6.1.2.1.25.6.3.1.1.180|2|180 +1.3.6.1.2.1.25.6.3.1.1.181|2|181 +1.3.6.1.2.1.25.6.3.1.1.182|2|182 +1.3.6.1.2.1.25.6.3.1.1.183|2|183 +1.3.6.1.2.1.25.6.3.1.1.184|2|184 +1.3.6.1.2.1.25.6.3.1.1.185|2|185 +1.3.6.1.2.1.25.6.3.1.1.186|2|186 +1.3.6.1.2.1.25.6.3.1.1.187|2|187 +1.3.6.1.2.1.25.6.3.1.1.188|2|188 +1.3.6.1.2.1.25.6.3.1.2.1|4x|63656e746f732d72656c656173652d372d342e313730382e656c372e63656e746f73 +1.3.6.1.2.1.25.6.3.1.2.2|4x|66696c6573797374656d2d332e322d32312e656c37 +1.3.6.1.2.1.25.6.3.1.2.3|4x|6e6375727365732d626173652d352e392d31342e32303133303531312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.4|4x|62696e642d6c6963656e73652d392e392e342d35312e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.5|4x|6e73732d736f66746f6b6e2d66726565626c2d332e32382e332d382e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.6|4x|676c6962632d322e31372d3139362e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.7|4x|6c6962737464632b2b2d342e382e352d31362e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.8|4x|626173682d342e322e34362d32392e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.9|4x|706372652d382e33322d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.10|4x|7a6c69622d312e322e372d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.11|4x|787a2d6c6962732d352e322e322d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.12|4x|706f70742d312e31332d31362e656c37 +1.3.6.1.2.1.25.6.3.1.2.13|4x|63686b636f6e6669672d312e372e342d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.14|4x|7365642d342e322e322d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.15|4x|6c69626666692d332e302e31332d31382e656c37 +1.3.6.1.2.1.25.6.3.1.2.16|4x|6c6962617474722d322e342e34362d31322e656c37 +1.3.6.1.2.1.25.6.3.1.2.17|4x|6c69626361702d322e32322d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.18|4x|6c6962636f6d5f6572722d312e34322e392d31302e656c37 +1.3.6.1.2.1.25.6.3.1.2.19|4x|726561646c696e652d362e322d31302e656c37 +1.3.6.1.2.1.25.6.3.1.2.20|4x|677265702d322e32302d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.21|4x|6c6962757569642d322e32332e322d34332e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.22|4x|6c696269646e2d312e32382d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.23|4x|66696e647574696c732d342e352e31312d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.24|4x|646275732d6c6962732d312e362e31322d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.25|4x|61756469742d6c6962732d322e372e362d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.26|4x|6c696261737375616e2d322e312e302d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.27|4x|787a2d352e322e322d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.28|4x|6b65797574696c732d6c6962732d312e352e382d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.29|4x|61636c2d322e322e35312d31322e656c37 +1.3.6.1.2.1.25.6.3.1.2.30|4x|63797275732d7361736c2d6c69622d322e312e32362d32312e656c37 +1.3.6.1.2.1.25.6.3.1.2.31|4x|6b6d6f642d6c6962732d32302d31352e656c375f342e37 +1.3.6.1.2.1.25.6.3.1.2.32|4x|656c667574696c732d64656661756c742d79616d612d73636f70652d302e3136382d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.33|4x|6e6375727365732d352e392d31342e32303133303531312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.34|4x|6c696273656d616e6167652d322e352d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.35|4x|6c69627461736e312d342e31302d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.36|4x|63612d6365727469666963617465732d323031372e322e31342d37312e656c37 +1.3.6.1.2.1.25.6.3.1.2.37|4x|6f70656e73736c2d6c6962732d312e302e326b2d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.38|4x|736861646f772d7574696c732d342e312e352e312d32342e656c37 +1.3.6.1.2.1.25.6.3.1.2.39|4x|6c69626d6f756e742d322e32332e322d34332e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.40|4x|7368617265642d6d696d652d696e666f2d312e382d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.41|4x|637261636b6c69622d322e392e302d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.42|4x|6c696270777175616c6974792d312e322e332d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.43|4x|73797374656d642d6c6962732d3231392d34322e656c375f342e3130 +1.3.6.1.2.1.25.6.3.1.2.44|4x|706b67636f6e6669672d302e32372e312d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.45|4x|646275732d676c69622d302e3130302d372e656c37 +1.3.6.1.2.1.25.6.3.1.2.46|4x|6c69627574656d707465722d312e312e362d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.47|4x|6e73732d332e32382e342d31352e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.48|4x|6e73732d746f6f6c732d332e32382e342d31352e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.49|4x|6c69626375726c2d372e32392e302d34322e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.50|4x|72706d2d6c6962732d342e31312e332d32352e656c37 +1.3.6.1.2.1.25.6.3.1.2.51|4x|6f70656e6c6461702d322e342e34342d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.52|4x|7574696c2d6c696e75782d322e32332e322d34332e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.53|4x|7172656e636f64652d6c6962732d332e342e312d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.54|4x|6465766963652d6d61707065722d312e30322e3134302d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.55|4x|637279707473657475702d6c6962732d312e372e342d332e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.56|4x|6b6d6f642d32302d31352e656c375f342e37 +1.3.6.1.2.1.25.6.3.1.2.57|4x|646275732d312e362e31322d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.58|4x|69707574696c732d32303136303330382d31302e656c37 +1.3.6.1.2.1.25.6.3.1.2.59|4x|707974686f6e2d6c6962732d322e372e352d35382e656c37 +1.3.6.1.2.1.25.6.3.1.2.60|4x|707974686f6e2d696e6970617273652d302e342d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.61|4x|79756d2d6d657461646174612d7061727365722d312e312e342d31302e656c37 +1.3.6.1.2.1.25.6.3.1.2.62|4x|707974686f6e2d70796375726c2d372e31392e302d31392e656c37 +1.3.6.1.2.1.25.6.3.1.2.63|4x|6c6962786d6c322d707974686f6e2d322e392e312d362e656c375f322e33 +1.3.6.1.2.1.25.6.3.1.2.64|4x|707974686f6e2d636861726465742d322e322e312d312e656c375f31 +1.3.6.1.2.1.25.6.3.1.2.65|4x|686f73746e616d652d332e31332d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.66|4x|7074682d322e302e372d32332e656c37 +1.3.6.1.2.1.25.6.3.1.2.67|4x|6770676d652d312e332e322d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.68|4x|72706d2d6275696c642d6c6962732d342e31312e332d32352e656c37 +1.3.6.1.2.1.25.6.3.1.2.69|4x|79756d2d706c7567696e2d666173746573746d6972726f722d312e312e33312d34322e656c37 +1.3.6.1.2.1.25.6.3.1.2.70|4x|79756d2d706c7567696e2d6f766c2d312e312e33312d34322e656c37 +1.3.6.1.2.1.25.6.3.1.2.71|4x|7061737377642d302e37392d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.72|4x|726f6f7466696c65732d382e312d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.73|4x|6e65742d736e6d702d6c6962732d352e372e322d32382e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.74|4x|6c69626e666e65746c696e6b2d312e302e312d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.75|4x|6c69626d6e6c2d312e302e332d372e656c37 +1.3.6.1.2.1.25.6.3.1.2.76|4x|69707461626c65732d312e342e32312d31382e332e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.77|4x|6d6172696164622d6c6962732d352e352e35362d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.78|4x|73797376696e69742d746f6f6c732d322e38382d31342e6473662e656c37 +1.3.6.1.2.1.25.6.3.1.2.79|4x|67726f66662d626173652d312e32322e322d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.80|4x|7065726c2d485454502d54696e792d302e3033332d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.81|4x|7065726c2d506f642d5065726c646f632d332e32302d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.82|4x|7065726c2d546578742d5061727365576f7264732d332e32392d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.83|4x|7065726c2d506f642d55736167652d312e36332d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.84|4x|7065726c2d6c6962732d352e31362e332d3239322e656c37 +1.3.6.1.2.1.25.6.3.1.2.85|4x|7065726c2d4578706f727465722d352e36382d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.86|4x|7065726c2d46696c7465722d312e34392d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.87|4x|7065726c2d536f636b65742d322e3031302d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.88|4x|7065726c2d53746f7261626c652d322e34352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.89|4x|7065726c2d5363616c61722d4c6973742d5574696c732d312e32372d3234382e656c37 +1.3.6.1.2.1.25.6.3.1.2.90|4x|7065726c2d746872656164732d312e38372d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.91|4x|7065726c2d46696c652d506174682d322e30392d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.92|4x|7065726c2d4765746f70742d4c6f6e672d322e34302d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.93|4x|7065726c2d446174612d44756d7065722d322e3134352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.94|4x|6e65742d736e6d702d352e372e322d32382e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.95|4x|6c69626763632d342e382e352d31362e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.96|4x|73657475702d322e382e37312d372e656c37 +1.3.6.1.2.1.25.6.3.1.2.97|4x|6261736573797374656d2d31302e302d372e656c372e63656e746f73 +1.3.6.1.2.1.25.6.3.1.2.98|4x|747a646174612d32303138642d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.99|4x|676c6962632d636f6d6d6f6e2d322e31372d3139362e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.100|4x|6e7370722d342e31332e312d312e302e656c375f33 +1.3.6.1.2.1.25.6.3.1.2.101|4x|6e6375727365732d6c6962732d352e392d31342e32303133303531312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.102|4x|6c69627365706f6c2d322e352d362e656c37 +1.3.6.1.2.1.25.6.3.1.2.103|4x|6c696273656c696e75782d322e352d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.104|4x|696e666f2d352e312d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.105|4x|627a6970322d6c6962732d312e302e362d31332e656c37 +1.3.6.1.2.1.25.6.3.1.2.106|4x|6c696264622d352e332e32312d32312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.107|4x|6e73732d7574696c2d332e32382e342d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.108|4x|656c667574696c732d6c6962656c662d302e3136382d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.109|4x|6c69626770672d6572726f722d312e31322d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.110|4x|6c696261636c2d322e322e35312d31322e656c37 +1.3.6.1.2.1.25.6.3.1.2.111|4x|6c6962786d6c322d322e392e312d362e656c375f322e33 +1.3.6.1.2.1.25.6.3.1.2.112|4x|6c69626763727970742d312e352e332d31342e656c37 +1.3.6.1.2.1.25.6.3.1.2.113|4x|6c75612d352e312e342d31352e656c37 +1.3.6.1.2.1.25.6.3.1.2.114|4x|6370696f2d322e31312d32352e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.115|4x|73716c6974652d332e372e31372d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.116|4x|6761776b2d342e302e322d342e656c375f332e31 +1.3.6.1.2.1.25.6.3.1.2.117|4x|646966667574696c732d332e332d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.118|4x|65787061742d322e312e302d31302e656c375f33 +1.3.6.1.2.1.25.6.3.1.2.119|4x|6c69626361702d6e672d302e372e352d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.120|4x|6e73732d736f66746f6b6e2d332e32382e332d382e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.121|4x|7031312d6b69742d302e32332e352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.122|4x|66696c652d6c6962732d352e31312d33332e656c37 +1.3.6.1.2.1.25.6.3.1.2.123|4x|7461722d312e32362d33322e656c37 +1.3.6.1.2.1.25.6.3.1.2.124|4x|70696e656e7472792d302e382e312d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.125|4x|6c696264622d7574696c732d352e332e32312d32312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.126|4x|656c667574696c732d6c6962732d302e3136382d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.127|4x|676d702d362e302e302d31352e656c37 +1.3.6.1.2.1.25.6.3.1.2.128|4x|757374722d312e302e342d31362e656c37 +1.3.6.1.2.1.25.6.3.1.2.129|4x|6c6962766572746f2d302e322e352d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.130|4x|7031312d6b69742d74727573742d302e32332e352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.131|4x|6b7262352d6c6962732d312e31352e312d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.132|4x|636f72657574696c732d382e32322d31382e656c37 +1.3.6.1.2.1.25.6.3.1.2.133|4x|6c6962626c6b69642d322e32332e322d34332e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.134|4x|676c6962322d322e35302e332d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.135|4x|677a69702d312e352d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.136|4x|637261636b6c69622d64696374732d322e392e302d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.137|4x|70616d2d312e312e382d31382e656c37 +1.3.6.1.2.1.25.6.3.1.2.138|4x|70726f6370732d6e672d332e332e31302d31362e656c37 +1.3.6.1.2.1.25.6.3.1.2.139|4x|676f626a6563742d696e74726f7370656374696f6e2d312e35302e302d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.140|4x|6e73732d70656d2d312e302e332d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.141|4x|6e73732d737973696e69742d332e32382e342d31352e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.142|4x|62696e7574696c732d322e32352e312d33322e626173652e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.143|4x|6c6962737368322d312e342e332d31302e656c375f322e31 +1.3.6.1.2.1.25.6.3.1.2.144|4x|6375726c2d372e32392e302d34322e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.145|4x|72706d2d342e31312e332d32352e656c37 +1.3.6.1.2.1.25.6.3.1.2.146|4x|6c6962757365722d302e36302d372e656c375f31 +1.3.6.1.2.1.25.6.3.1.2.147|4x|686172646c696e6b2d312e302d31392e656c37 +1.3.6.1.2.1.25.6.3.1.2.148|4x|6b70617274782d302e342e392d3131312e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.149|4x|6465766963652d6d61707065722d6c6962732d312e30322e3134302d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.150|4x|6472616375742d3033332d3530322e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.151|4x|73797374656d642d3231392d34322e656c375f342e3130 +1.3.6.1.2.1.25.6.3.1.2.152|4x|6764626d2d312e31302d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.153|4x|707974686f6e2d322e372e352d35382e656c37 +1.3.6.1.2.1.25.6.3.1.2.154|4x|646275732d707974686f6e2d312e312e312d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.155|4x|707974686f6e2d676f626a6563742d626173652d332e32322e302d312e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.156|4x|70796c69626c7a6d612d302e352e332d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.157|4x|707974686f6e2d75726c677261626265722d332e31302d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.158|4x|707978617474722d302e352e312d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.159|4x|707974686f6e2d6b69746368656e2d312e312e312d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.160|4x|676e757067322d322e302e32322d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.161|4x|70796770676d652d302e332d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.162|4x|72706d2d707974686f6e2d342e31312e332d32352e656c37 +1.3.6.1.2.1.25.6.3.1.2.163|4x|79756d2d332e342e332d3135342e656c372e63656e746f732e31 +1.3.6.1.2.1.25.6.3.1.2.164|4x|79756d2d7574696c732d312e312e33312d34322e656c37 +1.3.6.1.2.1.25.6.3.1.2.165|4x|76696d2d6d696e696d616c2d372e342e3136302d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.166|4x|6770672d7075626b65792d66346138306562352d3533613766663462 +1.3.6.1.2.1.25.6.3.1.2.167|4x|7463705f77726170706572732d6c6962732d372e362d37372e656c37 +1.3.6.1.2.1.25.6.3.1.2.168|4x|6c6d5f73656e736f72732d6c6962732d332e342e302d342e3230313630363031676974663931383565352e656c37 +1.3.6.1.2.1.25.6.3.1.2.169|4x|6c69626e657466696c7465725f636f6e6e747261636b2d312e302e362d312e656c375f33 +1.3.6.1.2.1.25.6.3.1.2.170|4x|6970726f7574652d332e31302e302d38372e656c37 +1.3.6.1.2.1.25.6.3.1.2.171|4x|73797374656d642d737973762d3231392d34322e656c375f342e3130 +1.3.6.1.2.1.25.6.3.1.2.172|4x|696e6974736372697074732d392e34392e33392d312e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.173|4x|7065726c2d706172656e742d302e3232352d3234342e656c37 +1.3.6.1.2.1.25.6.3.1.2.174|4x|7065726c2d706f646c61746f72732d322e352e312d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.175|4x|7065726c2d506f642d457363617065732d312e30342d3239322e656c37 +1.3.6.1.2.1.25.6.3.1.2.176|4x|7065726c2d456e636f64652d322e35312d372e656c37 +1.3.6.1.2.1.25.6.3.1.2.177|4x|7065726c2d6d6163726f732d352e31362e332d3239322e656c37 +1.3.6.1.2.1.25.6.3.1.2.178|4x|7065726c2d54696d652d48695265732d312e393732352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.179|4x|7065726c2d636f6e7374616e742d312e32372d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.180|4x|7065726c2d54696d652d4c6f63616c2d312e323330302d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.181|4x|7065726c2d436172702d312e32362d3234342e656c37 +1.3.6.1.2.1.25.6.3.1.2.182|4x|7065726c2d50617468546f6f6c732d332e34302d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.183|4x|7065726c2d746872656164732d7368617265642d312e34332d362e656c37 +1.3.6.1.2.1.25.6.3.1.2.184|4x|7065726c2d46696c652d54656d702d302e32332e30312d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.185|4x|7065726c2d506f642d53696d706c652d332e32382d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.186|4x|7065726c2d352e31362e332d3239322e656c37 +1.3.6.1.2.1.25.6.3.1.2.187|4x|6e65742d736e6d702d6167656e742d6c6962732d352e372e322d32382e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.188|4x|6e65742d736e6d702d7574696c732d352e372e322d32382e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.3.1|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.2|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.3|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.4|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.5|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.6|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.7|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.8|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.9|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.10|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.11|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.12|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.13|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.14|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.15|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.16|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.17|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.18|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.19|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.20|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.21|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.22|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.23|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.24|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.25|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.26|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.27|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.28|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.29|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.30|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.31|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.32|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.33|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.34|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.35|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.36|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.37|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.38|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.39|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.40|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.41|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.42|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.43|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.44|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.45|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.46|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.47|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.48|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.49|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.50|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.51|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.52|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.53|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.54|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.55|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.56|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.57|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.58|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.59|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.60|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.61|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.62|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.63|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.64|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.65|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.66|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.67|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.68|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.69|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.70|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.71|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.72|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.73|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.74|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.75|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.76|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.77|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.78|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.79|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.80|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.81|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.82|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.83|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.84|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.85|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.86|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.87|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.88|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.89|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.90|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.91|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.92|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.93|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.94|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.95|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.96|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.97|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.98|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.99|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.100|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.101|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.102|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.103|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.104|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.105|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.106|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.107|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.108|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.109|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.110|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.111|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.112|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.113|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.114|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.115|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.116|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.117|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.118|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.119|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.120|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.121|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.122|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.123|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.124|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.125|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.126|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.127|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.128|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.129|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.130|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.131|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.132|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.133|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.134|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.135|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.136|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.137|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.138|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.139|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.140|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.141|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.142|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.143|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.144|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.145|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.146|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.147|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.148|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.149|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.150|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.151|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.152|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.153|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.154|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.155|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.156|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.157|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.158|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.159|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.160|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.161|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.162|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.163|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.164|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.165|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.166|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.167|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.168|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.169|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.170|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.171|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.172|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.173|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.174|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.175|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.176|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.177|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.178|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.179|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.180|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.181|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.182|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.183|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.184|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.185|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.186|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.187|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.188|6|0.0 +1.3.6.1.2.1.25.6.3.1.4.1|2|2 +1.3.6.1.2.1.25.6.3.1.4.2|2|2 +1.3.6.1.2.1.25.6.3.1.4.3|2|2 +1.3.6.1.2.1.25.6.3.1.4.4|2|4 +1.3.6.1.2.1.25.6.3.1.4.5|2|2 +1.3.6.1.2.1.25.6.3.1.4.6|2|2 +1.3.6.1.2.1.25.6.3.1.4.7|2|2 +1.3.6.1.2.1.25.6.3.1.4.8|2|2 +1.3.6.1.2.1.25.6.3.1.4.9|2|2 +1.3.6.1.2.1.25.6.3.1.4.10|2|2 +1.3.6.1.2.1.25.6.3.1.4.11|2|2 +1.3.6.1.2.1.25.6.3.1.4.12|2|2 +1.3.6.1.2.1.25.6.3.1.4.13|2|2 +1.3.6.1.2.1.25.6.3.1.4.14|2|4 +1.3.6.1.2.1.25.6.3.1.4.15|2|2 +1.3.6.1.2.1.25.6.3.1.4.16|2|2 +1.3.6.1.2.1.25.6.3.1.4.17|2|2 +1.3.6.1.2.1.25.6.3.1.4.18|2|4 +1.3.6.1.2.1.25.6.3.1.4.19|2|2 +1.3.6.1.2.1.25.6.3.1.4.20|2|4 +1.3.6.1.2.1.25.6.3.1.4.21|2|4 +1.3.6.1.2.1.25.6.3.1.4.22|2|2 +1.3.6.1.2.1.25.6.3.1.4.23|2|4 +1.3.6.1.2.1.25.6.3.1.4.24|2|4 +1.3.6.1.2.1.25.6.3.1.4.25|2|4 +1.3.6.1.2.1.25.6.3.1.4.26|2|2 +1.3.6.1.2.1.25.6.3.1.4.27|2|4 +1.3.6.1.2.1.25.6.3.1.4.28|2|2 +1.3.6.1.2.1.25.6.3.1.4.29|2|2 +1.3.6.1.2.1.25.6.3.1.4.30|2|2 +1.3.6.1.2.1.25.6.3.1.4.31|2|2 +1.3.6.1.2.1.25.6.3.1.4.32|2|4 +1.3.6.1.2.1.25.6.3.1.4.33|2|2 +1.3.6.1.2.1.25.6.3.1.4.34|2|2 +1.3.6.1.2.1.25.6.3.1.4.35|2|2 +1.3.6.1.2.1.25.6.3.1.4.36|2|2 +1.3.6.1.2.1.25.6.3.1.4.37|2|2 +1.3.6.1.2.1.25.6.3.1.4.38|2|2 +1.3.6.1.2.1.25.6.3.1.4.39|2|4 +1.3.6.1.2.1.25.6.3.1.4.40|2|2 +1.3.6.1.2.1.25.6.3.1.4.41|2|2 +1.3.6.1.2.1.25.6.3.1.4.42|2|2 +1.3.6.1.2.1.25.6.3.1.4.43|2|4 +1.3.6.1.2.1.25.6.3.1.4.44|2|4 +1.3.6.1.2.1.25.6.3.1.4.45|2|2 +1.3.6.1.2.1.25.6.3.1.4.46|2|2 +1.3.6.1.2.1.25.6.3.1.4.47|2|2 +1.3.6.1.2.1.25.6.3.1.4.48|2|2 +1.3.6.1.2.1.25.6.3.1.4.49|2|4 +1.3.6.1.2.1.25.6.3.1.4.50|2|4 +1.3.6.1.2.1.25.6.3.1.4.51|2|2 +1.3.6.1.2.1.25.6.3.1.4.52|2|2 +1.3.6.1.2.1.25.6.3.1.4.53|2|4 +1.3.6.1.2.1.25.6.3.1.4.54|2|2 +1.3.6.1.2.1.25.6.3.1.4.55|2|2 +1.3.6.1.2.1.25.6.3.1.4.56|2|2 +1.3.6.1.2.1.25.6.3.1.4.57|2|2 +1.3.6.1.2.1.25.6.3.1.4.58|2|2 +1.3.6.1.2.1.25.6.3.1.4.59|2|4 +1.3.6.1.2.1.25.6.3.1.4.60|2|4 +1.3.6.1.2.1.25.6.3.1.4.61|2|4 +1.3.6.1.2.1.25.6.3.1.4.62|2|4 +1.3.6.1.2.1.25.6.3.1.4.63|2|4 +1.3.6.1.2.1.25.6.3.1.4.64|2|4 +1.3.6.1.2.1.25.6.3.1.4.65|2|2 +1.3.6.1.2.1.25.6.3.1.4.66|2|2 +1.3.6.1.2.1.25.6.3.1.4.67|2|4 +1.3.6.1.2.1.25.6.3.1.4.68|2|4 +1.3.6.1.2.1.25.6.3.1.4.69|2|2 +1.3.6.1.2.1.25.6.3.1.4.70|2|2 +1.3.6.1.2.1.25.6.3.1.4.71|2|2 +1.3.6.1.2.1.25.6.3.1.4.72|2|2 +1.3.6.1.2.1.25.6.3.1.4.73|2|4 +1.3.6.1.2.1.25.6.3.1.4.74|2|2 +1.3.6.1.2.1.25.6.3.1.4.75|2|2 +1.3.6.1.2.1.25.6.3.1.4.76|2|2 +1.3.6.1.2.1.25.6.3.1.4.77|2|4 +1.3.6.1.2.1.25.6.3.1.4.78|2|2 +1.3.6.1.2.1.25.6.3.1.4.79|2|4 +1.3.6.1.2.1.25.6.3.1.4.80|2|4 +1.3.6.1.2.1.25.6.3.1.4.81|2|4 +1.3.6.1.2.1.25.6.3.1.4.82|2|4 +1.3.6.1.2.1.25.6.3.1.4.83|2|4 +1.3.6.1.2.1.25.6.3.1.4.84|2|4 +1.3.6.1.2.1.25.6.3.1.4.85|2|4 +1.3.6.1.2.1.25.6.3.1.4.86|2|4 +1.3.6.1.2.1.25.6.3.1.4.87|2|4 +1.3.6.1.2.1.25.6.3.1.4.88|2|4 +1.3.6.1.2.1.25.6.3.1.4.89|2|4 +1.3.6.1.2.1.25.6.3.1.4.90|2|4 +1.3.6.1.2.1.25.6.3.1.4.91|2|4 +1.3.6.1.2.1.25.6.3.1.4.92|2|4 +1.3.6.1.2.1.25.6.3.1.4.93|2|4 +1.3.6.1.2.1.25.6.3.1.4.94|2|2 +1.3.6.1.2.1.25.6.3.1.4.95|2|2 +1.3.6.1.2.1.25.6.3.1.4.96|2|2 +1.3.6.1.2.1.25.6.3.1.4.97|2|2 +1.3.6.1.2.1.25.6.3.1.4.98|2|2 +1.3.6.1.2.1.25.6.3.1.4.99|2|2 +1.3.6.1.2.1.25.6.3.1.4.100|2|2 +1.3.6.1.2.1.25.6.3.1.4.101|2|2 +1.3.6.1.2.1.25.6.3.1.4.102|2|2 +1.3.6.1.2.1.25.6.3.1.4.103|2|2 +1.3.6.1.2.1.25.6.3.1.4.104|2|2 +1.3.6.1.2.1.25.6.3.1.4.105|2|2 +1.3.6.1.2.1.25.6.3.1.4.106|2|2 +1.3.6.1.2.1.25.6.3.1.4.107|2|2 +1.3.6.1.2.1.25.6.3.1.4.108|2|4 +1.3.6.1.2.1.25.6.3.1.4.109|2|2 +1.3.6.1.2.1.25.6.3.1.4.110|2|2 +1.3.6.1.2.1.25.6.3.1.4.111|2|4 +1.3.6.1.2.1.25.6.3.1.4.112|2|2 +1.3.6.1.2.1.25.6.3.1.4.113|2|4 +1.3.6.1.2.1.25.6.3.1.4.114|2|4 +1.3.6.1.2.1.25.6.3.1.4.115|2|4 +1.3.6.1.2.1.25.6.3.1.4.116|2|4 +1.3.6.1.2.1.25.6.3.1.4.117|2|4 +1.3.6.1.2.1.25.6.3.1.4.118|2|2 +1.3.6.1.2.1.25.6.3.1.4.119|2|2 +1.3.6.1.2.1.25.6.3.1.4.120|2|2 +1.3.6.1.2.1.25.6.3.1.4.121|2|4 +1.3.6.1.2.1.25.6.3.1.4.122|2|4 +1.3.6.1.2.1.25.6.3.1.4.123|2|4 +1.3.6.1.2.1.25.6.3.1.4.124|2|4 +1.3.6.1.2.1.25.6.3.1.4.125|2|4 +1.3.6.1.2.1.25.6.3.1.4.126|2|4 +1.3.6.1.2.1.25.6.3.1.4.127|2|2 +1.3.6.1.2.1.25.6.3.1.4.128|2|2 +1.3.6.1.2.1.25.6.3.1.4.129|2|4 +1.3.6.1.2.1.25.6.3.1.4.130|2|4 +1.3.6.1.2.1.25.6.3.1.4.131|2|2 +1.3.6.1.2.1.25.6.3.1.4.132|2|2 +1.3.6.1.2.1.25.6.3.1.4.133|2|4 +1.3.6.1.2.1.25.6.3.1.4.134|2|4 +1.3.6.1.2.1.25.6.3.1.4.135|2|4 +1.3.6.1.2.1.25.6.3.1.4.136|2|2 +1.3.6.1.2.1.25.6.3.1.4.137|2|2 +1.3.6.1.2.1.25.6.3.1.4.138|2|4 +1.3.6.1.2.1.25.6.3.1.4.139|2|4 +1.3.6.1.2.1.25.6.3.1.4.140|2|4 +1.3.6.1.2.1.25.6.3.1.4.141|2|2 +1.3.6.1.2.1.25.6.3.1.4.142|2|4 +1.3.6.1.2.1.25.6.3.1.4.143|2|2 +1.3.6.1.2.1.25.6.3.1.4.144|2|4 +1.3.6.1.2.1.25.6.3.1.4.145|2|2 +1.3.6.1.2.1.25.6.3.1.4.146|2|2 +1.3.6.1.2.1.25.6.3.1.4.147|2|2 +1.3.6.1.2.1.25.6.3.1.4.148|2|2 +1.3.6.1.2.1.25.6.3.1.4.149|2|2 +1.3.6.1.2.1.25.6.3.1.4.150|2|2 +1.3.6.1.2.1.25.6.3.1.4.151|2|4 +1.3.6.1.2.1.25.6.3.1.4.152|2|2 +1.3.6.1.2.1.25.6.3.1.4.153|2|4 +1.3.6.1.2.1.25.6.3.1.4.154|2|4 +1.3.6.1.2.1.25.6.3.1.4.155|2|4 +1.3.6.1.2.1.25.6.3.1.4.156|2|4 +1.3.6.1.2.1.25.6.3.1.4.157|2|4 +1.3.6.1.2.1.25.6.3.1.4.158|2|4 +1.3.6.1.2.1.25.6.3.1.4.159|2|4 +1.3.6.1.2.1.25.6.3.1.4.160|2|4 +1.3.6.1.2.1.25.6.3.1.4.161|2|4 +1.3.6.1.2.1.25.6.3.1.4.162|2|4 +1.3.6.1.2.1.25.6.3.1.4.163|2|2 +1.3.6.1.2.1.25.6.3.1.4.164|2|4 +1.3.6.1.2.1.25.6.3.1.4.165|2|4 +1.3.6.1.2.1.25.6.3.1.4.166|2|4 +1.3.6.1.2.1.25.6.3.1.4.167|2|2 +1.3.6.1.2.1.25.6.3.1.4.168|2|2 +1.3.6.1.2.1.25.6.3.1.4.169|2|2 +1.3.6.1.2.1.25.6.3.1.4.170|2|4 +1.3.6.1.2.1.25.6.3.1.4.171|2|4 +1.3.6.1.2.1.25.6.3.1.4.172|2|2 +1.3.6.1.2.1.25.6.3.1.4.173|2|4 +1.3.6.1.2.1.25.6.3.1.4.174|2|4 +1.3.6.1.2.1.25.6.3.1.4.175|2|4 +1.3.6.1.2.1.25.6.3.1.4.176|2|4 +1.3.6.1.2.1.25.6.3.1.4.177|2|4 +1.3.6.1.2.1.25.6.3.1.4.178|2|4 +1.3.6.1.2.1.25.6.3.1.4.179|2|4 +1.3.6.1.2.1.25.6.3.1.4.180|2|4 +1.3.6.1.2.1.25.6.3.1.4.181|2|4 +1.3.6.1.2.1.25.6.3.1.4.182|2|4 +1.3.6.1.2.1.25.6.3.1.4.183|2|4 +1.3.6.1.2.1.25.6.3.1.4.184|2|4 +1.3.6.1.2.1.25.6.3.1.4.185|2|4 +1.3.6.1.2.1.25.6.3.1.4.186|2|4 +1.3.6.1.2.1.25.6.3.1.4.187|2|4 +1.3.6.1.2.1.25.6.3.1.4.188|2|4 +1.3.6.1.2.1.25.6.3.1.5.1|4x|323031382d342d322c31383a33383a32352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.2|4x|323031382d342d322c31383a33383a32352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.3|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.4|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.5|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.6|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.7|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.8|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.9|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.10|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.11|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.12|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.13|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.14|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.15|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.16|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.17|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.18|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.19|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.20|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.21|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.22|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.23|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.24|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.25|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.26|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.27|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.28|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.29|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.30|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.31|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.32|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.33|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.34|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.35|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.36|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.37|4x|323031382d342d322c31383a33383a34302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.38|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.39|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.40|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.41|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.42|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.43|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.44|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.45|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.46|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.47|4x|323031382d342d322c31383a33383a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.48|4x|323031382d342d322c31383a33383a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.49|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.50|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.51|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.52|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.53|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.54|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.55|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.56|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.57|4x|323031382d342d322c31383a33383a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.58|4x|323031382d342d322c31383a33383a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.59|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.60|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.61|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.62|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.63|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.64|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.65|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.66|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.67|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.68|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.69|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.70|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.71|4x|323031382d342d322c31383a33383a35342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.72|4x|323031382d342d322c31383a33383a35342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.73|4x|323031382d342d31332c32303a35313a34322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.74|4x|323031382d342d31332c32303a35313a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.75|4x|323031382d342d31332c32303a35313a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.76|4x|323031382d342d31332c32303a35313a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.77|4x|323031382d342d31332c32303a35313a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.78|4x|323031382d342d31332c32303a35313a34382e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.79|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.80|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.81|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.82|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.83|4x|323031382d342d31332c32303a35313a35312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.84|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.85|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.86|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.87|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.88|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.89|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.90|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.91|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.92|4x|323031382d342d31332c32303a35313a35332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.93|4x|323031382d342d31332c32303a35313a35352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.94|4x|323031382d342d31332c32303a35313a35362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.95|4x|323031382d342d322c31383a33383a32352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.96|4x|323031382d342d322c31383a33383a32352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.97|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.98|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.99|4x|323031382d342d322c31383a33383a32392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.100|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.101|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.102|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.103|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.104|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.105|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.106|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.107|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.108|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.109|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.110|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.111|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.112|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.113|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.114|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.115|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.116|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.117|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.118|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.119|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.120|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.121|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.122|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.123|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.124|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.125|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.126|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.127|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.128|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.129|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.130|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.131|4x|323031382d342d322c31383a33383a34302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.132|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.133|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.134|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.135|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.136|4x|323031382d342d322c31383a33383a34322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.137|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.138|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.139|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.140|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.141|4x|323031382d342d322c31383a33383a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.142|4x|323031382d342d322c31383a33383a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.143|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.144|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.145|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.146|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.147|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.148|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.149|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.150|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.151|4x|323031382d342d322c31383a33383a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.152|4x|323031382d342d322c31383a33383a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.153|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.154|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.155|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.156|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.157|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.158|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.159|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.160|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.161|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.162|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.163|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.164|4x|323031382d342d322c31383a33383a35312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.165|4x|323031382d342d322c31383a33383a35342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.166|4x|323031382d342d31332c32303a35313a34302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.167|4x|323031382d342d31332c32303a35313a34322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.168|4x|323031382d342d31332c32303a35313a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.169|4x|323031382d342d31332c32303a35313a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.170|4x|323031382d342d31332c32303a35313a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.171|4x|323031382d342d31332c32303a35313a34382e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.172|4x|323031382d342d31332c32303a35313a34382e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.173|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.174|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.175|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.176|4x|323031382d342d31332c32303a35313a35312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.177|4x|323031382d342d31332c32303a35313a35312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.178|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.179|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.180|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.181|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.182|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.183|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.184|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.185|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.186|4x|323031382d342d31332c32303a35313a35352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.187|4x|323031382d342d31332c32303a35313a35352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.188|4x|323031382d342d31332c32303a35313a35372e302c2b303a30 +1.3.6.1.2.1.28.1.1.2.1|66|0 +1.3.6.1.2.1.28.1.1.5.1|66|0 +1.3.6.1.2.1.28.2.1.4.1.26|66|0 +1.3.6.1.2.1.28.2.1.7.1.26|66|0 +1.3.6.1.2.1.28.2.1.31.1.1|2|-1 +1.3.6.1.2.1.28.2.1.31.1.2|2|-1 +1.3.6.1.2.1.28.2.1.31.1.3|2|-1 +1.3.6.1.2.1.28.2.1.31.1.4|2|-1 +1.3.6.1.2.1.28.2.1.31.1.5|2|-1 +1.3.6.1.2.1.28.2.1.31.1.6|2|-1 +1.3.6.1.2.1.28.2.1.31.1.7|2|-1 +1.3.6.1.2.1.28.2.1.31.1.8|2|-1 +1.3.6.1.2.1.28.2.1.31.1.9|2|-1 +1.3.6.1.2.1.28.2.1.31.1.10|2|-1 +1.3.6.1.2.1.28.2.1.31.1.11|2|-1 +1.3.6.1.2.1.28.2.1.31.1.12|2|-1 +1.3.6.1.2.1.28.2.1.31.1.13|2|-1 +1.3.6.1.2.1.28.2.1.31.1.14|2|-1 +1.3.6.1.2.1.28.2.1.31.1.15|2|-1 +1.3.6.1.2.1.28.2.1.31.1.16|2|-1 +1.3.6.1.2.1.28.2.1.31.1.17|2|-1 +1.3.6.1.2.1.28.2.1.31.1.18|2|-1 +1.3.6.1.2.1.28.2.1.31.1.19|2|-1 +1.3.6.1.2.1.28.2.1.31.1.20|2|-1 +1.3.6.1.2.1.28.2.1.31.1.21|2|-1 +1.3.6.1.2.1.28.2.1.31.1.22|2|-1 +1.3.6.1.2.1.28.2.1.31.1.23|2|-1 +1.3.6.1.2.1.28.2.1.31.1.24|2|-1 +1.3.6.1.2.1.28.2.1.31.1.25|2|-1 +1.3.6.1.2.1.31.1.1.1.1.1|4|lo +1.3.6.1.2.1.31.1.1.1.1.2|4|tunl0 +1.3.6.1.2.1.31.1.1.1.1.3|4|ip6tnl0 +1.3.6.1.2.1.31.1.1.1.1.90|4|eth0 +1.3.6.1.2.1.31.1.1.1.2.1|65|0 +1.3.6.1.2.1.31.1.1.1.2.2|65|0 +1.3.6.1.2.1.31.1.1.1.2.3|65|0 +1.3.6.1.2.1.31.1.1.1.2.90|65|0 +1.3.6.1.2.1.31.1.1.1.3.1|65|0 +1.3.6.1.2.1.31.1.1.1.3.2|65|0 +1.3.6.1.2.1.31.1.1.1.3.3|65|0 +1.3.6.1.2.1.31.1.1.1.3.90|65|0 +1.3.6.1.2.1.31.1.1.1.4.1|65|0 +1.3.6.1.2.1.31.1.1.1.4.2|65|0 +1.3.6.1.2.1.31.1.1.1.4.3|65|0 +1.3.6.1.2.1.31.1.1.1.4.90|65|0 +1.3.6.1.2.1.31.1.1.1.5.1|65|0 +1.3.6.1.2.1.31.1.1.1.5.2|65|0 +1.3.6.1.2.1.31.1.1.1.5.3|65|0 +1.3.6.1.2.1.31.1.1.1.5.90|65|0 +1.3.6.1.2.1.31.1.1.1.6.1|70|5300203 +1.3.6.1.2.1.31.1.1.1.6.2|70|0 +1.3.6.1.2.1.31.1.1.1.6.3|70|0 +1.3.6.1.2.1.31.1.1.1.6.90|70|2928 +1.3.6.1.2.1.31.1.1.1.7.1|70|63808 +1.3.6.1.2.1.31.1.1.1.7.2|70|0 +1.3.6.1.2.1.31.1.1.1.7.3|70|0 +1.3.6.1.2.1.31.1.1.1.7.90|70|40 +1.3.6.1.2.1.31.1.1.1.8.1|70|0 +1.3.6.1.2.1.31.1.1.1.8.2|70|0 +1.3.6.1.2.1.31.1.1.1.8.3|70|0 +1.3.6.1.2.1.31.1.1.1.8.90|70|0 +1.3.6.1.2.1.31.1.1.1.9.1|70|0 +1.3.6.1.2.1.31.1.1.1.9.2|70|0 +1.3.6.1.2.1.31.1.1.1.9.3|70|0 +1.3.6.1.2.1.31.1.1.1.9.90|70|0 +1.3.6.1.2.1.31.1.1.1.10.1|70|5300203 +1.3.6.1.2.1.31.1.1.1.10.2|70|0 +1.3.6.1.2.1.31.1.1.1.10.3|70|0 +1.3.6.1.2.1.31.1.1.1.10.90|70|0 +1.3.6.1.2.1.31.1.1.1.11.1|70|63808 +1.3.6.1.2.1.31.1.1.1.11.2|70|0 +1.3.6.1.2.1.31.1.1.1.11.3|70|0 +1.3.6.1.2.1.31.1.1.1.11.90|70|0 +1.3.6.1.2.1.31.1.1.1.12.1|70|0 +1.3.6.1.2.1.31.1.1.1.12.2|70|0 +1.3.6.1.2.1.31.1.1.1.12.3|70|0 +1.3.6.1.2.1.31.1.1.1.12.90|70|0 +1.3.6.1.2.1.31.1.1.1.13.1|70|0 +1.3.6.1.2.1.31.1.1.1.13.2|70|0 +1.3.6.1.2.1.31.1.1.1.13.3|70|0 +1.3.6.1.2.1.31.1.1.1.13.90|70|0 +1.3.6.1.2.1.31.1.1.1.15.1|66|10 +1.3.6.1.2.1.31.1.1.1.15.2|66|0 +1.3.6.1.2.1.31.1.1.1.15.3|66|0 +1.3.6.1.2.1.31.1.1.1.15.90|66|10000 +1.3.6.1.2.1.31.1.1.1.16.1|2|2 +1.3.6.1.2.1.31.1.1.1.16.2|2|2 +1.3.6.1.2.1.31.1.1.1.16.3|2|2 +1.3.6.1.2.1.31.1.1.1.16.90|2|2 +1.3.6.1.2.1.31.1.1.1.17.1|2|2 +1.3.6.1.2.1.31.1.1.1.17.2|2|1 +1.3.6.1.2.1.31.1.1.1.17.3|2|1 +1.3.6.1.2.1.31.1.1.1.17.90|2|1 +1.3.6.1.2.1.31.1.1.1.18.1|4| +1.3.6.1.2.1.31.1.1.1.18.2|4| +1.3.6.1.2.1.31.1.1.1.18.3|4| +1.3.6.1.2.1.31.1.1.1.18.90|4| +1.3.6.1.2.1.31.1.1.1.19.1|67|0 +1.3.6.1.2.1.31.1.1.1.19.2|67|0 +1.3.6.1.2.1.31.1.1.1.19.3|67|0 +1.3.6.1.2.1.31.1.1.1.19.90|67|0 +1.3.6.1.2.1.31.1.5.0|67|0 +1.3.6.1.2.1.55.1.1.0|2|2 +1.3.6.1.2.1.55.1.2.0|2|64 +1.3.6.1.2.1.88.1.1.1.0|2|1 +1.3.6.1.2.1.88.1.1.2.0|66|0 +1.3.6.1.2.1.88.1.1.3.0|66|0 +1.3.6.1.2.1.88.1.1.4.0|66|0 +1.3.6.1.2.1.88.1.1.5.0|65|0 +1.3.6.1.2.1.88.1.2.1.0|65|0 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.1|6|1.3.6.1.2.1.2.2.1.1 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.2|6|1.3.6.1.2.1.2.2.1.7 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.3|6|1.3.6.1.2.1.2.2.1.8 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.1|6|1.3.6.1.2.1.88.2.1.1 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.2|6|1.3.6.1.2.1.88.2.1.2 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.3|6|1.3.6.1.2.1.88.2.1.3 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.4|6|1.3.6.1.2.1.88.2.1.4 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.5|6|1.3.6.1.2.1.88.2.1.6 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.1|6|1.3.6.1.2.1.88.2.1.1 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.2|6|1.3.6.1.2.1.88.2.1.2 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.3|6|1.3.6.1.2.1.88.2.1.3 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.4|6|1.3.6.1.2.1.88.2.1.4 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.5|6|1.3.6.1.2.1.88.2.1.5 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.1|2|1 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.2|2|1 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.3|2|1 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.1|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.2|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.3|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.4|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.5|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.1|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.2|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.3|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.4|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.5|2|2 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.1|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.2|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.3|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.1|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.2|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.3|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.4|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.5|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.1|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.2|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.3|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.4|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.5|2|1 +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.108.105.110.107.85.112|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|4| +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.108.105.110.107.85.112|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.108.105.110.107.85.112|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.108.105.110.107.85.112|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|2|1 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|6|1.3.6.1.6.3.1.1.5.3 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.108.105.110.107.85.112|6|1.3.6.1.6.3.1.1.5.4 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|6|1.3.6.1.2.1.88.2.0.4 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|6|1.3.6.1.2.1.88.2.0.3 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|6|1.3.6.1.2.1.88.2.0.1 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|6|1.3.6.1.2.1.88.2.0.2 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.108.105.110.107.85.112|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|4x|5f6c696e6b5570446f776e +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.108.105.110.107.85.112|4x|5f6c696e6b5570446f776e +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|4x|5f747269676765724661696c +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|4x|5f7472696767657246697265 +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|4x|5f7472696767657246697265 +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|4x|5f7472696767657246697265 +1.3.6.1.2.1.92.1.1.1.0|66|1000 +1.3.6.1.2.1.92.1.1.2.0|66|1440 +1.3.6.1.2.1.92.1.2.1.0|65|0 +1.3.6.1.2.1.92.1.2.2.0|65|0 +1.3.6.1.2.1.104.1.1.1.0|66|0 +1.3.6.1.2.1.104.1.1.2.0|65|0 +1.3.6.1.2.1.104.1.1.3.0|65|0 +1.3.6.1.2.1.104.1.1.4.0|65|0 +1.3.6.1.2.1.104.1.1.5.0|65|0 +1.3.6.1.2.1.104.1.1.6.0|65|0 +1.3.6.1.2.1.104.1.1.7.0|65|0 +1.3.6.1.2.1.104.1.1.8.0|70|0 +1.3.6.1.2.1.104.1.1.9.0|70|0 +1.3.6.1.2.1.104.1.1.10.0|70|0 +1.3.6.1.2.1.104.1.1.11.0|70|0 +1.3.6.1.2.1.104.1.1.12.0|70|0 +1.3.6.1.2.1.104.1.1.13.0|70|0 +1.3.6.1.2.1.104.1.1.14.0|70|0 +1.3.6.1.2.1.104.1.1.15.0|70|0 +1.3.6.1.2.1.104.1.1.16.0|70|0 +1.3.6.1.2.1.104.1.1.17.0|70|0 +1.3.6.1.2.1.104.1.1.18.0|67|0 +1.3.6.1.2.1.104.1.2.1.0|2|0 +1.3.6.1.2.1.104.1.2.2.0|66|0 +1.3.6.1.2.1.104.1.2.3.0|66|0 +1.3.6.1.2.1.104.1.2.4.0|66|0 +1.3.6.1.2.1.104.1.2.5.0|2|0 +1.3.6.1.2.1.104.1.2.6.0|66|0 +1.3.6.1.2.1.104.1.2.7.0|66|0 +1.3.6.1.4.1.2021.4.1.0|2|0 +1.3.6.1.4.1.2021.4.2.0|4|swap +1.3.6.1.4.1.2021.4.3.0|2|1048572 +1.3.6.1.4.1.2021.4.4.0|2|1048572 +1.3.6.1.4.1.2021.4.5.0|2|2046940 +1.3.6.1.4.1.2021.4.6.0|2|76976 +1.3.6.1.4.1.2021.4.11.0|2|1125548 +1.3.6.1.4.1.2021.4.12.0|2|16000 +1.3.6.1.4.1.2021.4.13.0|2|2940 +1.3.6.1.4.1.2021.4.14.0|2|73580 +1.3.6.1.4.1.2021.4.15.0|2|1577648 +1.3.6.1.4.1.2021.4.100.0|2|0 +1.3.6.1.4.1.2021.4.101.0|4| +1.3.6.1.4.1.2021.10.1.1.1|2|1 +1.3.6.1.4.1.2021.10.1.1.2|2|2 +1.3.6.1.4.1.2021.10.1.1.3|2|3 +1.3.6.1.4.1.2021.10.1.2.1|4x|4c6f61642d31 +1.3.6.1.4.1.2021.10.1.2.2|4x|4c6f61642d35 +1.3.6.1.4.1.2021.10.1.2.3|4x|4c6f61642d3135 +1.3.6.1.4.1.2021.10.1.3.1|4x|302e3036 +1.3.6.1.4.1.2021.10.1.3.2|4x|302e3036 +1.3.6.1.4.1.2021.10.1.3.3|4x|302e3032 +1.3.6.1.4.1.2021.10.1.4.1|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.4.2|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.4.3|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.5.1|2|6 +1.3.6.1.4.1.2021.10.1.5.2|2|6 +1.3.6.1.4.1.2021.10.1.5.3|2|2 +1.3.6.1.4.1.2021.10.1.6.1|68x|09050336452d32 +1.3.6.1.4.1.2021.10.1.6.2|68x|09050336452d32 +1.3.6.1.4.1.2021.10.1.6.3|68x|09050332452d32 +1.3.6.1.4.1.2021.10.1.100.1|2|0 +1.3.6.1.4.1.2021.10.1.100.2|2|0 +1.3.6.1.4.1.2021.10.1.100.3|2|0 +1.3.6.1.4.1.2021.10.1.101.1|4| +1.3.6.1.4.1.2021.10.1.101.2|4| +1.3.6.1.4.1.2021.10.1.101.3|4| +1.3.6.1.4.1.2021.11.1.0|2|1 +1.3.6.1.4.1.2021.11.2.0|4|systemStats +1.3.6.1.4.1.2021.11.3.0|2|0 +1.3.6.1.4.1.2021.11.4.0|2|0 +1.3.6.1.4.1.2021.11.5.0|2|10 +1.3.6.1.4.1.2021.11.6.0|2|0 +1.3.6.1.4.1.2021.11.7.0|2|142 +1.3.6.1.4.1.2021.11.8.0|2|314 +1.3.6.1.4.1.2021.11.9.0|2|0 +1.3.6.1.4.1.2021.11.10.0|2|0 +1.3.6.1.4.1.2021.11.11.0|2|99 +1.3.6.1.4.1.2021.11.50.0|65|162999 +1.3.6.1.4.1.2021.11.51.0|65|0 +1.3.6.1.4.1.2021.11.52.0|65|240292 +1.3.6.1.4.1.2021.11.53.0|65|166758712 +1.3.6.1.4.1.2021.11.54.0|65|2046 +1.3.6.1.4.1.2021.11.55.0|65|0 +1.3.6.1.4.1.2021.11.56.0|65|0 +1.3.6.1.4.1.2021.11.57.0|65|4713272 +1.3.6.1.4.1.2021.11.58.0|65|3330562 +1.3.6.1.4.1.2021.11.59.0|65|52242132 +1.3.6.1.4.1.2021.11.60.0|65|111026511 +1.3.6.1.4.1.2021.11.61.0|65|2442 +1.3.6.1.4.1.2021.11.62.0|65|0 +1.3.6.1.4.1.2021.11.63.0|65|0 +1.3.6.1.4.1.2021.11.64.0|65|0 +1.3.6.1.4.1.2021.11.65.0|65|0 +1.3.6.1.4.1.2021.11.66.0|65|0 +1.3.6.1.4.1.2021.13.14.1.0|2|1 +1.3.6.1.4.1.2021.13.15.1.1.1.1|2|1 +1.3.6.1.4.1.2021.13.15.1.1.1.2|2|2 +1.3.6.1.4.1.2021.13.15.1.1.1.3|2|3 +1.3.6.1.4.1.2021.13.15.1.1.1.4|2|4 +1.3.6.1.4.1.2021.13.15.1.1.1.5|2|5 +1.3.6.1.4.1.2021.13.15.1.1.1.6|2|6 +1.3.6.1.4.1.2021.13.15.1.1.1.7|2|7 +1.3.6.1.4.1.2021.13.15.1.1.1.8|2|8 +1.3.6.1.4.1.2021.13.15.1.1.1.9|2|9 +1.3.6.1.4.1.2021.13.15.1.1.1.10|2|10 +1.3.6.1.4.1.2021.13.15.1.1.1.11|2|11 +1.3.6.1.4.1.2021.13.15.1.1.1.12|2|12 +1.3.6.1.4.1.2021.13.15.1.1.1.13|2|13 +1.3.6.1.4.1.2021.13.15.1.1.1.14|2|14 +1.3.6.1.4.1.2021.13.15.1.1.1.15|2|15 +1.3.6.1.4.1.2021.13.15.1.1.1.16|2|16 +1.3.6.1.4.1.2021.13.15.1.1.1.17|2|17 +1.3.6.1.4.1.2021.13.15.1.1.1.18|2|18 +1.3.6.1.4.1.2021.13.15.1.1.1.19|2|19 +1.3.6.1.4.1.2021.13.15.1.1.1.20|2|20 +1.3.6.1.4.1.2021.13.15.1.1.1.21|2|21 +1.3.6.1.4.1.2021.13.15.1.1.1.22|2|22 +1.3.6.1.4.1.2021.13.15.1.1.1.23|2|23 +1.3.6.1.4.1.2021.13.15.1.1.1.24|2|24 +1.3.6.1.4.1.2021.13.15.1.1.1.25|2|25 +1.3.6.1.4.1.2021.13.15.1.1.1.26|2|26 +1.3.6.1.4.1.2021.13.15.1.1.1.27|2|27 +1.3.6.1.4.1.2021.13.15.1.1.1.28|2|28 +1.3.6.1.4.1.2021.13.15.1.1.2.1|4|loop0 +1.3.6.1.4.1.2021.13.15.1.1.2.2|4|loop1 +1.3.6.1.4.1.2021.13.15.1.1.2.3|4|loop2 +1.3.6.1.4.1.2021.13.15.1.1.2.4|4|loop3 +1.3.6.1.4.1.2021.13.15.1.1.2.5|4|loop4 +1.3.6.1.4.1.2021.13.15.1.1.2.6|4|loop5 +1.3.6.1.4.1.2021.13.15.1.1.2.7|4|loop6 +1.3.6.1.4.1.2021.13.15.1.1.2.8|4|loop7 +1.3.6.1.4.1.2021.13.15.1.1.2.9|4|nbd0 +1.3.6.1.4.1.2021.13.15.1.1.2.10|4|nbd1 +1.3.6.1.4.1.2021.13.15.1.1.2.11|4|nbd2 +1.3.6.1.4.1.2021.13.15.1.1.2.12|4|nbd3 +1.3.6.1.4.1.2021.13.15.1.1.2.13|4|nbd4 +1.3.6.1.4.1.2021.13.15.1.1.2.14|4|nbd5 +1.3.6.1.4.1.2021.13.15.1.1.2.15|4|nbd6 +1.3.6.1.4.1.2021.13.15.1.1.2.16|4|nbd7 +1.3.6.1.4.1.2021.13.15.1.1.2.17|4|nbd8 +1.3.6.1.4.1.2021.13.15.1.1.2.18|4|nbd9 +1.3.6.1.4.1.2021.13.15.1.1.2.19|4|nbd10 +1.3.6.1.4.1.2021.13.15.1.1.2.20|4|nbd11 +1.3.6.1.4.1.2021.13.15.1.1.2.21|4|nbd12 +1.3.6.1.4.1.2021.13.15.1.1.2.22|4|nbd13 +1.3.6.1.4.1.2021.13.15.1.1.2.23|4|nbd14 +1.3.6.1.4.1.2021.13.15.1.1.2.24|4|nbd15 +1.3.6.1.4.1.2021.13.15.1.1.2.25|4|sda +1.3.6.1.4.1.2021.13.15.1.1.2.26|4|sda1 +1.3.6.1.4.1.2021.13.15.1.1.2.27|4|sr0 +1.3.6.1.4.1.2021.13.15.1.1.2.28|4|sr1 +1.3.6.1.4.1.2021.13.15.1.1.3.1|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.2|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.3|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.4|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.5|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.6|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.7|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.8|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.9|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.10|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.11|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.12|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.13|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.14|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.15|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.16|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.17|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.18|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.19|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.20|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.21|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.22|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.23|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.24|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.25|65|1519135744 +1.3.6.1.4.1.2021.13.15.1.1.3.26|65|169962496 +1.3.6.1.4.1.2021.13.15.1.1.3.27|65|185944064 +1.3.6.1.4.1.2021.13.15.1.1.3.28|65|167936 +1.3.6.1.4.1.2021.13.15.1.1.4.1|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.2|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.3|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.4|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.5|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.6|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.7|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.8|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.9|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.10|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.11|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.12|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.13|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.14|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.15|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.16|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.17|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.18|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.19|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.20|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.21|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.22|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.23|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.24|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.25|65|2413195264 +1.3.6.1.4.1.2021.13.15.1.1.4.26|65|2412113920 +1.3.6.1.4.1.2021.13.15.1.1.4.27|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.28|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.1|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.2|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.3|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.4|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.5|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.6|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.7|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.8|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.9|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.10|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.11|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.12|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.13|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.14|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.15|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.16|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.17|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.18|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.19|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.20|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.21|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.22|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.23|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.24|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.25|65|40466 +1.3.6.1.4.1.2021.13.15.1.1.5.26|65|19699 +1.3.6.1.4.1.2021.13.15.1.1.5.27|65|2865 +1.3.6.1.4.1.2021.13.15.1.1.5.28|65|7 +1.3.6.1.4.1.2021.13.15.1.1.6.1|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.2|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.3|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.4|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.5|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.6|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.7|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.8|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.9|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.10|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.11|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.12|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.13|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.14|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.15|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.16|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.17|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.18|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.19|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.20|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.21|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.22|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.23|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.24|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.25|65|44353 +1.3.6.1.4.1.2021.13.15.1.1.6.26|65|31819 +1.3.6.1.4.1.2021.13.15.1.1.6.27|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.28|65|0 +1.3.6.1.4.1.2021.13.15.1.1.9.1|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.2|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.3|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.4|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.5|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.6|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.7|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.8|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.9|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.10|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.11|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.12|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.13|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.14|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.15|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.16|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.17|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.18|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.19|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.20|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.21|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.22|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.23|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.24|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.25|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.26|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.27|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.28|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.1|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.2|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.3|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.4|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.5|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.6|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.7|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.8|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.9|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.10|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.11|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.12|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.13|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.14|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.15|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.16|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.17|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.18|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.19|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.20|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.21|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.22|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.23|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.24|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.25|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.26|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.27|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.28|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.1|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.2|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.3|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.4|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.5|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.6|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.7|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.8|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.9|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.10|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.11|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.12|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.13|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.14|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.15|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.16|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.17|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.18|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.19|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.20|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.21|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.22|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.23|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.24|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.25|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.26|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.27|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.28|2|0 +1.3.6.1.4.1.2021.13.15.1.1.12.1|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.2|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.3|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.4|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.5|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.6|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.7|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.8|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.9|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.10|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.11|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.12|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.13|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.14|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.15|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.16|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.17|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.18|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.19|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.20|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.21|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.22|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.23|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.24|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.25|70|1519135744 +1.3.6.1.4.1.2021.13.15.1.1.12.26|70|169962496 +1.3.6.1.4.1.2021.13.15.1.1.12.27|70|185944064 +1.3.6.1.4.1.2021.13.15.1.1.12.28|70|167936 +1.3.6.1.4.1.2021.13.15.1.1.13.1|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.2|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.3|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.4|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.5|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.6|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.7|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.8|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.9|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.10|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.11|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.12|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.13|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.14|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.15|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.16|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.17|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.18|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.19|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.20|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.21|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.22|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.23|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.24|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.25|70|2413195264 +1.3.6.1.4.1.2021.13.15.1.1.13.26|70|2412113920 +1.3.6.1.4.1.2021.13.15.1.1.13.27|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.28|70|0 +1.3.6.1.4.1.2021.16.1.0|2|250 +1.3.6.1.4.1.2021.100.1.0|2|1 +1.3.6.1.4.1.2021.100.2.0|4x|352e372e32 +1.3.6.1.4.1.2021.100.3.0|4x|244461746524 +1.3.6.1.4.1.2021.100.4.0|4x|4d6f6e204f63742020312030393a35373a32352032303138 +1.3.6.1.4.1.2021.100.5.0|4x|24496424 +1.3.6.1.4.1.2021.100.6.0|4x|272d2d6275696c643d7838365f36342d7265646861742d6c696e75782d676e752720272d2d686f73743d7838365f36342d7265646861742d6c696e75782d676e752720272d2d70726f6772616d2d7072656669783d2720272d2d64697361626c652d646570656e64656e63792d747261636b696e672720272d2d7072656669783d2f7573722720272d2d657865632d7072656669783d2f7573722720272d2d62696e6469723d2f7573722f62696e2720272d2d7362696e6469723d2f7573722f7362696e2720272d2d646174616469723d2f7573722f73686172652720272d2d696e636c7564656469723d2f7573722f696e636c7564652720272d2d6c69626469723d2f7573722f6c696236342720272d2d6c6962657865636469723d2f7573722f6c6962657865632720272d2d6c6f63616c73746174656469723d2f7661722720272d2d73686172656473746174656469723d2f7661722f6c69622720272d2d6d616e6469723d2f7573722f73686172652f6d616e2720272d2d696e666f6469723d2f7573722f73686172652f696e666f2720272d2d64697361626c652d7374617469632720272d2d656e61626c652d7368617265642720272d2d776974682d63666c6167733d2d4f32202d67202d70697065202d57616c6c202d57702c2d445f464f52544946595f534f555243453d32202d66657863657074696f6e73202d66737461636b2d70726f746563746f722d7374726f6e67202d2d706172616d3d7373702d6275666665722d73697a653d34202d677265636f72642d6763632d73776974636865732020202d6d3634202d6d74756e653d67656e65726963202d445f52504d5f345f345f434f4d5041542720272d2d776974682d6c64666c6167733d2d576c2c2d7a2c72656c726f202d576c2c2d7a2c6e6f772720272d2d776974682d7379732d6c6f636174696f6e3d556e6b6e6f776e2720272d2d776974682d6c6f6766696c653d2f7661722f6c6f672f736e6d70642e6c6f672720272d2d776974682d70657273697374656e742d6469726563746f72793d2f7661722f6c69622f6e65742d736e6d702720272d2d776974682d6d69622d6d6f64756c65733d686f7374206167656e747820736d75782020202020207563642d736e6d702f6469736b696f207463702d6d6962207564702d6d6962206d696249492f6d74615f73656e646d61696c20202020202069702d6d69622f69707634496e746572666163655461626c652069702d6d69622f69707636496e746572666163655461626c6520202020202069702d6d69622f6970416464726573735072656669785461626c652f6970416464726573735072656669785461626c6520202020202069702d6d69622f697044656661756c74526f757465725461626c652f6970446566 +1.3.6.1.4.1.2021.100.10.0|2|0 +1.3.6.1.4.1.2021.100.11.0|2|0 +1.3.6.1.4.1.2021.100.12.0|2|0 +1.3.6.1.4.1.2021.100.13.0|2|0 +1.3.6.1.4.1.2021.100.20.0|2|0 +1.3.6.1.4.1.2021.101.1.0|2|0 +1.3.6.1.4.1.2021.101.2.0|4|snmp +1.3.6.1.4.1.2021.101.100.0|2|0 +1.3.6.1.4.1.2021.101.101.0|4| +1.3.6.1.4.1.8072.1.2.1.1.4.0.1.0.0|4| +1.3.6.1.4.1.8072.1.2.1.1.4.0.1.1.0|4| +1.3.6.1.4.1.8072.1.2.1.1.4.0.1.2.0|4| +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.4.127|4|ip +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.5.127|4|icmp +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.6.127|4|tcp +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.7.127|4|udp +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.11.127|4x|6d696249492f736e6d70 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.1.127|4x|6d696249492f7379734465736372 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.2.127|4x|6d696249492f7379734f626a6563744944 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.3.127|4x|6d696249492f737973557054696d65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.4.127|4x|6d696249492f737973436f6e74616374 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.5.127|4x|6d696249492f7379734e616d65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.6.127|4x|6d696249492f7379734c6f636174696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.7.127|4x|6d696249492f7379735365727669636573 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.8.127|4x|6d696249492f7379734f524c6173744368616e6765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.9.127|4x|6d696249492f7379734f525461626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.2.1.127|4x|6966206e756d626572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.2.2.127|4|ifTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.1.127|4|ipForwarding +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.25.127|4|ipv6IpForwarding +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.27.127|4|ipv4TableLastChanged +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.28.127|4|ipv4InterfaceTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.29.127|4|ipv6TableLastChanged +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.30.127|4|ipv6InterfaceTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.32.127|4|ipAddressPrefixTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.33.127|4|ipAddressSpinLock +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.34.127|4|ipAddressTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.35.127|4|inetNetToMediaTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.36.127|4|ipv6ScopeZoneIndexTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.37.127|4|ipDefaultRouterTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.5.29.127|4|icmpStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.5.30.127|4|icmpMsgStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.6.13.127|4|tcpTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.6.19.127|4|tcpConnectionTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.6.20.127|4|tcpListenerTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.7.5.127|4|udpTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.7.7.127|4|udpEndpointTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.4.1.2021.4.127|4|memory +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.4.1.2021.11.127|4|vmstat +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.6.3.12.1.127|4x|7461726765745f636f756e74657273 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.2.0.127|4|ipDefaultTTL +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.13.0.127|4|ipReasmTimeout +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.24.4.127|4|ipCidrRouteTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.24.7.127|4|inetCidrRouteTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.26.0.127|4|ipv6IpDefaultHopLimit +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.31.1.127|4|ipSystemStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.31.2.127|4|ipIfStatsTableLastChanged +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.31.3.127|4|ipIfStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.10.7.2.127|4|dot3StatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.11.30.0.127|4x|6d696249492f736e6d70456e61626c6541757468656e5472617073 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.16.1.1.127|4|etherStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.1.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.2.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.3.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.4.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.5.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.6.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.7.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.2.2.127|4x|686f73742f68724d656d6f727953697a65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.4.2.127|4|hrSWRunTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.5.1.127|4|hrSWRunPerfTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.6.3.127|4|hrSWInstalledTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.31.1.1.127|4|ifXTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.31.1.5.127|4|ifTableLastChanged +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.55.1.1.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.55.1.2.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.55.1.3.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.55.1.4.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.63.1.2.127|4|schedTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.88.1.1.127|4|mteResource +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.1.127|4|sctpStats +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.2.127|4|sctpParams +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.3.127|4|sctpAssocTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.4.127|4|sctpAssocLocalAddrTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.5.127|4|sctpAssocRemAddrTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.6.127|4|sctpLookupLocalPortTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.7.127|4|sctpLookupRemPortTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.8.127|4|sctpLookupRemHostNameTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.9.127|4|sctpLookupRemPrimIPAddrTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.10.127|4|sctpLookupRemIPAddrTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.4.100.127|4|memSwapError +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.4.101.127|4|memSwapErrMsg +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.16.1.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.1.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.2.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.3.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.4.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.5.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.6.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.10.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.11.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.12.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.13.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.20.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.101.1.127|4x|7563642d736e6d702f6572726f726d6962 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.101.2.127|4x|7563642d736e6d702f6572726f726d6962 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.101.100.127|4x|7563642d736e6d702f6572726f726d6962 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.101.101.127|4x|7563642d736e6d702f6572726f726d6962 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.11.2.1.127|4|snmpMPDStats +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.12.1.1.127|4x|7461726765742f736e6d705461726765745370696e4c6f636b +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.13.1.3.127|4|snmpNotifyFilterTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.15.1.1.127|4|usmStats +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.16.1.1.127|4x|7661636d5f636f6e74657874 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.3.1.1.1.127|4x|6d696249492f6174 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.3.1.1.2.127|4x|6d696249492f6174 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.3.1.1.3.127|4x|6d696249492f6174 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.1.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.2.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.3.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.4.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.5.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.1.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.2.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.3.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.4.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.5.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.6.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.7.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.8.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.9.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.10.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.11.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.12.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.13.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.22.1.1.127|4x|6d696249492f69706d65646961 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.22.1.2.127|4x|6d696249492f69706d65646961 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.22.1.3.127|4x|6d696249492f69706d65646961 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.22.1.4.127|4x|6d696249492f69706d65646961 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.24.6.0.127|4x|726f757465206e756d626572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.6.16.1.6.127|4x|6d696249492f69707636746370 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.7.6.1.3.127|4x|6d696249492f69707636756470 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.1.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.2.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.3.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.4.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.5.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.6.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.2.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.3.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.4.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.5.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.6.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.7.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.8.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.25.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.31.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.1.127|4|mteTriggerFailures +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.2.127|4|mteTriggerTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.3.127|4|mteTriggerDeltaTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.4.127|4|mteTriggerExistenceTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.5.127|4|mteTriggerBooleanTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.6.127|4|mteTriggerThresholdTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.3.1.127|4|mteObjectsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.4.2.127|4|mteEventTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.4.3.127|4|mteEventNotificationTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.4.4.127|4|mteEventSetTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.92.1.3.1.127|4|nlmLogTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.92.1.3.2.127|4|nlmLogVariableTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.1.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.2.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.3.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.4.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.5.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.100.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.101.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.102.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.103.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.1.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.2.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.3.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.100.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.101.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.102.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.103.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.1.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.2.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.3.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.4.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.5.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.6.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.7.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.8.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.9.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.10.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.11.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.12.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.13.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.14.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.15.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.16.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.100.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.101.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.1.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.2.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.3.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.4.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.5.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.6.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.100.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.101.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.14.1.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.16.2.127|4|lmTempSensorsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.16.3.127|4|lmFanSensorsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.16.4.127|4|lmVoltSensorsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.16.5.127|4|lmMiscSensorsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.1.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.2.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.3.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.4.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.100.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.101.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.2.1.127|4|nsModuleTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.5.1.127|4|nsCacheTimeout +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.5.2.127|4|nsCacheEnabled +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.5.3.127|4|tzCacheTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.8.1.127|4|nsTransactionTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.9.1.127|4|nsVacmAccessTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.1.1.6.1.127|4|snmpSetSerialNo +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.10.2.1.1.127|4x|736e6d7076332f736e6d70456e67696e65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.10.2.1.2.127|4x|736e6d7076332f736e6d70456e67696e65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.10.2.1.3.127|4x|736e6d7076332f736e6d70456e67696e65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.10.2.1.4.127|4x|736e6d7076332f736e6d70456e67696e65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.15.1.2.1.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.16.1.5.1.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.1.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.2.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.3.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.4.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.5.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.6.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.7.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.1.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.2.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.3.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.4.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.5.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.6.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.3.1.1.127|4x|686f73742f68725f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.3.1.2.127|4x|686f73742f68725f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.4.1.1.127|4x|686f73742f68725f6e6574776f726b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.5.1.1.127|4x|686f73742f68725f7072696e74 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.5.1.2.127|4x|686f73742f68725f7072696e74 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.6.1.1.127|4x|686f73742f68725f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.6.1.2.127|4x|686f73742f68725f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.6.1.3.127|4x|686f73742f68725f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.6.1.4.127|4x|686f73742f68725f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.1.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.2.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.3.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.4.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.5.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.1.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.2.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.3.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.4.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.5.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.6.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.7.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.8.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.9.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.2.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.3.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.4.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.5.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.6.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.7.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.8.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.9.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.10.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.11.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.1.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.2.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.3.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.4.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.5.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.6.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.7.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.8.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.9.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.10.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.11.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.12.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.13.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.14.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.15.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.16.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.17.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.18.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.19.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.20.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.1.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.2.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.3.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.4.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.5.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.6.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.7.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.8.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.9.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.10.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.11.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.12.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.13.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.14.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.15.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.16.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.17.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.18.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.19.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.20.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.21.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.22.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.23.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.24.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.25.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.26.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.27.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.28.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.29.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.30.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.31.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.32.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.33.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.34.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.92.1.1.1.0.127|4|nlmConfigGlobalEntryLimit +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.92.1.1.2.0.127|4|nlmConfigGlobalAgeOut +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.92.1.2.1.0.127|4|nlmStatsGlobalNotificationsLogged +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.92.1.2.2.0.127|4|nlmStatsGlobalNotificationsBumped +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.1.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.2.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.3.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.4.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.5.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.6.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.7.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.8.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.9.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.10.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.11.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.100.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.101.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.3.2.1.127|4|nsExtendNumEntries +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.3.2.2.127|4|nsExtendConfigTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.3.2.3.127|4|nsExtendOut1Table +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.3.2.4.127|4|nsExtendOut2Table +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.1.1.127|4|nsDebugEnabled +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.1.2.127|4|nsDebugOutputAll +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.1.3.127|4|nsDebugDumpPdu +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.1.4.127|4|tzDebugTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.2.1.127|4|tzLoggingTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.2.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.3.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.4.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.5.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.6.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.7.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.8.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.9.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.2.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.3.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.4.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.5.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.6.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.7.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.1.1.2.127|4|snmpNotifyTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.1.1.3.127|4|snmpNotifyTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.1.1.4.127|4|snmpNotifyTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.1.1.5.127|4|snmpNotifyTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.2.1.1.127|4|snmpNotifyFilterProfileTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.2.1.2.127|4|snmpNotifyFilterProfileTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.2.1.3.127|4|snmpNotifyFilterProfileTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.2.1.3.127|4x|6d696249492f7661636d3a7365633267726f7570 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.2.1.4.127|4x|6d696249492f7661636d3a7365633267726f7570 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.2.1.5.127|4x|6d696249492f7661636d3a7365633267726f7570 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.4.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.5.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.6.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.7.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.8.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.9.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.14.2.1.2.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.14.2.1.3.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.14.2.1.4.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.14.2.1.5.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.1.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.2.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.3.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.4.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.5.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.6.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.9.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.10.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.11.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.12.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.13.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.3.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.4.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.5.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.6.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.7.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.8.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.9.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.10.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.11.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.12.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.13.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.16.1.5.2.1.3.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.16.1.5.2.1.4.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.16.1.5.2.1.5.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.16.1.5.2.1.6.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.5.0.1.0.0|4x|a00002 +1.3.6.1.4.1.8072.1.2.1.1.5.0.1.1.0|4x|a00002 +1.3.6.1.4.1.8072.1.2.1.1.5.0.1.2.0|4x|a00002 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.6.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.7.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.11.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.7.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.8.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.9.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.2.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.2.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.25.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.27.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.28.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.29.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.30.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.32.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.33.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.34.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.35.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.36.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.37.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.5.29.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.5.30.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.6.13.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.6.19.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.6.20.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.7.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.7.7.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.4.1.2021.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.4.1.2021.11.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.6.3.12.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.2.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.13.0.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.24.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.24.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.26.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.31.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.31.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.31.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.10.7.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.11.30.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.16.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.2.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.4.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.5.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.6.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.31.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.31.1.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.55.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.55.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.55.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.55.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.63.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.88.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.6.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.7.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.8.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.9.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.10.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.4.100.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.4.101.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.16.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.20.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.101.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.101.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.101.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.101.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.11.2.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.12.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.13.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.15.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.16.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.3.1.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.3.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.3.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.22.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.22.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.22.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.22.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.24.6.0.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.6.16.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.7.6.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.25.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.31.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.3.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.4.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.4.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.4.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.92.1.3.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.92.1.3.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.102.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.103.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.102.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.103.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.14.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.15.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.16.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.14.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.16.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.16.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.16.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.16.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.2.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.5.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.5.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.5.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.8.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.9.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.1.1.6.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.10.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.10.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.10.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.10.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.15.1.2.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.16.1.5.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.3.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.3.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.4.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.5.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.5.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.6.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.6.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.6.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.6.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.14.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.15.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.16.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.17.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.18.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.19.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.20.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.14.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.15.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.16.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.17.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.18.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.19.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.20.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.21.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.22.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.23.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.24.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.25.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.26.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.27.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.28.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.29.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.30.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.31.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.32.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.33.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.34.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.92.1.1.1.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.92.1.1.2.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.92.1.2.1.0.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.92.1.2.2.0.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.3.2.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.3.2.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.3.2.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.3.2.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.2.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.14.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.14.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.14.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.14.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.16.1.5.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.16.1.5.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.16.1.5.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.16.1.5.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.6.0.1.0.0|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.1.1.0|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.1.2.0|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.6.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.11.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.6.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.8.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.9.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.2.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.25.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.27.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.28.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.29.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.30.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.32.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.33.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.34.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.35.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.36.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.37.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.5.29.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.5.30.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.6.13.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.6.19.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.6.20.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.7.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.7.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.4.1.2021.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.4.1.2021.11.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.6.3.12.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.2.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.13.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.24.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.24.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.26.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.31.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.31.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.31.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.10.7.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.11.30.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.16.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.2.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.4.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.5.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.6.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.31.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.31.1.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.55.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.55.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.55.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.55.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.63.1.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.88.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.6.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.8.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.9.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.10.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.4.100.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.4.101.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.16.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.20.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.101.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.101.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.101.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.101.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.11.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.12.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.13.1.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.15.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.16.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.3.1.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.3.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.3.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.22.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.22.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.22.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.22.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.24.6.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.6.16.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.7.6.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.25.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.31.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.6.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.3.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.4.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.4.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.4.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.92.1.3.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.92.1.3.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.102.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.103.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.102.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.103.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.14.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.15.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.16.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.14.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.16.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.16.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.16.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.16.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.5.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.5.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.5.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.8.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.9.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.1.1.6.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.10.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.10.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.10.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.10.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.15.1.2.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.16.1.5.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.3.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.3.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.4.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.5.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.5.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.6.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.6.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.6.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.6.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.14.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.15.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.16.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.17.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.18.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.19.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.20.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.14.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.15.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.16.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.17.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.18.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.19.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.20.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.21.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.22.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.23.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.24.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.25.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.26.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.27.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.28.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.29.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.30.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.31.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.32.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.33.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.34.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.92.1.1.1.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.92.1.1.2.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.92.1.2.1.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.92.1.2.2.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.3.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.3.2.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.3.2.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.3.2.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.1.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.1.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.1.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.1.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.1.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.14.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.14.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.14.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.14.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.16.1.5.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.16.1.5.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.16.1.5.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.16.1.5.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.3.2.1.0|2|0 +1.3.6.1.4.1.8072.1.5.1.0|2|5 +1.3.6.1.4.1.8072.1.5.2.0|2|2 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.2.2|2|3 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.24.4|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.24.7|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.31.1|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.31.3|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.32|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.34|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.35|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.36|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.37|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.5.29|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.5.30|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.5|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.6.13|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.6.19|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.6.20|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.6|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.7.5|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.7.7|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.7|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.10.7.2|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.16.1.1|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.25.4.2|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.25.6.3|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.104.1.1|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.104.1.3|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.4.1.8072.1.31|2|5 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.2.2|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.24.4|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.24.7|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.31.1|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.31.3|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.32|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.34|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.35|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.36|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.37|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.5.29|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.5.30|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.5|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.6.13|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.6.19|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.6.20|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.6|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.7.5|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.7.7|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.7|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.10.7.2|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.16.1.1|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.25.4.2|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.25.6.3|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.104.1.1|2|3 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.104.1.3|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.4.1.8072.1.31|2|4 +1.3.6.1.4.1.8072.1.7.1.1.0|2|2 +1.3.6.1.4.1.8072.1.7.1.2.0|2|2 +1.3.6.1.4.1.8072.1.7.1.3.0|2|1 +1.3.6.1.4.1.8072.1.7.2.1.1.3.7.47.118.97.114.47.108.111.103.47.115.110.109.112.100.46.108.111.103|2|3 +1.3.6.1.4.1.8072.1.7.2.1.1.4.7.47.118.97.114.47.108.111.103.47.115.110.109.112.100.46.108.111.103|2|0 +1.3.6.1.4.1.8072.1.7.2.1.1.5.7.47.118.97.114.47.108.111.103.47.115.110.109.112.100.46.108.111.103|2|1 +1.3.6.1.4.1.8072.1.9.1.1.2.8.103.114.112.99.111.109.109.53.0.0.1.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.8.103.114.112.99.111.109.109.53.0.0.1.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.8.103.114.112.99.111.109.109.53.0.0.1.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.9.103.114.112.99.111.109.109.49.48.0.0.1.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.9.103.114.112.99.111.109.109.49.48.0.0.1.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.9.103.114.112.99.111.109.109.49.48.0.0.1.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.3.8.103.114.112.99.111.109.109.53.0.0.1.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.8.103.114.112.99.111.109.109.53.0.0.1.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.8.103.114.112.99.111.109.109.53.0.0.1.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.9.103.114.112.99.111.109.109.49.48.0.0.1.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.9.103.114.112.99.111.109.109.49.48.0.0.1.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.9.103.114.112.99.111.109.109.49.48.0.0.1.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.4.8.103.114.112.99.111.109.109.53.0.0.1.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.8.103.114.112.99.111.109.109.53.0.0.1.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.8.103.114.112.99.111.109.109.53.0.0.1.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.9.103.114.112.99.111.109.109.49.48.0.0.1.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.9.103.114.112.99.111.109.109.49.48.0.0.1.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.9.103.114.112.99.111.109.109.49.48.0.0.1.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.5.8.103.114.112.99.111.109.109.53.0.0.1.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.8.103.114.112.99.111.109.109.53.0.0.1.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.8.103.114.112.99.111.109.109.53.0.0.1.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.9.103.114.112.99.111.109.109.49.48.0.0.1.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.9.103.114.112.99.111.109.109.49.48.0.0.1.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.9.103.114.112.99.111.109.109.49.48.0.0.1.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.123456789.1.0|4x|332e3134313500 +1.3.6.1.6.3.1.1.6.1.0|2|1980930474 +1.3.6.1.6.3.10.2.1.1.0|4x|80001f8880d66e3d477a46ad5b000000 +1.3.6.1.6.3.10.2.1.2.0|2|1 +1.3.6.1.6.3.10.2.1.3.0|2|42261 +1.3.6.1.6.3.10.2.1.4.0|2|1500 +1.3.6.1.6.3.11.2.1.1.0|65|0 +1.3.6.1.6.3.11.2.1.2.0|65|0 +1.3.6.1.6.3.11.2.1.3.0|65|0 +1.3.6.1.6.3.12.1.1.0|2|0 +1.3.6.1.6.3.12.1.4.0|65|0 +1.3.6.1.6.3.12.1.5.0|65|0 +1.3.6.1.6.3.15.1.1.1.0|65|0 +1.3.6.1.6.3.15.1.1.2.0|65|0 +1.3.6.1.6.3.15.1.1.3.0|65|0 +1.3.6.1.6.3.15.1.1.4.0|65|0 +1.3.6.1.6.3.15.1.1.5.0|65|0 +1.3.6.1.6.3.15.1.1.6.0|65|0 +1.3.6.1.6.3.15.1.2.1.0|2|0 +1.3.6.1.6.3.15.1.2.2.1.3.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4|datadogMD5AES +1.3.6.1.6.3.15.1.2.2.1.3.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4|datadogMD5DES +1.3.6.1.6.3.15.1.2.2.1.3.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4|datadogSHAAES +1.3.6.1.6.3.15.1.2.2.1.3.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4|datadogSHADES +1.3.6.1.6.3.15.1.2.2.1.4.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.4.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.4.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.4.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.5.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|6|1.3.6.1.6.3.10.1.1.2 +1.3.6.1.6.3.15.1.2.2.1.5.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|6|1.3.6.1.6.3.10.1.1.2 +1.3.6.1.6.3.15.1.2.2.1.5.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|6|1.3.6.1.6.3.10.1.1.3 +1.3.6.1.6.3.15.1.2.2.1.5.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|6|1.3.6.1.6.3.10.1.1.3 +1.3.6.1.6.3.15.1.2.2.1.6.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.6.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.6.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.6.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.7.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.7.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.7.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.7.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.8.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|6|1.3.6.1.6.3.10.1.2.4 +1.3.6.1.6.3.15.1.2.2.1.8.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|6|1.3.6.1.6.3.10.1.2.2 +1.3.6.1.6.3.15.1.2.2.1.8.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|6|1.3.6.1.6.3.10.1.2.4 +1.3.6.1.6.3.15.1.2.2.1.8.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|6|1.3.6.1.6.3.10.1.2.2 +1.3.6.1.6.3.15.1.2.2.1.9.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.9.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.9.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.9.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.10.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.10.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.10.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.10.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.11.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.11.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.11.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.11.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.12.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|2|3 +1.3.6.1.6.3.15.1.2.2.1.12.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|2|3 +1.3.6.1.6.3.15.1.2.2.1.12.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|2|3 +1.3.6.1.6.3.15.1.2.2.1.12.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|2|3 +1.3.6.1.6.3.15.1.2.2.1.13.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|2|1 +1.3.6.1.6.3.15.1.2.2.1.13.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|2|1 +1.3.6.1.6.3.15.1.2.2.1.13.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|2|1 +1.3.6.1.6.3.15.1.2.2.1.13.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|2|1 +1.3.6.1.6.3.16.1.1.1.1.0|4| +1.3.6.1.6.3.16.1.2.1.3.1.5.99.111.109.109.53|4|grpcomm5 +1.3.6.1.6.3.16.1.2.1.3.1.6.99.111.109.109.49.48|4|grpcomm10 +1.3.6.1.6.3.16.1.2.1.3.2.5.99.111.109.109.53|4|grpcomm5 +1.3.6.1.6.3.16.1.2.1.3.2.6.99.111.109.109.49.48|4|grpcomm10 +1.3.6.1.6.3.16.1.2.1.3.3.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4|grpdatadogMD5AES +1.3.6.1.6.3.16.1.2.1.3.3.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4|grpdatadogMD5DES +1.3.6.1.6.3.16.1.2.1.3.3.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4|grpdatadogSHAAES +1.3.6.1.6.3.16.1.2.1.3.3.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4|grpdatadogSHADES +1.3.6.1.6.3.16.1.2.1.4.1.5.99.111.109.109.53|2|4 +1.3.6.1.6.3.16.1.2.1.4.1.6.99.111.109.109.49.48|2|4 +1.3.6.1.6.3.16.1.2.1.4.2.5.99.111.109.109.53|2|4 +1.3.6.1.6.3.16.1.2.1.4.2.6.99.111.109.109.49.48|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.13.100.97.116.97.100.111.103.77.68.53.65.69.83|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.13.100.97.116.97.100.111.103.77.68.53.68.69.83|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.13.100.97.116.97.100.111.103.83.72.65.65.69.83|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.13.100.97.116.97.100.111.103.83.72.65.68.69.83|2|4 +1.3.6.1.6.3.16.1.2.1.5.1.5.99.111.109.109.53|2|1 +1.3.6.1.6.3.16.1.2.1.5.1.6.99.111.109.109.49.48|2|1 +1.3.6.1.6.3.16.1.2.1.5.2.5.99.111.109.109.53|2|1 +1.3.6.1.6.3.16.1.2.1.5.2.6.99.111.109.109.49.48|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.13.100.97.116.97.100.111.103.77.68.53.65.69.83|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.13.100.97.116.97.100.111.103.77.68.53.68.69.83|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.13.100.97.116.97.100.111.103.83.72.65.65.69.83|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.13.100.97.116.97.100.111.103.83.72.65.68.69.83|2|1 +1.3.6.1.6.3.16.1.4.1.4.8.103.114.112.99.111.109.109.53.0.0.1|2|2 +1.3.6.1.6.3.16.1.4.1.4.9.103.114.112.99.111.109.109.49.48.0.0.1|2|2 +1.3.6.1.6.3.16.1.4.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.5.8.103.114.112.99.111.109.109.53.0.0.1|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.9.103.114.112.99.111.109.109.49.48.0.0.1|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.6.8.103.114.112.99.111.109.109.53.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.6.9.103.114.112.99.111.109.109.49.48.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.6.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.6.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.6.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.6.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.8.103.114.112.99.111.109.109.53.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.7.9.103.114.112.99.111.109.109.49.48.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.7.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.8.8.103.114.112.99.111.109.109.53.0.0.1|2|4 +1.3.6.1.6.3.16.1.4.1.8.9.103.114.112.99.111.109.109.49.48.0.0.1|2|4 +1.3.6.1.6.3.16.1.4.1.8.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.8.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.8.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.8.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.9.8.103.114.112.99.111.109.109.53.0.0.1|2|1 +1.3.6.1.6.3.16.1.4.1.9.9.103.114.112.99.111.109.109.49.48.0.0.1|2|1 +1.3.6.1.6.3.16.1.4.1.9.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|2|1 +1.3.6.1.6.3.16.1.4.1.9.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|2|1 +1.3.6.1.6.3.16.1.4.1.9.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|2|1 +1.3.6.1.6.3.16.1.4.1.9.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|2|1 +1.3.6.1.6.3.16.1.5.1.0|2|0 +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.0|4| +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.1|4| +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.2|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.0|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.1|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.2|4| +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.0|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.1|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.2|2|2 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.0|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.2|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.0|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.2|2|4 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.2|2|1 diff --git a/test/new-e2e/ndm/snmp/compose/data/public_delay.snmprec b/test/new-e2e/ndm/snmp/compose/data/public_delay.snmprec new file mode 100644 index 0000000000000..d93f6d6ad69dd --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/public_delay.snmprec @@ -0,0 +1,126 @@ +1.3.6.1.2.1.1.1.0|4x|4c696e75782034316261393438393131623920342e392e38372d6c696e75786b69742d6175667320233120534d5020576564204d61722031342031353a31323a3136205554432032303138207838365f3634 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.8072.3.2.10 +1.3.6.1.2.1.1.3.0|67|4226041 +1.3.6.1.2.1.1.4.0|4x|726f6f74406c6f63616c686f7374 +1.3.6.1.2.1.1.5.0|4|41ba948911b9 +1.3.6.1.2.1.1.6.0|4|Unknown +1.3.6.1.2.1.1.8.0|67|9 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.6.3.11.3.1.1 +1.3.6.1.2.1.1.9.1.2.2|6|1.3.6.1.6.3.15.2.1.1 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.6.3.10.3.1.1 +1.3.6.1.2.1.1.9.1.2.4|6|1.3.6.1.6.3.1 +1.3.6.1.2.1.1.9.1.2.5|6|1.3.6.1.2.1.49 +1.3.6.1.2.1.1.9.1.2.6|6|1.3.6.1.2.1.4 +1.3.6.1.2.1.1.9.1.2.7|6|1.3.6.1.2.1.50 +1.3.6.1.2.1.1.9.1.2.8|6|1.3.6.1.6.3.16.2.2.1 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.6.3.13.3.1.3 +1.3.6.1.2.1.1.9.1.2.10|6|1.3.6.1.2.1.92 +1.3.6.1.2.1.1.9.1.3.1|4x|546865204d494220666f72204d6573736167652050726f63657373696e6720616e64204469737061746368696e672e +1.3.6.1.2.1.1.9.1.3.2|4x|546865206d616e6167656d656e7420696e666f726d6174696f6e20646566696e6974696f6e7320666f722074686520534e4d5020557365722d6261736564205365637572697479204d6f64656c2e +1.3.6.1.2.1.1.9.1.3.3|4x|54686520534e4d50204d616e6167656d656e7420417263686974656374757265204d49422e +1.3.6.1.2.1.1.9.1.3.4|4x|546865204d4942206d6f64756c6520666f7220534e4d50763220656e746974696573 +1.3.6.1.2.1.1.9.1.3.5|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e672054435020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.6|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e6720495020616e642049434d5020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.7|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e672055445020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.8|4x|566965772d62617365642041636365737320436f6e74726f6c204d6f64656c20666f7220534e4d502e +1.3.6.1.2.1.1.9.1.3.9|4x|546865204d4942206d6f64756c657320666f72206d616e6167696e6720534e4d50204e6f74696669636174696f6e2c20706c75732066696c746572696e672e +1.3.6.1.2.1.1.9.1.3.10|4x|546865204d4942206d6f64756c6520666f72206c6f6767696e6720534e4d50204e6f74696669636174696f6e732e +1.3.6.1.2.1.1.9.1.4.1|67|9 +1.3.6.1.2.1.1.9.1.4.2|67|9 +1.3.6.1.2.1.1.9.1.4.3|67|9 +1.3.6.1.2.1.1.9.1.4.4|67|9 +1.3.6.1.2.1.1.9.1.4.5|67|9 +1.3.6.1.2.1.1.9.1.4.6|67|9 +1.3.6.1.2.1.1.9.1.4.7|67|9 +1.3.6.1.2.1.1.9.1.4.8|67|9 +1.3.6.1.2.1.1.9.1.4.9|67|9 +1.3.6.1.2.1.1.9.1.4.10|67|9 +1.3.6.1.2.1.2.1.0|2|4 +1.3.6.1.2.1.2.2.1.1.1|2|1 +1.3.6.1.2.1.2.2.1.1.2|2|2 +1.3.6.1.2.1.2.2.1.1.3|2|3 +1.3.6.1.2.1.2.2.1.1.90|2|90 +1.3.6.1.2.1.2.2.1.2.1|4|lo +1.3.6.1.2.1.2.2.1.2.2|4|tunl0 +1.3.6.1.2.1.2.2.1.2.3|4|ip6tnl0 +1.3.6.1.2.1.2.2.1.2.90|4|eth0 +1.3.6.1.2.1.2.2.1.3.1|2|24 +1.3.6.1.2.1.2.2.1.3.2|2|131 +1.3.6.1.2.1.2.2.1.3.3|2|131 +1.3.6.1.2.1.2.2.1.3.90|2|6 +1.3.6.1.2.1.2.2.1.4.1|2|65536 +1.3.6.1.2.1.2.2.1.4.2|2|1480 +1.3.6.1.2.1.2.2.1.4.3|2|1452 +1.3.6.1.2.1.2.2.1.4.90|2|1500 +1.3.6.1.2.1.2.2.1.5.1|66|10000000 +1.3.6.1.2.1.2.2.1.5.2|66|0 +1.3.6.1.2.1.2.2.1.5.3|66|0 +1.3.6.1.2.1.2.2.1.5.90|66|4294967295 +1.3.6.1.2.1.2.2.1.6.1|4| +1.3.6.1.2.1.2.2.1.6.2|4| +1.3.6.1.2.1.2.2.1.6.3|4| +1.3.6.1.2.1.2.2.1.6.90|4x|0242ac110002 +1.3.6.1.2.1.2.2.1.7.1|2:delay|value=1,wait=10000 +1.3.6.1.2.1.2.2.1.7.2|2|2 +1.3.6.1.2.1.2.2.1.7.3|2|2 +1.3.6.1.2.1.2.2.1.7.90|2|1 +1.3.6.1.2.1.2.2.1.8.1|2|1 +1.3.6.1.2.1.2.2.1.8.2|2|2 +1.3.6.1.2.1.2.2.1.8.3|2|2 +1.3.6.1.2.1.2.2.1.8.90|2|1 +1.3.6.1.2.1.2.2.1.9.1|67|0 +1.3.6.1.2.1.2.2.1.9.2|67|0 +1.3.6.1.2.1.2.2.1.9.3|67|0 +1.3.6.1.2.1.2.2.1.9.90|67|0 +1.3.6.1.2.1.2.2.1.10.1|65|5300203 +1.3.6.1.2.1.2.2.1.10.2|65|0 +1.3.6.1.2.1.2.2.1.10.3|65|0 +1.3.6.1.2.1.2.2.1.10.90|65|2928 +1.3.6.1.2.1.2.2.1.11.1|65|63808 +1.3.6.1.2.1.2.2.1.11.2|65|0 +1.3.6.1.2.1.2.2.1.11.3|65|0 +1.3.6.1.2.1.2.2.1.11.90|65|40 +1.3.6.1.2.1.2.2.1.12.1|65|0 +1.3.6.1.2.1.2.2.1.12.2|65|0 +1.3.6.1.2.1.2.2.1.12.3|65|0 +1.3.6.1.2.1.2.2.1.12.90|65|0 +1.3.6.1.2.1.2.2.1.13.1|65|0 +1.3.6.1.2.1.2.2.1.13.2|65|0 +1.3.6.1.2.1.2.2.1.13.3|65|0 +1.3.6.1.2.1.2.2.1.13.90|65|0 +1.3.6.1.2.1.2.2.1.14.1|65|0 +1.3.6.1.2.1.2.2.1.14.2|65|0 +1.3.6.1.2.1.2.2.1.14.3|65|0 +1.3.6.1.2.1.2.2.1.14.90|65|0 +1.3.6.1.2.1.2.2.1.15.1|65|0 +1.3.6.1.2.1.2.2.1.15.2|65|0 +1.3.6.1.2.1.2.2.1.15.3|65|0 +1.3.6.1.2.1.2.2.1.15.90|65|0 +1.3.6.1.2.1.2.2.1.16.1|65|5300203 +1.3.6.1.2.1.2.2.1.16.2|65|0 +1.3.6.1.2.1.2.2.1.16.3|65|0 +1.3.6.1.2.1.2.2.1.16.90|65|0 +1.3.6.1.2.1.2.2.1.17.1|65|63808 +1.3.6.1.2.1.2.2.1.17.2|65|0 +1.3.6.1.2.1.2.2.1.17.3|65|0 +1.3.6.1.2.1.2.2.1.17.90|65|0 +1.3.6.1.2.1.2.2.1.18.1|65|0 +1.3.6.1.2.1.2.2.1.18.2|65|0 +1.3.6.1.2.1.2.2.1.18.3|65|0 +1.3.6.1.2.1.2.2.1.18.90|65|0 +1.3.6.1.2.1.2.2.1.19.1|65|0 +1.3.6.1.2.1.2.2.1.19.2|65|0 +1.3.6.1.2.1.2.2.1.19.3|65|0 +1.3.6.1.2.1.2.2.1.19.90|65|0 +1.3.6.1.2.1.2.2.1.20.1|65|0 +1.3.6.1.2.1.2.2.1.20.2|65|0 +1.3.6.1.2.1.2.2.1.20.3|65|0 +1.3.6.1.2.1.2.2.1.20.90|65|0 +1.3.6.1.2.1.2.2.1.21.1|66|0 +1.3.6.1.2.1.2.2.1.21.2|66|0 +1.3.6.1.2.1.2.2.1.21.3|66|0 +1.3.6.1.2.1.2.2.1.21.90|66|0 +1.3.6.1.2.1.2.2.1.22.1|6|0.0 +1.3.6.1.2.1.2.2.1.22.2|6|0.0 +1.3.6.1.2.1.2.2.1.22.3|6|0.0 +1.3.6.1.2.1.2.2.1.22.90|6|0.0 diff --git a/test/new-e2e/ndm/snmp/compose/snmpCompose.yaml b/test/new-e2e/ndm/snmp/compose/snmpCompose.yaml new file mode 100644 index 0000000000000..07aca8b4aaf1a --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/snmpCompose.yaml @@ -0,0 +1,15 @@ +version: "3.9" +services: + snmp: + image: "datadog/docker-library:snmp" + ports: + - "1161:1161/udp" + command: --args-from-file=/usr/snmpsim/data/args_list.txt --variation-modules-dir=/usr/local/snmpsim/variation + volumes: + - ${DATA_DIR}:/usr/snmpsim/data/ + container_name: dd-snmp + agent: + volumes: + - ${CONFIG_DIR}/snmp.yaml:/etc/datadog-agent/conf.d/snmp.d/snmp.yaml + container_name: dd-agent + diff --git a/test/new-e2e/ndm/snmp/config/public.yaml b/test/new-e2e/ndm/snmp/config/public.yaml new file mode 100644 index 0000000000000..ddf947f636e04 --- /dev/null +++ b/test/new-e2e/ndm/snmp/config/public.yaml @@ -0,0 +1,7 @@ +init_config: + loader: core + use_device_id_as_hostname: true +instances: + - ip_address: dd-snmp + port: 1161 + community_string: "public" diff --git a/test/new-e2e/ndm/snmp/snmpTestEnv.go b/test/new-e2e/ndm/snmp/snmpTestEnv.go new file mode 100644 index 0000000000000..e546f7b3aecad --- /dev/null +++ b/test/new-e2e/ndm/snmp/snmpTestEnv.go @@ -0,0 +1,139 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package snmp + +import ( + "context" + "embed" + "errors" + "fmt" + "path" + + "github.com/DataDog/datadog-agent/test/new-e2e/utils/infra" + "github.com/DataDog/test-infra-definitions/aws/ec2/ec2" + "github.com/DataDog/test-infra-definitions/datadog/agent" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + + "github.com/pulumi/pulumi/sdk/v3/go/auto" +) + +type TestEnv struct { + context context.Context + envName string + name string + + InstanceIP string + StackOutput auto.UpResult +} + +//go:embed compose/snmpCompose.yaml +var snmpCompose string + +//go:embed config/public.yaml +var snmpConfig string + +const ( + composeDataPath = "compose/data" +) + +func NewTestEnv(name, keyPairName, ddAPIKey, ddAPPKey string) (*TestEnv, error) { + snmpTestEnv := &TestEnv{ + context: context.Background(), + envName: "aws/sandbox", + name: fmt.Sprintf("snmp-agent-%s", name), + } + + stackManager := infra.GetStackManager() + + config := auto.ConfigMap{ + "ddagent:apiKey": auto.ConfigValue{Value: ddAPIKey, Secret: true}, + "ddinfra:aws/defaultKeyPairName": auto.ConfigValue{Value: keyPairName}, + } + + upResult, err := stackManager.GetStack(snmpTestEnv.context, snmpTestEnv.envName, snmpTestEnv.name, config, func(ctx *pulumi.Context) error { + // setup VM + vm, err := ec2.NewVM(ctx) + if err != nil { + return err + } + + // upload snmpsim data files + createDataDirCommand, dataPath, err := vm.FileManager.TempDirectory("data") + if err != nil { + return err + } + dataFiles, err := loadDataFileNames() + if err != nil { + return err + } + fileCommands := []pulumi.Resource{} + for _, fileName := range dataFiles { + fileContent, err := dataFolder.ReadFile(path.Join(composeDataPath, fileName)) + if err != nil { + return err + } + dontUseSudo := false + fileCommand, err := vm.FileManager.CopyInlineFile(fileName, pulumi.String(fileContent), path.Join(dataPath, fileName), dontUseSudo, + pulumi.DependsOn([]pulumi.Resource{createDataDirCommand})) + if err != nil { + return err + } + fileCommands = append(fileCommands, fileCommand) + } + + createConfigDirCommand, configPath, err := vm.FileManager.TempDirectory("config") + if err != nil { + return err + } + // edit snmp config file + dontUseSudo := false + configCommand, err := vm.FileManager.CopyInlineFile("snmp.yaml", pulumi.String(snmpConfig), path.Join(configPath, "snmp.yaml"), dontUseSudo, + pulumi.DependsOn([]pulumi.Resource{createConfigDirCommand})) + if err != nil { + return err + } + + // install agent and snmpsim on docker + envVars := pulumi.StringMap{"DATA_DIR": pulumi.String(dataPath), "CONFIG_DIR": pulumi.String(configPath)} + composeDependencies := []pulumi.Resource{createDataDirCommand, configCommand} + composeDependencies = append(composeDependencies, fileCommands...) + _, err = agent.NewDockerAgentInstallation(vm.CommonEnvironment, vm.DockerManager, snmpCompose, envVars, pulumi.DependsOn(composeDependencies)) + return err + }) + + if err != nil { + return nil, err + } + + snmpTestEnv.StackOutput = upResult + + output, found := upResult.Outputs["instance-ip"] + + if !found { + return nil, errors.New("unable to find host ip") + } + snmpTestEnv.InstanceIP = output.Value.(string) + + return snmpTestEnv, nil +} + +func (testEnv *TestEnv) Destroy() error { + return infra.GetStackManager().DeleteStack(testEnv.context, testEnv.envName, testEnv.name) +} + +//go:embed compose/data +var dataFolder embed.FS + +func loadDataFileNames() (out []string, err error) { + fileEntries, err := dataFolder.ReadDir(composeDataPath) + if err != nil { + return nil, err + } + for _, f := range fileEntries { + out = append(out, f.Name()) + } + return out, nil +} diff --git a/test/new-e2e/scenarios/ndm/main.go b/test/new-e2e/scenarios/ndm/main.go new file mode 100644 index 0000000000000..6a5d8e1a4c8ce --- /dev/null +++ b/test/new-e2e/scenarios/ndm/main.go @@ -0,0 +1,38 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package main + +import ( + "flag" + "fmt" + + "github.com/DataDog/datadog-agent/test/new-e2e/ndm/snmp" +) + +func main() { + envNamePtr := flag.String("name", "snmp", "environment name") + destroyPtr := flag.Bool("destroy", false, "[optional] should destroy the environment") + keyPairNamePtr := flag.String("keyPairName", "", "ssh key pair name. Should be uploaded on the cloud provider") + apiKeyPtr := flag.String("apiKey", "", "Datadog API key") + appKeyPtr := flag.String("appKey", "", "Datadog APP key") + + flag.Parse() + + snmpEnv, err := snmp.NewTestEnv(*envNamePtr, *keyPairNamePtr, *apiKeyPtr, *appKeyPtr) + if err != nil { + panic(err) + } + + if *destroyPtr { + err = snmpEnv.Destroy() + if err != nil { + panic(err) + } + return + } + + fmt.Println(snmpEnv.InstanceIP) +} diff --git a/test/new-e2e/utils/clients/aws.go b/test/new-e2e/utils/clients/aws.go new file mode 100644 index 0000000000000..c234c69695ceb --- /dev/null +++ b/test/new-e2e/utils/clients/aws.go @@ -0,0 +1,61 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package clients + +import ( + "context" + "sync" + "time" + + "github.com/aws/aws-sdk-go-v2/aws" + awsconfig "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/ssm" +) + +const ( + awsTimeout = 5 * time.Second +) + +var ( + initLock = sync.Mutex{} + awsConfig *aws.Config + awsSSMClient *ssm.Client +) + +// GetAWSSSMClient returns an aws SSM client +func GetAWSSSMClient() (*ssm.Client, error) { + initLock.Lock() + defer initLock.Unlock() + + if awsSSMClient != nil { + return awsSSMClient, nil + } + + cfg, err := getAWSConfig() + if err != nil { + return nil, err + } + + awsSSMClient = ssm.NewFromConfig(*cfg) + return awsSSMClient, nil +} + +func getAWSConfig() (*aws.Config, error) { + if awsConfig != nil { + return awsConfig, nil + } + + ctx, cancel := context.WithTimeout(context.Background(), awsTimeout) + defer cancel() + + cfg, err := awsconfig.LoadDefaultConfig(ctx) + if err != nil { + return nil, err + } + + awsConfig = &cfg + return awsConfig, nil +} diff --git a/test/new-e2e/utils/clients/ssh.go b/test/new-e2e/utils/clients/ssh.go new file mode 100644 index 0000000000000..657b6bb10984a --- /dev/null +++ b/test/new-e2e/utils/clients/ssh.go @@ -0,0 +1,60 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package clients + +import ( + "time" + + "github.com/cenkalti/backoff" + "golang.org/x/crypto/ssh" +) + +// GetSSHClient returns an ssh Client for the specified host +func GetSSHClient(user, host, privateKey string, retryInterval time.Duration, maxRetries uint64) (client *ssh.Client, session *ssh.Session, err error) { + err = backoff.Retry(func() error { + client, session, err = getSSHClient(user, host, privateKey) + return err + }, backoff.WithMaxRetries(backoff.NewConstantBackOff(retryInterval), maxRetries)) + + return +} + +func getSSHClient(user, host, privateKey string) (*ssh.Client, *ssh.Session, error) { + privateKeyAuth, err := ssh.ParsePrivateKey([]byte(privateKey)) + if err != nil { + return nil, nil, err + } + + sshConfig := &ssh.ClientConfig{ + User: user, + Auth: []ssh.AuthMethod{ssh.PublicKeys(privateKeyAuth)}, + HostKeyCallback: ssh.InsecureIgnoreHostKey(), + } + + client, err := ssh.Dial("tcp", host, sshConfig) + if err != nil { + return nil, nil, err + } + + session, err := client.NewSession() + if err != nil { + client.Close() + return nil, nil, err + } + + return client, session, nil +} + +func ExecuteCommand(client *ssh.Client, command string) (string, error) { + session, err := client.NewSession() + if err != nil { + return "", err + } + + stdout, err := session.CombinedOutput(command) + + return string(stdout), err +} diff --git a/test/new-e2e/utils/credentials/manager.go b/test/new-e2e/utils/credentials/manager.go new file mode 100644 index 0000000000000..3bc2e9d8cfd9f --- /dev/null +++ b/test/new-e2e/utils/credentials/manager.go @@ -0,0 +1,37 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package credentials + +// StoreID is the id to store the aws credential information +type StoreID string + +const ( + // AWSSSMStore is the aws store id shared tests + AWSSSMStore StoreID = "aws-ssm" +) + +// Manager is used for interacting with the aws systems manager for credentials +type Manager interface { + GetCredential(StoreID, string) (string, error) +} + +type manager struct { + credStores map[StoreID]store +} + +// NewManager creates a Manager +func NewManager() Manager { + return &manager{ + credStores: map[StoreID]store{ + AWSSSMStore: newCachingStore(&awsStore{}), + }, + } +} + +// GetCredential returns a credential for a given storeId and key +func (m *manager) GetCredential(storeID StoreID, key string) (string, error) { + return m.credStores[storeID].get(key) +} diff --git a/test/new-e2e/utils/credentials/store-aws.go b/test/new-e2e/utils/credentials/store-aws.go new file mode 100644 index 0000000000000..221d4a864e113 --- /dev/null +++ b/test/new-e2e/utils/credentials/store-aws.go @@ -0,0 +1,31 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package credentials + +import ( + "context" + "fmt" + + "github.com/DataDog/datadog-agent/test/new-e2e/utils/clients" + "github.com/aws/aws-sdk-go-v2/service/ssm" +) + +type awsStore struct{} + +func (s *awsStore) get(key string) (string, error) { + ssmClient, err := clients.GetAWSSSMClient() + if err != nil { + return "", err + } + + withDecription := true + output, err := ssmClient.GetParameter(context.Background(), &ssm.GetParameterInput{Name: &key, WithDecryption: &withDecription}) + if err != nil { + return "", fmt.Errorf("failed to get SSM parameter '%s', err: %w", key, err) + } + + return *output.Parameter.Value, nil +} diff --git a/test/new-e2e/utils/credentials/store.go b/test/new-e2e/utils/credentials/store.go new file mode 100644 index 0000000000000..06107e1fb2922 --- /dev/null +++ b/test/new-e2e/utils/credentials/store.go @@ -0,0 +1,44 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package credentials + +import "sync" + +type store interface { + get(key string) (string, error) +} + +type cachingStore struct { + l sync.Mutex + cache map[string]string + s store +} + +func newCachingStore(s store) store { + return &cachingStore{ + cache: make(map[string]string), + s: s, + } +} + +func (s *cachingStore) get(key string) (string, error) { + s.l.Lock() + defer s.l.Unlock() + + value, found := s.cache[key] + if found { + return value, nil + } + + var err error + value, err = s.s.get(key) + if err != nil { + return "", err + } + + s.cache[key] = value + return value, nil +} diff --git a/test/new-e2e/utils/infra/stack_manager.go b/test/new-e2e/utils/infra/stack_manager.go new file mode 100644 index 0000000000000..609583ced37a1 --- /dev/null +++ b/test/new-e2e/utils/infra/stack_manager.go @@ -0,0 +1,162 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package infra + +import ( + "context" + "fmt" + "os" + "os/user" + "strings" + "sync" + "time" + + "github.com/pulumi/pulumi/sdk/v3/go/auto" + "github.com/pulumi/pulumi/sdk/v3/go/auto/optdestroy" + "github.com/pulumi/pulumi/sdk/v3/go/auto/optup" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +const ( + projectName = "ddagent-e2e" + stackPrefix = "ddagent-e2e" + environmentParamName = "ddinfra:env" + + stackUpTimeout = 20 * time.Minute + stackDestroyTimeout = 60 * time.Minute + stackDeleteTimeout = 20 * time.Minute +) + +var ( + stackManager *StackManager + initStackManager sync.Once +) + +// StackManager handles +type StackManager struct { + stacks map[string]*auto.Stack + lock sync.RWMutex +} + +func GetStackManager() *StackManager { + initStackManager.Do(func() { + var err error + + stackManager, err = newStackManager(context.Background()) + if err != nil { + panic(fmt.Sprintf("Got an error during StackManager singleton init, err: %v", err)) + } + }) + + return stackManager +} + +func newStackManager(ctx context.Context) (*StackManager, error) { + return &StackManager{ + stacks: make(map[string]*auto.Stack), + }, nil +} + +// GetStack creates or return a stack based on env+stack name +func (sm *StackManager) GetStack(ctx context.Context, envName string, name string, config auto.ConfigMap, deployFunc pulumi.RunFunc) (auto.UpResult, error) { + sm.lock.RLock() + defer sm.lock.RUnlock() + + // Set environment + if config == nil { + config = auto.ConfigMap{} + } + config[environmentParamName] = auto.ConfigValue{Value: envName} + + finalStackName := stackName(name) + stackID := stackID(envName, name) + stack := sm.stacks[stackID] + if stack == nil { + newStack, err := auto.UpsertStackInlineSource(ctx, finalStackName, projectName, deployFunc) + if err != nil { + return auto.UpResult{}, err + } + stack = &newStack + sm.stacks[stackID] = stack + } + + err := stack.SetAllConfig(ctx, config) + if err != nil { + return auto.UpResult{}, err + } + + upCtx, cancel := context.WithTimeout(ctx, stackUpTimeout) + defer cancel() + return stack.Up(upCtx, optup.ProgressStreams(os.Stdout)) +} + +func (sm *StackManager) DeleteStack(ctx context.Context, envName string, name string) error { + sm.lock.Lock() + defer sm.lock.Unlock() + + stackID := stackID(envName, name) + return sm.deleteStack(ctx, stackID, sm.stacks[stackID]) +} + +func (sm *StackManager) Cleanup(ctx context.Context) []error { + sm.lock.Lock() + defer sm.lock.Unlock() + + var errors []error + + for stackID, stack := range sm.stacks { + err := sm.deleteStack(ctx, stackID, stack) + if err != nil { + errors = append(errors, err) + } + } + + return errors +} + +func (sm *StackManager) deleteStack(ctx context.Context, stackID string, stack *auto.Stack) error { + if stack == nil { + return fmt.Errorf("unable to find stack, skipping deletion of: %s", stackID) + } + + _, err := stack.Refresh(ctx) + if err != nil { + return err + } + + destroyContext, cancel := context.WithTimeout(ctx, stackDestroyTimeout) + _, err = stack.Destroy(destroyContext, optdestroy.ProgressStreams(os.Stdout)) + cancel() + if err != nil { + return err + } + + deleteContext, cancel := context.WithTimeout(ctx, stackDeleteTimeout) + defer cancel() + err = stack.Workspace().RemoveStack(deleteContext, stack.Name()) + return err +} + +func stackName(stackName string) string { + var username string + user, err := user.Current() + if err == nil { + username = user.Username + } + + if username == "" || username == "root" { + username = "nouser" + } + username = strings.ToLower(username) + username = strings.ReplaceAll(username, ".", "-") + username = strings.ReplaceAll(username, " ", "-") + + return stackPrefix + "-" + username + "-" + stackName +} + +func stackID(envName string, stackName string) string { + return envName + "/" + stackName +} diff --git a/test/regression/README.md b/test/regression/README.md new file mode 100644 index 0000000000000..eaca3c74640a5 --- /dev/null +++ b/test/regression/README.md @@ -0,0 +1,30 @@ +# Regression Detection + +The Regression Detector, owned by Single Machine Performance, is a tool that +detects if there are more-than-random performance changes to a target program -- +here, the Agent -- across a variety of experiments and goals. This directory +contains the experiments for Agent. A similar one exists in [Vector]. Please do +add your own experiments, instructions below. If you have any questions do +contact #single-machine-performance; we'll be glad to help. + +## Adding an Experiment + +In order for SMP's tooling to properly read a experiment directory please +adhere to the following structure. Starting at the root: + +* `cases/` -- __Required__ The directory that contains each regression + experiment. Each sub-directory is a separate experiment and the name of the + directory is the name of the experiment, for instance + `tcp_syslog_to_blackhole`. We call these sub-directories 'cases'. + +The structure of each case is as follows: + +* `lading/lading.yaml` -- __Required__ The [lading] configuration inside its own + directory. Directory will be mount read-only in the container built from + `Dockerfile` above at `/etc/lading`. +* `datadog-agent/` -- __Required__ This is the configuration directory of your + program. Will be mounted read-only in the container build from `Dockerfile` + above at `/etc/datadog-agent`. + +[Vector]: https://github.com/vectordotdev/vector/tree/master/regression +[lading]: https://github.com/DataDog/lading diff --git a/test/regression/cases/file_to_blackhole/datadog-agent/conf.d/disk-listener.d/conf.yaml b/test/regression/cases/file_to_blackhole/datadog-agent/conf.d/disk-listener.d/conf.yaml new file mode 100644 index 0000000000000..54d14b3222f4d --- /dev/null +++ b/test/regression/cases/file_to_blackhole/datadog-agent/conf.d/disk-listener.d/conf.yaml @@ -0,0 +1,5 @@ +logs: + - type: file + path: "/tmp/file-gen*.log" + service: "my-service" + source: "my-client-app" diff --git a/test/regression/cases/file_to_blackhole/datadog-agent/datadog.yaml b/test/regression/cases/file_to_blackhole/datadog-agent/datadog.yaml new file mode 100644 index 0000000000000..218315d3996a1 --- /dev/null +++ b/test/regression/cases/file_to_blackhole/datadog-agent/datadog.yaml @@ -0,0 +1,12 @@ +auth_token_file_path: /tmp/agent-auth-token + +confd_path: /etc/datadog-agent/conf.d + +# Disable cloud detection. This stops the Agent from poking around the +# execution environment & network. This is particularly important if the target +# has network access. +cloud_provider_metadata: [] + +logs_enabled: true +logs_config: + logs_dd_url: 127.0.0.1:9091 diff --git a/test/regression/cases/file_to_blackhole/lading/lading.yaml b/test/regression/cases/file_to_blackhole/lading/lading.yaml new file mode 100644 index 0000000000000..f2b701e3dc23c --- /dev/null +++ b/test/regression/cases/file_to_blackhole/lading/lading.yaml @@ -0,0 +1,16 @@ +generator: + - file_gen: + seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, + 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] + path_template: "/tmp/file-gen-%NNN%.log" + duplicates: 4 + variant: "ascii" + bytes_per_second: "100Mb" + maximum_bytes_per_file: "100Mb" + maximum_prebuild_cache_size_bytes: "400Mb" + +blackhole: + - http: + binding_addr: "127.0.0.1:9091" + - http: + binding_addr: "127.0.0.1:9092" diff --git a/test/regression/cases/otel_to_otel_logs/datadog-agent/datadog.yaml b/test/regression/cases/otel_to_otel_logs/datadog-agent/datadog.yaml new file mode 100644 index 0000000000000..e28a1efc888e6 --- /dev/null +++ b/test/regression/cases/otel_to_otel_logs/datadog-agent/datadog.yaml @@ -0,0 +1,31 @@ +auth_token_file_path: /tmp/agent-auth-token + +confd_path: /etc/datadog-agent/conf.d + +# Disable cloud detection. This stops the Agent from poking around the +# execution environment & network. This is particularly important if the target +# has network access. +cloud_provider_metadata: [] + +apm_config: + enabled: true + apm_dd_url: http://127.0.0.1:9091 + + # disable ingest sampling + max_traces_per_second: 0 + errors_per_second: 0 + max_events_per_second: 0 + +otlp_config: + receiver: + protocols: + http: + endpoint: 127.0.0.1:4318 + grpc: + endpoint: 127.0.0.1:4317 + metrics: + enabled: true + traces: + enabled: true + debug: + loglevel: info diff --git a/test/regression/cases/otel_to_otel_logs/lading/lading.yaml b/test/regression/cases/otel_to_otel_logs/lading/lading.yaml new file mode 100644 index 0000000000000..5611322f9a339 --- /dev/null +++ b/test/regression/cases/otel_to_otel_logs/lading/lading.yaml @@ -0,0 +1,23 @@ +generator: + - http: + seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, + 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] + headers: + content-type: "application/x-protobuf" + target_uri: "http://127.0.0.1:4318/v1/traces" + bytes_per_second: "10 Mb" + parallel_connections: 5 + method: + post: + maximum_prebuild_cache_size_bytes: "8 Mb" + variant: "opentelemetry_traces" + +blackhole: + # AMP ingest listener + - http: + binding_addr: "127.0.0.1:9091" + body_variant: "nothing" + # Agent control API + - http: + binding_addr: "127.0.0.1:9092" + body_variant: "nothing" diff --git a/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/conf.d/tcp-listener.d/conf.yaml b/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/conf.d/tcp-listener.d/conf.yaml new file mode 100644 index 0000000000000..140d9ca8dc320 --- /dev/null +++ b/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/conf.d/tcp-listener.d/conf.yaml @@ -0,0 +1,9 @@ +logs: + - type: tcp + port: 10000 + service: "my-service" + source: "my-client-app" + log_processing_rules: + - type: exclude_at_match + name: not_tarkovsky + pattern: (T|t)arkovsky diff --git a/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/datadog.yaml b/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/datadog.yaml new file mode 100644 index 0000000000000..2b88f1afe37bd --- /dev/null +++ b/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/datadog.yaml @@ -0,0 +1,14 @@ +auth_token_file_path: /tmp/agent-auth-token + +confd_path: /etc/datadog-agent/conf.d + +# Disable cloud detection. This stops the Agent from poking around the +# execution environment & network. This is particularly important if the target +# has network access. +cloud_provider_metadata: [] + +logs_enabled: true +logs_config: + logs_dd_url: 127.0.0.1:9091 + logs_no_ssl: true + force_use_tcp: true diff --git a/test/regression/cases/tcp_dd_logs_filter_exclude/lading/lading.yaml b/test/regression/cases/tcp_dd_logs_filter_exclude/lading/lading.yaml new file mode 100644 index 0000000000000..978b387be3f4c --- /dev/null +++ b/test/regression/cases/tcp_dd_logs_filter_exclude/lading/lading.yaml @@ -0,0 +1,15 @@ +generator: + - tcp: + seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, + 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] + addr: "127.0.0.1:10000" + variant: "datadog_log" + bytes_per_second: "500 Mb" + block_sizes: ["8Kb", "4Kb", "2Kb", "1Kb", "512b", "256b", "128b"] + maximum_prebuild_cache_size_bytes: "256 Mb" + +blackhole: + - tcp: + binding_addr: "127.0.0.1:9091" + - http: + binding_addr: "127.0.0.1:9092" diff --git a/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/conf.d/tcp-listener.d/conf.yaml b/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/conf.d/tcp-listener.d/conf.yaml new file mode 100644 index 0000000000000..701b87c246566 --- /dev/null +++ b/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/conf.d/tcp-listener.d/conf.yaml @@ -0,0 +1,5 @@ +logs: + - type: tcp + port: 10000 + service: "my-service" + source: "my-client-app" diff --git a/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/datadog.yaml b/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/datadog.yaml new file mode 100644 index 0000000000000..2b88f1afe37bd --- /dev/null +++ b/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/datadog.yaml @@ -0,0 +1,14 @@ +auth_token_file_path: /tmp/agent-auth-token + +confd_path: /etc/datadog-agent/conf.d + +# Disable cloud detection. This stops the Agent from poking around the +# execution environment & network. This is particularly important if the target +# has network access. +cloud_provider_metadata: [] + +logs_enabled: true +logs_config: + logs_dd_url: 127.0.0.1:9091 + logs_no_ssl: true + force_use_tcp: true diff --git a/test/regression/cases/tcp_syslog_to_blackhole/lading/lading.yaml b/test/regression/cases/tcp_syslog_to_blackhole/lading/lading.yaml new file mode 100644 index 0000000000000..eca9d47ba53e1 --- /dev/null +++ b/test/regression/cases/tcp_syslog_to_blackhole/lading/lading.yaml @@ -0,0 +1,15 @@ +generator: + - tcp: + seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, + 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] + addr: "127.0.0.1:10000" + variant: "syslog5424" + bytes_per_second: "500 Mb" + block_sizes: ["1Mb", "0.5Mb", "0.25Mb", "0.125Mb", "128Kb"] + maximum_prebuild_cache_size_bytes: "256 Mb" + +blackhole: + - tcp: + binding_addr: "127.0.0.1:9091" + - http: + binding_addr: "127.0.0.1:9092" diff --git a/tools/agent_QA/test_cases/containers.py b/tools/agent_QA/test_cases/containers.py index c1417ce122994..91c5acf614c09 100644 --- a/tools/agent_QA/test_cases/containers.py +++ b/tools/agent_QA/test_cases/containers.py @@ -366,8 +366,6 @@ def build(self, config): # noqa: U100 * `agents.containers.agent.env`: ``` - - name: "DD_LOGS_CONFIG_CCA_IN_AD" - value: "true" - name: "DD_LOGS_CONFIG_DOCKER_CONTAINER_USE_FILE" value: "{'true' if self.dcuf else 'false'}" ``` @@ -408,7 +406,6 @@ def build(self, config): # noqa: U100 -e DOCKER_DD_AGENT= \\ -e DD_API_KEY=$DD_API_KEY \\ -e DD_LOGS_ENABLED=true \\ - -e DD_LOGS_CONFIG_CCA_IN_AD=true \\ -e LOGS_CONFIG_CONTAINER_COLLECT_ALL={'true' if self.cca else 'false'} \\ -e LOGS_CONFIG_DOCKER_CONTAINER_USE_FILE={'true' if self.dcuf else 'false'} \\ -e LOGS_CONFIG_K8S_CONTAINER_USE_FILE={'true' if self.dcuf else 'false'} \\ @@ -498,17 +495,6 @@ def build(self, config): # noqa: U100 self.special_case_empty_annotation() self.special_case_no_docker_file_access() - self.append( - textwrap.dedent( - '''\ - # Unexpected Results - - If things aren't working as expected, compare to a run with - `cca_in_ad` false. If the behavior is *better* with `cca_in_ad` set - to false, then the check has failed.''' - ) - ) - def special_case_type_docker(self): if self.cfgsource == 'annotation': self.append( @@ -517,9 +503,7 @@ def special_case_type_docker(self): # With `type:docker` in Annotation As an additional check, delete the test pod and create a new - one with `"type": "docker"` added to the annotation. The - result should be no worse than with `cca_in_ad: false`. - + one with `"type": "docker"` added to the annotation. ''' ) ) diff --git a/tools/gdb/Dockerfile b/tools/gdb/Dockerfile index d92a6756560a2..8f89b9118fa7a 100644 --- a/tools/gdb/Dockerfile +++ b/tools/gdb/Dockerfile @@ -6,7 +6,7 @@ RUN rm -vf /etc/ssl/openssl.cnf RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get install -y gdb build-essential strace less vim # Install go -RUN curl -fSL -o golang.tgz https://go.dev/dl/go1.18.8.linux-amd64.tar.gz +RUN curl -fSL -o golang.tgz https://go.dev/dl/go1.18.9.linux-amd64.tar.gz RUN tar xzvf golang.tgz RUN ln -s /go /goroot